laskoviymishka opened a new issue, #830:
URL: https://github.com/apache/iceberg-go/issues/830
### Feature Request / Improvement
Parent: #829 (v2 spec completion)
iceberg-go currently has a single OCC guard: `AssertRefSnapshotID("main",
baseSnapshotID)` sent to the catalog (#672). This detects that *someone* else
committed, but provides no semantic analysis of *what* changed or whether the
conflict is resolvable. There is no retry loop — any conflict is a terminal
error.
The Java implementation has full conflict detection with per-operation
validation, isolation levels, and retry-with-rebase.
Rust (iceberg-rust) also hasn't implemented this yet
([apache/iceberg-rust#348](https://github.com/apache/iceberg-rust/issues/348)).
### What's missing
**Semantic conflict validation** — when a concurrent commit is detected,
check whether the changes actually conflict:
- `FastAppend`: always safe, no validation needed
- `RowDelta` (#789) with equality deletes (#809, #823): conflict if
concurrent append added data files in covered partitions (serializable
isolation)
- `Overwrite`: conflict if concurrent commit added files matching the
overwrite predicate
- `RewriteFiles` (compaction): conflict if concurrent delete files target
the files being rewritten
**Retry loop** — on `ErrCommitFailed`, reload metadata, validate conflicts,
re-apply against new HEAD, retry with exponential backoff. The
`commit.retry.num-retries` property is already in test fixtures but never read.
**Isolation levels** — `write.delete.isolation-level` property
(`serializable` vs `snapshot`), matching Java semantics.
### Context
This is needed for any multi-writer workload — concurrent CDC consumers,
parallel ETL jobs, or compaction running alongside ingest. Without this,
concurrent RowDelta commits can produce incorrect results if equality delete
files miss newly appended data.
--
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]