linera_core/client/requests_scheduler/
mod.rs

1// Copyright (c) Zefchain Labs, Inc.
2// SPDX-License-Identifier: Apache-2.0
3
4//! This module manages communication with validator nodes, including connection pooling,
5//! load balancing, request deduplication, caching, and performance tracking.
6
7mod cache;
8mod in_flight_tracker;
9mod node_info;
10mod request;
11mod scheduler;
12mod scoring;
13
14pub use scheduler::RequestsScheduler;
15pub use scoring::ScoringWeights;
16
17// Module constants - default values for RequestsSchedulerConfig
18pub const MAX_IN_FLIGHT_REQUESTS: usize = 100;
19pub const MAX_ACCEPTED_LATENCY_MS: f64 = 5000.0;
20pub const CACHE_TTL_MS: u64 = 2000;
21pub const CACHE_MAX_SIZE: usize = 1000;
22pub const MAX_REQUEST_TTL_MS: u64 = 200;
23pub const ALPHA_SMOOTHING_FACTOR: f64 = 0.1;
24
25/// Configuration for the `RequestsScheduler`.
26#[derive(Debug, Clone)]
27pub struct RequestsSchedulerConfig {
28    /// Maximum expected latency in milliseconds for score normalization
29    pub max_accepted_latency_ms: f64,
30    /// Time-to-live for cached responses in milliseconds
31    pub cache_ttl_ms: u64,
32    /// Maximum number of entries in the cache
33    pub cache_max_size: usize,
34    /// Maximum latency for an in-flight request before we stop deduplicating it (in milliseconds)
35    pub max_request_ttl_ms: u64,
36    /// Smoothing factor for Exponential Moving Averages (0 < alpha < 1)
37    pub alpha: f64,
38}
39
40impl Default for RequestsSchedulerConfig {
41    fn default() -> Self {
42        Self {
43            max_accepted_latency_ms: MAX_ACCEPTED_LATENCY_MS,
44            cache_ttl_ms: CACHE_TTL_MS,
45            cache_max_size: CACHE_MAX_SIZE,
46            max_request_ttl_ms: MAX_REQUEST_TTL_MS,
47            alpha: ALPHA_SMOOTHING_FACTOR,
48        }
49    }
50}