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 2023/03/20 06:39:22 UTC
[iotdb] 05/13: [To rel/1.1][IOTDB-5688] ShcemaFile mode lost template schema after reboot in SimpleConsensus (#9351)
This is an automated email from the ASF dual-hosted git repository.
zyk pushed a commit to branch rc/1.1.0
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit b82b9d9eed767ff1dc86af22cc96e7cf742ab30f
Author: Chen YZ <43...@users.noreply.github.com>
AuthorDate: Thu Mar 16 22:06:55 2023 +0800
[To rel/1.1][IOTDB-5688] ShcemaFile mode lost template schema after reboot in SimpleConsensus (#9351)
---
.../db/metadata/mtree/MTreeBelowSGCachedImpl.java | 41 +++++++++++
.../schemaregion/SchemaRegionSchemaFileImpl.java | 85 ++++++++++++++++++++++
2 files changed, 126 insertions(+)
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java
index a0644e00cb..d70d235512 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/mtree/MTreeBelowSGCachedImpl.java
@@ -69,6 +69,9 @@ import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
import org.apache.iotdb.tsfile.utils.Pair;
import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
@@ -103,6 +106,8 @@ import java.util.function.Function;
*/
public class MTreeBelowSGCachedImpl implements IMTreeBelowSG {
+ private static final Logger logger = LoggerFactory.getLogger(MTreeBelowSGCachedImpl.class);
+
private final CachedMTreeStore store;
private volatile IStorageGroupMNode storageGroupMNode;
private final IMNode rootNode;
@@ -855,6 +860,42 @@ public class MTreeBelowSGCachedImpl implements IMTreeBelowSG {
}
}
+ public void activateTemplateWithoutCheck(
+ PartialPath activatePath, int templateId, boolean isAligned) throws MetadataException {
+ String[] nodes = activatePath.getNodes();
+ IMNode cur = storageGroupMNode;
+ IMNode child;
+ IEntityMNode entityMNode;
+
+ try {
+ for (int i = levelOfSG + 1; i < nodes.length; i++) {
+ child = store.getChild(cur, nodes[i]);
+ if (child == null) {
+ throw new PathNotExistException(activatePath.getFullPath());
+ }
+ cur = child;
+ }
+ if (cur.isEntity()) {
+ entityMNode = cur.getAsEntityMNode();
+ } else {
+ entityMNode = store.setToEntity(cur);
+ if (entityMNode.isStorageGroup()) {
+ replaceStorageGroupMNode(entityMNode.getAsStorageGroupMNode());
+ }
+ }
+
+ if (!entityMNode.isAligned()) {
+ entityMNode.setAligned(isAligned);
+ }
+ entityMNode.setUseTemplate(true);
+ entityMNode.setSchemaTemplateId(templateId);
+
+ store.updateMNode(entityMNode);
+ } finally {
+ unPinPath(cur);
+ }
+ }
+
@Override
public Map<PartialPath, List<Integer>> constructSchemaBlackListWithTemplate(
Map<PartialPath, List<Integer>> templateSetInfo) throws MetadataException {
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java
index 7968407c14..2c91340ad3 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionSchemaFileImpl.java
@@ -64,7 +64,9 @@ import org.apache.iotdb.db.metadata.plan.schemaregion.write.ICreateTimeSeriesPla
import org.apache.iotdb.db.metadata.plan.schemaregion.write.IDeactivateTemplatePlan;
import org.apache.iotdb.db.metadata.plan.schemaregion.write.IDeleteTimeSeriesPlan;
import org.apache.iotdb.db.metadata.plan.schemaregion.write.IPreDeactivateTemplatePlan;
+import org.apache.iotdb.db.metadata.plan.schemaregion.write.IPreDeleteTimeSeriesPlan;
import org.apache.iotdb.db.metadata.plan.schemaregion.write.IRollbackPreDeactivateTemplatePlan;
+import org.apache.iotdb.db.metadata.plan.schemaregion.write.IRollbackPreDeleteTimeSeriesPlan;
import org.apache.iotdb.db.metadata.query.info.IDeviceSchemaInfo;
import org.apache.iotdb.db.metadata.query.info.INodeSchemaInfo;
import org.apache.iotdb.db.metadata.query.info.ITimeSeriesSchemaInfo;
@@ -847,6 +849,10 @@ public class SchemaRegionSchemaFileImpl implements ISchemaRegion {
return preDeletedNum;
}
+ private void recoverPreDeleteTimeseries(PartialPath path) throws MetadataException {
+ mtree.constructSchemaBlackList(path);
+ }
+
@Override
public void rollbackSchemaBlackList(PathPatternTree patternTree) throws MetadataException {
for (PartialPath pathPattern : patternTree.getAllPathPatterns()) {
@@ -900,6 +906,10 @@ public class SchemaRegionSchemaFileImpl implements ISchemaRegion {
}
}
+ private void recoverRollbackPreDeleteTimeseries(PartialPath path) throws MetadataException {
+ mtree.rollbackSchemaBlackList(path);
+ }
+
/** @param path full path from root to leaf node */
private void deleteOneTimeseriesUpdateStatistics(PartialPath path)
throws MetadataException, IOException {
@@ -1224,6 +1234,12 @@ public class SchemaRegionSchemaFileImpl implements ISchemaRegion {
}
}
+ private void recoverActivatingSchemaTemplate(IActivateTemplateInClusterPlan plan)
+ throws MetadataException {
+ mtree.activateTemplateWithoutCheck(
+ plan.getActivatePath(), plan.getTemplateId(), plan.isAligned());
+ }
+
@Override
public long constructSchemaBlackListWithTemplate(IPreDeactivateTemplatePlan plan)
throws MetadataException {
@@ -1401,5 +1417,74 @@ public class SchemaRegionSchemaFileImpl implements ISchemaRegion {
return new RecoverOperationResult(e);
}
}
+
+ @Override
+ public RecoverOperationResult visitActivateTemplateInCluster(
+ IActivateTemplateInClusterPlan activateTemplateInClusterPlan,
+ SchemaRegionSchemaFileImpl context) {
+ try {
+ recoverActivatingSchemaTemplate(activateTemplateInClusterPlan);
+ return RecoverOperationResult.SUCCESS;
+ } catch (MetadataException e) {
+ return new RecoverOperationResult(e);
+ }
+ }
+
+ @Override
+ public RecoverOperationResult visitPreDeleteTimeSeries(
+ IPreDeleteTimeSeriesPlan preDeleteTimeSeriesPlan, SchemaRegionSchemaFileImpl context) {
+ try {
+ recoverPreDeleteTimeseries(preDeleteTimeSeriesPlan.getPath());
+ return RecoverOperationResult.SUCCESS;
+ } catch (MetadataException e) {
+ return new RecoverOperationResult(e);
+ }
+ }
+
+ @Override
+ public RecoverOperationResult visitRollbackPreDeleteTimeSeries(
+ IRollbackPreDeleteTimeSeriesPlan rollbackPreDeleteTimeSeriesPlan,
+ SchemaRegionSchemaFileImpl context) {
+ try {
+ recoverRollbackPreDeleteTimeseries(rollbackPreDeleteTimeSeriesPlan.getPath());
+ return RecoverOperationResult.SUCCESS;
+ } catch (MetadataException e) {
+ return new RecoverOperationResult(e);
+ }
+ }
+
+ @Override
+ public RecoverOperationResult visitPreDeactivateTemplate(
+ IPreDeactivateTemplatePlan preDeactivateTemplatePlan, SchemaRegionSchemaFileImpl context) {
+ try {
+ constructSchemaBlackListWithTemplate(preDeactivateTemplatePlan);
+ return RecoverOperationResult.SUCCESS;
+ } catch (MetadataException e) {
+ return new RecoverOperationResult(e);
+ }
+ }
+
+ @Override
+ public RecoverOperationResult visitRollbackPreDeactivateTemplate(
+ IRollbackPreDeactivateTemplatePlan rollbackPreDeactivateTemplatePlan,
+ SchemaRegionSchemaFileImpl context) {
+ try {
+ rollbackSchemaBlackListWithTemplate(rollbackPreDeactivateTemplatePlan);
+ return RecoverOperationResult.SUCCESS;
+ } catch (MetadataException e) {
+ return new RecoverOperationResult(e);
+ }
+ }
+
+ @Override
+ public RecoverOperationResult visitDeactivateTemplate(
+ IDeactivateTemplatePlan deactivateTemplatePlan, SchemaRegionSchemaFileImpl context) {
+ try {
+ deactivateTemplateInBlackList(deactivateTemplatePlan);
+ return RecoverOperationResult.SUCCESS;
+ } catch (MetadataException e) {
+ return new RecoverOperationResult(e);
+ }
+ }
}
}