use crate::{
config::{FleetServiceMemberPurpose, FleetServicePlacementPolicy},
dto::{
fleet_subnet_root::{
FleetSubnetRootDrainingResponse, FleetSubnetRootFinalInventoryResponse,
},
root_store::RootStoreBootstrapRequest,
},
ids::{
CanisterRole, ComponentGroupMemberPath, ComponentGroupPlacementId, ComponentInstanceId,
ComponentSpecAdmission, ComponentSpecId, ComponentTopologyDigest, FleetRegistryAuthority,
FleetServiceId, FleetSubnetRootLimits, FleetSubnetRootReleaseSet, SubnetId,
},
};
use candid::{CandidType, Principal};
use serde::{Deserialize, Serialize};
#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub enum FleetSubnetRootStatus {
Joining,
Active,
Draining,
Removed,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetComponentSpecEntry {
pub component_spec: ComponentSpecId,
pub spec_hash: [u8; 32],
pub component_role: CanisterRole,
pub maximum_fleet_instances: u32,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetSubnetRootEntry {
pub placement_subnet: SubnetId,
pub fleet_subnet_root: Principal,
pub component_admissions: Vec<ComponentSpecAdmission>,
pub component_topology_digest: ComponentTopologyDigest,
pub active_release_set: FleetSubnetRootReleaseSet,
pub limits: FleetSubnetRootLimits,
pub status: FleetSubnetRootStatus,
}
#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub enum FleetServiceMode {
AuthorityReplica,
ActivePool,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(deny_unknown_fields)]
pub struct FleetServiceComponentBinding {
pub member_purpose: FleetServiceMemberPurpose,
pub component: ComponentInstanceId,
pub fleet_subnet_root: Principal,
pub canister_id: Principal,
pub group_placement: ComponentGroupPlacementId,
pub member_path: ComponentGroupMemberPath,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(deny_unknown_fields)]
pub struct FleetServiceBinding {
pub service: FleetServiceId,
pub role: CanisterRole,
pub component_spec: ComponentSpecId,
pub mode: FleetServiceMode,
pub placement: FleetServicePlacementPolicy,
pub members: Vec<FleetServiceComponentBinding>,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetRegistry {
pub authority: FleetRegistryAuthority,
pub revision: u64,
pub component_specs: Vec<FleetComponentSpecEntry>,
pub fleet_subnet_roots: Vec<FleetSubnetRootEntry>,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetRegistryManifest {
pub authority: FleetRegistryAuthority,
pub revision: u64,
pub byte_length: u64,
pub content_hash: [u8; 32],
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetRegistryVersion {
pub authority: FleetRegistryAuthority,
pub revision: u64,
pub content_hash: [u8; 32],
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetSubnetRootJoinRequest {
pub expected_registry: FleetRegistryVersion,
pub entry: FleetSubnetRootEntry,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetSubnetRootJoinResponse {
pub entry: FleetSubnetRootEntry,
pub version: FleetRegistryVersion,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetRegistryActivationRequest {
pub expected_registry: FleetRegistryVersion,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetRegistryActivationResponse {
pub previous_version: FleetRegistryVersion,
pub version: FleetRegistryVersion,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetSubnetRootDrainingPublicationRequest {
pub expected_registry: FleetRegistryVersion,
pub root_draining: FleetSubnetRootDrainingResponse,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetSubnetRootDrainingPublicationResponse {
pub root_draining: FleetSubnetRootDrainingResponse,
pub previous_version: FleetRegistryVersion,
pub version: FleetRegistryVersion,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetSubnetRootRemovalPublicationRequest {
pub expected_registry: FleetRegistryVersion,
pub final_inventory: FleetSubnetRootFinalInventoryResponse,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetSubnetRootRemovalPublicationResponse {
pub final_inventory: FleetSubnetRootFinalInventoryResponse,
pub previous_version: FleetRegistryVersion,
pub version: FleetRegistryVersion,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetSubnetRootDeletionReadinessIntentRequest {
pub operation_id: [u8; 32],
pub fleet_subnet_root: Principal,
pub final_inventory_hash: [u8; 32],
pub store_deletion_hash: [u8; 32],
pub observed_cycles_before_reclamation: u128,
pub retained_cycles_target: u128,
pub observed_reserved_cycles: u128,
pub observed_idle_cycles_burned_per_day: u128,
pub observed_freezing_threshold_seconds: u128,
pub prepared_at_ns: u64,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetSubnetRootDeletionReadinessIntentResponse {
pub request: FleetSubnetRootDeletionReadinessIntentRequest,
pub coordinator: Principal,
pub recorded_at_ns: u64,
pub intent_hash: [u8; 32],
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetSubnetRootDeletionReadinessRequest {
pub operation_id: [u8; 32],
pub fleet_subnet_root: Principal,
pub expected_intent_hash: [u8; 32],
pub observed_cycles_after_reclamation: u128,
pub cycles_reclaimed_at_ns: u64,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetSubnetRootDeletionReadinessResponse {
pub request: FleetSubnetRootDeletionReadinessRequest,
pub coordinator: Principal,
pub final_inventory_hash: [u8; 32],
pub store_deletion_hash: [u8; 32],
pub observed_cycles_before_reclamation: u128,
pub retained_cycles_target: u128,
pub observed_reserved_cycles: u128,
pub observed_idle_cycles_burned_per_day: u128,
pub observed_freezing_threshold_seconds: u128,
pub prepared_at_ns: u64,
pub recorded_at_ns: u64,
pub readiness_hash: [u8; 32],
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetSubnetRootDeletionExecutionRequest {
pub operation_id: [u8; 32],
pub fleet_subnet_root: Principal,
pub expected_readiness_hash: [u8; 32],
pub observed_module_hash: [u8; 32],
pub observed_controllers: Vec<Principal>,
pub observed_cycles_after_reclamation: u128,
pub observed_reserved_cycles: u128,
pub observed_idle_cycles_burned_per_day: u128,
pub observed_freezing_threshold_seconds: u128,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetSubnetRootDeletionExecutionResponse {
pub request: FleetSubnetRootDeletionExecutionRequest,
pub executor: Principal,
pub prepared_at_ns: u64,
pub execution_hash: [u8; 32],
}
#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetSubnetRootDeletionCompletionRequest {
pub operation_id: [u8; 32],
pub fleet_subnet_root: Principal,
pub expected_execution_hash: [u8; 32],
pub observed_absent_at_ns: u64,
}
#[derive(CandidType, Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetSubnetRootDeletionStatusRequest {
pub operation_id: [u8; 32],
pub fleet_subnet_root: Principal,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetSubnetRootDeletionResponse {
pub operation_id: [u8; 32],
pub fleet_subnet_root: Principal,
pub coordinator: Principal,
pub executor: Principal,
pub readiness_hash: [u8; 32],
pub execution_hash: [u8; 32],
pub observed_module_hash: [u8; 32],
pub observed_controllers: Vec<Principal>,
pub observed_cycles_after_reclamation: u128,
pub observed_absent_at_ns: u64,
pub completed_at_ns: u64,
pub deletion_hash: [u8; 32],
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetRegistrySnapshotResponse {
pub registry: FleetRegistry,
pub manifest: FleetRegistryManifest,
pub version: FleetRegistryVersion,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetSubnetRootSnapshotAcknowledgementRequest {
pub version: FleetRegistryVersion,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetSubnetRootSnapshotAcknowledgement {
pub fleet_subnet_root: Principal,
pub version: FleetRegistryVersion,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetSubnetRootRegistrySyncRequest {
pub expected_registry: FleetRegistryVersion,
pub store_bootstrap: RootStoreBootstrapRequest,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetSubnetRootRegistrySyncResponse {
pub fleet_subnet_root: Principal,
pub version: FleetRegistryVersion,
pub acknowledgement: FleetSubnetRootSnapshotAcknowledgement,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetDirectoryProvenance {
pub registry: FleetRegistryVersion,
pub source_fleet_subnet_root: Principal,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetSubnetRootDirectoryEntry {
pub placement_subnet: SubnetId,
pub fleet_subnet_root: Principal,
pub status: FleetSubnetRootStatus,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetDirectorySnapshot {
pub provenance: FleetDirectoryProvenance,
pub fleet_subnet_roots: Vec<FleetSubnetRootDirectoryEntry>,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetSubnetRootRegistryMirrorActivationRequest {
pub previous_registry: FleetRegistryVersion,
pub expected_registry: FleetRegistryVersion,
pub expected_directory: FleetDirectorySnapshot,
pub store_bootstrap: RootStoreBootstrapRequest,
}
#[derive(CandidType, Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub struct FleetSubnetRootRegistryMirrorActivationResponse {
pub fleet_subnet_root: Principal,
pub previous_registry: FleetRegistryVersion,
pub version: FleetRegistryVersion,
pub directory: FleetDirectorySnapshot,
}