This is an automated email from the ASF dual-hosted git repository.
jackietien 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 4f9e75f944f Pipe: Fixed the renaming view's concurrency problem
4f9e75f944f is described below
commit 4f9e75f944f0d3ac3250be3e3076cadcfd23d087
Author: Caideyipi <[email protected]>
AuthorDate: Tue Jul 22 18:31:50 2025 +0800
Pipe: Fixed the renaming view's concurrency problem
---
.../iotdb/confignode/manager/ConfigManager.java | 2 +-
.../iotdb/confignode/manager/ProcedureManager.java | 60 +++++++++++++++-------
.../receiver/protocol/IoTDBConfigNodeReceiver.java | 1 +
.../impl/schema/table/RenameTableProcedure.java | 4 ++
4 files changed, 48 insertions(+), 19 deletions(-)
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
index 6ad2d87fe6f..b76ad38c2ba 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
@@ -2909,7 +2909,7 @@ public class ConfigManager implements IManager {
table ->
procedureManager
.checkDuplicateTableTask(
- entry.getKey(), null, table, null,
null)
+ entry.getKey(), null, table, null,
null, null)
.getRight());
return true;
})
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ProcedureManager.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ProcedureManager.java
index bac74158cd6..9a5feb0b407 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ProcedureManager.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ProcedureManager.java
@@ -268,7 +268,7 @@ public class ProcedureManager {
&& System.currentTimeMillis() - startCheckTimeForProcedures <
PROCEDURE_WAIT_TIME_OUT) {
final Pair<Long, Boolean> procedureIdDuplicatePair =
checkDuplicateTableTask(
- database, null, null, null,
ProcedureType.DELETE_DATABASE_PROCEDURE);
+ database, null, null, null, null,
ProcedureType.DELETE_DATABASE_PROCEDURE);
hasOverlappedTask = procedureIdDuplicatePair.getRight();
if (Boolean.FALSE.equals(procedureIdDuplicatePair.getRight())) {
@@ -1960,25 +1960,17 @@ public class ProcedureManager {
public TSStatus renameTable(final TAlterOrDropTableReq req) {
final boolean isView = req.isSetIsView() && req.isIsView();
+ final String newName = ReadWriteIOUtils.readString(req.updateInfo);
return executeWithoutDuplicate(
req.database,
null,
req.tableName,
+ newName,
req.queryId,
isView ? ProcedureType.RENAME_VIEW_PROCEDURE :
ProcedureType.RENAME_TABLE_PROCEDURE,
isView
- ? new RenameViewProcedure(
- req.database,
- req.tableName,
- req.queryId,
- ReadWriteIOUtils.readString(req.updateInfo),
- false)
- : new RenameTableProcedure(
- req.database,
- req.tableName,
- req.queryId,
- ReadWriteIOUtils.readString(req.updateInfo),
- false));
+ ? new RenameViewProcedure(req.database, req.tableName,
req.queryId, newName, false)
+ : new RenameTableProcedure(req.database, req.tableName,
req.queryId, newName, false));
}
public TDeleteTableDeviceResp deleteDevices(
@@ -1992,6 +1984,7 @@ public class ProcedureManager {
req.database,
null,
req.tableName,
+ null,
req.queryId,
ProcedureType.DELETE_DEVICES_PROCEDURE);
procedureId = procedureIdDuplicatePair.getLeft();
@@ -2036,10 +2029,21 @@ public class ProcedureManager {
final String queryId,
final ProcedureType thisType,
final Procedure<ConfigNodeProcedureEnv> procedure) {
+ return executeWithoutDuplicate(database, table, tableName, null, queryId,
thisType, procedure);
+ }
+
+ public TSStatus executeWithoutDuplicate(
+ final String database,
+ final TsTable table,
+ final String tableName,
+ final @Nullable String newName,
+ final String queryId,
+ final ProcedureType thisType,
+ final Procedure<ConfigNodeProcedureEnv> procedure) {
final long procedureId;
synchronized (this) {
final Pair<Long, Boolean> procedureIdDuplicatePair =
- checkDuplicateTableTask(database, table, tableName, queryId,
thisType);
+ checkDuplicateTableTask(database, table, tableName, newName,
queryId, thisType);
procedureId = procedureIdDuplicatePair.getLeft();
if (procedureId == -1) {
@@ -2060,6 +2064,7 @@ public class ProcedureManager {
final @Nonnull String database,
final TsTable table,
final String tableName,
+ final String newName,
final String queryId,
final ProcedureType thisType) {
ProcedureType type;
@@ -2080,7 +2085,9 @@ public class ProcedureManager {
// tableName == null indicates delete database procedure
if (database.equals(createTableProcedure.getDatabase())
&& (Objects.isNull(tableName)
- || Objects.equals(tableName,
createTableProcedure.getTable().getTableName()))) {
+ || Objects.equals(tableName,
createTableProcedure.getTable().getTableName())
+ || Objects.nonNull(newName)
+ && Objects.equals(newName,
createTableProcedure.getTable().getTableName()))) {
return new Pair<>(-1L, true);
}
break;
@@ -2095,8 +2102,6 @@ public class ProcedureManager {
case DROP_TABLE_PROCEDURE:
case DROP_VIEW_PROCEDURE:
case DELETE_DEVICES_PROCEDURE:
- case RENAME_TABLE_PROCEDURE:
- case RENAME_VIEW_PROCEDURE:
final AbstractAlterOrDropTableProcedure<?> alterTableProcedure =
(AbstractAlterOrDropTableProcedure<?>) procedure;
if (type == thisType &&
queryId.equals(alterTableProcedure.getQueryId())) {
@@ -2105,7 +2110,26 @@ public class ProcedureManager {
// tableName == null indicates delete database procedure
if (database.equals(alterTableProcedure.getDatabase())
&& (Objects.isNull(tableName)
- || Objects.equals(tableName,
alterTableProcedure.getTableName()))) {
+ || Objects.equals(tableName,
alterTableProcedure.getTableName())
+ || Objects.nonNull(newName)
+ && Objects.equals(newName,
alterTableProcedure.getTableName()))) {
+ return new Pair<>(-1L, true);
+ }
+ break;
+ case RENAME_TABLE_PROCEDURE:
+ case RENAME_VIEW_PROCEDURE:
+ final RenameTableProcedure renameTableProcedure =
(RenameTableProcedure) procedure;
+ if (type == thisType &&
queryId.equals(renameTableProcedure.getQueryId())) {
+ return new Pair<>(procedure.getProcId(), false);
+ }
+ // tableName == null indicates delete database procedure
+ if (database.equals(renameTableProcedure.getDatabase())
+ && (Objects.isNull(tableName)
+ || Objects.equals(tableName,
renameTableProcedure.getTableName())
+ || Objects.equals(tableName,
renameTableProcedure.getNewName())
+ || Objects.nonNull(newName)
+ && (Objects.equals(newName,
renameTableProcedure.getTableName())
+ || Objects.equals(newName,
renameTableProcedure.getNewName())))) {
return new Pair<>(-1L, true);
}
break;
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/receiver/protocol/IoTDBConfigNodeReceiver.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/receiver/protocol/IoTDBConfigNodeReceiver.java
index 6c177abbf86..6ed7abb2b65 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/receiver/protocol/IoTDBConfigNodeReceiver.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/pipe/receiver/protocol/IoTDBConfigNodeReceiver.java
@@ -846,6 +846,7 @@ public class IoTDBConfigNodeReceiver extends
IoTDBFileReceiver {
((RenameTablePlan) plan).getDatabase(),
null,
((RenameTablePlan) plan).getTableName(),
+ ((RenameTablePlan) plan).getNewName(),
queryId,
ProcedureType.RENAME_TABLE_PROCEDURE,
new RenameTableProcedure(
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/RenameTableProcedure.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/RenameTableProcedure.java
index a0a5e109534..1e5dc24781c 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/RenameTableProcedure.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/RenameTableProcedure.java
@@ -179,6 +179,10 @@ public class RenameTableProcedure extends
AbstractAlterOrDropTableProcedure<Rena
}
}
+ public String getNewName() {
+ return newName;
+ }
+
@Override
protected RenameTableState getState(final int stateId) {
return RenameTableState.values()[stateId];