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

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


The following commit(s) were added to refs/heads/master by this push:
     new 3adba331316 Fixed alter column type's consensus write (#17483)
3adba331316 is described below

commit 3adba3313169fc7595e158a70bdbb708cdc78fda
Author: Caideyipi <[email protected]>
AuthorDate: Wed Apr 15 17:40:18 2026 +0800

    Fixed alter column type's consensus write (#17483)
    
    * Update AlterTableColumnDataTypeProcedure.java
    
    * fix
    
    * pre
    
    * spls
---
 .../consensus/request/ConfigPhysicalPlan.java         |  4 ++++
 .../consensus/request/ConfigPhysicalPlanType.java     |  1 +
 .../request/write/table/AlterColumnDataTypePlan.java  |  4 ----
 ...aTypePlan.java => PreAlterColumnDataTypePlan.java} | 15 +++++----------
 .../manager/schema/ClusterSchemaManager.java          |  8 ++++++--
 .../persistence/executor/ConfigPlanExecutor.java      |  3 +++
 .../persistence/schema/ClusterSchemaInfo.java         | 10 ++++++----
 .../table/AlterTableColumnDataTypeProcedure.java      | 11 +++++++----
 .../request/ConfigPhysicalPlanSerDeTest.java          | 19 +++++++++++++++++++
 9 files changed, 51 insertions(+), 24 deletions(-)

diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlan.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlan.java
index 7fd7cd02911..ffe333b56dd 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlan.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlan.java
@@ -105,6 +105,7 @@ import 
org.apache.iotdb.confignode.consensus.request.write.table.AlterColumnData
 import 
org.apache.iotdb.confignode.consensus.request.write.table.CommitCreateTablePlan;
 import 
org.apache.iotdb.confignode.consensus.request.write.table.CommitDeleteColumnPlan;
 import 
org.apache.iotdb.confignode.consensus.request.write.table.CommitDeleteTablePlan;
+import 
org.apache.iotdb.confignode.consensus.request.write.table.PreAlterColumnDataTypePlan;
 import 
org.apache.iotdb.confignode.consensus.request.write.table.PreCreateTablePlan;
 import 
org.apache.iotdb.confignode.consensus.request.write.table.PreDeleteColumnPlan;
 import 
