tawasuyu
⎇ main crates/ente-zero/src/events.rs Rust · 58 lines · 1.9 KB History Who touched what raw

Capability quotas, CAS gc, patrones burst/silence, snapshot incremental f4eb7dd94 · Sergio ·

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}