You are viewing a plain text version of this content. The canonical link for it is here.
Posted to reviews@iotdb.apache.org by "Cpaulyz (via GitHub)" <gi...@apache.org> on 2023/05/16 08:46:55 UTC

[GitHub] [iotdb] Cpaulyz commented on a diff in pull request #9864: [IOTDB-5884] Throw Exception when alter template with duplicate measurement

Cpaulyz commented on code in PR #9864:
URL: https://github.com/apache/iotdb/pull/9864#discussion_r1194829833


##########
server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/ClusterConfigTaskExecutor.java:
##########
@@ -1382,6 +1387,28 @@ public SettableFuture<ConfigTaskResult> dropSchemaTemplate(
   public SettableFuture<ConfigTaskResult> alterSchemaTemplate(
       String queryId, AlterSchemaTemplateStatement alterSchemaTemplateStatement) {
     SettableFuture<ConfigTaskResult> future = SettableFuture.create();
+
+    if (alterSchemaTemplateStatement
+        .getOperationType()
+        .equals(TemplateAlterOperationType.EXTEND_TEMPLATE)) {
+      // check duplicate measurement
+      Set<String> existingMeasurements = new HashSet<>();
+      TemplateExtendInfo templateExtendInfo =
+          (TemplateExtendInfo) alterSchemaTemplateStatement.getTemplateAlterInfo();
+      for (String measurement : templateExtendInfo.getMeasurements()) {
+        if (existingMeasurements.contains(measurement)) {
+          future.setException(
+              new MetadataException(
+                  String.format(
+                      "Duplicated measurement [%s] in schema template alter request",
+                      measurement)));
+          return future;
+        } else {
+          existingMeasurements.add(measurement);
+        }
+      }

Review Comment:
   ```suggestion
         TemplateExtendInfo templateExtendInfo =
             (TemplateExtendInfo) alterSchemaTemplateStatement.getTemplateAlterInfo();
         if (templateExtendInfo.isDuplicated()) {
             future.setException(
                 new MetadataException(
                     String.format(
                         "Duplicated measurement [%s] in schema template alter request",
                         measurement)));
             return future;
         }
   ```



##########
server/src/main/java/org/apache/iotdb/db/metadata/template/alter/TemplateExtendInfo.java:
##########
@@ -102,6 +104,24 @@ public void addMeasurement(
     compressors.add(compressionType);
   }
 
+  // deduplicate the measurements with same name, keep the first one
+  public TemplateExtendInfo deduplicate() {
+    if (measurements == null || measurements.isEmpty()) {
+      return new TemplateExtendInfo();
+    }
+    Set<String> set = new HashSet<>();
+    TemplateExtendInfo result = new TemplateExtendInfo();
+    for (int i = 0; i < measurements.size(); i++) {
+      if (set.contains(measurements.get(i))) {
+        continue;
+      }
+      set.add(measurements.get(i));
+      result.addMeasurement(
+          measurements.get(i), dataTypes.get(i), encodings.get(i), compressors.get(i));
+    }
+    return result;
+  }
+

Review Comment:
   ```suggestion
     public boolean isDuplicated() {
       if (measurements != null) {
         Set<String> set = new HashSet<>(measurements);
         return set.size()!=measurements.size();
       }
       return false;
     }
   ```



-- 
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-unsubscribe@iotdb.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org