This is an automated email from the ASF dual-hosted git repository. danny0405 pushed a commit to branch release-1.1.2 in repository https://gitbox.apache.org/repos/asf/hudi.git
commit a36beef4c2781a3f8bf8f7299aeceaa9cad3f302 Author: Danny Chan <[email protected]> AuthorDate: Mon Mar 2 12:09:26 2026 +0800 perf: eliminate unnecessary timeline loading for Flink append only write path (#18264) (cherry picked from commit 69e24ea4690ef6a7fc627db0007dffba924ec3ed) --- .../org/apache/hudi/client/BaseHoodieWriteClient.java | 6 +++++- .../org/apache/hudi/client/HoodieFlinkWriteClient.java | 15 +++++++++++++++ .../main/java/org/apache/hudi/table/HoodieFlinkTable.java | 2 +- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/BaseHoodieWriteClient.java b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/BaseHoodieWriteClient.java index cc19970fb60c..7a033a7b4824 100644 --- a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/BaseHoodieWriteClient.java +++ b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/BaseHoodieWriteClient.java @@ -1378,7 +1378,7 @@ public abstract class BaseHoodieWriteClient<T, I, K, O> extends BaseHoodieClient * </ul> */ public final HoodieTable initTable(WriteOperationType operationType, Option<String> instantTime) { - HoodieTableMetaClient metaClient = createMetaClient(true); + HoodieTableMetaClient metaClient = createMetaClient(loadActiveTimelineOnTableInit()); // Setup write schemas for deletes if (WriteOperationType.isDelete(operationType)) { setWriteSchemaForDeletes(metaClient); @@ -1412,6 +1412,10 @@ public abstract class BaseHoodieWriteClient<T, I, K, O> extends BaseHoodieClient return table; } + protected boolean loadActiveTimelineOnTableInit() { + return true; + } + public void validateAgainstTableProperties(HoodieTableConfig tableConfig, HoodieWriteConfig writeConfig) { // mismatch of table versions. CommonClientUtils.validateTableVersion(tableConfig, writeConfig); diff --git a/hudi-client/hudi-flink-client/src/main/java/org/apache/hudi/client/HoodieFlinkWriteClient.java b/hudi-client/hudi-flink-client/src/main/java/org/apache/hudi/client/HoodieFlinkWriteClient.java index d380b934de27..14a108e21b8a 100644 --- a/hudi-client/hudi-flink-client/src/main/java/org/apache/hudi/client/HoodieFlinkWriteClient.java +++ b/hudi-client/hudi-flink-client/src/main/java/org/apache/hudi/client/HoodieFlinkWriteClient.java @@ -384,6 +384,21 @@ public class HoodieFlinkWriteClient<T> // flink performs metadata table bootstrap on the coordinator when it starts up. } + /** + * Marks the timeline loading as lazy for table init in write path. + * + * <p>The write client is local entry per-task and the table is initialized for each write, + * always make the timeline loading as lazy because there is no cross-network transmission + * so no gains for eager loading. + * + * <p>For append-only write path like pk-less table and log append for MOR table, the timeline loading is unnecessary + * and the metadata file listing cost could be saved. + */ + @Override + protected boolean loadActiveTimelineOnTableInit() { + return false; + } + public void completeTableService( TableServiceType tableServiceType, HoodieCommitMetadata metadata, diff --git a/hudi-client/hudi-flink-client/src/main/java/org/apache/hudi/table/HoodieFlinkTable.java b/hudi-client/hudi-flink-client/src/main/java/org/apache/hudi/table/HoodieFlinkTable.java index 910a66a2c3f0..e128708948da 100644 --- a/hudi-client/hudi-flink-client/src/main/java/org/apache/hudi/table/HoodieFlinkTable.java +++ b/hudi-client/hudi-flink-client/src/main/java/org/apache/hudi/table/HoodieFlinkTable.java @@ -55,7 +55,7 @@ public abstract class HoodieFlinkTable<T> HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder() .setConf(context.getStorageConf().newInstance()).setBasePath(config.getBasePath()) - .setLoadActiveTimelineOnLoad(true).setConsistencyGuardConfig(config.getConsistencyGuardConfig()) + .setLoadActiveTimelineOnLoad(false).setConsistencyGuardConfig(config.getConsistencyGuardConfig()) .setTimeGeneratorConfig(config.getTimeGeneratorConfig()) .setFileSystemRetryConfig(config.getFileSystemRetryConfig()).build(); return HoodieFlinkTable.create(config, context, metaClient);
