use serde::{Deserialize, Serialize};
use nodedb_types::Hlc;
use crate::metadata_group::descriptors::{DescriptorId, DescriptorLease};
#[derive(
Debug,
Clone,
PartialEq,
Eq,
Serialize,
Deserialize,
zerompk::ToMessagePack,
zerompk::FromMessagePack,
)]
pub enum MetadataEntry {
CatalogDdl {
payload: Vec<u8>,
},
TopologyChange(TopologyChange),
RoutingChange(RoutingChange),
ClusterVersionBump {
from: u16,
to: u16,
},
DescriptorLeaseGrant(DescriptorLease),
DescriptorLeaseRelease {
node_id: u64,
descriptor_ids: Vec<DescriptorId>,
},
DescriptorDrainStart {
descriptor_id: DescriptorId,
up_to_version: u64,
expires_at: Hlc,
},
DescriptorDrainEnd {
descriptor_id: DescriptorId,
},
}
#[derive(
Debug,
Clone,
PartialEq,
Eq,
Serialize,
Deserialize,
zerompk::ToMessagePack,
zerompk::FromMessagePack,
)]
pub enum TopologyChange {
Join { node_id: u64, addr: String },
Leave { node_id: u64 },
PromoteToVoter { node_id: u64 },
StartDecommission { node_id: u64 },
FinishDecommission { node_id: u64 },
}
#[derive(
Debug,
Clone,
PartialEq,
Eq,
Serialize,
Deserialize,
zerompk::ToMessagePack,
zerompk::FromMessagePack,
)]
pub enum RoutingChange {
ReassignVShard {
vshard_id: u16,
new_group_id: u64,
new_leaseholder_node_id: u64,
},
LeadershipTransfer {
group_id: u64,
new_leader_node_id: u64,
},
}