Skip to content

Commit 3adba33

Browse files
authored
Fixed alter column type's consensus write (#17483)
* Update AlterTableColumnDataTypeProcedure.java * fix * pre * spls
1 parent bb0f13b commit 3adba33

9 files changed

Lines changed: 104 additions & 14 deletions

File tree

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlan.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@
105105
import org.apache.iotdb.confignode.consensus.request.write.table.CommitCreateTablePlan;
106106
import org.apache.iotdb.confignode.consensus.request.write.table.CommitDeleteColumnPlan;
107107
import org.apache.iotdb.confignode.consensus.request.write.table.CommitDeleteTablePlan;
108+
import org.apache.iotdb.confignode.consensus.request.write.table.PreAlterColumnDataTypePlan;
108109
import org.apache.iotdb.confignode.consensus.request.write.table.PreCreateTablePlan;
109110
import org.apache.iotdb.confignode.consensus.request.write.table.PreDeleteColumnPlan;
110111
import org.apache.iotdb.confignode.consensus.request.write.table.PreDeleteTablePlan;
@@ -445,6 +446,9 @@ public static ConfigPhysicalPlan create(final ByteBuffer buffer) throws IOExcept
445446
case PreDeleteViewColumn:
446447
plan = new PreDeleteViewColumnPlan();
447448
break;
449+
case PreAlterColumnDataType:
450+
plan = new PreAlterColumnDataTypePlan();
451+
break;
448452
case AlterColumnDataType:
449453
plan = new AlterColumnDataTypePlan();
450454
break;

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanType.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,7 @@ public enum ConfigPhysicalPlanType {
230230
PreDeleteView((short) 876),
231231
RenameViewColumn((short) 877),
232232
AlterColumnDataType((short) 878),
233+
PreAlterColumnDataType((short) 879),
233234

234235
/** Deprecated types for sync, restored them for upgrade. */
235236
@Deprecated

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/consensus/request/write/table/AlterColumnDataTypePlan.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,6 @@ protected void deserializeImpl(ByteBuffer buffer) throws IOException {
5353
newType = TSDataType.deserializeFrom(buffer);
5454
}
5555

56-
public void setNewType(TSDataType newType) {
57-
this.newType = newType;
58-
}
59-
6056
public TSDataType getNewType() {
6157
return newType;
6258
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
20+
package org.apache.iotdb.confignode.consensus.request.write.table;
21+
22+
import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlanType;
23+
24+
import org.apache.tsfile.enums.TSDataType;
25+
26+
import java.io.DataOutputStream;
27+
import java.io.IOException;
28+
import java.nio.ByteBuffer;
29+
30+
public class PreAlterColumnDataTypePlan extends AbstractTableColumnPlan {
31+
private TSDataType newType;
32+
33+
public PreAlterColumnDataTypePlan() {
34+
super(ConfigPhysicalPlanType.PreAlterColumnDataType);
35+
}
36+
37+
public PreAlterColumnDataTypePlan(
38+
String database, String tableName, String columnName, TSDataType newType) {
39+
super(ConfigPhysicalPlanType.PreAlterColumnDataType, database, tableName, columnName);
40+
this.newType = newType;
41+
}
42+
43+
@Override
44+
protected void serializeImpl(DataOutputStream stream) throws IOException {
45+
super.serializeImpl(stream);
46+
stream.write(newType.serialize());
47+
}
48+
49+
@Override
50+
protected void deserializeImpl(ByteBuffer buffer) throws IOException {
51+
super.deserializeImpl(buffer);
52+
newType = TSDataType.deserializeFrom(buffer);
53+
}
54+
55+
public TSDataType getNewType() {
56+
return newType;
57+
}
58+
}

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/schema/ClusterSchemaManager.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
import org.apache.iotdb.confignode.consensus.request.write.database.SetSchemaReplicationFactorPlan;
6666
import org.apache.iotdb.confignode.consensus.request.write.database.SetTimePartitionIntervalPlan;
6767
import org.apache.iotdb.confignode.consensus.request.write.pipe.payload.PipeEnrichedPlan;
68+
import org.apache.iotdb.confignode.consensus.request.write.table.PreAlterColumnDataTypePlan;
6869
import org.apache.iotdb.confignode.consensus.request.write.table.SetTableColumnCommentPlan;
6970
import org.apache.iotdb.confignode.consensus.request.write.table.SetTableCommentPlan;
7071
import org.apache.iotdb.confignode.consensus.request.write.table.view.SetViewCommentPlan;
@@ -1392,7 +1393,8 @@ public synchronized Pair<TSStatus, TsTable> tableColumnCheckForColumnAltering(
13921393
final String database,
13931394
final String tableName,
13941395
final String columnName,
1395-
final TSDataType dataType)
1396+
final TSDataType dataType,
1397+
final boolean isGeneratedByPipe)
13961398
throws MetadataException {
13971399
final TsTable originalTable = getTableIfExists(database, tableName).orElse(null);
13981400

@@ -1405,7 +1407,9 @@ public synchronized Pair<TSStatus, TsTable> tableColumnCheckForColumnAltering(
14051407
}
14061408

14071409
TSStatus tsStatus =
1408-
clusterSchemaInfo.preAlterColumnDataType(database, tableName, columnName, dataType);
1410+
executePlan(
1411+
new PreAlterColumnDataTypePlan(database, tableName, columnName, dataType),
1412+
isGeneratedByPipe);
14091413
if (tsStatus.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
14101414
return new Pair<>(tsStatus, null);
14111415
}

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/executor/ConfigPlanExecutor.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@
122122
import org.apache.iotdb.confignode.consensus.request.write.table.CommitCreateTablePlan;
123123
import org.apache.iotdb.confignode.consensus.request.write.table.CommitDeleteColumnPlan;
124124
import org.apache.iotdb.confignode.consensus.request.write.table.CommitDeleteTablePlan;
125+
import org.apache.iotdb.confignode.consensus.request.write.table.PreAlterColumnDataTypePlan;
125126
import org.apache.iotdb.confignode.consensus.request.write.table.PreCreateTablePlan;
126127
import org.apache.iotdb.confignode.consensus.request.write.table.PreDeleteColumnPlan;
127128
import org.apache.iotdb.confignode.consensus.request.write.table.PreDeleteTablePlan;
@@ -600,6 +601,8 @@ public TSStatus executeNonQueryPlan(ConfigPhysicalPlan physicalPlan)
600601
case CommitDeleteTable:
601602
case CommitDeleteView:
602603
return clusterSchemaInfo.dropTable((CommitDeleteTablePlan) physicalPlan);
604+
case PreAlterColumnDataType:
605+
return clusterSchemaInfo.preAlterColumnDataType((PreAlterColumnDataTypePlan) physicalPlan);
603606
case AlterColumnDataType:
604607
return clusterSchemaInfo.commitAlterColumnDataType(
605608
((AlterColumnDataTypePlan) physicalPlan));

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/persistence/schema/ClusterSchemaInfo.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
import org.apache.iotdb.confignode.consensus.request.write.table.CommitCreateTablePlan;
5959
import org.apache.iotdb.confignode.consensus.request.write.table.CommitDeleteColumnPlan;
6060
import org.apache.iotdb.confignode.consensus.request.write.table.CommitDeleteTablePlan;
61+
import org.apache.iotdb.confignode.consensus.request.write.table.PreAlterColumnDataTypePlan;
6162
import org.apache.iotdb.confignode.consensus.request.write.table.PreCreateTablePlan;
6263
import org.apache.iotdb.confignode.consensus.request.write.table.PreDeleteColumnPlan;
6364
import org.apache.iotdb.confignode.consensus.request.write.table.PreDeleteTablePlan;
@@ -105,7 +106,6 @@
105106
import org.apache.iotdb.rpc.TSStatusCode;
106107

107108
import org.apache.tsfile.annotations.TableModel;
108-
import org.apache.tsfile.enums.TSDataType;
109109
import org.apache.tsfile.utils.Pair;
110110
import org.slf4j.Logger;
111111
import org.slf4j.LoggerFactory;
@@ -1547,13 +1547,15 @@ public TSStatus commitDeleteColumn(final CommitDeleteColumnPlan plan) {
15471547
plan.getColumnName()));
15481548
}
15491549

