danny0405 commented on code in PR #10807:
URL: https://github.com/apache/hudi/pull/10807#discussion_r1517025133
##########
hudi-common/src/main/java/org/apache/hudi/common/table/timeline/HoodieDefaultTimeline.java:
##########
@@ -581,4 +596,43 @@ public HoodieDefaultTimeline
mergeTimeline(HoodieDefaultTimeline timeline) {
};
return new HoodieDefaultTimeline(instantStream, details);
}
+
+ /**
+ * Computes the timeline hash and returns.
+ */
+ private String computeTimelineHash(List<HoodieInstant> instants) {
+ final MessageDigest md;
+ try {
+ md = MessageDigest.getInstance(HASHING_ALGORITHM);
+ instants.forEach(i -> md
+ .update(getUTF8Bytes(StringUtils.joinUsingDelim("_",
i.getTimestamp(), i.getAction(), i.getState().name()))));
+ } catch (NoSuchAlgorithmException nse) {
+ throw new HoodieException(nse);
+ }
+ return StringUtils.toHexString(md.digest());
+ }
+
+ /**
+ * Merges the given instant list into one and keep the sequence.
+ */
+ private static List<HoodieInstant> mergeInstants(List<HoodieInstant>
instants1, List<HoodieInstant> instants2) {
+ ValidationUtils.checkArgument(!instants1.isEmpty() &&
!instants2.isEmpty(), "The instants to merge can not be empty");
+ final boolean firstInstantListHappensEarlier =
HoodieTimeline.compareTimestamps(instants1.get(0).getTimestamp(),
LESSER_THAN_OR_EQUALS, instants2.get(0).getTimestamp());
+ // some optimization based on the assumption all the instant list is
already sorted.
+ // skip when one list contains all the instants from the other one.
+ final List<HoodieInstant> merged;
+ if (HoodieTimeline.compareTimestamps(instants1.get(instants1.size() -
1).getTimestamp(), LESSER_THAN_OR_EQUALS, instants2.get(0).getTimestamp())) {
+ merged = new ArrayList<>(instants1);
+ merged.addAll(instants2);
+ } else if (HoodieTimeline.compareTimestamps(instants2.get(instants2.size()
- 1).getTimestamp(), LESSER_THAN_OR_EQUALS, instants1.get(0).getTimestamp())) {
+ merged = new ArrayList<>(instants2);
+ merged.addAll(instants1);
+ } else {
+ merged = new ArrayList<>(instants1);
+ merged.addAll(instants2);
+ // sort the instants explicitly
+ Collections.sort(merged);
Review Comment:
Just as noted in the comment, we assume both the instant lists are already
sorted. Because all the instants involved in a timeline is forced to be sorted
already.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]