cdrs_tokio/
load_balancing.rs1mod initializing_wrapper;
2pub mod node_distance_evaluator;
3mod random;
4mod request;
5mod round_robin;
6mod topology_aware;
7
8pub(crate) use self::initializing_wrapper::InitializingWrapperLoadBalancingStrategy;
9pub use self::random::RandomLoadBalancingStrategy;
10pub use self::request::Request;
11pub use self::round_robin::RoundRobinLoadBalancingStrategy;
12pub use self::topology_aware::TopologyAwareLoadBalancingStrategy;
13use crate::cluster::topology::Node;
14use crate::cluster::{ClusterMetadata, ConnectionManager};
15use crate::transport::CdrsTransport;
16use derive_more::Constructor;
17use std::sync::Arc;
18
19#[derive(Debug, Constructor, Default)]
20pub struct QueryPlan<T: CdrsTransport + 'static, CM: ConnectionManager<T> + 'static> {
21 pub nodes: Vec<Arc<Node<T, CM>>>,
22}
23
24impl<T: CdrsTransport, CM: ConnectionManager<T>> Clone for QueryPlan<T, CM> {
25 fn clone(&self) -> Self {
26 QueryPlan::new(self.nodes.clone())
27 }
28}
29
30pub trait LoadBalancingStrategy<T: CdrsTransport, CM: ConnectionManager<T>> {
32 fn query_plan(
35 &self,
36 request: Option<Request>,
37 cluster: &ClusterMetadata<T, CM>,
38 ) -> QueryPlan<T, CM>;
39}