This is an automated email from the ASF dual-hosted git repository.

jackie 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 86a82dd410 Extend to add Default Server level configs for Dedup Tables 
(#14684)
86a82dd410 is described below

commit 86a82dd410328265a2aadd2282a79af1e13f6182
Author: Chaitanya Deepthi <[email protected]>
AuthorDate: Thu Dec 26 18:27:36 2024 -0800

    Extend to add Default Server level configs for Dedup Tables (#14684)
---
 .../manager/realtime/RealtimeTableDataManager.java    |  3 ++-
 .../tests/DedupPreloadIntegrationTest.java            |  6 ++++++
 .../local/dedup/TableDedupMetadataManagerFactory.java | 19 ++++++++++++++++++-
 .../dedup/TableDedupMetadataManagerFactoryTest.java   |  5 +++--
 .../mutable/MutableSegmentDedupeTest.java             |  2 +-
 .../starter/helix/HelixInstanceDataManagerConfig.java |  9 +++++++++
 .../config/instance/InstanceDataManagerConfig.java    |  2 ++
 .../apache/pinot/spi/config/table/DedupConfig.java    |  6 +++++-
 8 files changed, 46 insertions(+), 6 deletions(-)

diff --git 
a/pinot-core/src/main/java/org/apache/pinot/core/data/manager/realtime/RealtimeTableDataManager.java
 
b/pinot-core/src/main/java/org/apache/pinot/core/data/manager/realtime/RealtimeTableDataManager.java
index 2b4778d390..7cb1a7a5bd 100644
--- 
a/pinot-core/src/main/java/org/apache/pinot/core/data/manager/realtime/RealtimeTableDataManager.java
+++ 
b/pinot-core/src/main/java/org/apache/pinot/core/data/manager/realtime/RealtimeTableDataManager.java
@@ -194,7 +194,8 @@ public class RealtimeTableDataManager extends 
BaseTableDataManager {
       List<String> primaryKeyColumns = schema.getPrimaryKeyColumns();
       Preconditions.checkState(!CollectionUtils.isEmpty(primaryKeyColumns),
           "Primary key columns must be configured for dedup");
-      _tableDedupMetadataManager = 
TableDedupMetadataManagerFactory.create(_tableConfig, schema, this, 
_serverMetrics);
+      _tableDedupMetadataManager = 
TableDedupMetadataManagerFactory.create(_tableConfig, schema, this, 
_serverMetrics,
+          _instanceDataManagerConfig.getDedupConfig());
     }
 
     UpsertConfig upsertConfig = _tableConfig.getUpsertConfig();
diff --git 
a/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/DedupPreloadIntegrationTest.java
 
b/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/DedupPreloadIntegrationTest.java
index c2589bb520..ecba432455 100644
--- 
a/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/DedupPreloadIntegrationTest.java
+++ 
b/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/DedupPreloadIntegrationTest.java
@@ -18,12 +18,15 @@
  */
 package org.apache.pinot.integration.tests;
 
+import com.google.common.base.Joiner;
 import java.io.File;
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import org.apache.commons.io.FileUtils;
+import org.apache.pinot.segment.local.dedup.TableDedupMetadataManagerFactory;
+import org.apache.pinot.server.starter.helix.HelixInstanceDataManagerConfig;
 import org.apache.pinot.spi.config.table.ColumnPartitionConfig;
 import org.apache.pinot.spi.config.table.DedupConfig;
 import org.apache.pinot.spi.config.table.HashFunction;
@@ -76,6 +79,9 @@ public class DedupPreloadIntegrationTest extends 
BaseClusterIntegrationTestSet {
   protected void overrideServerConf(PinotConfiguration serverConf) {
     
serverConf.setProperty(CommonConstants.Server.INSTANCE_DATA_MANAGER_CONFIG_PREFIX
 + ".max.segment.preload.threads",
         "1");
+    
serverConf.setProperty(Joiner.on(".").join(CommonConstants.Server.INSTANCE_DATA_MANAGER_CONFIG_PREFIX,
+        HelixInstanceDataManagerConfig.DEDUP_CONFIG_PREFIX,
+        TableDedupMetadataManagerFactory.DEDUP_DEFAULT_ENABLE_PRELOAD), 
"true");
   }
 
   @AfterClass
diff --git 
a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/dedup/TableDedupMetadataManagerFactory.java
 
b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/dedup/TableDedupMetadataManagerFactory.java
index 7f1aa2d42d..a94b4385a5 100644
--- 
a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/dedup/TableDedupMetadataManagerFactory.java
+++ 
b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/dedup/TableDedupMetadataManagerFactory.java
@@ -19,12 +19,14 @@
 package org.apache.pinot.segment.local.dedup;
 
 import com.google.common.base.Preconditions;
+import javax.annotation.Nullable;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.pinot.common.metrics.ServerMetrics;
 import org.apache.pinot.segment.local.data.manager.TableDataManager;
 import org.apache.pinot.spi.config.table.DedupConfig;
 import org.apache.pinot.spi.config.table.TableConfig;
 import org.apache.pinot.spi.data.Schema;
+import org.apache.pinot.spi.env.PinotConfiguration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -34,15 +36,30 @@ public class TableDedupMetadataManagerFactory {
   }
 
   private static final Logger LOGGER = 
LoggerFactory.getLogger(TableDedupMetadataManagerFactory.class);
+  public static final String DEDUP_DEFAULT_METADATA_MANAGER_CLASS = 
"default.metadata.manager.class";
+  public static final String DEDUP_DEFAULT_ENABLE_PRELOAD = 
"default.enable.preload";
 
   public static TableDedupMetadataManager create(TableConfig tableConfig, 
Schema schema,
-      TableDataManager tableDataManager, ServerMetrics serverMetrics) {
+      TableDataManager tableDataManager, ServerMetrics serverMetrics,
+      @Nullable PinotConfiguration instanceDedupConfig) {
     String tableNameWithType = tableConfig.getTableName();
     DedupConfig dedupConfig = tableConfig.getDedupConfig();
     Preconditions.checkArgument(dedupConfig != null, "Must provide dedup 
config for table: %s", tableNameWithType);
 
     TableDedupMetadataManager metadataManager;
     String metadataManagerClass = dedupConfig.getMetadataManagerClass();
+
+    if (instanceDedupConfig != null) {
+      if (metadataManagerClass == null) {
+        metadataManagerClass = 
instanceDedupConfig.getProperty(DEDUP_DEFAULT_METADATA_MANAGER_CLASS);
+      }
+
+      // Server level config honoured only when table level config is not set 
to true
+      if (!dedupConfig.isEnablePreload()) {
+        dedupConfig.setEnablePreload(
+            
Boolean.parseBoolean(instanceDedupConfig.getProperty(DEDUP_DEFAULT_ENABLE_PRELOAD,
 "false")));
+      }
+    }
     if (StringUtils.isNotEmpty(metadataManagerClass)) {
       LOGGER.info("Creating TableDedupMetadataManager with class: {} for 
table: {}", metadataManagerClass,
           tableNameWithType);
diff --git 
a/pinot-segment-local/src/test/java/org/apache/pinot/segment/local/dedup/TableDedupMetadataManagerFactoryTest.java
 
b/pinot-segment-local/src/test/java/org/apache/pinot/segment/local/dedup/TableDedupMetadataManagerFactoryTest.java
index f3247c8227..3f2fe600cf 100644
--- 
a/pinot-segment-local/src/test/java/org/apache/pinot/segment/local/dedup/TableDedupMetadataManagerFactoryTest.java
+++ 
b/pinot-segment-local/src/test/java/org/apache/pinot/segment/local/dedup/TableDedupMetadataManagerFactoryTest.java
@@ -54,7 +54,7 @@ public class TableDedupMetadataManagerFactoryTest {
     when(tableDataManager.getTableDataDir()).thenReturn(new File("mytable"));
     when(tableDataManager.getSegmentPreloadExecutor()).thenReturn(null);
     TableDedupMetadataManager tableDedupMetadataManager =
-        TableDedupMetadataManagerFactory.create(tableConfig, schema, 
tableDataManager, null);
+        TableDedupMetadataManagerFactory.create(tableConfig, schema, 
tableDataManager, null, null);
     assertNotNull(tableDedupMetadataManager);
     assertFalse(tableDedupMetadataManager.isEnablePreload());
 
@@ -62,7 +62,8 @@ public class TableDedupMetadataManagerFactoryTest {
     tableDataManager = mock(TableDataManager.class);
     when(tableDataManager.getTableDataDir()).thenReturn(new File("mytable"));
     
when(tableDataManager.getSegmentPreloadExecutor()).thenReturn(mock(ExecutorService.class));
-    tableDedupMetadataManager = 
TableDedupMetadataManagerFactory.create(tableConfig, schema, tableDataManager, 
null);
+    tableDedupMetadataManager = 
TableDedupMetadataManagerFactory.create(tableConfig, schema, tableDataManager, 
null,
+        null);
     assertNotNull(tableDedupMetadataManager);
   }
 }
diff --git 
a/pinot-segment-local/src/test/java/org/apache/pinot/segment/local/indexsegment/mutable/MutableSegmentDedupeTest.java
 
b/pinot-segment-local/src/test/java/org/apache/pinot/segment/local/indexsegment/mutable/MutableSegmentDedupeTest.java
index b4544979e3..bb21b7b11c 100644
--- 
a/pinot-segment-local/src/test/java/org/apache/pinot/segment/local/indexsegment/mutable/MutableSegmentDedupeTest.java
+++ 
b/pinot-segment-local/src/test/java/org/apache/pinot/segment/local/indexsegment/mutable/MutableSegmentDedupeTest.java
@@ -98,7 +98,7 @@ public class MutableSegmentDedupeTest {
     TableDataManager tableDataManager = Mockito.mock(TableDataManager.class);
     Mockito.when(tableDataManager.getTableDataDir()).thenReturn(TEMP_DIR);
     return TableDedupMetadataManagerFactory.create(tableConfig, schema, 
tableDataManager,
-        Mockito.mock(ServerMetrics.class));
+        Mockito.mock(ServerMetrics.class), null);
   }
 
   public List<Map<String, String>> loadJsonFile(String filePath)
diff --git 
a/pinot-server/src/main/java/org/apache/pinot/server/starter/helix/HelixInstanceDataManagerConfig.java
 
b/pinot-server/src/main/java/org/apache/pinot/server/starter/helix/HelixInstanceDataManagerConfig.java
index aade26f339..b666d990f0 100644
--- 
a/pinot-server/src/main/java/org/apache/pinot/server/starter/helix/HelixInstanceDataManagerConfig.java
+++ 
b/pinot-server/src/main/java/org/apache/pinot/server/starter/helix/HelixInstanceDataManagerConfig.java
@@ -49,6 +49,8 @@ public class HelixInstanceDataManagerConfig implements 
InstanceDataManagerConfig
   public static final String SEGMENT_DIRECTORY_LOADER = 
"segment.directory.loader";
   // Prefix for upsert config
   public static final String UPSERT_CONFIG_PREFIX = "upsert";
+  // Prefix for dedup config
+  public static final String DEDUP_CONFIG_PREFIX = "dedup";
   // Prefix for auth config
   public static final String AUTH_CONFIG_PREFIX = "auth";
   // Prefix for tier configs
@@ -118,6 +120,7 @@ public class HelixInstanceDataManagerConfig implements 
InstanceDataManagerConfig
 
   private final PinotConfiguration _serverConfig;
   private final PinotConfiguration _upsertConfig;
+  private final PinotConfiguration _dedupConfig;
   private final PinotConfiguration _authConfig;
   private final Map<String, Map<String, String>> _tierConfigs;
 
@@ -133,6 +136,7 @@ public class HelixInstanceDataManagerConfig implements 
InstanceDataManagerConfig
 
     _authConfig = serverConfig.subset(AUTH_CONFIG_PREFIX);
     _upsertConfig = serverConfig.subset(UPSERT_CONFIG_PREFIX);
+    _dedupConfig = serverConfig.subset(DEDUP_CONFIG_PREFIX);
 
     PinotConfiguration tierConfigs = getConfig().subset(TIER_CONFIGS_PREFIX);
     List<String> tierNames = tierConfigs.getProperty(TIER_NAMES, 
Collections.emptyList());
@@ -289,6 +293,11 @@ public class HelixInstanceDataManagerConfig implements 
InstanceDataManagerConfig
     return _upsertConfig;
   }
 
+  @Override
+  public PinotConfiguration getDedupConfig() {
+    return _dedupConfig;
+  }
+
   @Override
   public PinotConfiguration getAuthConfig() {
     return _authConfig;
diff --git 
a/pinot-spi/src/main/java/org/apache/pinot/spi/config/instance/InstanceDataManagerConfig.java
 
b/pinot-spi/src/main/java/org/apache/pinot/spi/config/instance/InstanceDataManagerConfig.java
index 52e9b6f9f2..64d8de88b2 100644
--- 
a/pinot-spi/src/main/java/org/apache/pinot/spi/config/instance/InstanceDataManagerConfig.java
+++ 
b/pinot-spi/src/main/java/org/apache/pinot/spi/config/instance/InstanceDataManagerConfig.java
@@ -73,6 +73,8 @@ public interface InstanceDataManagerConfig {
 
   PinotConfiguration getUpsertConfig();
 
+  PinotConfiguration getDedupConfig();
+
   PinotConfiguration getAuthConfig();
 
   Map<String, Map<String, String>> getTierConfigs();
diff --git 
a/pinot-spi/src/main/java/org/apache/pinot/spi/config/table/DedupConfig.java 
b/pinot-spi/src/main/java/org/apache/pinot/spi/config/table/DedupConfig.java
index dfc8151e35..b1e6caec30 100644
--- a/pinot-spi/src/main/java/org/apache/pinot/spi/config/table/DedupConfig.java
+++ b/pinot-spi/src/main/java/org/apache/pinot/spi/config/table/DedupConfig.java
@@ -45,7 +45,7 @@ public class DedupConfig extends BaseJsonConfig {
   private final String _dedupTimeColumn;
 
   @JsonPropertyDescription("Whether to preload segments for fast dedup 
metadata recovery")
-  private final boolean _enablePreload;
+  private boolean _enablePreload;
 
   public DedupConfig(@JsonProperty(value = "dedupEnabled", required = true) 
boolean dedupEnabled,
       @JsonProperty(value = "hashFunction") HashFunction hashFunction) {
@@ -96,4 +96,8 @@ public class DedupConfig extends BaseJsonConfig {
   public boolean isEnablePreload() {
     return _enablePreload;
   }
+
+  public void setEnablePreload(boolean enablePreload) {
+    _enablePreload = enablePreload;
+  }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to