Class RetryPolicy (2.23.0-rc)

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
NameDescription
status Status const &
Returns
TypeDescription
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
TypeDescription
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
NameDescription
status Status const &
Returns
TypeDescription
bool