You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ne...@apache.org on 2021/09/03 01:06:36 UTC

[iotdb] branch rel/0.12 updated: [IOTDB-1565]set system to readonly / writable Adaptive cluster (#3885) * Adaptive cluster * fix test * fix test (cherry picked from commit 5c48d3a3a48180df9a41b980a8e242236a028475) (#3894)

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

neuyilan pushed a commit to branch rel/0.12
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/rel/0.12 by this push:
     new 965a3eb  [IOTDB-1565]set system to readonly / writable Adaptive cluster (#3885)  * Adaptive cluster  * fix test  * fix test  (cherry picked from commit 5c48d3a3a48180df9a41b980a8e242236a028475) (#3894)
965a3eb is described below

commit 965a3ebb9e26d3f0ba8ed35845d5a3c087460bd1
Author: Hang Ji <55...@users.noreply.github.com>
AuthorDate: Fri Sep 3 09:04:56 2021 +0800

    [IOTDB-1565]set system to readonly / writable Adaptive cluster (#3885)  * Adaptive cluster  * fix test  * fix test  (cherry picked from commit 5c48d3a3a48180df9a41b980a8e242236a028475) (#3894)
---
 .../apache/iotdb/cluster/server/ClientServer.java  |  8 ++++++
 .../apache/iotdb/cluster/utils/PartitionUtils.java |  4 ++-
 .../apache/iotdb/db/qp/physical/PhysicalPlan.java  |  7 ++++-
 .../db/qp/physical/sys/SetSystemModePlan.java      | 33 ++++++++++++++++++++++
 4 files changed, 50 insertions(+), 2 deletions(-)

diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/server/ClientServer.java b/cluster/src/main/java/org/apache/iotdb/cluster/server/ClientServer.java
index 722aeaf..36de122 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/server/ClientServer.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/server/ClientServer.java
@@ -37,6 +37,8 @@ import org.apache.iotdb.db.exception.metadata.MetadataException;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.metadata.PartialPath;
 import org.apache.iotdb.db.qp.physical.PhysicalPlan;
+import org.apache.iotdb.db.qp.physical.sys.FlushPlan;
+import org.apache.iotdb.db.qp.physical.sys.SetSystemModePlan;
 import org.apache.iotdb.db.query.context.QueryContext;
 import org.apache.iotdb.db.service.IoTDB;
 import org.apache.iotdb.db.service.TSServiceImpl;
@@ -208,6 +210,12 @@ public class ClientServer extends TSServiceImpl {
   protected TSStatus executeNonQueryPlan(PhysicalPlan plan) {
     try {
       plan.checkIntegrity();
+      if (!(plan instanceof SetSystemModePlan)
+          && !(plan instanceof FlushPlan)
+          && IoTDBDescriptor.getInstance().getConfig().isReadOnly()) {
+        throw new QueryProcessException(
+            "Current system mode is read-only, does not support non-query operation");
+      }
     } catch (QueryProcessException e) {
       logger.warn("Illegal plan detected: {}", plan);
       return RpcUtils.getStatus(TSStatusCode.EXECUTE_STATEMENT_ERROR, e.getMessage());
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/utils/PartitionUtils.java b/cluster/src/main/java/org/apache/iotdb/cluster/utils/PartitionUtils.java
index 0112111..2fa2cb4 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/utils/PartitionUtils.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/utils/PartitionUtils.java
@@ -40,6 +40,7 @@ import org.apache.iotdb.db.qp.physical.sys.LoadDataPlan;
 import org.apache.iotdb.db.qp.physical.sys.MergePlan;
 import org.apache.iotdb.db.qp.physical.sys.OperateFilePlan;
 import org.apache.iotdb.db.qp.physical.sys.SetStorageGroupPlan;
+import org.apache.iotdb.db.qp.physical.sys.SetSystemModePlan;
 import org.apache.iotdb.db.qp.physical.sys.SetTTLPlan;
 import org.apache.iotdb.db.qp.physical.sys.ShowTTLPlan;
 import org.apache.iotdb.service.rpc.thrift.TSStatus;
@@ -104,7 +105,8 @@ public class PartitionUtils {
         || plan instanceof DataAuthPlan
         || plan instanceof CreateTemplatePlan
         || plan instanceof CreateFunctionPlan
-        || plan instanceof DropFunctionPlan;
+        || plan instanceof DropFunctionPlan
+        || plan instanceof SetSystemModePlan;
   }
 
   /**
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/PhysicalPlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/PhysicalPlan.java
index 58db8ab..a73f5d3 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/PhysicalPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/PhysicalPlan.java
@@ -49,6 +49,7 @@ import org.apache.iotdb.db.qp.physical.sys.LoadConfigurationPlan;
 import org.apache.iotdb.db.qp.physical.sys.MNodePlan;
 import org.apache.iotdb.db.qp.physical.sys.MeasurementMNodePlan;
 import org.apache.iotdb.db.qp.physical.sys.SetStorageGroupPlan;
+import org.apache.iotdb.db.qp.physical.sys.SetSystemModePlan;
 import org.apache.iotdb.db.qp.physical.sys.SetTTLPlan;
 import org.apache.iotdb.db.qp.physical.sys.SetUsingDeviceTemplatePlan;
 import org.apache.iotdb.db.qp.physical.sys.ShowDevicesPlan;
@@ -356,6 +357,9 @@ public abstract class PhysicalPlan {
         case DROP_FUNCTION:
           plan = new DropFunctionPlan();
           break;
+        case SET_SYSTEM_MODE:
+          plan = new SetSystemModePlan();
+          break;
         default:
           throw new IOException("unrecognized log type " + type);
       }
@@ -407,7 +411,8 @@ public abstract class PhysicalPlan {
     SET_USING_DEVICE_TEMPLATE,
     AUTO_CREATE_DEVICE_MNODE,
     CREATE_FUNCTION,
-    DROP_FUNCTION
+    DROP_FUNCTION,
+    SET_SYSTEM_MODE
   }
 
   public long getIndex() {
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/SetSystemModePlan.java b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/SetSystemModePlan.java
index cbfef8c..208f8d6 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/SetSystemModePlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/physical/sys/SetSystemModePlan.java
@@ -18,10 +18,15 @@
  */
 package org.apache.iotdb.db.qp.physical.sys;
 
+import org.apache.iotdb.db.exception.metadata.IllegalPathException;
 import org.apache.iotdb.db.metadata.PartialPath;
 import org.apache.iotdb.db.qp.logical.Operator.OperatorType;
 import org.apache.iotdb.db.qp.physical.PhysicalPlan;
+import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
 
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.nio.ByteBuffer;
 import java.util.Collections;
 import java.util.List;
 
@@ -29,6 +34,10 @@ public class SetSystemModePlan extends PhysicalPlan {
 
   private boolean isReadOnly;
 
+  public SetSystemModePlan() {
+    super(false, OperatorType.SET_SYSTEM_MODE);
+  }
+
   public SetSystemModePlan(boolean isReadOnly) {
     super(false, OperatorType.SET_SYSTEM_MODE);
     this.isReadOnly = isReadOnly;
@@ -42,4 +51,28 @@ public class SetSystemModePlan extends PhysicalPlan {
   public boolean isReadOnly() {
     return isReadOnly;
   }
+
+  @Override
+  public void serialize(DataOutputStream outputStream) throws IOException {
+    outputStream.writeByte((byte) PhysicalPlanType.SET_SYSTEM_MODE.ordinal());
+
+    outputStream.writeBoolean(isReadOnly);
+    outputStream.writeLong(index);
+  }
+
+  @Override
+  public void serialize(ByteBuffer buffer) {
+    buffer.put((byte) PhysicalPlanType.SET_SYSTEM_MODE.ordinal());
+
+    ReadWriteIOUtils.write(isReadOnly, buffer);
+
+    buffer.putLong(index);
+  }
+
+  @Override
+  public void deserialize(ByteBuffer buffer) throws IllegalPathException {
+
+    isReadOnly = buffer.get() == 1;
+    this.index = buffer.getLong();
+  }
 }