agave_scheduling_utils/handshake/
shared.rs1use {
2 agave_scheduler_bindings::{
3 PackToWorkerMessage, ProgressMessage, TpuToPackMessage, WorkerToPackMessage,
4 },
5 rts_alloc::Allocator,
6 thiserror::Error,
7};
8
9pub(crate) type RtsAllocError = rts_alloc::error::Error;
10pub(crate) type ShaqError = shaq::error::Error;
11
12pub const MAX_WORKERS: usize = 64;
13
14pub(crate) const VERSION: u64 = 4;
16pub(crate) const LOGON_SUCCESS: u8 = 0x01;
17pub(crate) const LOGON_FAILURE: u8 = 0x02;
18pub(crate) const MAX_ALLOCATOR_HANDLES: usize = 128;
19pub(crate) const GLOBAL_ALLOCATORS: usize = 1;
20
21#[derive(Debug, Default, Clone, Copy)]
23#[repr(C)]
24pub struct ClientLogon {
25 pub worker_count: usize,
27 pub allocator_size: usize,
29 pub allocator_handles: usize,
31 pub tpu_to_pack_capacity: usize,
33 pub progress_tracker_capacity: usize,
35 pub pack_to_worker_capacity: usize,
37 pub worker_to_pack_capacity: usize,
39 pub flags: u16,
41 }
48
49impl ClientLogon {
50 pub fn try_from_bytes(buffer: &[u8]) -> Option<Self> {
51 if buffer.len() != core::mem::size_of::<Self>() {
52 return None;
53 }
54
55 Some(unsafe { core::ptr::read_unaligned(buffer.as_ptr().cast()) })
59 }
60}
61
62pub mod logon_flags {}
63
64pub struct ClientSession {
66 pub allocators: Vec<Allocator>,
67 pub tpu_to_pack: shaq::spsc::Consumer<TpuToPackMessage>,
68 pub progress_tracker: shaq::spsc::Consumer<ProgressMessage>,
69 pub workers: Vec<ClientWorkerSession>,
70}
71
72pub struct ClientWorkerSession {
74 pub pack_to_worker: shaq::spsc::Producer<PackToWorkerMessage>,
75 pub worker_to_pack: shaq::spsc::Consumer<WorkerToPackMessage>,
76}
77
78#[derive(Debug, Error)]
80pub enum ClientHandshakeError {
81 #[error("Io; err={0}")]
82 Io(#[from] std::io::Error),
83 #[error("Timed out")]
84 TimedOut,
85 #[error("Protocol violation")]
86 ProtocolViolation,
87 #[error("Rejected; reason={0}")]
88 Rejected(String),
89 #[error("Rts alloc; err={0}")]
90 RtsAlloc(#[from] RtsAllocError),
91 #[error("Shaq; err={0}")]
92 Shaq(#[from] ShaqError),
93}
94
95pub struct AgaveSession {
97 pub flags: u16,
98 pub tpu_to_pack: AgaveTpuToPackSession,
99 pub progress_tracker: shaq::spsc::Producer<ProgressMessage>,
100 pub workers: Vec<AgaveWorkerSession>,
101}
102
103pub struct AgaveTpuToPackSession {
105 pub allocator: Allocator,
106 pub producer: shaq::spsc::Producer<TpuToPackMessage>,
107}
108
109pub struct AgaveWorkerSession {
111 pub allocator: Allocator,
112 pub pack_to_worker: shaq::spsc::Consumer<PackToWorkerMessage>,
113 pub worker_to_pack: shaq::spsc::Producer<WorkerToPackMessage>,
114}
115
116#[derive(Debug, Error)]
122pub enum AgaveHandshakeError {
123 #[error("Io; err={0}")]
124 Io(#[from] std::io::Error),
125 #[error("Timeout")]
126 Timeout,
127 #[error("Close during handshake")]
128 EofDuringHandshake,
129 #[error("Version; server={server}; client={client}")]
130 Version { server: u64, client: u64 },
131 #[error("Worker count; count={0}")]
132 WorkerCount(usize),
133 #[error("Allocator handles; count={0}")]
134 AllocatorHandles(usize),
135 #[error("Rts alloc; err={0:?}")]
136 RtsAlloc(#[from] RtsAllocError),
137 #[error("Shaq; err={0:?}")]
138 Shaq(#[from] ShaqError),
139}