GC scheduling: avoid triggering operation tracking error for upfront checks
without that one gets a "failed to lookup datastore X" in the log for every datastore that is in read-only or offline maintenance mode, even if they aren't scheduled for GC anyway. Avoid that by first opening the datastore through a Lookup operation, and only re-open it as Write op once we know that GC needs to get scheduled for it. Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
parent
0408f60b58
commit
e22ad28302
|
@ -572,14 +572,6 @@ async fn schedule_datastore_garbage_collection() {
|
|||
};
|
||||
|
||||
for (store, (_, store_config)) in config.sections {
|
||||
let datastore = match DataStore::lookup_datastore(&store, Some(Operation::Write)) {
|
||||
Ok(datastore) => datastore,
|
||||
Err(err) => {
|
||||
eprintln!("lookup_datastore failed - {}", err);
|
||||
continue;
|
||||
}
|
||||
};
|
||||
|
||||
let store_config: DataStoreConfig = match serde_json::from_value(store_config) {
|
||||
Ok(c) => c,
|
||||
Err(err) => {
|
||||
|
@ -601,19 +593,26 @@ async fn schedule_datastore_garbage_collection() {
|
|||
}
|
||||
};
|
||||
|
||||
{ // limit datastore scope due to Op::Lookup
|
||||
let datastore = match DataStore::lookup_datastore(&store, Some(Operation::Lookup)) {
|
||||
Ok(datastore) => datastore,
|
||||
Err(err) => {
|
||||
eprintln!("lookup_datastore failed - {}", err);
|
||||
continue;
|
||||
}
|
||||
};
|
||||
|
||||
if datastore.garbage_collection_running() {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
let worker_type = "garbage_collection";
|
||||
|
||||
let last = match jobstate::last_run_time(worker_type, &store) {
|
||||
Ok(time) => time,
|
||||
Err(err) => {
|
||||
eprintln!(
|
||||
"could not get last run time of {} {}: {}",
|
||||
worker_type, store, err
|
||||
);
|
||||
eprintln!("could not get last run time of {worker_type} {store}: {err}");
|
||||
continue;
|
||||
}
|
||||
};
|
||||
|
@ -638,6 +637,14 @@ async fn schedule_datastore_garbage_collection() {
|
|||
Err(_) => continue, // could not get lock
|
||||
};
|
||||
|
||||
let datastore = match DataStore::lookup_datastore(&store, Some(Operation::Write)) {
|
||||
Ok(datastore) => datastore,
|
||||
Err(err) => {
|
||||
log::warn!("skipping scheduled GC on {store}, could look it up - {err}");
|
||||
continue;
|
||||
}
|
||||
};
|
||||
|
||||
let auth_id = Authid::root_auth_id();
|
||||
|
||||
if let Err(err) = crate::server::do_garbage_collection_job(
|
||||
|
|
Loading…
Reference in New Issue