IGNITE-10390 Fixed BPlusTree#isEmpty - Fixes #5486. Signed-off-by: Alexey Goncharuk <[email protected]>
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 <[email protected]> Authored: Tue Nov 27 19:31:51 2018 +0300 Committer: Alexey Goncharuk <[email protected]> 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 {
