use crate::builder::bigtable_table_admin::CheckConsistency;
use google_cloud_gax::polling_state::PollingState;
use google_cloud_gax::retry_policy::NeverRetry;
use google_cloud_gax::retry_result::RetryResult;
impl CheckConsistency {
pub async fn until_consistent(mut self) -> crate::Result<()> {
let error_policy = self
.0
.options
.polling_error_policy()
.clone()
.unwrap_or_else(|| self.0.stub.get_polling_error_policy(&self.0.options));
let backoff_policy = self
.0
.options
.polling_backoff_policy()
.clone()
.unwrap_or_else(|| self.0.stub.get_polling_backoff_policy(&self.0.options));
self.0.options.set_retry_policy(NeverRetry);
let mut state = PollingState::default();
loop {
state.attempt_count += 1;
match self.clone().send().await {
Ok(r) if r.consistent => return Ok(()),
Ok(_) => error_policy.on_in_progress(&state, &self.0.request.name)?,
Err(e) => match error_policy.on_error(&state, e) {
RetryResult::Continue(_) => {}
RetryResult::Exhausted(e) | RetryResult::Permanent(e) => return Err(e),
},
}
tokio::time::sleep(backoff_policy.wait_period(&state)).await;
}
}
}