mod check;
mod conflict_index;
mod conflict_kind;
mod publish;
mod ssi_tracker;
use parking_lot::Mutex;
use std::collections::BTreeMap;
use std::sync::atomic::AtomicUsize;
use linkrs_core::types::{EdgeIdentifier, Timestamp, VertexId};
use super::types::WriteSet;
use conflict_index::ConflictIndex;
use ssi_tracker::SsiTracker;
pub use conflict_kind::ConflictType;
pub struct Certifier {
commit_lock: Mutex<()>,
committed_write_sets: Mutex<BTreeMap<Timestamp, Vec<WriteSet>>>,
vertex_writes: ConflictIndex<VertexId>,
edge_writes: ConflictIndex<EdgeIdentifier>,
schema_writes: ConflictIndex<String>,
index_writes: ConflictIndex<String>,
ssi_tracker: SsiTracker,
prune_countdown: AtomicUsize,
}
const PRUNE_INTERVAL: usize = 64;
impl Certifier {
pub fn new() -> Self {
Self {
commit_lock: Mutex::new(()),
committed_write_sets: Mutex::new(BTreeMap::new()),
vertex_writes: ConflictIndex::new(),
edge_writes: ConflictIndex::new(),
schema_writes: ConflictIndex::new(),
index_writes: ConflictIndex::new(),
ssi_tracker: SsiTracker::new(),
prune_countdown: AtomicUsize::new(1),
}
}
}
impl Default for Certifier {
fn default() -> Self {
Self::new()
}
}
#[cfg(test)]
mod tests;