Skip to main content

nodedb_mem/
error.rs

1// SPDX-License-Identifier: BUSL-1.1
2
3use nodedb_types::{DatabaseId, TenantId};
4
5use crate::engine::EngineId;
6
7/// Errors produced by the memory governor.
8#[derive(Debug, thiserror::Error)]
9pub enum MemError {
10    /// Allocation request exceeds the engine's remaining budget.
11    #[error(
12        "memory budget exhausted for {engine:?}: requested {requested} bytes, \
13         available {available} bytes (limit: {limit} bytes)"
14    )]
15    BudgetExhausted {
16        engine: EngineId,
17        requested: usize,
18        available: usize,
19        limit: usize,
20    },
21
22    /// The global memory ceiling would be exceeded.
23    #[error(
24        "global memory ceiling exceeded: total allocated {allocated} bytes, \
25         ceiling {ceiling} bytes, requested {requested} bytes"
26    )]
27    GlobalCeilingExceeded {
28        allocated: usize,
29        ceiling: usize,
30        requested: usize,
31    },
32
33    /// The per-database memory budget would be exceeded.
34    #[error(
35        "database memory budget exhausted for database {db:?}: \
36         requested {requested} bytes, available {available} bytes (limit: {limit} bytes)"
37    )]
38    DatabaseBudgetExhausted {
39        db: DatabaseId,
40        requested: usize,
41        available: usize,
42        limit: usize,
43    },
44
45    /// The per-tenant memory budget would be exceeded.
46    #[error(
47        "tenant memory budget exhausted for tenant {tenant:?} in database {db:?}: \
48         requested {requested} bytes, available {available} bytes (limit: {limit} bytes)"
49    )]
50    TenantBudgetExhausted {
51        db: DatabaseId,
52        tenant: TenantId,
53        requested: usize,
54        available: usize,
55        limit: usize,
56    },
57
58    /// Engine is not registered with the governor.
59    #[error("unknown engine: {0:?}")]
60    UnknownEngine(EngineId),
61
62    /// jemalloc introspection error.
63    #[error("jemalloc error: {0}")]
64    Jemalloc(String),
65}
66
67pub type Result<T> = std::result::Result<T, MemError>;