use std::sync::Arc;
use crate::base::commit_log_dispatcher::CommitLogDispatcher;
use crate::base::dispatch_request::DispatchRequest;
use crate::config::message_store_config::MessageStoreConfig;
use crate::index::index_service::IndexService;
#[derive(Clone)]
pub struct CommitLogDispatcherBuildIndex {
index_service: IndexService,
message_store_config: Arc<MessageStoreConfig>,
}
impl CommitLogDispatcherBuildIndex {
pub fn new(index_service: IndexService, message_store_config: Arc<MessageStoreConfig>) -> Self {
Self {
index_service,
message_store_config,
}
}
}
impl CommitLogDispatcher for CommitLogDispatcherBuildIndex {
fn dispatch(&self, dispatch_request: &mut DispatchRequest) {
if self.message_store_config.message_index_enable {
self.index_service.build_index(dispatch_request);
}
}
fn dispatch_progress_offset(&self, _commit_log_min_offset: i64) -> Option<i64> {
self.message_store_config
.message_index_enable
.then(|| self.index_service.get_max_dispatch_commit_log_offset())
.flatten()
}
}