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);
Parameter | |
---|---|
Name | Description |
status |
Status const &
|
Returns | |
---|---|
Type | Description |
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);
Returns | |
---|---|
Type | Description |
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);
Parameter | |
---|---|
Name | Description |
status |
Status const &
|
Returns | |
---|---|
Type | Description |
bool |