org.apache.iotdb.confignode.consensus.request.write.table.PreDeleteTablePlan;
@@ -445,6 +446,9 @@ public abstract class ConfigPhysicalPlan implements 
IConsensusRequest {
         case PreDeleteViewColumn:
           plan = new PreDeleteViewColumnPlan();
           break;
+        case PreAlterColumnDataType:
+          plan = new PreAlterColumnDataTypePlan();
+          break;
         case AlterColumnDataType:
           plan = new AlterColumnDataTypePlan();
           break;
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanType.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanType.java
index 371435c9175..fe04b93d9ad 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanType.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanType.java
@@ -230,6 +230,7 @@ public enum ConfigPhysicalPlanType {
   PreDeleteView((short) 876),
   RenameViewColumn((short) 877),
   AlterColumnDataType((short) 878),
+  PreAlterColumnDataType((short) 879),
 
   /** Deprecated types for sync, restored them for upgrade. */
   @Deprecated
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/table/AlterColumnDataTypePlan.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/table/AlterColumnDataTypePlan.java
index 8382e7830f0..7404a7690bc 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/table/AlterColumnDataTypePlan.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/table/AlterColumnDataTypePlan.java
@@ -53,10 +53,6 @@ public class AlterColumnDataTypePlan extends 
AbstractTableColumnPlan {
     newType = TSDataType.deserializeFrom(buffer);
   }
 
-  public void setNewType(TSDataType newType) {
-    this.newType = newType;
-  }
-
   public TSDataType getNewType() {
     return newType;
   }
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/table/AlterColumnDataTypePlan.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/table/PreAlterColumnDataTypePlan.java
similarity index 81%
copy from 
iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/table/AlterColumnDataTypePlan.java
copy to 
iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/table/PreAlterColumnDataTypePlan.java
index 8382e7830f0..ed52a553225 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/table/AlterColumnDataTypePlan.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/table/PreAlterColumnDataTypePlan.java
@@ -27,17 +27,16 @@ import java.io.DataOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 
-public class AlterColumnDataTypePlan extends AbstractTableColumnPlan {
-
+public class PreAlterColumnDataTypePlan extends AbstractTableColumnPlan {
   private TSDataType newType;
 
-  public AlterColumnDataTypePlan() {
-    super(ConfigPhysicalPlanType.AlterColumnDataType);
+  public PreAlterColumnDataTypePlan() {
+    super(ConfigPhysicalPlanType.PreAlterColumnDataType);
   }
 
-  public AlterColumnDataTypePlan(
+  public PreAlterColumnDataTypePlan(
       String database, String tableName, String columnName, TSDataType 
newType) {
-    super(ConfigPhysicalPlanType.AlterColumnDataType, database, tableName, 
columnName);
+    super(ConfigPhysicalPlanType.PreAlterColumnDataType, database, tableName, 
columnName);
     this.newType = newType;
   }
 
@@ -53,10 +52,6 @@ public class AlterColumnDataTypePlan extends 
AbstractTableColumnPlan {
     newType = TSDataType.deserializeFrom(buffer);
   }
 
-  public void setNewType(TSDataType newType) {
-    this.newType = newType;
-  }
-
   public TSDataType getNewType() {
     return newType;
   }
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/schema/ClusterSchemaManager.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/schema/ClusterSchemaManager.java
index 1ea8528213b..f823f9177ac 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/schema/ClusterSchemaManager.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/schema/ClusterSchemaManager.java
@@ -65,6 +65,7 @@ import 
org.apache.iotdb.confignode.consensus.request.write.database.SetDataRepli
 import 
org.apache.iotdb.confignode.consensus.request.write.database.SetSchemaReplicationFactorPlan;
 import 
org.apache.iotdb.confignode.consensus.request.write.database.SetTimePartitionIntervalPlan;
 import 
org.apache.iotdb.confignode.consensus.request.write.pipe.payload.PipeEnrichedPlan;
+import 
org.apache.iotdb.confignode.consensus.request.write.table.PreAlterColumnDataTypePlan;
 import 
org.apache.iotdb.confignode.consensus.request.write.table.SetTableColumnCommentPlan;
 import 
org.apache.iotdb.confignode.consensus.request.write.table.SetTableCommentPlan;
 import 
org.apache.iotdb.confignode.consensus.request.write.table.view.SetViewCommentPlan;
@@ -1392,7 +1393,8 @@ public class ClusterSchemaManager {
       final String database,
       final String tableName,
       final String columnName,
-      final TSDataType dataType)
+      final TSDataType dataType,
+      final boolean isGeneratedByPipe)
       throws MetadataException {
     final TsTable originalTable = getTableIfExists(database, 
tableName).orElse(null);
 
@@ -1405,7 +1407,9 @@ public class ClusterSchemaManager {
     }
 
     TSStatus tsStatus =
-        clusterSchemaInfo.preAlterColumnDataType(database, tableName, 
columnName, dataType);
+        executePlan(
+            new PreAlterColumnDataTypePlan(database, tableName, columnName, 
dataType),
+            isGeneratedByPipe);
     if (tsStatus.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
       return new Pair<>(tsStatus, null);
     }
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/executor/ConfigPlanExecutor.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/executor/ConfigPlanExecutor.java
index 8016690d17c..6c9351e881a 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/executor/ConfigPlanExecutor.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/executor/ConfigPlanExecutor.java
@@ -122,6 +122,7 @@ import 
org.apache.iotdb.confignode.consensus.request.write.table.AlterColumnData
 import 
org.apache.iotdb.confignode.consensus.request.write.table.CommitCreateTablePlan;
 import 
org.apache.iotdb.confignode.consensus.request.write.table.CommitDeleteColumnPlan;
 import 
org.apache.iotdb.confignode.consensus.request.write.table.CommitDeleteTablePlan;
+import 
org.apache.iotdb.confignode.consensus.request.write.table.PreAlterColumnDataTypePlan;
 import 
org.apache.iotdb.confignode.consensus.request.write.table.PreCreateTablePlan;
 import 
org.apache.iotdb.confignode.consensus.request.write.table.PreDeleteColumnPlan;
 import 
org.apache.iotdb.confignode.consensus.request.write.table.PreDeleteTablePlan;
@@ -600,6 +601,8 @@ public class ConfigPlanExecutor {
       case CommitDeleteTable:
       case CommitDeleteView:
         return clusterSchemaInfo.dropTable((CommitDeleteTablePlan) 
physicalPlan);
+      case PreAlterColumnDataType:
+        return 
clusterSchemaInfo.preAlterColumnDataType((PreAlterColumnDataTypePlan) 
physicalPlan);
       case AlterColumnDataType:
         return clusterSchemaInfo.commitAlterColumnDataType(
             ((AlterColumnDataTypePlan) physicalPlan));
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java
index e3ce7d7c29d..342da4fa3ac 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java
@@ -58,6 +58,7 @@ import 
org.apache.iotdb.confignode.consensus.request.write.table.AlterColumnData
 import 
org.apache.iotdb.confignode.consensus.request.write.table.CommitCreateTablePlan;
 import 
org.apache.iotdb.confignode.consensus.request.write.table.CommitDeleteColumnPlan;
 import 
org.apache.iotdb.confignode.consensus.request.write.table.CommitDeleteTablePlan;
+import 
org.apache.iotdb.confignode.consensus.request.write.table.PreAlterColumnDataTypePlan;
 import 
org.apache.iotdb.confignode.consensus.request.write.table.PreCreateTablePlan;
 import 
org.apache.iotdb.confignode.consensus.request.write.table.PreDeleteColumnPlan;
 import 
org.apache.iotdb.confignode.consensus.request.write.table.PreDeleteTablePlan;
@@ -105,7 +106,6 @@ import org.apache.iotdb.rpc.RpcUtils;
 import org.apache.iotdb.rpc.TSStatusCode;
 
 import org.apache.tsfile.annotations.TableModel;
-import org.apache.tsfile.enums.TSDataType;
 import org.apache.tsfile.utils.Pair;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -1547,13 +1547,15 @@ public class ClusterSchemaInfo implements 
SnapshotProcessor {
                 plan.getColumnName()));
   }
 
-  public TSStatus preAlterColumnDataType(
-      String databaseName, String tableName, String columnName, TSDataType 
dataType) {
+  public TSStatus preAlterColumnDataType(final PreAlterColumnDataTypePlan 
plan) {
     databaseReadWriteLock.writeLock().lock();
     try {
       final TSStatus status = new 
TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
       tableModelMTree.preAlterColumnDataType(
-          getQualifiedDatabasePartialPath(databaseName), tableName, 
columnName, dataType);
+          getQualifiedDatabasePartialPath(plan.getDatabase()),
+          plan.getTableName(),
+          plan.getColumnName(),
+          plan.getNewType());
       return status;
     } catch (final MetadataException e) {
       LOGGER.warn(e.getMessage(), e);
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/AlterTableColumnDataTypeProcedure.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/AlterTableColumnDataTypeProcedure.java
index fb02c1c2e59..b454fa38a5d 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/AlterTableColumnDataTypeProcedure.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/AlterTableColumnDataTypeProcedure.java
@@ -26,7 +26,6 @@ import org.apache.iotdb.commons.schema.table.TsTable;
 import 
org.apache.iotdb.confignode.consensus.request.write.table.AlterColumnDataTypePlan;
 import org.apache.iotdb.confignode.procedure.env.ConfigNodeProcedureEnv;
 import org.apache.iotdb.confignode.procedure.exception.ProcedureException;
-import org.apache.iotdb.confignode.procedure.impl.schema.SchemaUtils;
 import 
org.apache.iotdb.confignode.procedure.state.schema.AlterTableColumnDataTypeState;
 import org.apache.iotdb.confignode.procedure.store.ProcedureType;
 import org.apache.iotdb.rpc.TSStatusCode;
@@ -126,7 +125,8 @@ public class AlterTableColumnDataTypeProcedure
       final Pair<TSStatus, TsTable> result =
           env.getConfigManager()
               .getClusterSchemaManager()
-              .tableColumnCheckForColumnAltering(database, tableName, 
columnName, dataType);
+              .tableColumnCheckForColumnAltering(
+                  database, tableName, columnName, dataType, 
isGeneratedByPipe);
       final TSStatus status = result.getLeft();
       if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
         setFailure(
@@ -142,8 +142,11 @@ public class AlterTableColumnDataTypeProcedure
 
   private void alterColumnDataType(final ConfigNodeProcedureEnv env) {
     final TSStatus status =
-        SchemaUtils.executeInConsensusLayer(
-            new AlterColumnDataTypePlan(database, tableName, columnName, 
dataType), env, LOGGER);
+        env.getConfigManager()
+            .getClusterSchemaManager()
+            .executePlan(
+                new AlterColumnDataTypePlan(database, tableName, columnName, 
dataType),
+                isGeneratedByPipe);
     if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
       setFailure(new ProcedureException(new 
IoTDBException(status.getMessage(), status.getCode())));
     }
diff --git 
a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanSerDeTest.java
 
b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanSerDeTest.java
index 109e3c0d337..f203bd5d77f 100644
--- 
a/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanSerDeTest.java
+++ 
b/iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanSerDeTest.java
@@ -138,6 +138,7 @@ import 
org.apache.iotdb.confignode.consensus.request.write.table.AlterColumnData
 import 
org.apache.iotdb.confignode.consensus.request.write.table.CommitCreateTablePlan;
 import 
org.apache.iotdb.confignode.consensus.request.write.table.CommitDeleteColumnPlan;
 import 
org.apache.iotdb.confignode.consensus.request.write.table.CommitDeleteTablePlan;
+import 
org.apache.iotdb.confignode.consensus.request.write.table.PreAlterColumnDataTypePlan;
 import 
org.apache.iotdb.confignode.consensus.request.write.table.PreCreateTablePlan;
 import 
org.apache.iotdb.confignode.consensus.request.write.table.PreDeleteColumnPlan;
 import 
org.apache.iotdb.confignode.consensus.request.write.table.PreDeleteTablePlan;
@@ -1539,6 +1540,24 @@ public class ConfigPhysicalPlanSerDeTest {
 
   @Test
   public void PreAlterTableColumnDataTypePlanTest() throws IOException {
+    final PreAlterColumnDataTypePlan alterColumnDataTypePlan =
+        new PreAlterColumnDataTypePlan("database1", "table1", "field", 
TSDataType.FLOAT);
+    final PreAlterColumnDataTypePlan alterColumnDataTypePlan1 =
+        (PreAlterColumnDataTypePlan)
+            
ConfigPhysicalPlan.Factory.create(alterColumnDataTypePlan.serializeToByteBuffer());
+    Assert.assertEquals(
+        alterColumnDataTypePlan.getDatabase(), 
alterColumnDataTypePlan1.getDatabase());
+    Assert.assertEquals(
+        alterColumnDataTypePlan.getTableName(), 
alterColumnDataTypePlan1.getTableName());
+    Assert.assertEquals(
+        alterColumnDataTypePlan.getColumnName(), 
alterColumnDataTypePlan1.getColumnName());
+    Assert.assertEquals(alterColumnDataTypePlan.getType(), 
alterColumnDataTypePlan1.getType());
+    Assert.assertEquals(
+        alterColumnDataTypePlan.getNewType(), 
alterColumnDataTypePlan1.getNewType());
+  }
+
+  @Test
+  public void AlterTableColumnDataTypePlanTest() throws IOException {
     final AlterColumnDataTypePlan alterColumnDataTypePlan =
         new AlterColumnDataTypePlan("database1", "table1", "field", 
TSDataType.FLOAT);
     final AlterColumnDataTypePlan alterColumnDataTypePlan1 =

Reply via email to