in dax/internal/client/single.go [444:478]
func (client *SingleDaxClient) executeWithRetries(ctx context.Context, op string, o RequestOptions, encoder func(writer *cbor.Writer) error, decoder func(reader *cbor.Reader) error) error {
ctx = client.newContext(ctx, o)
var err error
attempts := o.RetryMaxAttempts
// Start from 0 to accommodate for the initial request
for i := 0; i <= attempts; i++ {
if i > 0 && o.Logger != nil && o.LogLevel.Matches(utils.LogDebugWithRequestRetries) {
o.Logger.Logf(logging.Debug, "Retrying Request %s/%s, attempt %d", service, op, i)
}
err = client.executeWithContext(ctx, op, encoder, decoder, o)
if err == nil {
return nil
}
if errors.Is(err, context.Canceled) {
return &smithy.CanceledError{Err: err}
}
if i != attempts {
delay := o.RetryDelay
if sleepErr := SleepWithContext(ctx, op, delay); sleepErr != nil {
return &smithy.OperationError{Err: sleepErr, ServiceID: service, OperationName: op}
}
if o.Logger != nil && o.LogLevel.Matches(utils.LogDebugWithRequestRetries) {
o.Logger.Logf(logging.Debug, "Error in executing %s%s : %s", service, op, err)
}
}
}
// Return the last error occurred
return translateError(err)
}