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")