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]

Reply via email to