You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2018/03/19 06:27:13 UTC
[36/50] [abbrv] ignite git commit: IGNITE-7965 Robin-hood hashing may
fail with negative index in case backward shift finished with full table scan
- Fixes #3640.
IGNITE-7965 Robin-hood hashing may fail with negative index in case backward shift finished with full table scan - Fixes #3640.
Signed-off-by: Alexey Goncharuk <al...@gmail.com>
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/96d12d84
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/96d12d84
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/96d12d84
Branch: refs/heads/ignite-zk
Commit: 96d12d84bf1769418af4ff6c0324d8302a067535
Parents: 9fd6f4a
Author: dpavlov <dp...@gridgain.com>
Authored: Thu Mar 15 18:08:04 2018 +0300
Committer: Alexey Goncharuk <al...@gmail.com>
Committed: Thu Mar 15 18:08:04 2018 +0300
----------------------------------------------------------------------
.../pagemem/RobinHoodBackwardShiftHashMap.java | 5 ++++-
.../pagemem/RobinHoodBackwardShiftHashMapTest.java | 12 ++++++++++++
2 files changed, 16 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/96d12d84/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/RobinHoodBackwardShiftHashMap.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/RobinHoodBackwardShiftHashMap.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/RobinHoodBackwardShiftHashMap.java
index fd4e0e6..e20673f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/RobinHoodBackwardShiftHashMap.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/RobinHoodBackwardShiftHashMap.java
@@ -147,7 +147,7 @@ public class RobinHoodBackwardShiftHashMap implements LoadedPagesMap {
* @return base cell (bucket) address in buffer.
*/
private long entryBase(int idx) {
- assert idx >= 0 && idx < numBuckets;
+ assert idx >= 0 && idx < numBuckets : "idx=" + idx + ", numBuckets=" + numBuckets;
return baseAddr + MAPSIZE_SIZE + MAPSIZE_PADDING + (long)idx * BYTES_PER_CELL;
}
@@ -320,6 +320,9 @@ public class RobinHoodBackwardShiftHashMap implements LoadedPagesMap {
int lastShiftedIdx = (idxRmv - 1) % numBuckets;
+ if (lastShiftedIdx < 0)
+ lastShiftedIdx += numBuckets;
+
setEmpty(entryBase(lastShiftedIdx));
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/96d12d84/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/RobinHoodBackwardShiftHashMapTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/RobinHoodBackwardShiftHashMapTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/RobinHoodBackwardShiftHashMapTest.java
index da59145..e594d06 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/RobinHoodBackwardShiftHashMapTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/RobinHoodBackwardShiftHashMapTest.java
@@ -69,6 +69,18 @@ public class RobinHoodBackwardShiftHashMapTest {
* @throws Exception If failed.
*/
@Test
+ public void testShortSize() throws Exception {
+ withMap(map -> {
+ map.put(1, 1, 0, 0);
+ map.put(2, 0, 1, 1);
+ map.remove(1, 1);
+ }, 2);
+ }
+
+ /**
+ * @throws Exception If failed.
+ */
+ @Test
public void testSimplestPutGet() throws Exception {
int cnt = 100;
withMap(map -> {