mirror of
https://github.com/deuxfleurs-org/garage.git
synced 2026-08-24 11:36:31 +00:00
Panic on (reoccuring) decode error
This commit is contained in:
@@ -554,6 +554,7 @@ pub(crate) struct ResyncWorker {
|
|||||||
tranquilizer: Tranquilizer,
|
tranquilizer: Tranquilizer,
|
||||||
next_delay: Duration,
|
next_delay: Duration,
|
||||||
persister: PersisterShared<ResyncPersistedConfig>,
|
persister: PersisterShared<ResyncPersistedConfig>,
|
||||||
|
had_decode_error: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ResyncWorker {
|
impl ResyncWorker {
|
||||||
@@ -565,6 +566,7 @@ impl ResyncWorker {
|
|||||||
tranquilizer: Tranquilizer::new(30),
|
tranquilizer: Tranquilizer::new(30),
|
||||||
next_delay: Duration::from_secs(10),
|
next_delay: Duration::from_secs(10),
|
||||||
persister,
|
persister,
|
||||||
|
had_decode_error: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -612,6 +614,15 @@ impl Worker for ResyncWorker {
|
|||||||
self.next_delay = delay;
|
self.next_delay = delay;
|
||||||
Ok(WorkerState::Idle)
|
Ok(WorkerState::Idle)
|
||||||
}
|
}
|
||||||
|
Err(db::Error::Decode(e)) => {
|
||||||
|
// We give it one second chance in the very unlikely case that the bytes would somehow
|
||||||
|
// have been corrupted during read and that a new read would lead to a correct decoding.
|
||||||
|
if self.had_decode_error {
|
||||||
|
panic!("An error has happened when decoding something stored in the local k/v store: {}.", e);
|
||||||
|
}
|
||||||
|
self.had_decode_error = true;
|
||||||
|
Ok(WorkerState::Busy)
|
||||||
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
// The errors that we have here are only db errors
|
// The errors that we have here are only db errors
|
||||||
// We don't really know how to handle them so just ¯\_(ツ)_/¯
|
// We don't really know how to handle them so just ¯\_(ツ)_/¯
|
||||||
@@ -619,6 +630,7 @@ impl Worker for ResyncWorker {
|
|||||||
// if it does there is not much we can do -- TODO should we just panic?)
|
// if it does there is not much we can do -- TODO should we just panic?)
|
||||||
// Here we just give the error to the worker manager,
|
// Here we just give the error to the worker manager,
|
||||||
// it will print it to the logs and increment a counter
|
// it will print it to the logs and increment a counter
|
||||||
|
self.had_decode_error = false;
|
||||||
Err(e.into())
|
Err(e.into())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user