// SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 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, } 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), } } }