pub mod blocks;
pub mod events;
pub mod integrations;
pub mod manager;
pub mod metrics;
pub mod pools;
pub mod pubsub;
pub mod registry;
pub mod sequence;
pub mod tinylfu;
#[cfg(any(test, feature = "testing"))]
pub mod testing;
use std::sync::atomic::{AtomicU64, Ordering};
use bincode::{Decode, Encode};
use serde::{Deserialize, Serialize};
pub use blocks::{
BlockError, BlockMetadata, CompleteBlock, ImmutableBlock, LifecyclePin, LifecyclePinRef,
MutableBlock, WeakBlock,
};
pub use integrations::{
ApplyError, DecodeOutcome, NoopDelegate, RequestSequence, SchedulableSequence,
SchedulableSequenceBuilder, ScheduleError, SequenceDelegate, SequenceEvent, SequenceState,
};
pub use manager::BlockManager;
pub use registry::BlockRegistry;
pub use sequence::{
BlockSequence, BlockSequenceError, ExternalBlockAssignments, LogicalBlockAssignmentError,
LogicalBlockAssignments, zip_assigned, zip_assigned_pending,
};
pub type BlockId = usize;
pub type SequenceHash = dynamo_tokens::PositionalLineageHash;
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Encode, Decode, Serialize, Deserialize)]
pub struct ManagerId(pub u64);
impl ManagerId {
pub const NULL: Self = Self(0);
pub(crate) fn next() -> Self {
static NEXT: AtomicU64 = AtomicU64::new(1);
Self(NEXT.fetch_add(1, Ordering::Relaxed))
}
}
pub trait KvbmSequenceHashProvider {
fn kvbm_sequence_hash(&self) -> SequenceHash;
}
impl KvbmSequenceHashProvider for dynamo_tokens::TokenBlock {
fn kvbm_sequence_hash(&self) -> SequenceHash {
self.positional_lineage_hash()
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Encode, Decode, Serialize, Deserialize)]
pub enum LogicalLayoutHandle {
G1,
G2,
G3,
G4,
}