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 2017/01/31 14:59:39 UTC

ignite git commit: ignite-3477

Repository: ignite
Updated Branches:
  refs/heads/ignite-3477-compact [created] f110b247e


ignite-3477


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/f110b247
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/f110b247
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/f110b247

Branch: refs/heads/ignite-3477-compact
Commit: f110b247ee1af0cc54223da32939fc408a7b4e62
Parents: 587a05e
Author: sboikov <sb...@gridgain.com>
Authored: Tue Jan 31 17:59:32 2017 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Tue Jan 31 17:59:32 2017 +0300

----------------------------------------------------------------------
 .../cache/database/tree/io/DataPageIO.java      | 25 ++++++++++++++++----
 1 file changed, 21 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/f110b247/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/DataPageIO.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/DataPageIO.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/DataPageIO.java
index df14dc1..010a7fe 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/DataPageIO.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/DataPageIO.java
@@ -1225,13 +1225,30 @@ public class DataPageIO extends PageIO {
             if (delta != 0) { // Move right.
                 assert delta > 0: delta;
 
-                moveBytes(pageAddr, off, entrySize, delta, pageSize);
-
                 int itemId = offs[i] & 0xFF;
 
-                off += delta;
+                setItem(pageAddr, itemId, directItemFromOffset(off + delta));
+
+                for (int j = i - 1; j >= 0; j--) {
+                    int offNext = offs[j] >>> 8;
+                    int nextSize = getPageEntrySize(pageAddr, offNext, SHOW_PAYLOAD_LEN | SHOW_LINK);
+
+                    if (offNext + nextSize == off) {
+                        i--;
 
-                setItem(pageAddr, itemId, directItemFromOffset(off));
+                        off = offNext;
+                        entrySize += nextSize;
+
+                        itemId = offs[j] & 0xFF;
+                        setItem(pageAddr, itemId, directItemFromOffset(offNext + delta));
+                    }
+                    else
+                        break;
+                }
+
+                moveBytes(pageAddr, off, entrySize, delta, pageSize);
+
+                off += delta;
             }
 
             prevOff = off;