net_pool/strategy/
strategy.rs1use crate::backend::{Address, BackendState};
2
3pub enum Strategy {
4 Hash,
6
7 ConsistentHash,
9
10 RoundRobin,
12}
13
14pub trait LbStrategy: Send + Sync {
16 fn strategy(&self) -> Strategy;
18
19 fn contain(&self, hash_code: u64) -> bool;
21
22 fn add_backend(&self, addr: Address);
24
25 fn remove_backend(&self, addr: &Address) -> bool;
27
28 fn get_backend(&self, key: &str) -> Option<BackendState>;
30
31 fn get_backends(&self) -> Vec<BackendState>;
33
34 fn get_origin_backends(&self) -> Vec<BackendState>;
36
37 fn backend<KEY: AsRef<str>>(this: Box<dyn LbStrategy>, key: KEY) -> Option<BackendState>
39 where
40 Self: Sized,
41 {
42 this.get_backend(key.as_ref())
43 }
44
45 fn disable_backend(&self, addr: &Address) -> bool {
47 self.remove_backend(addr)
48 }
49
50 fn enable_backend(&self, addr: &Address) {
52 self.add_backend(addr.clone())
53 }
54}