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 -> {