This is an automated email from the ASF dual-hosted git repository. justinchen pushed a commit to branch fix-alter-column-type in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit fdb73f817aa9ab749a3220c88c0f1f7f72a63e82 Author: Caideyipi <[email protected]> AuthorDate: Wed Apr 15 10:51:12 2026 +0800 fix --- .../consensus/request/ConfigPhysicalPlanType.java | 1 + .../request/write/table/AlterColumnDataTypePlan.java | 4 ---- ...nDataTypePlan.java => PreAlterColumnDataTypePlan.java} | 15 +++++---------- .../confignode/manager/schema/ClusterSchemaManager.java | 8 ++++++-- .../persistence/executor/ConfigPlanExecutor.java | 3 +++ .../confignode/persistence/schema/ClusterSchemaInfo.java | 10 ++++++---- .../schema/table/AlterTableColumnDataTypeProcedure.java | 3 ++- 7 files changed, 23 insertions(+), 21 deletions(-) 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 bdfc314c49a..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 @@ -125,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(
