ignite-db - reuse fix

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

Branch: refs/heads/ignite-db-x-10884
Commit: 813c36f6959ab2216dc6c32c20ef81777289a53e
Parents: 9cfda8d
Author: S.Vladykin <[email protected]>
Authored: Wed Apr 20 23:14:21 2016 +0300
Committer: S.Vladykin <[email protected]>
Committed: Wed Apr 20 23:14:21 2016 +0300

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


http://git-wip-us.apache.org/repos/asf/ignite/blob/813c36f6/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/BPlusTree.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/BPlusTree.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/BPlusTree.java
index 51649a5..98fd8eb 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/BPlusTree.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/BPlusTree.java
@@ -853,6 +853,8 @@ public abstract class BPlusTree<L, T extends L> {
         finally {
             r.releaseTail();
             r.releaseMeta();
+
+            r.reuseEmptyPages();
         }
     }
 
@@ -1608,6 +1610,9 @@ public abstract class BPlusTree<L, T extends L> {
         Tail<L> tail;
 
         /** */
+        List<FullPageId> emptyPages;
+
+        /** */
         byte needReplaceInner = FALSE;
 
         /** */
@@ -1893,11 +1898,23 @@ public abstract class BPlusTree<L, T extends L> {
             // Mark removed.
             io.setRemoveId(buf, Long.MAX_VALUE);
 
-            // Reuse empty page.
-            if (reuseList != null) {
-//            U.dumpStack("page: " + page.fullId());
+            if (reuseList == null)
+                return; // We are not allowed to reuse pages.
 
-                reuseList.put(BPlusTree.this, page.fullId());
+            // We will reuse empty page.
+            if (emptyPages == null)
+                emptyPages = new ArrayList<>(4);
+
+            emptyPages.add(page.fullId());
+        }
+
+        /**
+         * @throws IgniteCheckedException If failed.
+         */
+        private void reuseEmptyPages() throws IgniteCheckedException {
+            if (emptyPages != null) {
+                for (int i = 0; i < emptyPages.size(); i++)
+                    reuseList.put(BPlusTree.this, emptyPages.get(i));
             }
         }
 

Reply via email to