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 2023/02/08 03:11:06 UTC
[hudi] branch master updated: [HUDI-5270] Duplicate key error when insert_overwrite the same partition in multi writer (#7281)
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 a1da9ec2e4f [HUDI-5270] Duplicate key error when insert_overwrite the same partition in multi writer (#7281)
a1da9ec2e4f is described below
commit a1da9ec2e4fd87f2b1637bba8e239eaf1eeba3a6
Author: Ming Wei <29...@qq.com>
AuthorDate: Wed Feb 8 11:10:58 2023 +0800
[HUDI-5270] Duplicate key error when insert_overwrite the same partition in multi writer (#7281)
Co-authored-by: jameswei <ja...@didiglobal.com>
---
.../apache/hudi/common/table/view/AbstractTableFileSystemView.java | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/hudi-common/src/main/java/org/apache/hudi/common/table/view/AbstractTableFileSystemView.java b/hudi-common/src/main/java/org/apache/hudi/common/table/view/AbstractTableFileSystemView.java
index 8ea017977e9..bf4dad5deb3 100644
--- a/hudi-common/src/main/java/org/apache/hudi/common/table/view/AbstractTableFileSystemView.java
+++ b/hudi-common/src/main/java/org/apache/hudi/common/table/view/AbstractTableFileSystemView.java
@@ -247,7 +247,9 @@ public abstract class AbstractTableFileSystemView implements SyncableFileSystemV
}
});
- Map<HoodieFileGroupId, HoodieInstant> replacedFileGroups = resultStream.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
+ // Duplicate key error when insert_overwrite same partition in multi writer, keep the instant with greater timestamp when the file group id conflicts
+ Map<HoodieFileGroupId, HoodieInstant> replacedFileGroups = resultStream.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
+ (instance1, instance2) -> HoodieTimeline.compareTimestamps(instance1.getTimestamp(), HoodieTimeline.LESSER_THAN, instance2.getTimestamp()) ? instance2 : instance1));
resetReplacedFileGroups(replacedFileGroups);
LOG.info("Took " + hoodieTimer.endTimer() + " ms to read " + replacedTimeline.countInstants() + " instants, "
+ replacedFileGroups.size() + " replaced file groups");