This is an automated email from the ASF dual-hosted git repository.

danny0405 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 2dcdd311245 [HUDI-7421] Build HoodieDeltaWriteStat using 
HoodieDeltaWriteStat#copy (#10870)
2dcdd311245 is described below

commit 2dcdd311245b38c0a9884338d6333212a730d310
Author: wombatu-kun <[email protected]>
AuthorDate: Mon Mar 18 07:32:41 2024 +0700

    [HUDI-7421] Build HoodieDeltaWriteStat using HoodieDeltaWriteStat#copy 
(#10870)
    
    Co-authored-by: Vova Kolmakov <[email protected]>
---
 .../org/apache/hudi/io/HoodieAppendHandle.java     |  7 +-----
 .../hudi/common/model/HoodieDeltaWriteStat.java    | 14 ++++++++++++
 .../common/model/TestHoodieDeltaWriteStat.java     | 25 ++++++++++++++++++++++
 3 files changed, 40 insertions(+), 6 deletions(-)

diff --git 
a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/io/HoodieAppendHandle.java
 
b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/io/HoodieAppendHandle.java
index ffdb7c70a57..8d0eb2305e6 100644
--- 
a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/io/HoodieAppendHandle.java
+++ 
b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/io/HoodieAppendHandle.java
@@ -326,12 +326,7 @@ public class HoodieAppendHandle<T, I, K, O> extends 
HoodieWriteHandle<T, I, K, O
   private void initNewStatus() {
     HoodieDeltaWriteStat prevStat = (HoodieDeltaWriteStat) 
this.writeStatus.getStat();
     // Make a new write status and copy basic fields over.
-    HoodieDeltaWriteStat stat = new HoodieDeltaWriteStat();
-    stat.setFileId(fileId);
-    stat.setPartitionPath(partitionPath);
-    stat.setPrevCommit(prevStat.getPrevCommit());
-    stat.setBaseFile(prevStat.getBaseFile());
-    stat.setLogFiles(new ArrayList<>(prevStat.getLogFiles()));
+    HoodieDeltaWriteStat stat = prevStat.copy();
 
     this.writeStatus = (WriteStatus) 
ReflectionUtils.loadClass(config.getWriteStatusClassName(),
         hoodieTable.shouldTrackSuccessRecords(), 
config.getWriteStatusFailureFraction());
diff --git 
a/hudi-common/src/main/java/org/apache/hudi/common/model/HoodieDeltaWriteStat.java
 
b/hudi-common/src/main/java/org/apache/hudi/common/model/HoodieDeltaWriteStat.java
index 4fee7cdcb6e..0593e280e6f 100644
--- 
a/hudi-common/src/main/java/org/apache/hudi/common/model/HoodieDeltaWriteStat.java
+++ 
b/hudi-common/src/main/java/org/apache/hudi/common/model/HoodieDeltaWriteStat.java
@@ -94,6 +94,20 @@ public class HoodieDeltaWriteStat extends HoodieWriteStat {
     return recordsStats;
   }
 
+  /**
+   * Make a new write status and copy basic fields from current object
+   * @return copy write status
+   */
+  public HoodieDeltaWriteStat copy() {
+    HoodieDeltaWriteStat copy = new HoodieDeltaWriteStat();
+    copy.setFileId(getFileId());
+    copy.setPartitionPath(getPartitionPath());
+    copy.setPrevCommit(getPrevCommit());
+    copy.setBaseFile(getBaseFile());
+    copy.setLogFiles(new ArrayList<>(getLogFiles()));
+    return copy;
+  }
+
   private static Map<String, HoodieColumnRangeMetadata<Comparable>> 
mergeRecordsStats(
       Map<String, HoodieColumnRangeMetadata<Comparable>> stats1,
       Map<String, HoodieColumnRangeMetadata<Comparable>> stats2) {
diff --git 
a/hudi-common/src/test/java/org/apache/hudi/common/model/TestHoodieDeltaWriteStat.java
 
b/hudi-common/src/test/java/org/apache/hudi/common/model/TestHoodieDeltaWriteStat.java
index b774e06cea6..a09bf539feb 100644
--- 
a/hudi-common/src/test/java/org/apache/hudi/common/model/TestHoodieDeltaWriteStat.java
+++ 
b/hudi-common/src/test/java/org/apache/hudi/common/model/TestHoodieDeltaWriteStat.java
@@ -23,6 +23,8 @@ import org.apache.hudi.common.table.HoodieTableConfig;
 import org.junit.jupiter.api.Test;
 
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -49,4 +51,27 @@ public class TestHoodieDeltaWriteStat {
     writeStat.setLogFiles(new ArrayList<>());
     assertTrue(writeStat.getLogFiles().isEmpty());
   }
+
+  @Test
+  void testGetHoodieDeltaWriteStatFromPreviousStat() {
+    HoodieDeltaWriteStat prevStat = createDeltaWriteStat("part", "fileId", 
"888",
+        "base", Collections.singletonList("log1"));
+    HoodieDeltaWriteStat stat = prevStat.copy();
+    assertEquals(prevStat.getPartitionPath(), stat.getPartitionPath());
+    assertEquals(prevStat.getFileId(), stat.getFileId());
+    assertEquals(prevStat.getPrevCommit(), stat.getPrevCommit());
+    assertEquals(prevStat.getBaseFile(), stat.getBaseFile());
+    assertEquals(1, stat.getLogFiles().size());
+    assertEquals(prevStat.getLogFiles().get(0), stat.getLogFiles().get(0));
+  }
+
+  private HoodieDeltaWriteStat createDeltaWriteStat(String partition, String 
fileId, String prevCommit, String baseFile, List<String> logFiles) {
+    HoodieDeltaWriteStat writeStat1 = new HoodieDeltaWriteStat();
+    writeStat1.setPartitionPath(partition);
+    writeStat1.setFileId(fileId);
+    writeStat1.setPrevCommit(prevCommit);
+    writeStat1.setBaseFile(baseFile);
+    writeStat1.setLogFiles(logFiles);
+    return writeStat1;
+  }
 }

Reply via email to