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

yihua pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hudi.git


The following commit(s) were added to refs/heads/master by this push:
     new 22a55c6d176f feat: Support MDT compaction configs of frequency seconds 
and trigger strategy (#17603)
22a55c6d176f is described below

commit 22a55c6d176f0513f57b5276ab9173b3ccaa79a0
Author: Krishen <[email protected]>
AuthorDate: Fri Dec 19 21:02:18 2025 -0800

    feat: Support MDT compaction configs of frequency seconds and trigger 
strategy (#17603)
    
    Co-authored-by: Krishen Bhan <“[email protected]”>
    Co-authored-by: Y Ethan Guo <[email protected]>
---
 .../org/apache/hudi/config/HoodieWriteConfig.java    |  8 ++++++++
 .../hudi/metadata/HoodieMetadataWriteUtils.java      |  3 +++
 .../hudi/common/config/HoodieMetadataConfig.java     | 20 ++++++++++++++++++++
 3 files changed, 31 insertions(+)

diff --git 
a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/HoodieWriteConfig.java
 
b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/HoodieWriteConfig.java
index 52d50814835e..2dd08b72671a 100644
--- 
a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/HoodieWriteConfig.java
+++ 
b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/config/HoodieWriteConfig.java
@@ -2618,6 +2618,14 @@ public class HoodieWriteConfig extends HoodieConfig {
     return getInt(HoodieMetadataConfig.COMPACT_NUM_DELTA_COMMITS);
   }
 
+  public String getMetadataCompactionTriggerStrategy() {
+    return getString(HoodieMetadataConfig.COMPACT_TRIGGER_STRATEGY);
+  }
+
+  public int getMetadataMaxDeltaSecondsBeforeCompaction() {
+    return getInt(HoodieMetadataConfig.COMPACT_TIME_DELTA_SECONDS);
+  }
+
   public boolean isMetadataAsyncIndex() {
     return getBooleanOrDefault(HoodieMetadataConfig.ASYNC_INDEX_ENABLE);
   }
diff --git 
a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/metadata/HoodieMetadataWriteUtils.java
 
b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/metadata/HoodieMetadataWriteUtils.java
index c970e0d1361c..a3e955709ffa 100644
--- 
a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/metadata/HoodieMetadataWriteUtils.java
+++ 
b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/metadata/HoodieMetadataWriteUtils.java
@@ -75,6 +75,7 @@ import org.apache.hudi.exception.HoodieMetadataException;
 import org.apache.hudi.stats.HoodieColumnRangeMetadata;
 import org.apache.hudi.storage.StoragePath;
 import org.apache.hudi.storage.StoragePathInfo;
+import org.apache.hudi.table.action.compact.CompactionTriggerStrategy;
 import 
org.apache.hudi.table.action.compact.strategy.UnBoundedCompactionStrategy;
 import org.apache.hudi.util.Lazy;
 
@@ -219,6 +220,8 @@ public class HoodieMetadataWriteUtils {
             
.withLogCompactionEnabled(writeConfig.isLogCompactionEnabledOnMetadata())
             // Below config is only used if isLogCompactionEnabled is set.
             
.withLogCompactionBlocksThreshold(writeConfig.getMetadataLogCompactBlocksThreshold())
+            
.withInlineCompactionTriggerStrategy(CompactionTriggerStrategy.valueOf(writeConfig.getMetadataCompactionTriggerStrategy()))
+            
.withMaxDeltaSecondsBeforeCompaction(writeConfig.getMetadataMaxDeltaSecondsBeforeCompaction())
             .build())
         
.withStorageConfig(HoodieStorageConfig.newBuilder().hfileMaxFileSize(MDT_MAX_HFILE_SIZE_BYTES)
             .logFileMaxSize(maxLogFileSizeBytes)
diff --git 
a/hudi-common/src/main/java/org/apache/hudi/common/config/HoodieMetadataConfig.java
 
b/hudi-common/src/main/java/org/apache/hudi/common/config/HoodieMetadataConfig.java
index ba5152440467..ec688f7768d6 100644
--- 
a/hudi-common/src/main/java/org/apache/hudi/common/config/HoodieMetadataConfig.java
+++ 
b/hudi-common/src/main/java/org/apache/hudi/common/config/HoodieMetadataConfig.java
@@ -116,6 +116,26 @@ public final class HoodieMetadataConfig extends 
HoodieConfig {
       .sinceVersion("0.7.0")
       .withDocumentation("Controls how often the metadata table is 
compacted.");
 
+  // Max number of seconds before compaction occurs
+  public static final ConfigProperty<String> COMPACT_TIME_DELTA_SECONDS = 
ConfigProperty
+      .key(METADATA_PREFIX + ".compact.max.delta.seconds")
+      .defaultValue(String.valueOf(2 * 60 * 60))
+      .markAdvanced()
+      .sinceVersion("1.2.0")
+      .withDocumentation("Number of elapsed seconds after the last compaction, 
before scheduling a "
+      + "new one (for metadata table). "
+      + "This config takes effect only for the compaction triggering strategy 
based on the elapsed time, "
+      + "i.e., TIME_ELAPSED, NUM_AND_TIME, and NUM_OR_TIME.");
+
+  // Compaction trigger strategy
+  public static final ConfigProperty<String> COMPACT_TRIGGER_STRATEGY = 
ConfigProperty
+      .key(METADATA_PREFIX +  ".compact.trigger.strategy")
+      .defaultValue("NUM_COMMITS")
+      .markAdvanced()
+      .sinceVersion("1.2.0")
+      .withDocumentation("Controls how compaction scheduling is triggered for 
metadata table,"
+      + "by time or num delta commits or combination of both. ");
+
   public static final ConfigProperty<String> 
ENABLE_LOG_COMPACTION_ON_METADATA_TABLE = ConfigProperty
       .key(METADATA_PREFIX + ".log.compaction.enable")
       .defaultValue("false")

Reply via email to