You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by lt...@apache.org on 2019/06/04 02:39:56 UTC

[incubator-iotdb] 02/03: modify set read consistency level

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

lta pushed a commit to branch cluster
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git

commit ca9e9e016c27bcc0c28eca5d008d09f38b087d2c
Author: lta <li...@163.com>
AuthorDate: Tue Jun 4 10:39:16 2019 +0800

    modify set read consistency level
---
 .../cluster/config/ClusterConsistencyLevel.java    | 48 ++++++++++++
 .../iotdb/cluster/config/ClusterConstant.java      |  6 +-
 .../cluster/qp/executor/AbstractQPExecutor.java    | 17 +---
 .../qp/executor/ClusterQueryProcessExecutor.java   |  3 +-
 .../cluster/qp/executor/QueryMetadataExecutor.java |  3 +-
 .../querydata/InitSeriesReaderSyncProcessor.java   |  3 +-
 .../querymetadata/QueryMetadataAsyncProcessor.java |  3 +-
 .../QueryMetadataInStringAsyncProcessor.java       |  3 +-
 .../querymetadata/QueryPathsAsyncProcessor.java    |  3 +-
 .../QuerySeriesTypeAsyncProcessor.java             |  3 +-
 .../QueryTimeSeriesAsyncProcessor.java             |  3 +-
 .../cluster/service/TSServiceClusterImpl.java      | 17 +++-
 .../iotdb/cluster/qp/AbstractQPExecutorTest.java   | 91 +++++++++++++++++-----
 .../iotdb/db/qp/executor/QueryProcessExecutor.java |  1 +
 14 files changed, 155 insertions(+), 49 deletions(-)

diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/config/ClusterConsistencyLevel.java b/cluster/src/main/java/org/apache/iotdb/cluster/config/ClusterConsistencyLevel.java
new file mode 100644
index 0000000..80f0c4a
--- /dev/null
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/config/ClusterConsistencyLevel.java
@@ -0,0 +1,48 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.cluster.config;
+
+public enum ClusterConsistencyLevel {
+  /**
+   * Strong consistency level
+   */
+  STRONG("strong"),
+
+  /**
+   * Weak consistency level
+   */
+  WEAK("weak");
+
+  private String levelName;
+
+  public static final int UNSUPPORT_LEVEL = -1;
+
+  ClusterConsistencyLevel(String levelName) {
+    this.levelName = levelName;
+  }
+
+  public static int getLevel(String levelName) {
+    for(ClusterConsistencyLevel consistencyLevel: values()){
+      if(consistencyLevel.levelName.equals(levelName)){
+        return consistencyLevel.ordinal();
+      }
+    }
+    return UNSUPPORT_LEVEL;
+  }
+}
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/config/ClusterConstant.java b/cluster/src/main/java/org/apache/iotdb/cluster/config/ClusterConstant.java
index 77e2476..fba692f 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/config/ClusterConstant.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/config/ClusterConstant.java
@@ -26,10 +26,8 @@ public class ClusterConstant {
   /**
    * Set read metadata consistency level pattern
    */
-  public static final String SET_READ_METADATA_CONSISTENCY_LEVEL_PATTERN = "set\\s+read\\s+metadata\\s+level\\s+to\\s+\\d+";
-  public static final String SET_READ_DATA_CONSISTENCY_LEVEL_PATTERN = "set\\s+read\\s+data\\s+level\\s+to\\s+\\d+";
-  public static final int MAX_CONSISTENCY_LEVEL = 2;
-  public static final int STRONG_CONSISTENCY_LEVEL = 1;
+  public static final String SET_READ_METADATA_CONSISTENCY_LEVEL_PATTERN = "(set\\s+)(read\\s+metadata\\s+level\\s+)(to\\s+.*)";
+  public static final String SET_READ_DATA_CONSISTENCY_LEVEL_PATTERN = "(set\\s+)(read\\s+data\\s+level\\s+)(to\\s+.*)";
   public static final int WEAK_CONSISTENCY_LEVEL = 2;
 
   /**
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/qp/executor/AbstractQPExecutor.java b/cluster/src/main/java/org/apache/iotdb/cluster/qp/executor/AbstractQPExecutor.java
index 21c7786..44049cf 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/qp/executor/AbstractQPExecutor.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/qp/executor/AbstractQPExecutor.java
@@ -22,7 +22,6 @@ import com.alipay.sofa.jraft.entity.PeerId;
 import java.util.HashSet;
 import java.util.Set;
 import org.apache.iotdb.cluster.config.ClusterConfig;
-import org.apache.iotdb.cluster.config.ClusterConstant;
 import org.apache.iotdb.cluster.config.ClusterDescriptor;
 import org.apache.iotdb.cluster.entity.Server;
 import org.apache.iotdb.cluster.exception.ConsistencyLevelException;
@@ -198,20 +197,12 @@ public abstract class AbstractQPExecutor {
     }
   }
 
-  public void setReadMetadataConsistencyLevel(int level) throws ConsistencyLevelException {
-    if (level <= ClusterConstant.MAX_CONSISTENCY_LEVEL) {
-      readMetadataConsistencyLevel.set(level);
-    } else {
-      throw new ConsistencyLevelException(String.format("Consistency level %d not support", level));
-    }
+  public void setReadMetadataConsistencyLevel(int level) {
+    readMetadataConsistencyLevel.set(level);
   }
 
-  public void setReadDataConsistencyLevel(int level) throws ConsistencyLevelException {
-    if (level <= ClusterConstant.MAX_CONSISTENCY_LEVEL) {
-      readDataConsistencyLevel.set(level);
-    } else {
-      throw new ConsistencyLevelException(String.format("Consistency level %d not support", level));
-    }
+  public void setReadDataConsistencyLevel(int level) {
+    readDataConsistencyLevel.set(level);
   }
 
   public int getReadMetadataConsistencyLevel() {
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/qp/executor/ClusterQueryProcessExecutor.java b/cluster/src/main/java/org/apache/iotdb/cluster/qp/executor/ClusterQueryProcessExecutor.java
index 30659e5..e8e0aec 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/qp/executor/ClusterQueryProcessExecutor.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/qp/executor/ClusterQueryProcessExecutor.java
@@ -58,10 +58,11 @@ public class ClusterQueryProcessExecutor extends AbstractQPExecutor implements I
   }
 
   @Override
-  public QueryDataSet processQuery(QueryPlan queryPlan, QueryContext context)
+  public QueryDataSet processQuery(PhysicalPlan plan, QueryContext context)
       throws IOException, FileNodeManagerException, PathErrorException,
       QueryFilterOptimizationException, ProcessorException {
 
+    QueryPlan queryPlan = (QueryPlan) plan;
     QueryExpression queryExpression = QueryExpression.create().setSelectSeries(queryPlan.getPaths())
         .setExpression(queryPlan.getExpression());
     clusterQueryRouter.setReadDataConsistencyLevel(getReadDataConsistencyLevel());
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/qp/executor/QueryMetadataExecutor.java b/cluster/src/main/java/org/apache/iotdb/cluster/qp/executor/QueryMetadataExecutor.java
index a2528c6..92f4c97 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/qp/executor/QueryMetadataExecutor.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/qp/executor/QueryMetadataExecutor.java
@@ -28,6 +28,7 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 import org.apache.iotdb.cluster.config.ClusterConfig;
+import org.apache.iotdb.cluster.config.ClusterConsistencyLevel;
 import org.apache.iotdb.cluster.config.ClusterConstant;
 import org.apache.iotdb.cluster.entity.raft.MetadataRaftHolder;
 import org.apache.iotdb.cluster.entity.raft.RaftService;
@@ -398,7 +399,7 @@ public class QueryMetadataExecutor extends AbstractQPExecutor {
         ClusterConfig.METADATA_GROUP_ID, getReadMetadataConsistencyLevel());
     SingleQPTask task = new SingleQPTask(false, request);
     MetadataRaftHolder metadataHolder = (MetadataRaftHolder) server.getMetadataHolder();
-    if (getReadMetadataConsistencyLevel() == ClusterConstant.WEAK_CONSISTENCY_LEVEL) {
+    if (getReadMetadataConsistencyLevel() == ClusterConsistencyLevel.WEAK.ordinal()) {
       QueryStorageGroupResponse response;
       response = QueryStorageGroupResponse
           .createSuccessResponse(metadataHolder.getFsm().getAllStorageGroups());
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/rpc/raft/processor/querydata/InitSeriesReaderSyncProcessor.java b/cluster/src/main/java/org/apache/iotdb/cluster/rpc/raft/processor/querydata/InitSeriesReaderSyncProcessor.java
index a64d909..8a388d3 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/rpc/raft/processor/querydata/InitSeriesReaderSyncProcessor.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/rpc/raft/processor/querydata/InitSeriesReaderSyncProcessor.java
@@ -20,6 +20,7 @@ package org.apache.iotdb.cluster.rpc.raft.processor.querydata;
 
 import com.alipay.remoting.BizContext;
 import com.alipay.sofa.jraft.Status;
+import org.apache.iotdb.cluster.config.ClusterConsistencyLevel;
 import org.apache.iotdb.cluster.config.ClusterConstant;
 import org.apache.iotdb.cluster.query.manager.querynode.ClusterLocalQueryManager;
 import org.apache.iotdb.cluster.rpc.raft.processor.BasicSyncUserProcessor;
@@ -51,7 +52,7 @@ public class InitSeriesReaderSyncProcessor extends BasicSyncUserProcessor<InitSe
    */
   private void handleNullRead(int readConsistencyLevel, String groupId) throws ProcessorException {
     LOGGER.debug("Read data level is {}", readConsistencyLevel);
-    if (readConsistencyLevel == ClusterConstant.STRONG_CONSISTENCY_LEVEL && !QPExecutorUtils
+    if (readConsistencyLevel == ClusterConsistencyLevel.STRONG.ordinal() && !QPExecutorUtils
         .checkDataGroupLeader(groupId)) {
       Status nullReadTaskStatus = Status.OK();
       RaftUtils.handleNullReadToDataGroup(nullReadTaskStatus, groupId);
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/rpc/raft/processor/querymetadata/QueryMetadataAsyncProcessor.java b/cluster/src/main/java/org/apache/iotdb/cluster/rpc/raft/processor/querymetadata/QueryMetadataAsyncProcessor.java
index 3073df9..446fe88 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/rpc/raft/processor/querymetadata/QueryMetadataAsyncProcessor.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/rpc/raft/processor/querymetadata/QueryMetadataAsyncProcessor.java
@@ -22,6 +22,7 @@ import com.alipay.remoting.AsyncContext;
 import com.alipay.remoting.BizContext;
 import com.alipay.sofa.jraft.Status;
 import com.alipay.sofa.jraft.closure.ReadIndexClosure;
+import org.apache.iotdb.cluster.config.ClusterConsistencyLevel;
 import org.apache.iotdb.cluster.config.ClusterConstant;
 import org.apache.iotdb.cluster.entity.raft.DataPartitionRaftHolder;
 import org.apache.iotdb.cluster.entity.raft.RaftService;
@@ -42,7 +43,7 @@ public class QueryMetadataAsyncProcessor extends
       QueryMetadataRequest request) {
     String groupId = request.getGroupID();
 
-    if (request.getReadConsistencyLevel() == ClusterConstant.WEAK_CONSISTENCY_LEVEL) {
+    if (request.getReadConsistencyLevel() == ClusterConsistencyLevel.WEAK.ordinal()) {
       QueryMetadataResponse response;
       try {
         response = QueryMetadataResponse
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/rpc/raft/processor/querymetadata/QueryMetadataInStringAsyncProcessor.java b/cluster/src/main/java/org/apache/iotdb/cluster/rpc/raft/processor/querymetadata/QueryMetadataInStringAsyncProcessor.java
index 8771eea..857f360 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/rpc/raft/processor/querymetadata/QueryMetadataInStringAsyncProcessor.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/rpc/raft/processor/querymetadata/QueryMetadataInStringAsyncProcessor.java
@@ -22,6 +22,7 @@ import com.alipay.remoting.AsyncContext;
 import com.alipay.remoting.BizContext;
 import com.alipay.sofa.jraft.Status;
 import com.alipay.sofa.jraft.closure.ReadIndexClosure;
+import org.apache.iotdb.cluster.config.ClusterConsistencyLevel;
 import org.apache.iotdb.cluster.config.ClusterConstant;
 import org.apache.iotdb.cluster.entity.raft.DataPartitionRaftHolder;
 import org.apache.iotdb.cluster.entity.raft.RaftService;
@@ -41,7 +42,7 @@ public class QueryMetadataInStringAsyncProcessor extends
       QueryMetadataInStringRequest request) {
     String groupId = request.getGroupID();
 
-    if (request.getReadConsistencyLevel() == ClusterConstant.WEAK_CONSISTENCY_LEVEL) {
+    if (request.getReadConsistencyLevel() == ClusterConsistencyLevel.WEAK.ordinal()) {
       QueryMetadataInStringResponse response = QueryMetadataInStringResponse
           .createSuccessResponse(groupId, mManager.getMetadataInString());
       response.addResult(true);
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/rpc/raft/processor/querymetadata/QueryPathsAsyncProcessor.java b/cluster/src/main/java/org/apache/iotdb/cluster/rpc/raft/processor/querymetadata/QueryPathsAsyncProcessor.java
index 8e1e47b..9f65929 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/rpc/raft/processor/querymetadata/QueryPathsAsyncProcessor.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/rpc/raft/processor/querymetadata/QueryPathsAsyncProcessor.java
@@ -22,6 +22,7 @@ import com.alipay.remoting.AsyncContext;
 import com.alipay.remoting.BizContext;
 import com.alipay.sofa.jraft.Status;
 import com.alipay.sofa.jraft.closure.ReadIndexClosure;
+import org.apache.iotdb.cluster.config.ClusterConsistencyLevel;
 import org.apache.iotdb.cluster.config.ClusterConstant;
 import org.apache.iotdb.cluster.entity.raft.DataPartitionRaftHolder;
 import org.apache.iotdb.cluster.entity.raft.RaftService;
@@ -41,7 +42,7 @@ public class QueryPathsAsyncProcessor extends BasicAsyncUserProcessor<QueryPaths
       QueryPathsRequest request) {
     String groupId = request.getGroupID();
 
-    if (request.getReadConsistencyLevel() == ClusterConstant.WEAK_CONSISTENCY_LEVEL) {
+    if (request.getReadConsistencyLevel() == ClusterConsistencyLevel.WEAK.ordinal()) {
       QueryPathsResponse response = QueryPathsResponse
           .createEmptyResponse(groupId);
       try {
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/rpc/raft/processor/querymetadata/QuerySeriesTypeAsyncProcessor.java b/cluster/src/main/java/org/apache/iotdb/cluster/rpc/raft/processor/querymetadata/QuerySeriesTypeAsyncProcessor.java
index 9e4b1c7..dcb774f 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/rpc/raft/processor/querymetadata/QuerySeriesTypeAsyncProcessor.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/rpc/raft/processor/querymetadata/QuerySeriesTypeAsyncProcessor.java
@@ -22,6 +22,7 @@ import com.alipay.remoting.AsyncContext;
 import com.alipay.remoting.BizContext;
 import com.alipay.sofa.jraft.Status;
 import com.alipay.sofa.jraft.closure.ReadIndexClosure;
+import org.apache.iotdb.cluster.config.ClusterConsistencyLevel;
 import org.apache.iotdb.cluster.config.ClusterConstant;
 import org.apache.iotdb.cluster.entity.raft.DataPartitionRaftHolder;
 import org.apache.iotdb.cluster.entity.raft.RaftService;
@@ -41,7 +42,7 @@ public class QuerySeriesTypeAsyncProcessor extends BasicAsyncUserProcessor<Query
       QuerySeriesTypeRequest request) {
     String groupId = request.getGroupID();
 
-    if (request.getReadConsistencyLevel() == ClusterConstant.WEAK_CONSISTENCY_LEVEL) {
+    if (request.getReadConsistencyLevel() == ClusterConsistencyLevel.WEAK.ordinal()) {
       QuerySeriesTypeResponse response;
       try {
         response = QuerySeriesTypeResponse.createSuccessResponse(groupId, mManager.getSeriesType(request.getPath()));
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/rpc/raft/processor/querymetadata/QueryTimeSeriesAsyncProcessor.java b/cluster/src/main/java/org/apache/iotdb/cluster/rpc/raft/processor/querymetadata/QueryTimeSeriesAsyncProcessor.java
index 593f99d..c36120f 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/rpc/raft/processor/querymetadata/QueryTimeSeriesAsyncProcessor.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/rpc/raft/processor/querymetadata/QueryTimeSeriesAsyncProcessor.java
@@ -22,6 +22,7 @@ import com.alipay.remoting.AsyncContext;
 import com.alipay.remoting.BizContext;
 import com.alipay.sofa.jraft.Status;
 import com.alipay.sofa.jraft.closure.ReadIndexClosure;
+import org.apache.iotdb.cluster.config.ClusterConsistencyLevel;
 import org.apache.iotdb.cluster.config.ClusterConstant;
 import org.apache.iotdb.cluster.entity.raft.DataPartitionRaftHolder;
 import org.apache.iotdb.cluster.entity.raft.RaftService;
@@ -42,7 +43,7 @@ public class QueryTimeSeriesAsyncProcessor extends BasicAsyncUserProcessor<Query
       QueryTimeSeriesRequest request) {
     String groupId = request.getGroupID();
 
-    if (request.getReadConsistencyLevel() == ClusterConstant.WEAK_CONSISTENCY_LEVEL) {
+    if (request.getReadConsistencyLevel() == ClusterConsistencyLevel.WEAK.ordinal()) {
       QueryTimeSeriesResponse response = QueryTimeSeriesResponse
           .createEmptyResponse(groupId);
       try {
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/service/TSServiceClusterImpl.java b/cluster/src/main/java/org/apache/iotdb/cluster/service/TSServiceClusterImpl.java
index 7ae40c2..b2b4fab 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/service/TSServiceClusterImpl.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/service/TSServiceClusterImpl.java
@@ -27,6 +27,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
+import org.apache.iotdb.cluster.config.ClusterConsistencyLevel;
 import org.apache.iotdb.cluster.config.ClusterConstant;
 import org.apache.iotdb.cluster.exception.ConsistencyLevelException;
 import org.apache.iotdb.cluster.qp.executor.ClusterQueryProcessExecutor;
@@ -251,14 +252,12 @@ public class TSServiceClusterImpl extends TSServiceImpl {
     statement = statement.toLowerCase().trim();
     try {
       if (Pattern.matches(ClusterConstant.SET_READ_METADATA_CONSISTENCY_LEVEL_PATTERN, statement)) {
-        String[] splits = statement.split("\\s+");
-        int level = Integer.parseInt(splits[splits.length - 1]);
+        int level = parseConsistencyLevel(statement);
         queryMetadataExecutor.setReadMetadataConsistencyLevel(level);
         return true;
       } else if (Pattern
           .matches(ClusterConstant.SET_READ_DATA_CONSISTENCY_LEVEL_PATTERN, statement)) {
-        String[] splits = statement.split("\\s+");
-        int level = Integer.parseInt(splits[splits.length - 1]);
+        int level = parseConsistencyLevel(statement);
         queryDataExecutor.setReadDataConsistencyLevel(level);
         return true;
       } else {
@@ -269,6 +268,16 @@ public class TSServiceClusterImpl extends TSServiceImpl {
     }
   }
 
+  private int parseConsistencyLevel(String statement) throws ConsistencyLevelException {
+    String[] splits = statement.split("\\s+");
+    String levelName = splits[splits.length - 1].toLowerCase();
+    int level = ClusterConsistencyLevel.getLevel(levelName);
+    if (level == ClusterConsistencyLevel.UNSUPPORT_LEVEL) {
+      throw new ConsistencyLevelException(String.format("Consistency level %s not support", levelName));
+    }
+    return level;
+  }
+
   @Override
   protected boolean executeNonQuery(PhysicalPlan plan) throws ProcessorException {
     return nonQueryExecutor.processNonQuery(plan);
diff --git a/cluster/src/test/java/org/apache/iotdb/cluster/qp/AbstractQPExecutorTest.java b/cluster/src/test/java/org/apache/iotdb/cluster/qp/AbstractQPExecutorTest.java
index 02b0311..8f35029 100644
--- a/cluster/src/test/java/org/apache/iotdb/cluster/qp/AbstractQPExecutorTest.java
+++ b/cluster/src/test/java/org/apache/iotdb/cluster/qp/AbstractQPExecutorTest.java
@@ -21,6 +21,7 @@ package org.apache.iotdb.cluster.qp;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 import org.apache.iotdb.cluster.config.ClusterConfig;
 import org.apache.iotdb.cluster.config.ClusterDescriptor;
@@ -61,28 +62,49 @@ public class AbstractQPExecutorTest {
     assertEquals(CLUSTER_CONFIG.getReadMetadataConsistencyLevel(),
         queryMetadataExecutor.getReadMetadataConsistencyLevel());
     boolean exec;
-    exec= impl.execSetConsistencyLevel("set read metadata level to 1");
+    exec = impl.execSetConsistencyLevel("set read metadata level to strong");
     assertTrue(exec);
-    assertEquals(1, queryMetadataExecutor.getReadMetadataConsistencyLevel());
+    assertEquals(0, queryMetadataExecutor.getReadMetadataConsistencyLevel());
 
-    exec= impl.execSetConsistencyLevel("show timeseries");
-    assertEquals(1, queryMetadataExecutor.getReadMetadataConsistencyLevel());
+    exec = impl.execSetConsistencyLevel("show timeseries");
+    assertEquals(0, queryMetadataExecutor.getReadMetadataConsistencyLevel());
     assertFalse(exec);
 
-    exec= impl.execSetConsistencyLevel("set read metadata level to 2");
+    exec = impl.execSetConsistencyLevel("set read metadata level to weak");
+    assertTrue(exec);
+    assertEquals(1, queryMetadataExecutor.getReadMetadataConsistencyLevel());
+
+    exec = impl.execSetConsistencyLevel("set READ    metadata level  to STRONG");
     assertTrue(exec);
-    assertEquals(2, queryMetadataExecutor.getReadMetadataConsistencyLevel());
+    assertEquals(0, queryMetadataExecutor.getReadMetadataConsistencyLevel());
 
-    exec = impl.execSetConsistencyLevel("set read metadata level to -2");
-    assertEquals(2, queryMetadataExecutor.getReadMetadataConsistencyLevel());
-    assertFalse(exec);
+    exec = impl.execSetConsistencyLevel("  SET read    metadata level  to WEAK");
+    assertTrue(exec);
+    assertEquals(1, queryMetadataExecutor.getReadMetadataConsistencyLevel());
+
+    try {
+      impl.execSetConsistencyLevel("set read metadata level to -2");
+      fail();
+    } catch (Exception e) {
+      assertEquals("Consistency level -2 not support", e.getMessage());
+    }
+    assertEquals(1, queryMetadataExecutor.getReadMetadataConsistencyLevel());
+
+    try {
+      impl.execSetConsistencyLevel("set read metadata level  to final_consistency");
+      fail();
+    } catch (Exception e) {
+      assertEquals("Consistency level final_consistency not support", e.getMessage());
+    }
+    assertEquals(1, queryMetadataExecutor.getReadMetadataConsistencyLevel());
 
     try {
       impl.execSetConsistencyLevel("set read metadata level to 90");
+      fail();
     } catch (Exception e) {
       assertEquals("Consistency level 90 not support", e.getMessage());
     }
-    assertEquals(2, queryMetadataExecutor.getReadMetadataConsistencyLevel());
+    assertEquals(1, queryMetadataExecutor.getReadMetadataConsistencyLevel());
   }
 
   @Test
@@ -90,27 +112,56 @@ public class AbstractQPExecutorTest {
     assertEquals(CLUSTER_CONFIG.getReadDataConsistencyLevel(),
         queryMetadataExecutor.getReadDataConsistencyLevel());
     boolean exec;
-    exec= impl.execSetConsistencyLevel("set read data level to 1");
+    exec = impl.execSetConsistencyLevel(" set read data level to strong");
     assertTrue(exec);
-    assertEquals(1, queryExecutor.getReadDataConsistencyLevel());
+    assertEquals(0, queryExecutor.getReadDataConsistencyLevel());
 
-    exec= impl.execSetConsistencyLevel("show timeseries");
-    assertEquals(1, queryExecutor.getReadDataConsistencyLevel());
+    exec = impl.execSetConsistencyLevel("show timeseries");
+    assertEquals(0, queryExecutor.getReadDataConsistencyLevel());
     assertFalse(exec);
 
-    exec= impl.execSetConsistencyLevel("set read data level  to 2");
+    exec = impl.execSetConsistencyLevel("set read data level  to weak");
     assertTrue(exec);
-    assertEquals(2, queryExecutor.getReadDataConsistencyLevel());
+    assertEquals(1, queryExecutor.getReadDataConsistencyLevel());
 
-    exec = impl.execSetConsistencyLevel("set read data level  to -2");
-    assertEquals(2, queryExecutor.getReadDataConsistencyLevel());
-    assertFalse(exec);
+    exec = impl.execSetConsistencyLevel("set READ    data level  to STRONG");
+    assertTrue(exec);
+    assertEquals(0, queryExecutor.getReadDataConsistencyLevel());
+
+    exec = impl.execSetConsistencyLevel("  SET read    data level  to WEAK");
+    assertTrue(exec);
+    assertEquals(1, queryExecutor.getReadDataConsistencyLevel());
+
+    try {
+      impl.execSetConsistencyLevel("set read data level  to -2");
+      fail();
+    } catch (Exception e) {
+      assertEquals("Consistency level -2 not support", e.getMessage());
+    }
+    assertEquals(1, queryExecutor.getReadDataConsistencyLevel());
+
+    try {
+      impl.execSetConsistencyLevel("set read data level  to 1");
+      fail();
+    } catch (Exception e) {
+      assertEquals("Consistency level 1 not support", e.getMessage());
+    }
+    assertEquals(1, queryExecutor.getReadDataConsistencyLevel());
+
+    try {
+      impl.execSetConsistencyLevel("set read data level  to final_consistency");
+      fail();
+    } catch (Exception e) {
+      assertEquals("Consistency level final_consistency not support", e.getMessage());
+    }
+    assertEquals(1, queryExecutor.getReadDataConsistencyLevel());
 
     try {
       impl.execSetConsistencyLevel("set read data level  to 90");
+      fail();
     } catch (Exception e) {
       assertEquals("Consistency level 90 not support", e.getMessage());
     }
-    assertEquals(2, queryExecutor.getReadDataConsistencyLevel());
+    assertEquals(1, queryExecutor.getReadDataConsistencyLevel());
   }
 }
\ No newline at end of file
diff --git a/iotdb/src/main/java/org/apache/iotdb/db/qp/executor/QueryProcessExecutor.java b/iotdb/src/main/java/org/apache/iotdb/db/qp/executor/QueryProcessExecutor.java
index 0a88640..6bdfb79 100644
--- a/iotdb/src/main/java/org/apache/iotdb/db/qp/executor/QueryProcessExecutor.java
+++ b/iotdb/src/main/java/org/apache/iotdb/db/qp/executor/QueryProcessExecutor.java
@@ -27,6 +27,7 @@ import org.apache.iotdb.db.exception.FileNodeManagerException;
 import org.apache.iotdb.db.exception.PathErrorException;
 import org.apache.iotdb.db.exception.ProcessorException;
 import org.apache.iotdb.db.metadata.MManager;
+import org.apache.iotdb.db.qp.physical.PhysicalPlan;
 import org.apache.iotdb.db.qp.physical.crud.AggregationPlan;
 import org.apache.iotdb.db.qp.physical.crud.FillQueryPlan;
 import org.apache.iotdb.db.qp.physical.crud.GroupByPlan;