use derive_getters::Getters;
use serde::{Deserialize, Serialize};
use crate::block_manager::connector::protocol::LeaderTransferRequest;
pub const ZMQ_PING_MESSAGE: &str = "ping";
pub const ZMQ_WORKER_METADATA_MESSAGE: &str = "worker_metadata";
pub const ZMQ_LEADER_METADATA_MESSAGE: &str = "leader_metadata";
pub const ZMQ_TRANSFER_BLOCKS_MESSAGE: &str = "transfer_blocks";
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WorkerMetadata {
pub num_device_blocks: usize,
pub bytes_per_block: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LeaderMetadata {
pub num_host_blocks: usize,
pub num_disk_blocks: usize,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, Copy)]
pub enum BlockTransferPool {
Device,
Host,
Disk,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub enum ConnectorTransferType {
Store,
Load,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct ConnectorRequestLeader {
pub req_id: String,
pub txn_id: u64,
pub transfer_type: ConnectorTransferType,
}
#[derive(Serialize, Deserialize, Debug, Getters, Clone)]
pub struct BlockTransferRequest {
pub from_pool: BlockTransferPool,
pub to_pool: BlockTransferPool,
pub blocks: Vec<(usize, usize)>,
#[serde(skip_serializing_if = "Option::is_none")]
pub connector_req: Option<LeaderTransferRequest>,
}
impl BlockTransferRequest {
#[allow(dead_code)]
pub fn new(
from_pool: BlockTransferPool,
to_pool: BlockTransferPool,
blocks: Vec<(usize, usize)>,
) -> Self {
Self {
from_pool,
to_pool,
blocks,
connector_req: None,
}
}
pub fn new_with_trigger_id(
from_pool: BlockTransferPool,
to_pool: BlockTransferPool,
blocks: Vec<(usize, usize)>,
connector_req: LeaderTransferRequest,
) -> Self {
Self {
from_pool,
to_pool,
blocks,
connector_req: Some(connector_req),
}
}
}