[To rel/1.0][IOTDB-5240] Add template id to schema region snapshot (#8517)
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 71509b2..3681a97 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
@@ -301,7 +301,7 @@
throws IOException {
ReadWriteIOUtils.write(node.getChildren().size(), outputStream);
ReadWriteIOUtils.write(node.getName(), outputStream);
- ReadWriteIOUtils.write(-1, outputStream); // todo template id
+ ReadWriteIOUtils.write(node.getSchemaTemplateId(), outputStream);
ReadWriteIOUtils.write(node.isUseTemplate(), outputStream);
}
}
@@ -354,7 +354,7 @@
private void deserializeInternalBasicInfo(InternalMNode node, InputStream inputStream)
throws IOException {
- int templateId = ReadWriteIOUtils.readInt(inputStream);
+ node.setSchemaTemplateId(ReadWriteIOUtils.readInt(inputStream));
node.setUseTemplate(ReadWriteIOUtils.readBool(inputStream));
}
}
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/SchemaRegionPlanFactory.java b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/SchemaRegionPlanFactory.java
index 53bad3c..792ed3f 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/SchemaRegionPlanFactory.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/plan/schemaregion/impl/SchemaRegionPlanFactory.java
@@ -22,6 +22,7 @@
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.db.metadata.plan.schemaregion.ISchemaRegionPlan;
import org.apache.iotdb.db.metadata.plan.schemaregion.SchemaRegionPlanType;
+import org.apache.iotdb.db.metadata.plan.schemaregion.write.IActivateTemplateInClusterPlan;
import org.apache.iotdb.db.metadata.plan.schemaregion.write.IAutoCreateDeviceMNodePlan;
import org.apache.iotdb.db.metadata.plan.schemaregion.write.IChangeAliasPlan;
import org.apache.iotdb.db.metadata.plan.schemaregion.write.IChangeTagOffsetPlan;
@@ -136,6 +137,11 @@
return new RollbackPreDeleteTimeSeriesPlanImpl(path);
}
+ public static IActivateTemplateInClusterPlan getActivateTemplateInClusterPlan(
+ PartialPath activatePath, int templateSetLevel, int templateId) {
+ return new ActivateTemplateInClusterPlanImpl(activatePath, templateSetLevel, templateId);
+ }
+
public static IPreDeactivateTemplatePlan getPreDeactivateTemplatePlan(
Map<PartialPath, List<Integer>> templateSetInfo) {
return new PreDeactivateTemplatePlanImpl(templateSetInfo);
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 9135a5f..c981009 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
@@ -19,6 +19,7 @@
package org.apache.iotdb.db.metadata.schemaRegion;
import org.apache.iotdb.commons.consensus.SchemaRegionId;
+import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.commons.exception.MetadataException;
import org.apache.iotdb.commons.file.SystemFileFactory;
import org.apache.iotdb.commons.path.MeasurementPath;
@@ -36,8 +37,10 @@
import org.apache.iotdb.db.metadata.plan.schemaregion.impl.DeactivateTemplatePlanImpl;
import org.apache.iotdb.db.metadata.plan.schemaregion.impl.PreDeactivateTemplatePlanImpl;
import org.apache.iotdb.db.metadata.plan.schemaregion.impl.RollbackPreDeactivateTemplatePlanImpl;
+import org.apache.iotdb.db.metadata.plan.schemaregion.impl.SchemaRegionPlanFactory;
import org.apache.iotdb.db.metadata.schemaregion.ISchemaRegion;
import org.apache.iotdb.db.metadata.schemaregion.SchemaEngine;
+import org.apache.iotdb.db.metadata.schemaregion.SchemaEngineMode;
import org.apache.iotdb.db.metadata.template.Template;
import org.apache.iotdb.db.mpp.plan.statement.metadata.template.CreateSchemaTemplateStatement;
import org.apache.iotdb.db.qp.physical.sys.CreateTimeSeriesPlan;
@@ -93,6 +96,9 @@
@Test
public void testRatisModeSnapshot() throws Exception {
+ if (config.getSchemaEngineMode().equals(SchemaEngineMode.Schema_File.name())) {
+ return;
+ }
String schemaRegionConsensusProtocolClass = config.getSchemaRegionConsensusProtocolClass();
config.setSchemaRegionConsensusProtocolClass(ConsensusFactory.RATIS_CONSENSUS);
try {
@@ -123,6 +129,12 @@
null),
-1);
+ Template template = generateTemplate();
+ schemaRegion.activateSchemaTemplate(
+ SchemaRegionPlanFactory.getActivateTemplateInClusterPlan(
+ new PartialPath("root.sg.d2"), 1, template.getId()),
+ template);
+
File snapshotDir = new File(config.getSchemaDir() + File.separator + "snapshot");
snapshotDir.mkdir();
schemaRegion.createSnapshot(snapshotDir);
@@ -158,11 +170,34 @@
Assert.assertEquals(1, resultTagMap.size());
Assert.assertEquals("tag-value", resultTagMap.get("tag-key"));
+ ShowTimeSeriesPlan showTimeSeriesPlan =
+ new ShowTimeSeriesPlan(new PartialPath("root.sg.*.s1"), false, null, null, 0, 0, false);
+ showTimeSeriesPlan.setRelatedTemplate(Collections.singletonMap(template.getId(), template));
+ result = newSchemaRegion.showTimeseries(showTimeSeriesPlan, null);
+ result.left.sort(ShowTimeSeriesResult::compareTo);
+ Assert.assertEquals(
+ new PartialPath("root.sg.d1.s1").getFullPath(), result.left.get(0).getName());
+ Assert.assertEquals(
+ new PartialPath("root.sg.d2.s1").getFullPath(), result.left.get(1).getName());
+
} finally {
config.setSchemaRegionConsensusProtocolClass(schemaRegionConsensusProtocolClass);
}
}
+ private Template generateTemplate() throws IllegalPathException {
+ Template template =
+ new Template(
+ new CreateSchemaTemplateStatement(
+ "t1",
+ Collections.singletonList(Collections.singletonList("s1")),
+ Collections.singletonList(Collections.singletonList(TSDataType.INT32)),
+ Collections.singletonList(Collections.singletonList(TSEncoding.PLAIN)),
+ Collections.singletonList(Collections.singletonList(CompressionType.GZIP))));
+ template.setId(1);
+ return template;
+ }
+
@Test
@Ignore
public void testSnapshotPerformance() throws Exception {