You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Mike W (Jira)" <ji...@apache.org> on 2021/06/10 14:14:00 UTC
[jira] [Updated] (IGNITE-14893) Bug in GridCacheWriteBehindStore
Flusher thread lookup
[ https://issues.apache.org/jira/browse/IGNITE-14893?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Mike W updated IGNITE-14893:
----------------------------
Description:
There's a bug in GridCacheWriteBehindStore in the flusher method.
[https://github.com/apache/ignite/blob/master/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheWriteBehindStore.java#L674]
The logic states there that if flush thread count is not a power of 2, then
perform this math, which is not guaranteed to return a positive number.
idx = ((h = key.hashCode()) ^ (h >>> 16)) % flushThreadCnt
For
example, if you pass this string as a key, it returns a negative number:
accb2e8ea33e4a89b4189463cacc3c4e
and then throws an array out of bounds exception when looking up the thread.
was:
There's a bug in GridCacheWriteBehindStore in the flusher method.
[https://github.com/apache/ignite/blob/master/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheWriteBehindStore.java#L674]
The logic states there that if flush thread count is not a power of 2, then
perform some math that is not guaranteed to return a positive number. For
example, if you pass this string as a key it returns a negative number:
accb2e8ea33e4a89b4189463cacc3c4e
and then throws an array out of bounds exception when looking up the thread.
> Bug in GridCacheWriteBehindStore Flusher thread lookup
> ------------------------------------------------------
>
> Key: IGNITE-14893
> URL: https://issues.apache.org/jira/browse/IGNITE-14893
> Project: Ignite
> Issue Type: Bug
> Components: cache
> Affects Versions: 2.8, 2.7.5, 2.7.6, 2.9, 2.8.1, 2.10, 2.9.1
> Reporter: Mike W
> Priority: Major
>
> There's a bug in GridCacheWriteBehindStore in the flusher method.
> [https://github.com/apache/ignite/blob/master/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheWriteBehindStore.java#L674]
> The logic states there that if flush thread count is not a power of 2, then
> perform this math, which is not guaranteed to return a positive number.
>
> idx = ((h = key.hashCode()) ^ (h >>> 16)) % flushThreadCnt
>
> For
> example, if you pass this string as a key, it returns a negative number:
> accb2e8ea33e4a89b4189463cacc3c4e
> and then throws an array out of bounds exception when looking up the thread.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)