The GitHub Actions job "Go" on iceberg-go.git/snapshot-refd-check has failed.
Run started by GitHub user dhananjaykrutika (triggered by dhananjaykrutika).

Head commit for run:
2f8ef6ec44d8b4e245f8280e24b3098b8d7b5b53 / Krutika Dhananjay <[email protected]>
fix: validate snapshot is unreferenced before expiration removal

Snapshot expiration maintenance can race with concurrent client commits
that reference the same snapshot being expired. Consider:

1. Maintenance identifies snap-1 as expired and eligible for removal
2. Client commits AddSnapshotRef linking snap-1 to "feature-branch"
3. Maintenance loads metadata (now contains feature-branch → snap-1)
4. Maintenance commits RemoveSnapshot for snap-1

The CAS succeeds because maintenance has the latest pointer, but the
resulting metadata is corrupt: feature-branch references a deleted
snapshot.

CAS only guarantees the pointer hasn't changed since we read it - it
does not validate that our operation is semantically correct against
the current state. By checking isSnapshotReferenced() against the
freshly loaded metadata, we detect that snap-1 is now in use and skip
its removal. The CAS then guarantees this validated state remains
current through the commit.

Report URL: https://github.com/apache/iceberg-go/actions/runs/21741558887

With regards,
GitHub Actions via GitBox

Reply via email to