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 =