Skip to content

Commit

Permalink
fix opaque type
Browse files Browse the repository at this point in the history
Signed-off-by: xxchan <xxchan22f@gmail.com>
  • Loading branch information
xxchan committed Jun 20, 2024
1 parent d2c306d commit 1906cb5
Showing 1 changed file with 35 additions and 28 deletions.
63 changes: 35 additions & 28 deletions src/storage/src/store_impl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,41 @@ use crate::monitor::{
use crate::opts::StorageOpts;
use crate::StateStore;

pub type HummockStorageType = impl StateStore + AsHummock;
pub type MemoryStateStoreType = impl StateStore + AsHummock;
pub type SledStateStoreType = impl StateStore + AsHummock;
mod opaque_type {
use super::*;

pub type HummockStorageType = impl StateStore + AsHummock;
pub type MemoryStateStoreType = impl StateStore + AsHummock;
pub type SledStateStoreType = impl StateStore + AsHummock;

impl StateStoreImpl {
pub(super) fn in_memory(
state_store: MemoryStateStore,
storage_metrics: Arc<MonitoredStorageMetrics>,
) -> Self {
// The specific type of MemoryStateStoreType in deducted here.
Self::MemoryStateStore(may_dynamic_dispatch(state_store).monitored(storage_metrics))
}

pub fn hummock(
state_store: HummockStorage,
storage_metrics: Arc<MonitoredStorageMetrics>,
) -> Self {
// The specific type of HummockStateStoreType in deducted here.
Self::HummockStateStore(
may_dynamic_dispatch(may_verify(state_store)).monitored(storage_metrics),
)
}

pub fn sled(
state_store: SledStateStore,
storage_metrics: Arc<MonitoredStorageMetrics>,
) -> Self {
Self::SledStateStore(may_dynamic_dispatch(state_store).monitored(storage_metrics))
}
}
}
pub use opaque_type::{HummockStorageType, MemoryStateStoreType, SledStateStoreType};

/// The type erased [`StateStore`].
#[derive(Clone, EnumAsInner)]
Expand Down Expand Up @@ -109,31 +141,6 @@ fn may_verify(state_store: impl StateStore + AsHummock) -> impl StateStore + AsH
}

impl StateStoreImpl {
fn in_memory(
state_store: MemoryStateStore,
storage_metrics: Arc<MonitoredStorageMetrics>,
) -> Self {
// The specific type of MemoryStateStoreType in deducted here.
Self::MemoryStateStore(may_dynamic_dispatch(state_store).monitored(storage_metrics))
}

pub fn hummock(
state_store: HummockStorage,
storage_metrics: Arc<MonitoredStorageMetrics>,
) -> Self {
// The specific type of HummockStateStoreType in deducted here.
Self::HummockStateStore(
may_dynamic_dispatch(may_verify(state_store)).monitored(storage_metrics),
)
}

pub fn sled(
state_store: SledStateStore,
storage_metrics: Arc<MonitoredStorageMetrics>,
) -> Self {
Self::SledStateStore(may_dynamic_dispatch(state_store).monitored(storage_metrics))
}

pub fn shared_in_memory_store(storage_metrics: Arc<MonitoredStorageMetrics>) -> Self {
Self::in_memory(MemoryStateStore::shared(), storage_metrics)
}
Expand Down

0 comments on commit 1906cb5

Please sign in to comment.