Add provisions for retrying requests

This commit is contained in:
asonix 2023-07-16 12:47:51 -05:00
parent 4ea6710621
commit 377b894460

View file

@ -193,20 +193,34 @@ impl StateInner {
.to_str() .to_str()
.ok_or(eyre::eyre!("Filename is not valid utf8"))?; .ok_or(eyre::eyre!("Filename is not valid utf8"))?;
let mut retries = 0;
let mut response = loop {
let file = tokio::fs::File::open(path).await?; let file = tokio::fs::File::open(path).await?;
let body = Body::builder() let body = Body::builder()
.append(Part::new("images[]", file).filename(filename)) .append(Part::new("images[]", file).filename(filename))
.build(); .build();
let mut response = self let res = self
.client .client
.post(self.upload_endpoint()) .post(self.upload_endpoint())
.insert_header((CONTENT_TYPE, body.content_type())) .insert_header((CONTENT_TYPE, body.content_type()))
.timeout(Duration::from_secs(60)) .timeout(Duration::from_secs(60))
.send_stream(body) .send_stream(body)
.await .await;
.map_err(|e| eyre::eyre!("Error sending request {e}"))?;
match res {
Ok(response) => break response,
Err(e) if retries < 10 => {
retries += 1;
tracing::warn!("Failed upload with {e}, retrying +{retries}");
}
Err(e) => {
return Err(eyre::eyre!("Failed upload with {e}"));
}
}
};
let response: UploadReponse = response.json().await?; let response: UploadReponse = response.json().await?;
@ -233,14 +247,28 @@ impl StateInner {
let claim_endpoint = self.claim_endpoint(); let claim_endpoint = self.claim_endpoint();
let mut response = loop { let mut response = loop {
let response = self let mut retries = 0;
let response = loop {
let res = self
.client .client
.get(&claim_endpoint) .get(&claim_endpoint)
.query(upload)? .query(upload)?
.timeout(Duration::from_secs(20)) .timeout(Duration::from_secs(20))
.send() .send()
.await .await;
.map_err(|e| eyre::eyre!("Error sending request {e}"))?;
match res {
Ok(response) => break response,
Err(e) if retries < 10 => {
retries += 1;
tracing::warn!("Failed claim with {e}, retrying +{retries}");
}
Err(e) => {
return Err(eyre::eyre!("Failed claim with {e}"));
}
}
};
if response.status() != StatusCode::NO_CONTENT { if response.status() != StatusCode::NO_CONTENT {
break response; break response;