From 20e798386684911046a7edef2129fb3496359dda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=8F=AF=E4=BC=A6?= Date: Tue, 18 Jan 2022 06:28:18 +0800 Subject: [PATCH] [HUDI-3252] Avoid creating empty requestedReplaceCommit in the startCommit method (#4515) --- .../hudi/client/AbstractHoodieWriteClient.java | 9 +++++++-- .../hudi/client/utils/MetadataConversionUtils.java | 2 +- .../common/table/timeline/HoodieActiveTimeline.java | 13 +++++++++++++ .../apache/hudi/common/util/ClusteringUtils.java | 2 +- 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/AbstractHoodieWriteClient.java b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/AbstractHoodieWriteClient.java index d4315202e..c9162de9e 100644 --- a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/AbstractHoodieWriteClient.java +++ b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/AbstractHoodieWriteClient.java @@ -828,8 +828,13 @@ public abstract class AbstractHoodieWriteClient getRequestedReplaceMetadata(HoodieTableMetaClient metaClient, HoodieInstant instant) throws IOException { + private static Option getRequestedReplaceMetadata(HoodieTableMetaClient metaClient, HoodieInstant instant) throws IOException { Option requestedContent = metaClient.getActiveTimeline().getInstantDetails(instant); if (!requestedContent.isPresent() || requestedContent.get().length == 0) { // requested commit files can be empty in some certain cases, e.g. insert_overwrite or insert_overwrite_table. diff --git a/hudi-common/src/main/java/org/apache/hudi/common/table/timeline/HoodieActiveTimeline.java b/hudi-common/src/main/java/org/apache/hudi/common/table/timeline/HoodieActiveTimeline.java index 0c7d97bc3..613cdb5a6 100644 --- a/hudi-common/src/main/java/org/apache/hudi/common/table/timeline/HoodieActiveTimeline.java +++ b/hudi-common/src/main/java/org/apache/hudi/common/table/timeline/HoodieActiveTimeline.java @@ -18,6 +18,7 @@ package org.apache.hudi.common.table.timeline; +import org.apache.hudi.avro.model.HoodieRequestedReplaceMetadata; import org.apache.hudi.common.table.HoodieTableMetaClient; import org.apache.hudi.common.table.timeline.HoodieInstant.State; import org.apache.hudi.common.util.FileIOUtils; @@ -156,6 +157,18 @@ public class HoodieActiveTimeline extends HoodieDefaultTimeline { createFileInMetaPath(instant.getFileName(), Option.empty(), false); } + public void createRequestedReplaceCommit(String instantTime, String actionType) { + try { + HoodieInstant instant = new HoodieInstant(State.REQUESTED, actionType, instantTime); + LOG.info("Creating a new instant " + instant); + // Create the request replace file + createFileInMetaPath(instant.getFileName(), + TimelineMetadataUtils.serializeRequestedReplaceMetadata(new HoodieRequestedReplaceMetadata()), false); + } catch (IOException e) { + throw new HoodieIOException("Error create requested replace commit ", e); + } + } + public void saveAsComplete(HoodieInstant instant, Option data) { LOG.info("Marking instant complete " + instant); ValidationUtils.checkArgument(instant.isInflight(), diff --git a/hudi-common/src/main/java/org/apache/hudi/common/util/ClusteringUtils.java b/hudi-common/src/main/java/org/apache/hudi/common/util/ClusteringUtils.java index 1964ae7ef..15e53705b 100644 --- a/hudi-common/src/main/java/org/apache/hudi/common/util/ClusteringUtils.java +++ b/hudi-common/src/main/java/org/apache/hudi/common/util/ClusteringUtils.java @@ -77,7 +77,7 @@ public class ClusteringUtils { * @return * @throws IOException */ - public static Option getRequestedReplaceMetadata(HoodieTableMetaClient metaClient, HoodieInstant pendingReplaceInstant) throws IOException { + private static Option getRequestedReplaceMetadata(HoodieTableMetaClient metaClient, HoodieInstant pendingReplaceInstant) throws IOException { final HoodieInstant requestedInstant; if (!pendingReplaceInstant.isRequested()) { // inflight replacecommit files don't have clustering plan.