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();
+ }
}