RussellSpitzer commented on a change in pull request #3039:
URL: https://github.com/apache/iceberg/pull/3039#discussion_r765243781
##########
File path: core/src/main/java/org/apache/iceberg/util/SnapshotUtil.java
##########
@@ -101,6 +101,53 @@ public static Snapshot oldestAncestor(Table table) {
return ancestorsOf(start, lookup);
}
+ /**
+ * Traverses the history of the table's current snapshot
+ * and finds the oldest ancestor snapshot after or equal to the timestamp in
milliseconds.
+ *
+ * @param table a table
+ * @param timestampMillis a timestamp in milliseconds
+ * @return the first snapshot from the given timestamp, or null if the
current snapshot is older than the timestamp
+ * @throws IllegalStateException if the first snapshot from the given time
can't be determined
+ */
+ public static Snapshot oldestAncestorFrom(Table table, Long timestampMillis)
{
+ Snapshot currentSnapshot = table.currentSnapshot();
+ long timestamp = timestampMillis == null ? -1L : timestampMillis;
+ // If no snapshot exists or timestamp is higher than the current snapshot
+ if (currentSnapshot == null || currentSnapshot.timestampMillis() <
timestamp) {
+ return null;
+ }
+
+ // Traverse to the oldest snapshot after or equal to the timestamp
Review comment:
So If I have this right the method is basically (assuming ordered by
timestamp)
StreamSupport.stream(currentAncestors(table).spliterator(), false)
.filter(snapshot -> snapshot.timestampMillis() >= targetTimestamp)
// For elements that are as new as or newer than the target
.reduce((first, second) -> second) // Return the last element we see
(although a boolean could be put in here to select the oldest of first and
second if ordering of currentAncestors is not guaranteed ... I think it is
though)
.orElse(null);
--
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]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]