You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2017/01/18 08:56:08 UTC
ignite git commit: fix treeMeta initialization after start
Repository: ignite
Updated Branches:
refs/heads/ignite-gg-11810-1 9134452f5 -> aa70af0cf
fix treeMeta initialization after start
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/aa70af0c
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/aa70af0c
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/aa70af0c
Branch: refs/heads/ignite-gg-11810-1
Commit: aa70af0cfc338fc1db3aac74b3d8dff1840d7bfe
Parents: 9134452
Author: sboikov <sb...@gridgain.com>
Authored: Wed Jan 18 11:54:29 2017 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Wed Jan 18 11:54:29 2017 +0300
----------------------------------------------------------------------
.../cache/database/tree/BPlusTree.java | 47 +++++++++++++-------
1 file changed, 30 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/aa70af0c/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 7cf829e..09d68da 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
@@ -675,33 +675,46 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
assert res == TRUE: res;
}
}
- else {
- try (Page meta = page(metaPageId)) {
- long pageAddr = readLock(meta); // Meta can't be removed.
+ }
- assert pageAddr != 0 : "Failed to read lock meta page [page=" + meta + ", metaPageId=" +
- U.hexLong(metaPageId) + ']';
+ /**
+ * @return Tree meta data.
+ * @throws IgniteCheckedException If failed.
+ */
+ private TreeMetaData treeMeta() throws IgniteCheckedException {
+ TreeMetaData meta0 = treeMeta;
- try {
- BPlusMetaIO io = BPlusMetaIO.VERSIONS.forPage(pageAddr);
+ if (meta0 != null)
+ return meta0;
- int rootLvl = io.getRootLevel(pageAddr);
- long rootId = io.getFirstPageId(pageAddr, rootLvl);
+ try (Page meta = page(metaPageId)) {
+ long pageAddr = readLock(meta); // Meta can't be removed.
- treeMeta = new TreeMetaData(rootLvl, rootId);
- }
- finally {
- readUnlock(meta, pageAddr);
- }
+ assert pageAddr != 0 : "Failed to read lock meta page [page=" + meta + ", metaPageId=" +
+ U.hexLong(metaPageId) + ']';
+
+ try {
+ BPlusMetaIO io = BPlusMetaIO.VERSIONS.forPage(pageAddr);
+
+ int rootLvl = io.getRootLevel(pageAddr);
+ long rootId = io.getFirstPageId(pageAddr, rootLvl);
+
+ treeMeta = meta0 = new TreeMetaData(rootLvl, rootId);
+ }
+ finally {
+ readUnlock(meta, pageAddr);
}
}
+
+ return meta0;
}
/**
* @return Root level.
+ * @throws IgniteCheckedException If failed.
*/
- private int getRootLevel() {
- TreeMetaData meta0 = treeMeta;
+ private int getRootLevel() throws IgniteCheckedException {
+ TreeMetaData meta0 = treeMeta();
assert meta0 != null;
@@ -1956,7 +1969,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
* @throws IgniteCheckedException If failed.
*/
final void init() throws IgniteCheckedException {
- TreeMetaData meta0 = treeMeta;
+ TreeMetaData meta0 = treeMeta();
assert meta0 != null;