use crate::store::StoreItem;
use crate::store::kv::{StoreKVAcquireMode, StoreKVActionBuilder};
impl super::Executor {
pub fn flushb(&self, item: StoreItem) -> Result<u32, ()> {
if let StoreItem(collection, Some(bucket), None) = item {
let _kv_read_guard = self.kv_pool.lock_read_access();
let _fst_write_guard = self.fst_pool.lock_write_access();
if let Ok(kv_store) = self
.kv_pool
.acquire(StoreKVAcquireMode::OpenOnly, collection)
{
executor_kv_lock_write!(kv_store);
if kv_store.is_some() {
tracing::debug!(
"collection store exists, erasing: {} from {}",
bucket.as_str(),
collection.as_str()
);
let kv_action = StoreKVActionBuilder::access(bucket, kv_store);
if let Ok(erase_count) = kv_action.batch_erase_bucket() {
if self.fst_pool.erase(collection, Some(bucket)).is_ok() {
tracing::debug!("done with bucket erasure");
return Ok(erase_count);
}
}
} else {
tracing::debug!(
"collection store does not exist, consider {} from {} already erased",
bucket.as_str(),
collection.as_str()
);
return Ok(0);
}
}
}
Err(())
}
}