From 77d4bc3b75a7747986dbebab205af81fc73aba16 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Thu, 16 Feb 2023 04:50:51 -0500 Subject: [PATCH] working retry --- crates/lib/errors/src/lib.rs | 2 ++ .../fakeyou_client/src/fakeyou_api_client.rs | 24 ++++++++++++++----- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/crates/lib/errors/src/lib.rs b/crates/lib/errors/src/lib.rs index dcaa0af2fe..107b0cfd30 100644 --- a/crates/lib/errors/src/lib.rs +++ b/crates/lib/errors/src/lib.rs @@ -22,6 +22,8 @@ /// (Naming things "Result" pollutes the import scope or requires nasty renames. Gross.) pub type AnyhowResult = anyhow::Result; +pub type AnyhowError = anyhow::Error; + /// Useful re-export. pub use anyhow::anyhow; pub use anyhow::bail; diff --git a/crates/lib/fakeyou_client/src/fakeyou_api_client.rs b/crates/lib/fakeyou_client/src/fakeyou_api_client.rs index 9dc8c9ed8a..80a7b17545 100644 --- a/crates/lib/fakeyou_client/src/fakeyou_api_client.rs +++ b/crates/lib/fakeyou_client/src/fakeyou_api_client.rs @@ -2,11 +2,12 @@ use backoff::future::retry; use backoff::{ExponentialBackoff, ExponentialBackoffBuilder}; use crate::api::tts_inference::{CreateTtsInferenceRequest, CreateTtsInferenceResponse, TtsInferenceJobStatus}; use crate::credentials::FakeYouCredentials; -use errors::{anyhow, AnyhowResult}; +use errors::{anyhow, AnyhowError, AnyhowResult}; use reqwest::cookie::Jar; -use reqwest::{Client, ClientBuilder, RequestBuilder, Url}; +use reqwest::{Client, ClientBuilder, RequestBuilder, StatusCode, Url}; use std::sync::Arc; use std::time::Duration; +use log::{error, warn}; const AUTHORIZATION_HEADER: &'static str = "Authorization"; const SESSION_COOKIE_NAME : &'static str = "session"; @@ -72,23 +73,34 @@ impl FakeYouApiClient { .with_max_elapsed_time(Some(Duration::from_secs(60))) //.with_max_interval(Duration::from_secs(30)) .build(); + let response = retry(backoff, || async { - Ok(self.do_create_tts_inference(&request).await?) + Ok(self.do_create_tts_inference(&request).await + .map_err(|err| { + //warn!("reqwest err: {:?}", err); + err + })? + ) }).await?; let response = serde_json::from_str(&response)?; Ok(response) } - pub async fn do_create_tts_inference(&self, request: &CreateTtsInferenceRequest<'_>) -> Result { + pub async fn do_create_tts_inference(&self, request: &CreateTtsInferenceRequest<'_>) -> Result { let url = format!("https://{}/tts/inference", self.api_domain); let response = self.add_credentials(self.client .post(url)) .json(request) .send() - .await? - .text() .await?; + + match response.status().as_u16() { + 200 => { /* Okay */ } + _ => return Err(anyhow!("bad status: {}", response.status())), + }; + + let response = response.text().await?; Ok(response) }