Add provisions for retrying requests
This commit is contained in:
parent
4ea6710621
commit
377b894460
1 changed files with 48 additions and 20 deletions
68
src/main.rs
68
src/main.rs
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue