Define the interface for retry policies.
Functions
OnFailure(Status const &)
Return true if the retry loop should continue after status
.
This functions are typically used in a retry loop, where they control whether to continue, whether a failure should be retried, and finally how to format the error message.
std::unique_ptr<RetryPolicy> policy = ....;
Status status;
while (!policy->IsExhausted()) {
auto response = try_rpc(); // typically `response` is StatusOr<T>
if (response.ok()) return response;
status = std::move(response).status();
if (!policy->OnFailure(response->status())) {
if (policy->IsPermanentFailure(response->status()) {
return StatusModifiedToSayPermanentFailureCausedTheProblem(status);
}
return StatusModifiedToSayPolicyExhaustionCausedTheProblem(status);
}
// sleep, which may exhaust the policy, even if it was not exhausted in
// the last call.
}
return StatusModifiedToSayPolicyExhaustionCausedTheProblem(status);
status
Status const &
bool
IsExhausted() const
Return true if the retry policy should stop as the retry limit has been reached.
This functions are typically used in a retry loop, where they control whether to continue, whether a failure should be retried, and finally how to format the error message.
std::unique_ptr<RetryPolicy> policy = ....;
Status status;
while (!policy->IsExhausted()) {
auto response = try_rpc(); // typically `response` is StatusOr<T>
if (response.ok()) return response;
status = std::move(response).status();
if (!policy->OnFailure(response->status())) {
if (policy->IsPermanentFailure(response->status()) {
return StatusModifiedToSayPermanentFailureCausedTheProblem(status);
}
return StatusModifiedToSayPolicyExhaustionCausedTheProblem(status);
}
// sleep, which may exhaust the policy, even if it was not exhausted in
// the last call.
}
return StatusModifiedToSayPolicyExhaustionCausedTheProblem(status);
bool
IsPermanentFailure(Status const &) const
Return true if status
is treated as a permanent (and therefore non-retryable) error.
This functions are typically used in a retry loop, where they control whether to continue, whether a failure should be retried, and finally how to format the error message.
std::unique_ptr<RetryPolicy> policy = ....;
Status status;
while (!policy->IsExhausted()) {
auto response = try_rpc(); // typically `response` is StatusOr<T>
if (response.ok()) return response;
status = std::move(response).status();
if (!policy->OnFailure(response->status())) {
if (policy->IsPermanentFailure(response->status()) {
return StatusModifiedToSayPermanentFailureCausedTheProblem(status);
}
return StatusModifiedToSayPolicyExhaustionCausedTheProblem(status);
}
// sleep, which may exhaust the policy, even if it was not exhausted in
// the last call.
}
return StatusModifiedToSayPolicyExhaustionCausedTheProblem(status);
status
Status const &
bool

