laskoviymishka opened a new pull request, #912:
URL: https://github.com/apache/iceberg-go/pull/912
Wrap Table.doCommit in an exponential-backoff retry loop that retries only
on errors.Is(err, table.ErrCommitFailed). 5xx/unknown-state errors are never
retried because the commit may have actually succeeded.
ErrCommitFailed is a new sentinel in the table package; catalog/rest's
existing sentinel now wraps it via fmt.Errorf("%w: %w", ...) so callers can
detect retryable conflicts with errors.Is(err, table.ErrCommitFailed).
Retry budget is enforced via context.WithTimeout so both the sleep loop and
the CommitTable call itself respect the deadline. Backoff is minMs << attempt
clamped to maxMs, with jitter in [minMs, ceiling] to avoid zero-wait retry
stampedes.
The default num-retries is 0 until refresh-and-replay lands in a follow-up;
without refreshing requirements between attempts, retrying a contended OCC
commit would fail deterministically and just delay the eventual error.
Glue/SQL/Hive catalogs do not yet wrap the sentinel, so retries only engage for
the REST catalog today.
Configurable via:
commit.retry.num-retries (default 0)
commit.retry.min-wait-ms (default 100)
commit.retry.max-wait-ms (default 60000)
commit.retry.total-timeout-ms (default 1800000)
Part of #830 (concurrent writer conflict detection).
--
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]