pub struct ShardedCsrIndex { /* private fields */ }Expand description
Per-tenant partitioned CSR index.
Holds one CsrIndex per tenant on the owning Data Plane core.
Handlers resolve the caller’s tenant to a partition up front; all
downstream graph operations (algorithms, MATCH, traversal) run
against that single partition and cannot reach any other tenant’s
state.
Implementations§
Source§impl ShardedCsrIndex
impl ShardedCsrIndex
Sourcepub fn partition(&self, tid: TenantId) -> Option<&CsrIndex>
pub fn partition(&self, tid: TenantId) -> Option<&CsrIndex>
Shared access to a tenant’s partition, if it exists.
Returns None if the tenant has never inserted any graph data.
Callers expecting a read-only view of a possibly-empty partition
should treat None as “empty” rather than as an error.
Sourcepub fn partition_mut(&mut self, tid: TenantId) -> Option<&mut CsrIndex>
pub fn partition_mut(&mut self, tid: TenantId) -> Option<&mut CsrIndex>
Mutable access to a tenant’s partition, if it exists.
Sourcepub fn get_or_create(&mut self, tid: TenantId) -> &mut CsrIndex
pub fn get_or_create(&mut self, tid: TenantId) -> &mut CsrIndex
Mutable access to a tenant’s partition, creating an empty one on first use.
This is the canonical write-path entry point: insertion handlers
call this once to resolve the partition, then operate on the
returned &mut CsrIndex exactly as they would on a standalone
instance.
Sourcepub fn drop_partition(&mut self, tid: TenantId) -> bool
pub fn drop_partition(&mut self, tid: TenantId) -> bool
Drop a tenant’s entire graph state.
Returns true if a partition existed and was removed, false if
the tenant had no graph state. Used by tenant-purge flows — O(1)
structural deletion replaces the former “range-scan and erase
every key with the {tid}: prefix” approach, which was both
slow and coupled to the lexical encoding.
Sourcepub fn drop_collection(&mut self, _tid: TenantId, _collection: &str)
pub fn drop_collection(&mut self, _tid: TenantId, _collection: &str)
Collection-scoped in-memory reclaim.
The CSR is collection-agnostic in memory: a tenant’s partition holds
edges from all collections in a single adjacency structure. There
is no per-collection sub-partition to drop. As a result this method is
intentionally a no-op — collection-scoped edge removal from persistent
storage is handled by [EdgeStore::purge_collection], and the stale
in-memory CSR state is eliminated on the next tenant drop_partition
call (triggered by tenant deletion) or on server restart (CSR is
rebuilt from the now-clean EdgeStore).
Sourcepub fn contains_partition(&self, tid: TenantId) -> bool
pub fn contains_partition(&self, tid: TenantId) -> bool
Whether a partition exists for the tenant.
Sourcepub fn partition_count(&self) -> usize
pub fn partition_count(&self) -> usize
Number of tenants with graph state on this core.
Sourcepub fn iter(&self) -> Iter<'_, TenantId, CsrIndex>
pub fn iter(&self) -> Iter<'_, TenantId, CsrIndex>
Iterate all (tenant, partition) pairs. Used for checkpointing, memory accounting, and administrative views that genuinely need to see every tenant’s state.
Sourcepub fn iter_mut(&mut self) -> IterMut<'_, TenantId, CsrIndex>
pub fn iter_mut(&mut self) -> IterMut<'_, TenantId, CsrIndex>
Mutable iteration over all partitions. Used by compact() and
similar maintenance passes that apply per-partition without
needing tenant routing.
Sourcepub fn compact_all(&mut self) -> Result<(), GraphError>
pub fn compact_all(&mut self) -> Result<(), GraphError>
Compact every partition. Mirrors CsrIndex::compact but across
the full set — maintenance handlers call this once per core.
§Errors
Returns the first GraphError::MemoryBudget encountered if any
partition has a memory governor installed and the budget is exhausted.
Partitions already compacted before the error are not rolled back.
Sourcepub fn install_partition(&mut self, tid: TenantId, csr: CsrIndex)
pub fn install_partition(&mut self, tid: TenantId, csr: CsrIndex)
Replace an existing partition (or install a new one) with the
given CsrIndex. Used by the rebuild path — after rebuilding a
tenant’s CSR from persistent edge storage, this installs it
atomically.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for ShardedCsrIndex
impl !RefUnwindSafe for ShardedCsrIndex
impl Send for ShardedCsrIndex
impl !Sync for ShardedCsrIndex
impl Unpin for ShardedCsrIndex
impl UnsafeUnpin for ShardedCsrIndex
impl UnwindSafe for ShardedCsrIndex
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.