liminal_server/agents/topology_signal.rs
1//! Agent metadata advances the existing console publisher by a signal.
2
3use super::{ConsoleError, ConsoleHub};
4
5impl ConsoleHub {
6 /// Makes a real metadata change due without inventing a worker or a flow.
7 ///
8 /// # Errors
9 /// The topology lock or revision counter is unavailable.
10 pub fn agent_changed(&self) -> Result<(), ConsoleError> {
11 let mut state = self.lock_topology()?;
12 let next = state
13 .model
14 .rev()
15 .checked_add(1)
16 .ok_or(ConsoleError::TopologyRevisionOverflow)?;
17 state.model.ensure_revision(next);
18 state.stale = true;
19 let due = state.subscribers > 0;
20 drop(state);
21 if due {
22 self.wake();
23 }
24 Ok(())
25 }
26}