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 file = tokio::fs::File::open(path).await?; let mut retries = 0;
let body = Body::builder() let mut response = loop {
.append(Part::new("images[]", file).filename(filename)) let file = tokio::fs::File::open(path).await?;
.build();
let mut response = self let body = Body::builder()
.client .append(Part::new("images[]", file).filename(filename))
.post(self.upload_endpoint()) .build();
.insert_header((CONTENT_TYPE, body.content_type()))
.timeout(Duration::from_secs(60)) let res = self
.send_stream(body) .client
.await .post(self.upload_endpoint())
.map_err(|e| eyre::eyre!("Error sending request {e}"))?; .insert_header((CONTENT_TYPE, body.content_type()))
.timeout(Duration::from_secs(60))
.send_stream(body)
.await;
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;
.client
.get(&claim_endpoint) let response = loop {
.query(upload)? let res = self
.timeout(Duration::from_secs(20)) .client
.send() .get(&claim_endpoint)
.await .query(upload)?
.map_err(|e| eyre::eyre!("Error sending request {e}"))?; .timeout(Duration::from_secs(20))
.send()
.await;
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;