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::Error;
|
||||
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 {
|
||||
client: ApiClient,
|
||||
|
|
@ -22,10 +24,23 @@ impl Backup {
|
|||
|
||||
{
|
||||
let file = self.store.create(name).await?;
|
||||
match timeout(Duration::from_secs(5 * 60), async {
|
||||
if let Err(e) = demo.save(&self.client, file).await {
|
||||
let _ = self.store.remove(name);
|
||||
return Err(e.into());
|
||||
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)?;
|
||||
|
|
|
|||
|
|
@ -18,6 +18,8 @@ pub enum Error {
|
|||
Api(#[from] demostf_client::Error),
|
||||
#[error("MD5 digest mismatch for downloaded demo, expected {expected:?}, received {got:?}")]
|
||||
DigestMismatch { expected: [u8; 16], got: [u8; 16] },
|
||||
#[error("Backup timed out")]
|
||||
Timeout,
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue