block/repair.rs: Added migration for ScrubWorkerPersisted's time_next_run_scrub. #523

Merged
lx merged 3 commits from jpds/garage:migrate-scrubworkerpersisted into main 2023-03-10 13:25:02 +00:00
Showing only changes of commit 7b65dd24e2 - Show all commits

View file

@ -196,7 +196,7 @@ mod v082 {
ScrubWorkerPersisted {
tranquility: old.tranquility,
time_last_complete_scrub: old.time_last_complete_scrub,
time_next_run_scrub: randomize_next_scrub_run_time(),
time_next_run_scrub: randomize_next_scrub_run_time(old.time_last_complete_scrub),
corruptions_detected: old.corruptions_detected,
}
jpds marked this conversation as resolved Outdated
Outdated
Review

Can this be selected by adding the random interval to the old time_last_complete_scrub rather than starting from now? Otherwise the scrub may never happen if the daemon is continuously restarted

Can this be selected by adding the random interval to the old time_last_complete_scrub rather than starting from now? Otherwise the scrub may never happen if the daemon is continuously restarted
Outdated
Review

Yep, I was adding that in now - but wanted to verify that the migration was on the right track :-)

Yep, I was adding that in now - but wanted to verify that the migration was on the right track :-)
Outdated
Review

yes it's fine :)

yes it's fine :)
}
@ -215,11 +215,11 @@ pub struct ScrubWorker {
persister: PersisterShared<ScrubWorkerPersisted>,
}
fn randomize_next_scrub_run_time() -> u64 {
fn randomize_next_scrub_run_time(timestamp: u64) -> u64 {
// Take SCRUB_INTERVAL and mix in a random interval of 10 days to attempt to
// balance scrub load across different cluster nodes.
let next_run_timestamp = now_msec()
let next_run_timestamp = timestamp
+ SCRUB_INTERVAL
.saturating_add(Duration::from_secs(
rand::thread_rng().gen_range(0..3600 * 24 * 10),
@ -233,7 +233,7 @@ impl Default for ScrubWorkerPersisted {
fn default() -> Self {
ScrubWorkerPersisted {
time_last_complete_scrub: 0,
time_next_run_scrub: randomize_next_scrub_run_time(),
time_next_run_scrub: randomize_next_scrub_run_time(now_msec()),
tranquility: INITIAL_SCRUB_TRANQUILITY,
corruptions_detected: 0,
}
@ -395,7 +395,7 @@ impl Worker for ScrubWorker {
} else {
self.persister.set_with(|p| {
p.time_last_complete_scrub = now_msec();
p.time_next_run_scrub = randomize_next_scrub_run_time();
p.time_next_run_scrub = randomize_next_scrub_run_time(now_msec());
})?;
self.work = ScrubWorkerState::Finished;
self.tranquilizer.clear();