Skip to main content

moirai_executor/schedule/route/
policy.rs

1//! Zero-sized route policy markers.
2
3mod route_policy {
4    pub trait Sealed {}
5}
6
7/// Compile-time scheduler route policy.
8///
9/// Implementors are zero-sized marker types. The router uses the associated
10/// constants as structural branch selectors, so inactive routing families are
11/// removed by monomorphization and dead-code elimination.
12pub trait RoutePolicy: route_policy::Sealed + Copy + Default + Send + Sync + 'static {
13    /// Whether route selection may produce process routes.
14    const ENABLE_PROCESS_ROUTES: bool;
15
16    /// Whether route selection may produce server routes.
17    const ENABLE_SERVER_ROUTES: bool;
18
19    /// Whether route selection may produce accelerator metadata routes.
20    const ENABLE_ACCELERATOR_ROUTES: bool;
21
22    /// Periodic process route cadence for non-async work classes.
23    const PROCESS_PERIOD: usize;
24
25    /// Periodic server route cadence.
26    const SERVER_PERIOD: usize;
27
28    /// Periodic accelerator route cadence.
29    const ACCELERATOR_PERIOD: usize;
30}
31
32/// Route policy that keeps work local to scheduler threads.
33#[derive(Debug, Clone, Copy, Default)]
34pub struct ThreadRoutePolicy;
35
36/// Route policy that mixes local threads, process routes, and server routes.
37#[derive(Debug, Clone, Copy, Default)]
38pub struct HybridRoutePolicy;
39
40/// Route policy that gives server routing a higher cadence.
41#[derive(Debug, Clone, Copy, Default)]
42pub struct ServerRoutePolicy;
43
44/// Route policy that emits accelerator metadata routes.
45#[derive(Debug, Clone, Copy, Default)]
46pub struct AcceleratorRoutePolicy;
47
48impl route_policy::Sealed for ThreadRoutePolicy {}
49impl route_policy::Sealed for HybridRoutePolicy {}
50impl route_policy::Sealed for ServerRoutePolicy {}
51impl route_policy::Sealed for AcceleratorRoutePolicy {}
52
53impl RoutePolicy for ThreadRoutePolicy {
54    const ENABLE_PROCESS_ROUTES: bool = false;
55    const ENABLE_SERVER_ROUTES: bool = false;
56    const ENABLE_ACCELERATOR_ROUTES: bool = false;
57    const PROCESS_PERIOD: usize = 1;
58    const SERVER_PERIOD: usize = 1;
59    const ACCELERATOR_PERIOD: usize = 1;
60}
61
62impl RoutePolicy for HybridRoutePolicy {
63    const ENABLE_PROCESS_ROUTES: bool = true;
64    const ENABLE_SERVER_ROUTES: bool = true;
65    const ENABLE_ACCELERATOR_ROUTES: bool = false;
66    const PROCESS_PERIOD: usize = 5;
67    const SERVER_PERIOD: usize = 17;
68    const ACCELERATOR_PERIOD: usize = 1;
69}
70
71impl RoutePolicy for ServerRoutePolicy {
72    const ENABLE_PROCESS_ROUTES: bool = true;
73    const ENABLE_SERVER_ROUTES: bool = true;
74    const ENABLE_ACCELERATOR_ROUTES: bool = false;
75    const PROCESS_PERIOD: usize = 3;
76    const SERVER_PERIOD: usize = 11;
77    const ACCELERATOR_PERIOD: usize = 1;
78}
79
80impl RoutePolicy for AcceleratorRoutePolicy {
81    const ENABLE_PROCESS_ROUTES: bool = true;
82    const ENABLE_SERVER_ROUTES: bool = true;
83    const ENABLE_ACCELERATOR_ROUTES: bool = true;
84    const PROCESS_PERIOD: usize = 5;
85    const SERVER_PERIOD: usize = 17;
86    const ACCELERATOR_PERIOD: usize = 7;
87}