func()

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)
}