1550-
public TSStatus preAlterColumnDataType(
1551-
String databaseName, String tableName, String columnName, TSDataType dataType) {
1550+
public TSStatus preAlterColumnDataType(final PreAlterColumnDataTypePlan plan) {
15521551
databaseReadWriteLock.writeLock().lock();
15531552
try {
15541553
final TSStatus status = new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
15551554
tableModelMTree.preAlterColumnDataType(
1556-
getQualifiedDatabasePartialPath(databaseName), tableName, columnName, dataType);
1555+
getQualifiedDatabasePartialPath(plan.getDatabase()),
1556+
plan.getTableName(),
1557+
plan.getColumnName(),
1558+
plan.getNewType());
15571559
return status;
15581560
} catch (final MetadataException e) {
15591561
LOGGER.warn(e.getMessage(), e);

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/AlterTableColumnDataTypeProcedure.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import org.apache.iotdb.confignode.consensus.request.write.table.AlterColumnDataTypePlan;
2727
import org.apache.iotdb.confignode.procedure.env.ConfigNodeProcedureEnv;
2828
import org.apache.iotdb.confignode.procedure.exception.ProcedureException;
29-
import org.apache.iotdb.confignode.procedure.impl.schema.SchemaUtils;
3029
import org.apache.iotdb.confignode.procedure.state.schema.AlterTableColumnDataTypeState;
3130
import org.apache.iotdb.confignode.procedure.store.ProcedureType;
3231
import org.apache.iotdb.rpc.TSStatusCode;
@@ -126,7 +125,8 @@ private void checkAndPreAlterColumn(final ConfigNodeProcedureEnv env) {
126125
final Pair<TSStatus, TsTable> result =
127126
env.getConfigManager()
128127
.getClusterSchemaManager()
129-
.tableColumnCheckForColumnAltering(database, tableName, columnName, dataType);
128+
.tableColumnCheckForColumnAltering(
129+
database, tableName, columnName, dataType, isGeneratedByPipe);
130130
final TSStatus status = result.getLeft();
131131
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
132132
setFailure(
@@ -142,8 +142,11 @@ private void checkAndPreAlterColumn(final ConfigNodeProcedureEnv env) {
142142

143143
private void alterColumnDataType(final ConfigNodeProcedureEnv env) {
144144
final TSStatus status =
145-
SchemaUtils.executeInConsensusLayer(
146-
new AlterColumnDataTypePlan(database, tableName, columnName, dataType), env, LOGGER);
145+
env.getConfigManager()
146+
.getClusterSchemaManager()
147+
.executePlan(
148+
new AlterColumnDataTypePlan(database, tableName, columnName, dataType),
149+
isGeneratedByPipe);
147150
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
148151
setFailure(new ProcedureException(new IoTDBException(status.getMessage(), status.getCode())));
149152
}

iotdb-core/confignode/src/test/java/org/apache/iotdb/confignode/consensus/request/ConfigPhysicalPlanSerDeTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@
138138
import org.apache.iotdb.confignode.consensus.request.write.table.CommitCreateTablePlan;
139139
import org.apache.iotdb.confignode.consensus.request.write.table.CommitDeleteColumnPlan;
140140
import org.apache.iotdb.confignode.consensus.request.write.table.CommitDeleteTablePlan;
141+
import org.apache.iotdb.confignode.consensus.request.write.table.PreAlterColumnDataTypePlan;
141142
import org.apache.iotdb.confignode.consensus.request.write.table.PreCreateTablePlan;
142143
import org.apache.iotdb.confignode.consensus.request.write.table.PreDeleteColumnPlan;
143144
import org.apache.iotdb.confignode.consensus.request.write.table.PreDeleteTablePlan;
@@ -1539,6 +1540,24 @@ public void SetTableColumnCommentPlanTest() throws IOException {
15391540

15401541
@Test
15411542
public void PreAlterTableColumnDataTypePlanTest() throws IOException {
1543+
final PreAlterColumnDataTypePlan alterColumnDataTypePlan =
1544+
new PreAlterColumnDataTypePlan("database1", "table1", "field", TSDataType.FLOAT);
1545+
final PreAlterColumnDataTypePlan alterColumnDataTypePlan1 =
1546+
(PreAlterColumnDataTypePlan)
1547+
ConfigPhysicalPlan.Factory.create(alterColumnDataTypePlan.serializeToByteBuffer());
1548+
Assert.assertEquals(
1549+
alterColumnDataTypePlan.getDatabase(), alterColumnDataTypePlan1.getDatabase());
1550+
Assert.assertEquals(
1551+
alterColumnDataTypePlan.getTableName(), alterColumnDataTypePlan1.getTableName());
1552+
Assert.assertEquals(
1553+
alterColumnDataTypePlan.getColumnName(), alterColumnDataTypePlan1.getColumnName());
1554+
Assert.assertEquals(alterColumnDataTypePlan.getType(), alterColumnDataTypePlan1.getType());
1555+
Assert.assertEquals(
1556+
alterColumnDataTypePlan.getNewType(), alterColumnDataTypePlan1.getNewType());
1557+
}
1558+
1559+
@Test
1560+
public void AlterTableColumnDataTypePlanTest() throws IOException {
15421561
final AlterColumnDataTypePlan alterColumnDataTypePlan =
15431562
new AlterColumnDataTypePlan("database1", "table1", "field", TSDataType.FLOAT);
15441563
final AlterColumnDataTypePlan alterColumnDataTypePlan1 =

0 commit comments

Comments
 (0)