You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hudi.apache.org by da...@apache.org on 2026/10/08 12:07:34 UTC
(hudi) 04/17: perf: eliminate unnecessary timeline loading for Flink append only write path (#18264)
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 <yu...@gmail.com>
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);