Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 8 additions & 10 deletions core/src/main/java/org/apache/iceberg/SnapshotManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,12 @@ private enum SnapshotManagerOperation {
ROLLBACK
}

private final TableOperations ops;
private SnapshotManagerOperation managerOperation = null;
private Long targetSnapshotId = null;
private String snapshotOperation = null;

SnapshotManager(TableOperations ops) {
super(ops);
this.ops = ops;
}

@Override
Expand All @@ -58,11 +56,11 @@ protected String operation() {

@Override
public ManageSnapshots cherrypick(long snapshotId) {
TableMetadata base = ops.current();
ValidationException.check(base.snapshot(snapshotId) != null,
TableMetadata current = current();
ValidationException.check(current.snapshot(snapshotId) != null,
"Cannot cherry pick unknown snapshot id: %s", snapshotId);

Snapshot cherryPickSnapshot = base.snapshot(snapshotId);
Snapshot cherryPickSnapshot = current.snapshot(snapshotId);
// only append operations are currently supported
if (!cherryPickSnapshot.operation().equals(DataOperations.APPEND)) {
throw new UnsupportedOperationException("Can cherry pick only append operations");
Expand All @@ -78,7 +76,7 @@ public ManageSnapshots cherrypick(long snapshotId) {
}

// this property is set on target snapshot that will get published
String wapId = WapUtil.validateWapPublish(base, targetSnapshotId);
String wapId = WapUtil.validateWapPublish(current, targetSnapshotId);
if (wapId != null) {
set(SnapshotSummary.PUBLISHED_WAP_ID_PROP, wapId);
}
Expand All @@ -91,7 +89,7 @@ public ManageSnapshots cherrypick(long snapshotId) {

@Override
public ManageSnapshots setCurrentSnapshot(long snapshotId) {
ValidationException.check(ops.current().snapshot(snapshotId) != null,
ValidationException.check(current().snapshot(snapshotId) != null,
"Cannot roll back to unknown snapshot id: %s", snapshotId);

this.managerOperation = SnapshotManagerOperation.ROLLBACK;
Expand All @@ -103,7 +101,7 @@ public ManageSnapshots setCurrentSnapshot(long snapshotId) {
@Override
public ManageSnapshots rollbackToTime(long timestampMillis) {
// find the latest snapshot by timestamp older than timestampMillis
Snapshot snapshot = findLatestAncestorOlderThan(ops.current(), timestampMillis);
Snapshot snapshot = findLatestAncestorOlderThan(current(), timestampMillis);
Preconditions.checkArgument(snapshot != null,
"Cannot roll back, no valid snapshot older than: %s", timestampMillis);

Expand All @@ -115,7 +113,7 @@ public ManageSnapshots rollbackToTime(long timestampMillis) {

@Override
public ManageSnapshots rollbackTo(long snapshotId) {
TableMetadata current = ops.current();
TableMetadata current = current();
ValidationException.check(current.snapshot(snapshotId) != null,
"Cannot roll back to unknown snapshot id: %s", snapshotId);
ValidationException.check(
Expand All @@ -139,7 +137,7 @@ public List<ManifestFile> apply(TableMetadata base) {

@Override
public Snapshot apply() {
TableMetadata base = ops.refresh();
TableMetadata base = refresh();

if (targetSnapshotId == null) {
// if no target snapshot was configured then NOOP by returning current state
Expand Down
11 changes: 10 additions & 1 deletion core/src/main/java/org/apache/iceberg/SnapshotProducer.java
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ public ThisT deleteWith(Consumer<String> deleteCallback) {

@Override
public Snapshot apply() {
this.base = ops.refresh();
this.base = refresh();
Long parentSnapshotId = base.currentSnapshot() != null ?
base.currentSnapshot().snapshotId() : null;

Expand Down Expand Up @@ -221,6 +221,15 @@ private Map<String, String> summary(TableMetadata previous) {
return builder.build();
}

protected TableMetadata current() {
return base;
}

protected TableMetadata refresh() {
this.base = ops.refresh();
return base;
}

@Override
public void commit() {
// this is always set to the latest commit attempt's snapshot id.
Expand Down