canic_core/ops/placement/sharding/
mod.rs

1pub mod assign;
2mod hrw;
3mod metrics;
4pub mod policy;
5
6pub use crate::ops::storage::sharding::ShardingRegistryOps;
7pub use metrics::{PoolMetrics, pool_metrics};
8pub use {assign::*, policy::*};
9
10use crate::{Error, ThisError, cdk::types::Principal, ops::storage::sharding::ShardEntry};
11
12///
13/// ShardingOpsError
14/// Logical or configuration errors that occur during sharding planning.
15///
16
17#[derive(Debug, ThisError)]
18pub enum ShardingOpsError {
19    #[error("shard pool not found: {0}")]
20    PoolNotFound(String),
21
22    #[error("shard cap reached")]
23    ShardCapReached,
24
25    #[error("shard creation blocked: {0}")]
26    ShardCreationBlocked(String),
27
28    #[error("sharding disabled")]
29    ShardingDisabled,
30
31    #[error("tenant '{0}' not found")]
32    TenantNotFound(String),
33}
34
35impl From<ShardingOpsError> for Error {
36    fn from(err: ShardingOpsError) -> Self {
37        Self::OpsError(err.to_string())
38    }
39}
40
41///
42/// ShardingRegistryDto
43///
44
45pub type ShardingRegistryDto = Vec<(Principal, ShardEntry)>;