You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ji...@apache.org on 2020/12/11 07:20:29 UTC

[iotdb] branch master updated: fix

This is an automated email from the ASF dual-hosted git repository.

jiangtian pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new c8bc153  fix
     new d7e291c  Merge pull request #2223 from LebronAl/cluster_fix_auto_create_schema_bug
c8bc153 is described below

commit c8bc1531cf8f6d4a84b32b7aad307a7876b675d4
Author: LebronAl <TX...@gmail.com>
AuthorDate: Wed Dec 9 11:13:04 2020 +0800

    fix
---
 .../apache/iotdb/cluster/metadata/CMManager.java    | 21 +++++++++++++++++++--
 .../iotdb/cluster/query/LocalQueryExecutor.java     |  2 +-
 .../cluster/server/member/MetaGroupMember.java      |  4 ++--
 3 files changed, 22 insertions(+), 5 deletions(-)

diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/metadata/CMManager.java b/cluster/src/main/java/org/apache/iotdb/cluster/metadata/CMManager.java
index 73c75dc..ceef221 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/metadata/CMManager.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/metadata/CMManager.java
@@ -396,7 +396,7 @@ public class CMManager extends MManager {
    * create storage groups for CreateTimeseriesPlan and InsertPlan, also create timeseries for
    * InsertPlan. Only the two kind of plans can use this method.
    */
-  public void createSchema(PhysicalPlan plan) throws MetadataException {
+  public void createSchema(PhysicalPlan plan) throws MetadataException, CheckConsistencyException {
     // try to set storage group
     List<PartialPath> deviceIds;
     // only handle InsertPlan, CreateTimeSeriesPlan and CreateMultiTimeSeriesPlan currently
@@ -491,7 +491,8 @@ public class CMManager extends MManager {
    * @param insertPlan, some of the timeseries in it are not created yet
    * @return true of all uncreated timeseries are created
    */
-  public boolean createTimeseries(InsertPlan insertPlan) throws IllegalPathException {
+  public boolean createTimeseries(InsertPlan insertPlan)
+      throws IllegalPathException, CheckConsistencyException {
     List<String> seriesList = new ArrayList<>();
     PartialPath deviceId = insertPlan.getDeviceId();
     PartialPath storageGroupName;
@@ -566,6 +567,22 @@ public class CMManager extends MManager {
    * To check which timeseries in the input list is unregistered from one node in "partitionGroup".
    */
   private List<String> getUnregisteredSeriesList(List<String> seriesList,
+      PartitionGroup partitionGroup) throws CheckConsistencyException {
+    if (partitionGroup.contains(metaGroupMember.getThisNode())) {
+      return getUnregisteredSeriesListLocally(seriesList, partitionGroup);
+    } else {
+      return getUnregisteredSeriesListRemotely(seriesList, partitionGroup);
+    }
+  }
+
+  private List<String> getUnregisteredSeriesListLocally(List<String> seriesList,
+      PartitionGroup partitionGroup) throws CheckConsistencyException {
+    DataGroupMember dataMember = metaGroupMember.getDataClusterServer()
+        .getDataMember(partitionGroup.getHeader(), null, null);
+    return dataMember.getLocalQueryExecutor().getUnregisteredTimeseries(seriesList);
+  }
+
+  private List<String> getUnregisteredSeriesListRemotely(List<String> seriesList,
       PartitionGroup partitionGroup) {
     for (Node node : partitionGroup) {
       try {
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/query/LocalQueryExecutor.java b/cluster/src/main/java/org/apache/iotdb/cluster/query/LocalQueryExecutor.java
index 3f3880e..d4fe221 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/query/LocalQueryExecutor.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/query/LocalQueryExecutor.java
@@ -447,7 +447,7 @@ public class LocalQueryExecutor {
    */
   public List<String> getUnregisteredTimeseries(List<String> timeseriesList)
       throws CheckConsistencyException {
-    dataGroupMember.syncLeaderWithConsistencyCheck(false);
+    dataGroupMember.syncLeaderWithConsistencyCheck(true);
 
     List<String> result = new ArrayList<>();
     for (String seriesPath : timeseriesList) {
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/server/member/MetaGroupMember.java b/cluster/src/main/java/org/apache/iotdb/cluster/server/member/MetaGroupMember.java
index 7cccccd..863314f 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/server/member/MetaGroupMember.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/server/member/MetaGroupMember.java
@@ -1468,7 +1468,7 @@ public class MetaGroupMember extends RaftMember {
         try {
           ((CMManager) IoTDB.metaManager).createSchema(plan);
           return processPartitionedPlan(plan);
-        } catch (MetadataException e) {
+        } catch (MetadataException | CheckConsistencyException e) {
           logger.error(
               String.format("Failed to set storage group or create timeseries, because %s", e));
         }
@@ -1551,7 +1551,7 @@ public class MetaGroupMember extends RaftMember {
     boolean hasCreate;
     try {
       hasCreate = ((CMManager) IoTDB.metaManager).createTimeseries(plan);
-    } catch (IllegalPathException e) {
+    } catch (IllegalPathException | CheckConsistencyException e) {
       return StatusUtils.getStatus(StatusUtils.EXECUTE_STATEMENT_ERROR, e.getMessage());
     }
     if (hasCreate) {