MarcosZyk commented on code in PR #12077:
URL: https://github.com/apache/iotdb/pull/12077#discussion_r1503607086
##
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/mnode/container/CachedMNodeContainer.java:
##
@@ -425,6 +426,23 @@ private boolean changeStatus() {
}
}
+ private class BufferIterator extends MergeSortIterator {
+
+BufferIterator() {
+ super(
+ getNewChildBuffer().getMNodeChildBufferIterator(),
+ getUpdatedChildBuffer().getMNodeChildBufferIterator());
+}
+
+protected int decide() {
+ return 0;
Review Comment:
Replace this with ```throw new IlegalStateException("There shall not exist
two node with the same name separately in newChildBuffer and
updateChildBuffer")```
##
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/CachedMTreeStore.java:
##
@@ -785,5 +711,45 @@ public void close() {
}
}
}
+
+private class CachedMNodeMergeIterator extends
MergeSortIterator {
+
+ public CachedMNodeMergeIterator(
+ Iterator leftIterator, Iterator
rightIterator) {
Review Comment:
Rename the parameters to bufferIterator and diskIterator
##
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/CachedMTreeStore.java:
##
@@ -714,53 +712,46 @@ public ICachedMNode next() {
return result;
}
-private void readNext() throws MetadataException {
- ICachedMNode node = null;
- if (isIteratingDisk) {
-ICachedMNodeContainer container =
ICachedMNodeContainer.getCachedMNodeContainer(parent);
-if (iterator.hasNext()) {
- node = iterator.next();
- while (container.hasChildInBuffer(node.getName())) {
-if (iterator.hasNext()) {
- node = iterator.next();
-} else {
- node = null;
- break;
-}
- }
-}
-if (node != null) {
- ICachedMNode nodeInMem = parent.getChild(node.getName());
- if (nodeInMem != null) {
-// this branch means the node load from disk is in cache, thus use
the instance in
-// cache
-try {
- memoryManager.updateCacheStatusAfterMemoryRead(nodeInMem);
- node = nodeInMem;
-} catch (MNodeNotCachedException e) {
- node = loadChildFromDiskToParent(parent, node);
-}
- } else {
-node = loadChildFromDiskToParent(parent, node);
- }
- nextNode = node;
- return;
-} else {
- startIteratingBuffer();
+private void catchDiskMNode() {
+ nextNode = diskHeader;
+ diskHeader = diskIterator.hasNext() ? diskIterator.next() : null;
+ ICachedMNode nodeInMem = parent.getChild(nextNode.getName());
+ if (nodeInMem != null) {
+try {
+ memoryManager.updateCacheStatusAfterMemoryRead(nodeInMem);
+ nextNode = nodeInMem;
+} catch (MNodeNotCachedException e) {
+ nextNode = loadChildFromDiskToParent(parent, nextNode);
}
+ } else {
+nextNode = loadChildFromDiskToParent(parent, nextNode);
}
+}
- if (iterator.hasNext()) {
-node = iterator.next();
-// node in buffer won't be evicted during Iteration
-memoryManager.updateCacheStatusAfterMemoryRead(node);
- }
- nextNode = node;
+private void catchBufferMNode() throws MNodeNotCachedException {
+ nextNode = bufferHeader;
+ memoryManager.updateCacheStatusAfterMemoryRead(nextNode);
+ bufferHeader = bufferIterator.hasNext() ? bufferIterator.next() : null;
}
-private void startIteratingBuffer() {
- iterator = bufferIterator;
- isIteratingDisk = false;
+private void readNext() throws MetadataException {
+
+ if (diskHeader != null && bufferHeader != null) { // 内存磁盘都有
Review Comment:
In English.
##
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/schemaregion/mtree/impl/pbtree/CachedMTreeStore.java:
##
@@ -771,9 +698,8 @@ public void skipTemplateChildren() {
@Override
public void close() {
try {
-if (nextNode != null) {
- unPin(nextNode, false);
- nextNode = null;
+if (mergeIterator.hasNext()) {
+ unPin(mergeIterator.next(), false);
Review Comment:
Since there's no buffered result in this mergeIterator, close it directly
without reading the next element.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: reviews-unsubscr...@iotdb.apache.org
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org