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

jackietien pushed a commit to branch rc/2.0.4
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit f47f8a8f1e038c13cc9fa6e770fc8d456490561f
Author: Caideyipi <[email protected]>
AuthorDate: Thu May 22 16:33:50 2025 +0800

    Fixed the bug that the first query may be rejected when read only in table 
model for simple consensus
    
    (cherry picked from commit 95648dfa936d5b17ad51b7a8d791baa3119a9dd7)
---
 .../src/main/java/org/apache/iotdb/consensus/ratis/RatisConsensus.java | 2 ++
 .../main/java/org/apache/iotdb/consensus/simple/SimpleConsensus.java   | 3 ++-
 .../iotdb/db/queryengine/execution/executor/RegionWriteExecutor.java   | 2 ++
 3 files changed, 6 insertions(+), 1 deletion(-)

diff --git 
a/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/ratis/RatisConsensus.java
 
b/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/ratis/RatisConsensus.java
index 7a7bdc2f9c5..ff16434df14 100644
--- 
a/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/ratis/RatisConsensus.java
+++ 
b/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/ratis/RatisConsensus.java
@@ -324,6 +324,8 @@ class RatisConsensus implements IConsensus {
     }
 
     // current Peer is group leader and in ReadOnly State
+    // We only judge dataRegions here, because schema write when readOnly is 
handled at
+    // RegionWriteExecutor
     if (isLeader(groupId) && Utils.rejectWrite(consensusGroupType)) {
       try {
         forceStepDownLeader(raftGroup);
diff --git 
a/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/simple/SimpleConsensus.java
 
b/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/simple/SimpleConsensus.java
index 5800e76b008..f7fcba1a597 100644
--- 
a/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/simple/SimpleConsensus.java
+++ 
b/iotdb-core/consensus/src/main/java/org/apache/iotdb/consensus/simple/SimpleConsensus.java
@@ -119,7 +119,8 @@ class SimpleConsensus implements IConsensus {
     SimpleConsensusServerImpl impl =
         Optional.ofNullable(stateMachineMap.get(groupId))
             .orElseThrow(() -> new ConsensusGroupNotExistException(groupId));
-    if (impl.isReadOnly()) {
+    // Schema Write when readOnly is handled at RegionWriteExecutor
+    if (impl.isReadOnly() && groupId instanceof DataRegionId) {
       return StatusUtils.getStatus(TSStatusCode.SYSTEM_READ_ONLY);
     } else {
       TSStatus status;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/executor/RegionWriteExecutor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/executor/RegionWriteExecutor.java
index 46a7cdbf7d0..60dda197578 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/executor/RegionWriteExecutor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/executor/RegionWriteExecutor.java
@@ -187,6 +187,8 @@ public class RegionWriteExecutor {
     public RegionExecutionResult visitPlan(
         final PlanNode node, final WritePlanNodeExecutionContext context) {
 
+      // All the plans are rejected here when readOnly except for insertion, 
which is rejected in
+      // the stateMachine's "write" interface
       if (CommonDescriptor.getInstance().getConfig().isReadOnly() && 
!isForceExecutedPlan(node)) {
         return RegionExecutionResult.create(
             false,

Reply via email to