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

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

commit 2a58d9df58aad4513d1489625c19f56f02862dea
Author: LebronAl <[email protected]>
AuthorDate: Mon Mar 8 16:52:12 2021 +0800

    remove unnecessary sync meta leader
---
 .../src/main/java/org/apache/iotdb/cluster/ClusterMain.java    |  4 ++--
 .../apache/iotdb/cluster/query/ClusterDataQueryExecutor.java   |  8 ++++++++
 .../iotdb/cluster/query/reader/ClusterReaderFactory.java       | 10 ++++------
 .../iotdb/cluster/query/reader/ClusterTimeGenerator.java       |  4 +++-
 4 files changed, 17 insertions(+), 9 deletions(-)

diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/ClusterMain.java 
b/cluster/src/main/java/org/apache/iotdb/cluster/ClusterMain.java
index 993a632..db84a86 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/ClusterMain.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/ClusterMain.java
@@ -260,7 +260,7 @@ public class ClusterMain {
           @Override
           public int calculateSlotByTime(String storageGroupName, long 
timestamp, int maxSlotNum) {
             int sgSerialNum = extractSerialNumInSGName(storageGroupName) % k;
-            if (sgSerialNum > 0) {
+            if (sgSerialNum >= 0) {
               return maxSlotNum / k * sgSerialNum;
             } else {
               return defaultStrategy.calculateSlotByTime(storageGroupName, 
timestamp, maxSlotNum);
@@ -271,7 +271,7 @@ public class ClusterMain {
           public int calculateSlotByPartitionNum(
               String storageGroupName, long partitionId, int maxSlotNum) {
             int sgSerialNum = extractSerialNumInSGName(storageGroupName) % k;
-            if (sgSerialNum > 0) {
+            if (sgSerialNum >= 0) {
               return maxSlotNum / k * sgSerialNum;
             } else {
               return defaultStrategy.calculateSlotByPartitionNum(
diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/query/ClusterDataQueryExecutor.java
 
b/cluster/src/main/java/org/apache/iotdb/cluster/query/ClusterDataQueryExecutor.java
index 621acf5..fbf8963 100644
--- 
a/cluster/src/main/java/org/apache/iotdb/cluster/query/ClusterDataQueryExecutor.java
+++ 
b/cluster/src/main/java/org/apache/iotdb/cluster/query/ClusterDataQueryExecutor.java
@@ -19,6 +19,7 @@
 
 package org.apache.iotdb.cluster.query;
 
+import org.apache.iotdb.cluster.exception.CheckConsistencyException;
 import org.apache.iotdb.cluster.exception.EmptyIntervalException;
 import org.apache.iotdb.cluster.query.reader.ClusterReaderFactory;
 import org.apache.iotdb.cluster.query.reader.ClusterTimeGenerator;
@@ -65,6 +66,13 @@ public class ClusterDataQueryExecutor extends 
RawDataQueryExecutor {
       timeFilter = ((GlobalTimeExpression) 
queryPlan.getExpression()).getFilter();
     }
 
+    // make sure the partition table is new
+    try {
+      metaGroupMember.syncLeaderWithConsistencyCheck(false);
+    } catch (CheckConsistencyException e) {
+      throw new StorageEngineException(e);
+    }
+
     List<ManagedSeriesReader> readersOfSelectedSeries = new ArrayList<>();
     for (int i = 0; i < queryPlan.getDeduplicatedPaths().size(); i++) {
       PartialPath path = queryPlan.getDeduplicatedPaths().get(i);
diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/query/reader/ClusterReaderFactory.java
 
b/cluster/src/main/java/org/apache/iotdb/cluster/query/reader/ClusterReaderFactory.java
index 9b78175..562e8d3 100644
--- 
a/cluster/src/main/java/org/apache/iotdb/cluster/query/reader/ClusterReaderFactory.java
+++ 
b/cluster/src/main/java/org/apache/iotdb/cluster/query/reader/ClusterReaderFactory.java
@@ -85,6 +85,10 @@ public class ClusterReaderFactory {
     this.metaGroupMember = metaGroupMember;
   }
 
+  public void syncMetaGroup() throws CheckConsistencyException {
+    metaGroupMember.syncLeaderWithConsistencyCheck(false);
+  }
+
   /**
    * Create an IReaderByTimestamp that can read the data of "path" by 
timestamp in the whole
    * cluster. This will query every group and merge the result from them.
@@ -216,12 +220,6 @@ public class ClusterReaderFactory {
       QueryContext context,
       boolean ascending)
       throws StorageEngineException, EmptyIntervalException {
-    // make sure the partition table is new
-    try {
-      metaGroupMember.syncLeaderWithConsistencyCheck(false);
-    } catch (CheckConsistencyException e) {
-      throw new StorageEngineException(e);
-    }
     // find the groups that should be queried using the timeFilter
     List<PartitionGroup> partitionGroups = 
metaGroupMember.routeFilter(timeFilter, path);
     logger.debug(
diff --git 
a/cluster/src/main/java/org/apache/iotdb/cluster/query/reader/ClusterTimeGenerator.java
 
b/cluster/src/main/java/org/apache/iotdb/cluster/query/reader/ClusterTimeGenerator.java
index eaa1a2d..b7b5f51 100644
--- 
a/cluster/src/main/java/org/apache/iotdb/cluster/query/reader/ClusterTimeGenerator.java
+++ 
b/cluster/src/main/java/org/apache/iotdb/cluster/query/reader/ClusterTimeGenerator.java
@@ -19,6 +19,7 @@
 
 package org.apache.iotdb.cluster.query.reader;
 
+import org.apache.iotdb.cluster.exception.CheckConsistencyException;
 import org.apache.iotdb.cluster.metadata.CMManager;
 import org.apache.iotdb.cluster.server.member.MetaGroupMember;
 import org.apache.iotdb.db.exception.StorageEngineException;
@@ -51,8 +52,9 @@ public class ClusterTimeGenerator extends ServerTimeGenerator 
{
     this.queryPlan = rawDataQueryPlan;
     this.readerFactory = new ClusterReaderFactory(metaGroupMember);
     try {
+      readerFactory.syncMetaGroup();
       constructNode(expression);
-    } catch (IOException e) {
+    } catch (IOException | CheckConsistencyException e) {
       throw new StorageEngineException(e);
     }
   }

Reply via email to