report retry progress

This commit is contained in:
Dmitry Sergeev
2026-08-27 08:47:53 +03:00
parent a5cfe6dffc
commit 89a0522e20
2 changed files with 167 additions and 2 deletions
+30 -2
View File
@@ -27,6 +27,7 @@ func runWithRetry(
attempt attemptFunc,
shouldRetry retryDecider,
wait waitFunc,
observer retryObserver,
) error {
failedAttempts := 0
@@ -40,11 +41,29 @@ func runWithRetry(
}
failedAttempts++
if !shouldRetry(err) || !policy.canRetry(failedAttempts) {
willRetry := shouldRetry(err) && policy.canRetry(failedAttempts)
if !willRetry {
if observer != nil {
observer(retryEvent{
FailedAttempts: failedAttempts,
Err: err,
WillRetry: false,
})
}
return err
}
if err := wait(ctx, policy.retryDelay(failedAttempts)); err != nil {
delay := policy.retryDelay(failedAttempts)
if observer != nil {
observer(retryEvent{
FailedAttempts: failedAttempts,
Err: err,
RetryIn: delay,
WillRetry: true,
})
}
if err := wait(ctx, delay); err != nil {
if ctx.Err() != nil {
return ctx.Err()
}
@@ -52,3 +71,12 @@ func runWithRetry(
}
}
}
type retryEvent struct {
FailedAttempts int
Err error
RetryIn time.Duration
WillRetry bool
}
type retryObserver func(retryEvent)