This is an automated email from the ASF dual-hosted git repository.
yashmayya pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git
The following commit(s) were added to refs/heads/master by this push:
new 364e26f05ff Fix table config validation for upsert / dedup tables with
COMPLETED instance partitions (#16787)
364e26f05ff is described below
commit 364e26f05ffc8ca10fcdb42e5d5944f11ef92c6e
Author: Yash Mayya <[email protected]>
AuthorDate: Wed Sep 10 16:33:08 2025 +0530
Fix table config validation for upsert / dedup tables with COMPLETED
instance partitions (#16787)
---
.../segment/local/utils/TableConfigUtils.java | 4 +--
.../segment/local/utils/TableConfigUtilsTest.java | 31 ++++++++++++++++++++++
2 files changed, 33 insertions(+), 2 deletions(-)
diff --git
a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/utils/TableConfigUtils.java
b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/utils/TableConfigUtils.java
index 598b0993201..19ce8c33813 100644
---
a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/utils/TableConfigUtils.java
+++
b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/utils/TableConfigUtils.java
@@ -824,8 +824,8 @@ public final class TableConfigUtils {
Preconditions.checkState(
tableConfig.getInstanceAssignmentConfigMap() == null ||
!tableConfig.getInstanceAssignmentConfigMap()
- .containsKey(InstancePartitionsType.COMPLETED),
- "InstanceAssignmentConfig for COMPLETED is not allowed for upsert
tables");
+ .containsKey(InstancePartitionsType.COMPLETED.name()),
+ "COMPLETED instance partitions can't be configured for upsert / dedup
tables");
validateAggregateMetricsForUpsertConfig(tableConfig);
validateTTLForUpsertConfig(tableConfig, schema);
validateTTLForDedupConfig(tableConfig, schema);
diff --git
a/pinot-segment-local/src/test/java/org/apache/pinot/segment/local/utils/TableConfigUtilsTest.java
b/pinot-segment-local/src/test/java/org/apache/pinot/segment/local/utils/TableConfigUtilsTest.java
index dc34dae4cf8..4f5712ef6fa 100644
---
a/pinot-segment-local/src/test/java/org/apache/pinot/segment/local/utils/TableConfigUtilsTest.java
+++
b/pinot-segment-local/src/test/java/org/apache/pinot/segment/local/utils/TableConfigUtilsTest.java
@@ -2051,6 +2051,37 @@ public class TableConfigUtilsTest {
assertEquals(e.getMessage(), "Invalid tenant tag override used for
Upsert/Dedup table");
}
+ // Instance assignment config with just CONSUMING instance partitions
configured should be allowed
+ InstanceAssignmentConfig instanceAssignmentConfig =
Mockito.mock(InstanceAssignmentConfig.class);
+ tableConfig = new
TableConfigBuilder(TableType.REALTIME).setTableName(TABLE_NAME)
+ .setTimeColumnName(TIME_COLUMN)
+ .setUpsertConfig(new UpsertConfig(UpsertConfig.Mode.FULL))
+ .setStreamConfigs(getStreamConfigs())
+ .setRoutingConfig(
+ new RoutingConfig(null, null,
RoutingConfig.STRICT_REPLICA_GROUP_INSTANCE_SELECTOR_TYPE, false))
+
.setInstanceAssignmentConfigMap(Map.of(InstancePartitionsType.CONSUMING.name(),
instanceAssignmentConfig))
+ .build();
+
+ TableConfigUtils.validateUpsertAndDedupConfig(tableConfig, schema);
+
+ // Instance assignment config with CONSUMING and COMPLETED instance
partitions configured should not be allowed
+ tableConfig = new
TableConfigBuilder(TableType.REALTIME).setTableName(TABLE_NAME)
+ .setTimeColumnName(TIME_COLUMN)
+ .setUpsertConfig(new UpsertConfig(UpsertConfig.Mode.FULL))
+ .setStreamConfigs(getStreamConfigs())
+ .setRoutingConfig(
+ new RoutingConfig(null, null,
RoutingConfig.STRICT_REPLICA_GROUP_INSTANCE_SELECTOR_TYPE, false))
+
.setInstanceAssignmentConfigMap(Map.of(InstancePartitionsType.CONSUMING.name(),
instanceAssignmentConfig,
+ InstancePartitionsType.COMPLETED.name(), instanceAssignmentConfig))
+ .build();
+
+ try {
+ TableConfigUtils.validateUpsertAndDedupConfig(tableConfig, schema);
+ fail("Instance assignment config with COMPLETED instance partitions must
not be allowed with upsert");
+ } catch (IllegalStateException e) {
+ assertEquals(e.getMessage(), "COMPLETED instance partitions can't be
configured for upsert / dedup tables");
+ }
+
// empty tag override with upsert should pass
tableConfig = new
TableConfigBuilder(TableType.REALTIME).setTableName(TABLE_NAME)
.setTimeColumnName(TIME_COLUMN)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]