mirror of
https://codeberg.org/demostf/backup.git
synced 2026-06-03 09:54:18 +02:00
timeout for demo download
This commit is contained in:
parent
d19099b827
commit
8bf8e45dc0
2 changed files with 22 additions and 5 deletions
|
|
@ -1,7 +1,9 @@
|
||||||
use crate::store::Store;
|
use crate::store::Store;
|
||||||
use crate::Error;
|
use crate::Error;
|
||||||
use demostf_client::{ApiClient, Demo, ListOrder, ListParams};
|
use demostf_client::{ApiClient, Demo, ListOrder, ListParams};
|
||||||
use tracing::{info, instrument};
|
use std::time::Duration;
|
||||||
|
use tokio::time::timeout;
|
||||||
|
use tracing::{error, info, instrument};
|
||||||
|
|
||||||
pub struct Backup {
|
pub struct Backup {
|
||||||
client: ApiClient,
|
client: ApiClient,
|
||||||
|
|
@ -22,10 +24,23 @@ impl Backup {
|
||||||
|
|
||||||
{
|
{
|
||||||
let file = self.store.create(name).await?;
|
let file = self.store.create(name).await?;
|
||||||
if let Err(e) = demo.save(&self.client, file).await {
|
match timeout(Duration::from_secs(5 * 60), async {
|
||||||
let _ = self.store.remove(name);
|
if let Err(e) = demo.save(&self.client, file).await {
|
||||||
return Err(e.into());
|
let _ = self.store.remove(name);
|
||||||
}
|
Err::<(), Error>(e.into())
|
||||||
|
} else {
|
||||||
|
Ok::<_, Error>(())
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.await
|
||||||
|
{
|
||||||
|
Err(_timeout) => {
|
||||||
|
error!("timeout while downloading demo");
|
||||||
|
let _ = self.store.remove(name);
|
||||||
|
Err(Error::Timeout)
|
||||||
|
}
|
||||||
|
Ok(res) => res,
|
||||||
|
}?;
|
||||||
}
|
}
|
||||||
|
|
||||||
let digest = self.store.hash(name)?;
|
let digest = self.store.hash(name)?;
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,8 @@ pub enum Error {
|
||||||
Api(#[from] demostf_client::Error),
|
Api(#[from] demostf_client::Error),
|
||||||
#[error("MD5 digest mismatch for downloaded demo, expected {expected:?}, received {got:?}")]
|
#[error("MD5 digest mismatch for downloaded demo, expected {expected:?}, received {got:?}")]
|
||||||
DigestMismatch { expected: [u8; 16], got: [u8; 16] },
|
DigestMismatch { expected: [u8; 16], got: [u8; 16] },
|
||||||
|
#[error("Backup timed out")]
|
||||||
|
Timeout,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue