aboutsummaryrefslogtreecommitdiff
path: root/src/block/manager.rs
diff options
context:
space:
mode:
authorAlex Auvolat <alex@adnab.me>2022-06-07 16:52:57 +0200
committerAlex Auvolat <alex@adnab.me>2022-06-07 16:52:57 +0200
commita9e79f848b704347601e082c8065c3ce042b283b (patch)
tree940df323b35f402450225473a63a8ec73b86bc90 /src/block/manager.rs
parent5dbc79b77ebaec3778791f9882266fc809217f62 (diff)
downloadgarage-a9e79f848b704347601e082c8065c3ce042b283b.tar.gz
garage-a9e79f848b704347601e082c8065c3ce042b283b.zip
Bring back the counted tree hack for Sled (with caveat)
caveat: it's not only for sled
Diffstat (limited to 'src/block/manager.rs')
-rw-r--r--src/block/manager.rs17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/block/manager.rs b/src/block/manager.rs
index 8abff1b1..da86a2d5 100644
--- a/src/block/manager.rs
+++ b/src/block/manager.rs
@@ -20,6 +20,7 @@ use opentelemetry::{
};
use garage_db as db;
+use garage_db::counted_tree_hack::CountedTree;
use garage_util::data::*;
use garage_util::error::*;
@@ -94,9 +95,9 @@ pub struct BlockManager {
rc: BlockRc,
- resync_queue: db::Tree,
+ resync_queue: CountedTree,
resync_notify: Notify,
- resync_errors: db::Tree,
+ resync_errors: CountedTree,
system: Arc<System>,
endpoint: Arc<Endpoint<BlockRpc, Self>>,
@@ -126,10 +127,14 @@ impl BlockManager {
let resync_queue = db
.open_tree("block_local_resync_queue")
.expect("Unable to open block_local_resync_queue tree");
+ let resync_queue =
+ CountedTree::new(resync_queue).expect("Could not count block_local_resync_queue");
let resync_errors = db
.open_tree("block_local_resync_errors")
.expect("Unable to open block_local_resync_errors tree");
+ let resync_errors =
+ CountedTree::new(resync_errors).expect("Could not count block_local_resync_errors");
let endpoint = system
.netapp
@@ -299,12 +304,16 @@ impl BlockManager {
/// Get lenght of resync queue
pub fn resync_queue_len(&self) -> Result<usize, Error> {
- Ok(self.resync_queue.len()?)
+ // This currently can't return an error because the CountedTree hack
+ // doesn't error on .len(), but this will change when we remove the hack
+ // (hopefully someday!)
+ Ok(self.resync_queue.len())
}
/// Get number of blocks that have an error
pub fn resync_errors_len(&self) -> Result<usize, Error> {
- Ok(self.resync_errors.len()?)
+ // (see resync_queue_len comment)
+ Ok(self.resync_errors.len())
}
/// Get number of items in the refcount table