From 0020601d525bf004f940dd03bb2c7b85f398d8e1 Mon Sep 17 00:00:00 2001 From: Hannes Laimer Date: Thu, 25 Apr 2024 11:01:50 +0200 Subject: [PATCH] datastore: fix problem with operations counting ... if `.chunks/` is not available(deleted/moved) ChunkStore::open fails, but that would happen after updating the active operations on the datastore, so no reference that could be dropped is returned. Leading to the operations counter to always increase. This only updates the counter when a reference is returned, not before. Signed-off-by: Hannes Laimer --- pbs-datastore/src/datastore.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pbs-datastore/src/datastore.rs b/pbs-datastore/src/datastore.rs index f95da761..5e2208bc 100644 --- a/pbs-datastore/src/datastore.rs +++ b/pbs-datastore/src/datastore.rs @@ -158,13 +158,6 @@ impl DataStore { } } - if let Some(operation) = operation { - update_active_operations(name, operation, 1)?; - } - - // Our operation is registered, unlock the config. - drop(config_lock); - let mut datastore_cache = DATASTORE_MAP.lock().unwrap(); let entry = datastore_cache.get(name); @@ -172,6 +165,9 @@ impl DataStore { let chunk_store = if let Some(datastore) = &entry { let last_digest = datastore.last_digest.as_ref(); if let Some(true) = last_digest.map(|last_digest| last_digest == &digest) { + if let Some(operation) = operation { + update_active_operations(name, operation, 1)?; + } return Ok(Arc::new(Self { inner: Arc::clone(datastore), operation, @@ -195,6 +191,10 @@ impl DataStore { let datastore = Arc::new(datastore); datastore_cache.insert(name.to_string(), datastore.clone()); + if let Some(operation) = operation { + update_active_operations(name, operation, 1)?; + } + Ok(Arc::new(Self { inner: datastore, operation,