You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2017/12/12 13:05:44 UTC

ignite git commit: IGNITE-7122: Fixed assertion in BPlusTree printing code. This closes #3157.

Repository: ignite
Updated Branches:
  refs/heads/master 850863e1c -> 1e8eaff1d


IGNITE-7122: Fixed assertion in BPlusTree printing code. This closes #3157.


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

Branch: refs/heads/master
Commit: 1e8eaff1dc5f393e3e76cfe075602c504e484afe
Parents: 850863e
Author: gg-shq <ki...@gmail.com>
Authored: Tue Dec 12 16:05:36 2017 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Tue Dec 12 16:05:36 2017 +0300

----------------------------------------------------------------------
 .../cache/persistence/tree/BPlusTree.java        | 10 +++++++++-
 .../internal/util/lang/GridTreePrinter.java      | 19 ++++++++++++++-----
 2 files changed, 23 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/1e8eaff1/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 436a69d..cb6898a 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
@@ -121,6 +121,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
         /** */
         private boolean keys = true;
 
+        /** {@inheritDoc} */
         @Override protected List<Long> getChildren(final Long pageId) {
             if (pageId == null || pageId == 0L)
                 return null;
@@ -131,11 +132,14 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
                 try {
                     long pageAddr = readLock(pageId, page); // No correctness guaranties.
 
+                    if (pageAddr == 0)
+                        return null;
+
                     try {
                         BPlusIO io = io(pageAddr);
 
                         if (io.isLeaf())
-                            return null;
+                            return Collections.emptyList();
 
                         int cnt = io.getCount(pageAddr);
 
@@ -172,6 +176,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
             }
         }
 
+        /** {@inheritDoc} */
         @Override protected String formatTreeNode(final Long pageId) {
             if (pageId == null)
                 return ">NPE<";
@@ -183,6 +188,9 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
                 long page = acquirePage(pageId);
                 try {
                     long pageAddr = readLock(pageId, page); // No correctness guaranties.
+                    if (pageAddr == 0)
+                        return "<Obsolete>";
+
                     try {
                         BPlusIO<L> io = io(pageAddr);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/1e8eaff1/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridTreePrinter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridTreePrinter.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridTreePrinter.java
index 5bf37eb..f6b3d57 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridTreePrinter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridTreePrinter.java
@@ -54,7 +54,7 @@ public abstract class GridTreePrinter<T> {
      * @param prefix Prefix.
      * @param tail Tail child.
      * @param a Output.
-     * @throws IOException
+     * @throws IOException If failed.
      */
     private void printTree(T treeNode, String prefix, boolean tail, Appendable a) throws IOException {
         List<T> children = getChildren(treeNode);
@@ -63,13 +63,22 @@ public abstract class GridTreePrinter<T> {
 
         a.append(prefix).append(tail ? "└── " : "├── ").append(formatTreeNode(treeNode)).append('\n');
 
-        for (int i = 0; i < cnt; i++)
-            printTree(children.get(i), prefix + (tail ? "    " : "│   "), i == cnt - 1, a);
+        String childPrefix = prefix + (tail ? "    " : "│   ");
+
+        if (children == null)
+            a.append(childPrefix).append("└── <list of children is not accessible>\n");
+        else {
+            for (int i = 0; i < cnt; i++)
+                printTree(children.get(i), childPrefix, i == cnt - 1, a);
+        }
     }
 
     /**
-     * @param treeNode Tree node.
-     * @return List of children.
+     * Returns list of tree node children.
+     *
+     * @param treeNode The tree node.
+     * @return List of children (possibly empty, if it is a leaf page)
+     *         or null if the node can't be read (e.g., is locked).
      */
     protected abstract List<T> getChildren(T treeNode);