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]

Reply via email to