pub struct WorkspaceTally { /* private fields */ }Expand description
Which channel holds which workspace, folded from the op log.
§Why a map rather than a counter
A per-channel counter incremented and decremented alongside the view
is a second copy of the same fact, and the two can drift — the failure
this repository has hit before, where a guard passed while enforcing
nothing. Holding only “workspace → the channel that created it” makes
the count derived, so it cannot disagree with itself, and makes the
stronger invariant checkable: this map’s keys are exactly
View::workspaces’ keys, because the five operations that move one
move the other.
Implementations§
Source§impl WorkspaceTally
impl WorkspaceTally
Sourcepub fn observe(&mut self, entry: &OpEntry, op: &ViewOp)
pub fn observe(&mut self, entry: &OpEntry, op: &ViewOp)
Folds one admitted entry. Called on the writer thread for a live operation and in the replay loop at startup — the same call in both places, which is what makes a restart reproduce the tally rather than approximate it.
Sourcepub fn workspaces(&self) -> impl Iterator<Item = &str>
pub fn workspaces(&self) -> impl Iterator<Item = &str>
Every workspace the tally is tracking, for the test that pins it
against View::workspaces.