use serde::{Deserialize, Serialize};
use nodedb_types::Hlc;
use crate::metadata_group::compensation::Compensation;
use crate::metadata_group::descriptors::{DescriptorId, DescriptorLease};
use crate::metadata_group::migration_state::{MigrationCheckpointPayload, MigrationPhaseTag};
#[derive(
Debug,
Clone,
PartialEq,
Eq,
Serialize,
Deserialize,
zerompk::ToMessagePack,
zerompk::FromMessagePack,
)]
pub enum MetadataEntry {
CatalogDdl {
payload: Vec<u8>,
},
CatalogDdlAudited {
payload: Vec<u8>,
auth_user_id: String,
auth_user_name: String,
sql_text: String,
},
Batch {
entries: Vec<MetadataEntry>,
},
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,
},
CaTrustChange {
add_ca_cert: Option<Vec<u8>>,
remove_ca_fingerprint: Option<[u8; 32]>,
},
SurrogateAlloc {
hwm: u32,
},
JoinTokenTransition {
token_hash: [u8; 32],
transition: JoinTokenTransitionKind,
ts_ms: u64,
},
MigrationCheckpoint {
migration_id: String,
phase: MigrationPhaseTag,
attempt: u32,
payload: MigrationCheckpointPayload,
crc32c: u32,
ts_ms: u64,
},
MigrationAbort {
migration_id: String,
reason: String,
compensations: Vec<Compensation>,
},
}
#[derive(
Debug,
Clone,
PartialEq,
Eq,
Serialize,
Deserialize,
zerompk::ToMessagePack,
zerompk::FromMessagePack,
)]
pub enum JoinTokenTransitionKind {
Register { expires_at_ms: u64 },
BeginInFlight { node_addr: String },
MarkConsumed { node_addr: String },
RevertInFlight,
MarkExpired,
MarkAborted,
}
#[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: u32,
new_group_id: u64,
new_leaseholder_node_id: u64,
},
LeadershipTransfer {
group_id: u64,
new_leader_node_id: u64,
},
RemoveMember { group_id: u64, node_id: u64 },
}