use crate::throttle::strategies::{power_curve_strategy, ThrottlingStrategy};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Priority {
Egress,
Ingress,
None,
}
pub struct ThrottleStateView<'a> {
pub current_balance: i32,
pub learned_balance: f64,
pub config: &'a AdaptiveThrottleConfig,
}
#[derive(Debug, Clone)]
pub struct AdaptiveThrottleConfig {
pub credit_per_message: i32,
pub healthy_balance_width: u32,
pub max_imbalance: u32,
pub yield_after_n_consecutive: u32,
pub nudge_interval_ops: u32,
pub adaptive_learning_rate: f64,
pub curve_factor: f64,
pub strategy: ThrottlingStrategy,
pub priority: Priority,
pub priority_boost_factor: f64,
}
impl Default for AdaptiveThrottleConfig {
fn default() -> Self {
let mut lr = 0.05;
if lr < 0.01 {
lr = 0.01;
}
if lr > 0.2 {
lr = 0.2;
}
Self {
credit_per_message: 1,
healthy_balance_width: 100,
max_imbalance: 1000,
yield_after_n_consecutive: 32,
nudge_interval_ops: 100,
adaptive_learning_rate: lr,
curve_factor: 2.0, strategy: power_curve_strategy,
priority: Priority::None,
priority_boost_factor: 2.5, }
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Direction {
Ingress,
Egress,
}