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);