You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by zy...@apache.org on 2022/12/25 22:33:10 UTC
[iotdb] branch rel/1.0 updated: [To rel/1.0][IOTDB-5277] SchemaRegion throws NPE when loading snapshot (#8606)
This is an automated email from the ASF dual-hosted git repository.
zyk pushed a commit to branch rel/1.0
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/rel/1.0 by this push:
new 7520b6c3b4 [To rel/1.0][IOTDB-5277] SchemaRegion throws NPE when loading snapshot (#8606)
7520b6c3b4 is described below
commit 7520b6c3b4bda511480e264ef853173ada0df066
Author: Chen YZ <43...@users.noreply.github.com>
AuthorDate: Mon Dec 26 06:33:05 2022 +0800
[To rel/1.0][IOTDB-5277] SchemaRegion throws NPE when loading snapshot (#8606)
---
.../apache/iotdb/db/metadata/MetadataConstant.java | 4 +++
.../mtree/snapshot/MemMTreeSnapshotUtil.java | 4 ++-
.../schemaRegion/SchemaRegionBasicTest.java | 39 ++++++++++++++++++++++
3 files changed, 46 insertions(+), 1 deletion(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/MetadataConstant.java b/server/src/main/java/org/apache/iotdb/db/metadata/MetadataConstant.java
index 4981c9c088..a1f167e24a 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/MetadataConstant.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/MetadataConstant.java
@@ -85,4 +85,8 @@ public class MetadataConstant {
throw new RuntimeException("Undefined MNode type " + type);
}
}
+
+ public static boolean isStorageGroupType(byte type) {
+ return type == STORAGE_GROUP_MNODE_TYPE || type == STORAGE_GROUP_ENTITY_MNODE_TYPE;
+ }
}
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/snapshot/MemMTreeSnapshotUtil.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/snapshot/MemMTreeSnapshotUtil.java
index 3681a975d0..4fda4c0a74 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/snapshot/MemMTreeSnapshotUtil.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/snapshot/MemMTreeSnapshotUtil.java
@@ -57,6 +57,7 @@ import static org.apache.iotdb.db.metadata.MetadataConstant.INTERNAL_MNODE_TYPE;
import static org.apache.iotdb.db.metadata.MetadataConstant.MEASUREMENT_MNODE_TYPE;
import static org.apache.iotdb.db.metadata.MetadataConstant.STORAGE_GROUP_ENTITY_MNODE_TYPE;
import static org.apache.iotdb.db.metadata.MetadataConstant.STORAGE_GROUP_MNODE_TYPE;
+import static org.apache.iotdb.db.metadata.MetadataConstant.isStorageGroupType;
public class MemMTreeSnapshotUtil {
@@ -220,7 +221,8 @@ public class MemMTreeSnapshotUtil {
ancestors.peek().addChild(node);
}
- if (childrenNum > 0) {
+ // Storage type means current node is root node, so it must be returned.
+ if (childrenNum > 0 || isStorageGroupType(type)) {
ancestors.push(node);
restChildrenNum.push(childrenNum);
}
diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionBasicTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionBasicTest.java
index c981009481..c1b13c4c59 100644
--- a/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionBasicTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/metadata/schemaRegion/SchemaRegionBasicTest.java
@@ -185,6 +185,45 @@ public abstract class SchemaRegionBasicTest {
}
}
+ @Test
+ public void testEmptySnapshot() throws Exception {
+ if (config.getSchemaEngineMode().equals(SchemaEngineMode.Schema_File.name())) {
+ return;
+ }
+ String schemaRegionConsensusProtocolClass = config.getSchemaRegionConsensusProtocolClass();
+ config.setSchemaRegionConsensusProtocolClass(ConsensusFactory.RATIS_CONSENSUS);
+ try {
+ PartialPath storageGroup = new PartialPath("root.sg");
+ SchemaRegionId schemaRegionId = new SchemaRegionId(0);
+ SchemaEngine.getInstance().createSchemaRegion(storageGroup, schemaRegionId);
+ ISchemaRegion schemaRegion = SchemaEngine.getInstance().getSchemaRegion(schemaRegionId);
+
+ File mLogFile =
+ SystemFileFactory.INSTANCE.getFile(
+ schemaRegion.getStorageGroupFullPath()
+ + File.separator
+ + schemaRegion.getSchemaRegionId().getId(),
+ MetadataConstant.METADATA_LOG);
+ Assert.assertFalse(mLogFile.exists());
+
+ File snapshotDir = new File(config.getSchemaDir() + File.separator + "snapshot");
+ snapshotDir.mkdir();
+ schemaRegion.createSnapshot(snapshotDir);
+
+ schemaRegion.loadSnapshot(snapshotDir);
+
+ Pair<List<ShowTimeSeriesResult>, Integer> result =
+ schemaRegion.showTimeseries(
+ new ShowTimeSeriesPlan(
+ new PartialPath("root.sg.**"), false, "tag-key", "tag-value", 0, 0, false),
+ null);
+
+ Assert.assertEquals(0, result.left.size());
+ } finally {
+ config.setSchemaRegionConsensusProtocolClass(schemaRegionConsensusProtocolClass);
+ }
+ }
+
private Template generateTemplate() throws IllegalPathException {
Template template =
new Template(