use crate::store::StoreItem;
use crate::store::kv::{StoreKVAcquireMode, StoreKVActionBuilder};
impl super::Executor {
pub fn flusho(&self, item: StoreItem) -> Result<u32, ()> {
if let StoreItem(collection, Some(bucket), Some(object)) = item {
let _kv_read_guard = self.kv_pool.lock_read_access();
if let Ok(kv_store) = self
.kv_pool
.acquire(StoreKVAcquireMode::OpenOnly, collection)
{
executor_kv_lock_write!(kv_store);
let kv_action = StoreKVActionBuilder::access(bucket, kv_store);
let oid = object.as_str();
if let Ok(iid_value) = kv_action.get_oid_to_iid(oid) {
let mut count_flushed = 0;
if let Some(iid) = iid_value {
let iid_terms = {
if let Ok(iid_terms_value) = kv_action.get_iid_to_terms(iid) {
iid_terms_value.unwrap_or_default()
} else {
tracing::error!("failed getting flusho executor iid-to-terms");
Vec::new()
}
};
if let Ok(batch_count) = kv_action.batch_flush_bucket(iid, oid, &iid_terms)
{
count_flushed += batch_count;
} else {
tracing::error!(
"failed executing batch-flush-bucket in flusho executor"
);
}
}
return Ok(count_flushed);
} else {
tracing::error!("failed getting flusho executor oid-to-iid");
}
}
}
Err(())
}
}