This is an automated email from the ASF dual-hosted git repository.
tanxinyu 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 b6fea634d61 Add some supplementary logs during partition allocation
(#15234)
b6fea634d61 is described below
commit b6fea634d6199062dc0211cdd6a189625fa59b80
Author: Yongzao <[email protected]>
AuthorDate: Mon Mar 31 20:15:13 2025 +0800
Add some supplementary logs during partition allocation (#15234)
* finished
* add database not exists exception
* Update
iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java
Co-authored-by: Copilot <[email protected]>
* Update
iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java
Co-authored-by: Copilot <[email protected]>
---------
Co-authored-by: Copilot <[email protected]>
---
.../manager/partition/PartitionManager.java | 67 ++++++++++++++++++----
.../impl/schema/DeleteDatabaseProcedure.java | 4 +-
2 files changed, 60 insertions(+), 11 deletions(-)
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java
index 29afb2c2c1a..fa051b74155 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java
@@ -110,10 +110,12 @@ import java.util.Objects;
import java.util.Optional;
import java.util.Queue;
import java.util.Set;
+import java.util.StringJoiner;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Future;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
@@ -248,6 +250,21 @@ public class PartitionManager {
return resp;
}
+ // Here we check if the related Databases exist again,
+ // due to we don't have a transaction mechanism.
+ for (final String database : req.getPartitionSlotsMap().keySet()) {
+ if (!isDatabaseExist(database)) {
+ return new SchemaPartitionResp(
+ new TSStatus(TSStatusCode.DATABASE_NOT_EXIST.getStatusCode())
+ .setMessage(
+ String.format(
+ "Create SchemaPartition failed because the database:
%s does not exist",
+ database)),
+ false,
+ null);
+ }
+ }
+
// Filter unassigned SchemaPartitionSlots
final Map<String, List<TSeriesPartitionSlot>>
unassignedSchemaPartitionSlotsMap =
partitionInfo.filterUnassignedSchemaPartitionSlots(req.getPartitionSlotsMap());
@@ -311,14 +328,19 @@ public class PartitionManager {
final AtomicInteger unassignedSlotNum = new AtomicInteger();
final Map<String, List<TSeriesPartitionSlot>>
unassignedSchemaPartitionSlotsMap =
partitionInfo.filterUnassignedSchemaPartitionSlots(req.getPartitionSlotsMap());
+ StringJoiner errDatabases = new StringJoiner(", ", "[", "]");
unassignedSchemaPartitionSlotsMap.forEach(
- (database, unassignedSchemaPartitionSlots) ->
-
unassignedSlotNum.addAndGet(unassignedSchemaPartitionSlots.size()));
+ (database, unassignedSchemaPartitionSlots) -> {
+ if (!unassignedSchemaPartitionSlots.isEmpty()) {
+ errDatabases.add(database);
+
unassignedSlotNum.addAndGet(unassignedSchemaPartitionSlots.size());
+ }
+ });
final String errMsg =
String.format(
- "Lacked %d/%d SchemaPartition allocation result in the response
of getOrCreateSchemaPartition method",
- unassignedSlotNum.get(), totalSlotNum.get());
+ "Lacked %d/%d SchemaPartition allocation result when get or
create schema partitions for databases: %s",
+ unassignedSlotNum.get(), totalSlotNum.get(), errDatabases);
LOGGER.error(errMsg);
resp.setStatus(
new
TSStatus(TSStatusCode.LACK_PARTITION_ALLOCATION.getStatusCode()).setMessage(errMsg));
@@ -373,6 +395,21 @@ public class PartitionManager {
return resp;
}
+ // Here we check if the related Databases exist again,
+ // due to we don't have a transaction mechanism.
+ for (final String database : req.getPartitionSlotsMap().keySet()) {
+ if (!isDatabaseExist(database)) {
+ return new DataPartitionResp(
+ new TSStatus(TSStatusCode.DATABASE_NOT_EXIST.getStatusCode())
+ .setMessage(
+ String.format(
+ "Create DataPartition failed because the database:
%s does not exist",
+ database)),
+ false,
+ null);
+ }
+ }
+
// Filter unassigned DataPartitionSlots
Map<String, Map<TSeriesPartitionSlot, TTimeSlotList>>
unassignedDataPartitionSlotsMap =
partitionInfo.filterUnassignedDataPartitionSlots(req.getPartitionSlotsMap());
@@ -446,16 +483,26 @@ public class PartitionManager {
AtomicInteger unassignedSlotNum = new AtomicInteger();
Map<String, Map<TSeriesPartitionSlot, TTimeSlotList>>
unassignedDataPartitionSlotsMap =
partitionInfo.filterUnassignedDataPartitionSlots(req.getPartitionSlotsMap());
+ StringJoiner errDatabases = new StringJoiner(", ", "[", "]");
unassignedDataPartitionSlotsMap.forEach(
- (database, unassignedDataPartitionSlots) ->
- unassignedDataPartitionSlots.forEach(
- (seriesPartitionSlot, timeSlotList) ->
-
unassignedSlotNum.addAndGet(timeSlotList.getTimePartitionSlots().size())));
+ (database, unassignedDataPartitionSlots) -> {
+ AtomicBoolean hasUnassignedSlot = new AtomicBoolean(false);
+ unassignedDataPartitionSlots.forEach(
+ (seriesPartitionSlot, timeSlotList) -> {
+ if (!timeSlotList.getTimePartitionSlots().isEmpty()) {
+ hasUnassignedSlot.set(true);
+
unassignedSlotNum.addAndGet(timeSlotList.getTimePartitionSlots().size());
+ }
+ });
+ if (hasUnassignedSlot.get()) {
+ errDatabases.add(database);
+ }
+ });
String errMsg =
String.format(
- "Lacked %d/%d DataPartition allocation result in the response of
getOrCreateDataPartition method",
- unassignedSlotNum.get(), totalSlotNum.get());
+ "Lacked %d/%d DataPartition allocation result when get or create
data partitions for databases: %s",
+ unassignedSlotNum.get(), totalSlotNum.get(), errDatabases);
LOGGER.error(errMsg);
resp.setStatus(
new
TSStatus(TSStatusCode.LACK_PARTITION_ALLOCATION.getStatusCode()).setMessage(errMsg));
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteDatabaseProcedure.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteDatabaseProcedure.java
index 5fc81587163..652ccc75a24 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteDatabaseProcedure.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/DeleteDatabaseProcedure.java
@@ -197,7 +197,9 @@ public class DeleteDatabaseProcedure
env.getConfigManager()
.getLoadManager()
.clearDataPartitionPolicyTable(deleteDatabaseSchema.getName());
- LOG.info("data partition policy table cleared.");
+ LOG.info(
+ "[DeleteDatabaseProcedure] The data partition policy table of
database: {} is cleared.",
+ deleteDatabaseSchema.getName());
// Delete Database metrics
PartitionMetrics.unbindDatabaseRelatedMetricsWhenUpdate(