RetryPolicy is the interface used by retry_sync and retry_async.
Concrete policy classes decide how many attempts are allowed and how delays are
calculated.
NoRetryPolicy: one attempt, no retry.FixedRetryPolicy: same delay between attempts.LinearBackoffRetryPolicy: delay grows by a fixed step.ExponentialBackoffRetryPolicy: exponential backoff with optional jitter.
attempts: maximum attemptsbase_delay: first delaybackoff: multiplier per retrymax_delay: upper delay boundjitter: random extra delay to avoid synchronized retries
Retry reads freely when appropriate. Retry writes only when the operation is idempotent or an idempotency key is present.