⎇ 227715a464b872a0ecd918a069c667e05c95ec27
crates/ente-zero/src/events.rs
History
Who touched what
raw
Capability quotas, CAS gc, patrones burst/silence, snapshot incremental
1//! Eventos internos del bucle primordial. Todo cambio de estado del fractal
2//! pasa por aquí — la única vía de mutación del grafo desde tasks externas.
3
4use ente_bus::{BusMessage, BusRequest, BusResponse, PeerCreds};
5use ente_card::{Capability, EntityCard};
6use nix::sys::signal::Signal;
7use tokio::sync::{mpsc, oneshot};
8use ulid::Ulid;
9
10#[derive(Debug)]
11pub enum GraphEvent {
12 EnteDied { id: Ulid, status: ExitStatus },
13 CapabilityRequested {
14 from: Ulid,
15 cap: Capability,
16 reply: oneshot::Sender<CapabilityGrant>,
17 },
18 SpawnRequest { card: EntityCard, requester: Ulid },
19 /// Request del bus interno. `peer` es no-falsificable (kernel-injected
20 /// via SO_PEERCRED). `from` es la identidad reclamada por el cliente —
21 /// el grafo la verifica contra `peer.pid`.
22 BusRequest {
23 peer: PeerCreds,
24 from: Option<Ulid>,
25 request: BusRequest,
26 outbound: mpsc::Sender<BusMessage>,
27 reply: oneshot::Sender<BusResponse>,
28 },
29 /// Response a un Invoke forwardeado por el grafo a un proveedor.
30 /// `seq` debe coincidir con una entry en pending_invokes.
31 BusResponse { seq: u64, response: BusResponse },
32 /// Cliente del bus cerró su conexión. Si había anunciado identidad,
33 /// el grafo retira esa conexión del registry.
34 BusConnClosed { ente_id: Option<Ulid> },
35 Shutdown { reason: ShutdownReason },
36}
37
38#[derive(Debug, Clone)]
39pub enum ExitStatus {
40 Exit(i32),
41 Killed(Signal),
42}
43
44#[derive(Debug, Clone)]
45pub enum ShutdownReason {
46 SeedRequested,
47 Signal(Signal),
48}
49
50#[derive(Debug)]
51pub enum CapabilityGrant {
52 Granted { token: u64 },
53 NoProvider,
54 Denied { reason: &'static str },
55 /// El holder ya tiene el máximo de tokens activos para esta cap.
56 /// Debe esperar a que alguno expire o renovar uno existente.
57 QuotaExceeded { active: u32, limit: u32 },
58}