mod coordinated;
#[doc = include_str!("../../docs/worker-group.md")]
pub mod group;
mod physical;
mod protocol;
pub mod velo;
pub use coordinated::CoordinatedWorker;
pub use physical::{PhysicalWorker, PhysicalWorkerBuilder};
pub use physical::PhysicalWorker as DirectWorker;
use anyhow::Result;
use std::{pin::Pin, sync::Arc};
use crate::object::ObjectBlockOps;
pub use crate::{BlockId, InstanceId, SequenceHash};
pub use kvbm_common::LogicalLayoutHandle;
pub use kvbm_physical::{
manager::{LayoutHandle, SerializedLayout},
transfer::TransferCompleteNotification,
};
pub use velo::{VeloWorkerClient, VeloWorkerService, VeloWorkerServiceBuilder};
pub type SerializedResponseAwaiter = Pin<Box<dyn Future<Output = Result<SerializedLayout>> + Send>>;
pub type ImportMetadataResponseAwaiter =
Pin<Box<dyn Future<Output = Result<Vec<LayoutHandle>>> + Send>>;
pub use protocol::*;
pub trait WorkerTransfers: Send + Sync {
fn execute_local_transfer(
&self,
src: LogicalLayoutHandle,
dst: LogicalLayoutHandle,
src_block_ids: Arc<[BlockId]>,
dst_block_ids: Arc<[BlockId]>,
options: kvbm_physical::transfer::TransferOptions,
) -> Result<TransferCompleteNotification>;
fn execute_remote_onboard(
&self,
src: RemoteDescriptor,
dst: LogicalLayoutHandle,
dst_block_ids: Arc<[BlockId]>,
options: kvbm_physical::transfer::TransferOptions,
) -> Result<TransferCompleteNotification>;
fn execute_remote_offload(
&self,
src: LogicalLayoutHandle,
src_block_ids: Arc<[BlockId]>,
dst: RemoteDescriptor,
options: kvbm_physical::transfer::TransferOptions,
) -> Result<TransferCompleteNotification>;
fn connect_remote(
&self,
instance_id: InstanceId,
metadata: Vec<SerializedLayout>,
) -> Result<ConnectRemoteResponse>;
fn has_remote_metadata(&self, instance_id: InstanceId) -> bool;
fn execute_remote_onboard_for_instance(
&self,
instance_id: InstanceId,
remote_logical_type: LogicalLayoutHandle,
src_block_ids: Vec<BlockId>,
dst: LogicalLayoutHandle,
dst_block_ids: Arc<[BlockId]>,
options: kvbm_physical::transfer::TransferOptions,
) -> Result<TransferCompleteNotification>;
}
pub trait Worker: WorkerTransfers + ObjectBlockOps + Send + Sync {
fn g1_handle(&self) -> Option<LayoutHandle>;
fn g2_handle(&self) -> Option<LayoutHandle>;
fn g3_handle(&self) -> Option<LayoutHandle>;
fn export_metadata(&self) -> Result<SerializedLayoutResponse>;
fn import_metadata(&self, metadata: SerializedLayout) -> Result<ImportMetadataResponse>;
}