Greatly improve error information during migration

This commit is contained in:
asonix 2023-07-02 21:07:15 -05:00
parent e6f17cbac6
commit c8e84b8914
2 changed files with 20 additions and 12 deletions

View File

@ -1387,15 +1387,18 @@ where
let mut failure_count = 0; let mut failure_count = 0;
while let Err(e) = do_migrate_store(repo, from.clone(), to.clone(), skip_missing_files).await { while let Err(e) = do_migrate_store(repo, from.clone(), to.clone(), skip_missing_files).await {
tracing::error!("Failed with {}", e.to_string()); tracing::error!("Migration failed with {}", format!("{e:?}"));
failure_count += 1;
tokio::time::sleep(Duration::from_secs(5)).await; failure_count += 1;
if failure_count >= 50 { if failure_count >= 50 {
tracing::error!("Exceeded 50 errors"); tracing::error!("Exceeded 50 errors");
return Err(e); return Err(e);
} else {
tracing::warn!("Retrying migration +{failure_count}");
} }
tokio::time::sleep(Duration::from_secs(3)).await;
} }
Ok(()) Ok(())
@ -1562,12 +1565,14 @@ where
Err(e) => { Err(e) => {
failure_count += 1; failure_count += 1;
tokio::time::sleep(Duration::from_secs(5)).await; if failure_count > 10 {
tracing::error!("Error migrating file, not retrying");
if failure_count > 50 {
tracing::error!("Error migrating file: {}", e.to_string());
return Err(e); return Err(e);
} else {
tracing::warn!("Failed moving file. Retrying +{failure_count}");
} }
tokio::time::sleep(Duration::from_secs(3)).await;
} }
} }
} }

View File

@ -18,12 +18,15 @@ pub(crate) enum StoreError {
Repo(#[from] crate::repo::RepoError), Repo(#[from] crate::repo::RepoError),
#[error("Requested file is not found")] #[error("Requested file is not found")]
NotFound, FileNotFound(#[source] std::io::Error),
#[error("Requested object is not found")]
ObjectNotFound(#[source] crate::store::object_store::ObjectError),
} }
impl StoreError { impl StoreError {
pub(crate) const fn is_not_found(&self) -> bool { pub(crate) const fn is_not_found(&self) -> bool {
matches!(self, Self::NotFound) matches!(self, Self::FileNotFound(_)) || matches!(self, Self::ObjectNotFound(_))
} }
} }
@ -33,7 +36,7 @@ impl From<crate::store::file_store::FileError> for StoreError {
crate::store::file_store::FileError::Io(e) crate::store::file_store::FileError::Io(e)
if e.kind() == std::io::ErrorKind::NotFound => if e.kind() == std::io::ErrorKind::NotFound =>
{ {
Self::NotFound Self::FileNotFound(e)
} }
e => Self::FileStore(e), e => Self::FileStore(e),
} }
@ -43,10 +46,10 @@ impl From<crate::store::file_store::FileError> for StoreError {
impl From<crate::store::object_store::ObjectError> for StoreError { impl From<crate::store::object_store::ObjectError> for StoreError {
fn from(value: crate::store::object_store::ObjectError) -> Self { fn from(value: crate::store::object_store::ObjectError) -> Self {
match value { match value {
crate::store::object_store::ObjectError::Status( e @ crate::store::object_store::ObjectError::Status(
actix_web::http::StatusCode::NOT_FOUND, actix_web::http::StatusCode::NOT_FOUND,
_, _,
) => Self::NotFound, ) => Self::ObjectNotFound(e),
e => Self::ObjectStore(e), e => Self::ObjectStore(e),
} }
} }