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 cef2ebb7774 Fixed the bug that tables with executing procedures can be
fetched & Delete database cannot detect table procedures
cef2ebb7774 is described below
commit cef2ebb77749880febebdbb4126af5033cddc731
Author: Caideyipi <[email protected]>
AuthorDate: Tue Oct 29 08:22:13 2024 +0800
Fixed the bug that tables with executing procedures can be fetched & Delete
database cannot detect table procedures
---
.../apache/iotdb/confignode/manager/ProcedureManager.java | 14 ++++++++++----
.../iotdb/db/schemaengine/table/DataNodeTableCache.java | 4 +++-
2 files changed, 13 insertions(+), 5 deletions(-)
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 93eb0f55722..bbbe7214e18 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
@@ -138,6 +138,8 @@ import org.apache.tsfile.utils.ReadWriteIOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import javax.annotation.Nonnull;
+
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
@@ -239,7 +241,7 @@ public class ProcedureManager {
&& System.currentTimeMillis() - startCheckTimeForProcedures <
PROCEDURE_WAIT_TIME_OUT) {
final Pair<Long, Boolean> procedureIdDuplicatePair =
checkDuplicateTableTask(
- database, null, null, null,
ProcedureType.CREATE_TABLE_PROCEDURE);
+ database, null, null, null,
ProcedureType.DELETE_DATABASE_PROCEDURE);
hasOverlappedTask = procedureIdDuplicatePair.getRight();
if (Boolean.FALSE.equals(procedureIdDuplicatePair.getRight())) {
@@ -1587,7 +1589,7 @@ public class ProcedureManager {
}
public Pair<Long, Boolean> checkDuplicateTableTask(
- final String database,
+ final @Nonnull String database,
final TsTable table,
final String tableName,
final String queryId,
@@ -1606,8 +1608,10 @@ public class ProcedureManager {
if (type == thisType && Objects.equals(table,
createTableProcedure.getTable())) {
return new Pair<>(procedure.getProcId(), false);
}
+ // tableName == null indicates delete database procedure
if (database.equals(createTableProcedure.getDatabase())
- && Objects.equals(tableName,
createTableProcedure.getTable().getTableName())) {
+ && (Objects.isNull(tableName)
+ || Objects.equals(tableName,
createTableProcedure.getTable().getTableName()))) {
return new Pair<>(-1L, true);
}
break;
@@ -1621,8 +1625,10 @@ public class ProcedureManager {
if (type == thisType &&
queryId.equals(alterTableProcedure.getQueryId())) {
return new Pair<>(procedure.getProcId(), false);
}
+ // tableName == null indicates delete database procedure
if (database.equals(alterTableProcedure.getDatabase())
- && Objects.equals(tableName,
alterTableProcedure.getTableName())) {
+ && (Objects.isNull(tableName)
+ || Objects.equals(tableName,
alterTableProcedure.getTableName()))) {
return new Pair<>(-1L, true);
}
break;
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/table/DataNodeTableCache.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/table/DataNodeTableCache.java
index 7c77c052bbc..24137f16d52 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/table/DataNodeTableCache.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/table/DataNodeTableCache.java
@@ -268,7 +268,9 @@ public class DataNodeTableCache implements ITableCache {
.fetchTables(
tableInput.entrySet().stream()
.collect(
- Collectors.toMap(Map.Entry::getKey, entry ->
entry.getValue().keySet())));
+ Collectors.toMap(
+ entry ->
PathUtils.qualifyDatabaseName(entry.getKey()),
+ entry -> entry.getValue().keySet())));
if (TSStatusCode.SUCCESS_STATUS.getStatusCode() ==
resp.getStatus().getCode()) {
result =
TsTableInternalRPCUtil.deserializeTsTableFetchResult(resp.getTableInfoMap());
}