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