You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ag...@apache.org on 2018/11/28 11:53:08 UTC

[37/50] [abbrv] ignite git commit: IGNITE-10390 Fixed BPlusTree#isEmpty - Fixes #5486.

IGNITE-10390 Fixed BPlusTree#isEmpty - Fixes #5486.

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/0b4282be
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/0b4282be
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/0b4282be

Branch: refs/heads/ignite-9720
Commit: 0b4282be26b4d042637ce57821e9a3448043d56d
Parents: 23de743
Author: Alexey Goncharuk <al...@gmail.com>
Authored: Tue Nov 27 19:31:51 2018 +0300
Committer: Alexey Goncharuk <al...@gmail.com>
Committed: Tue Nov 27 19:33:26 2018 +0300

----------------------------------------------------------------------
 .../persistence/GridCacheOffheapManager.java    |  4 +---
 .../cache/persistence/tree/BPlusTree.java       | 23 ++++++++++++--------
 .../processors/database/BPlusTreeSelfTest.java  | 23 ++++++++++++++++++++
 3 files changed, 38 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/0b4282be/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
index 7d4a3ae..44ae6f1 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
@@ -1463,7 +1463,6 @@ public class GridCacheOffheapManager extends IgniteCacheOffheapManagerImpl imple
          * @return Store delegate.
          * @throws IgniteCheckedException If failed.
          */
-        @SuppressWarnings("SizeReplaceableByIsEmpty")
         private CacheDataStore init0(boolean checkExists) throws IgniteCheckedException {
             CacheDataStore delegate0 = delegate;
 
@@ -1574,8 +1573,7 @@ public class GridCacheOffheapManager extends IgniteCacheOffheapManagerImpl imple
 
                     pendingTree = pendingTree0;
 
-                    // TODO IGNITE-10390 replace size() > 0 with isEmpty()
-                    if (!hasPendingEntries && pendingTree0.size() > 0)
+                    if (!hasPendingEntries && !pendingTree0.isEmpty())
                         hasPendingEntries = true;
 
                     int grpId = grp.groupId();

http://git-wip-us.apache.org/repos/asf/ignite/blob/0b4282be/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/BPlusTree.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/BPlusTree.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/BPlusTree.java
index 7852008..476667a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/BPlusTree.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/BPlusTree.java
@@ -2109,21 +2109,26 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
 
             long rootId, rootPage = acquirePage(rootId = treeMeta.rootId);
 
-            long rootAddr = readLock(rootId, rootPage);
+            try {
+                long rootAddr = readLock(rootId, rootPage);
 
-            if (rootAddr == 0) {
-                checkDestroyed();
+                if (rootAddr == 0) {
+                    checkDestroyed();
 
-                continue;
-            }
+                    continue;
+                }
 
-            try {
-                BPlusIO<L> io = io(rootAddr);
+                try {
+                    BPlusIO<L> io = io(rootAddr);
 
-                return io.getCount(rootAddr) == 0;
+                    return io.getCount(rootAddr) == 0;
+                }
+                finally {
+                    readUnlock(rootId, rootPage, rootAddr);
+                }
             }
             finally {
-                readUnlock(rootId, rootPage, rootAddr);
+                releasePage(rootId, rootPage);
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/0b4282be/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java
index fa72978..ae9aff8 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java
@@ -252,6 +252,29 @@ public class BPlusTreeSelfTest extends GridCommonAbstractTest {
     }
 
     /**
+     * @throws Exception if failed.
+     */
+    public void testIsEmpty() throws Exception {
+        TestTree tree = createTestTree(true);
+
+        assertTrue(tree.isEmpty());
+
+        for (long i = 1; i <= 500; i++) {
+            tree.put(i);
+
+            assertFalse(tree.isEmpty());
+        }
+
+        for (long i = 1; i <= 500; i++) {
+            assertFalse(tree.isEmpty());
+
+            tree.remove(i);
+        }
+
+        assertTrue(tree.isEmpty());
+    }
+
+    /**
      * @throws IgniteCheckedException If failed.
      */
     public void testFindWithClosure() throws IgniteCheckedException {