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

Reply via email to