@@ -44,9 +44,7 @@ class ExecutionProfile : public Allocated {
4444 , serial_consistency_(CASS_CONSISTENCY_UNKNOWN)
4545 , latency_aware_routing_(false )
4646 , token_aware_routing_(true )
47- , token_aware_routing_shuffle_replicas_(true )
48- , load_balancing_policy_(NULL )
49- , retry_policy_(NULL ) {}
47+ , token_aware_routing_shuffle_replicas_(true ) {}
5048
5149 uint64_t request_timeout_ms () const { return request_timeout_ms_; }
5250
@@ -102,13 +100,27 @@ class ExecutionProfile : public Allocated {
102100
103101 const LoadBalancingPolicy::Ptr& load_balancing_policy () const { return load_balancing_policy_; }
104102
105- void set_load_balancing_policy (LoadBalancingPolicy* lbp) { load_balancing_policy_.reset (lbp); }
103+ void set_load_balancing_policy (LoadBalancingPolicy* lbp) {
104+ base_load_balancing_policy_.reset (lbp);
105+ }
106+
107+ /* *
108+ * Use another profile's load balancing policy. This is used to override profiles that don't have
109+ * policies of their own with the default profile's load balancing policy.
110+ *
111+ * @param lbp The other profile's load balancing policy chain.
112+ */
113+ void use_load_balancing_policy (const LoadBalancingPolicy::Ptr& lbp) {
114+ assert (!base_load_balancing_policy_ &&
115+ " The profile should have a no base load balancing policy" );
116+ load_balancing_policy_ = lbp;
117+ }
106118
107119 void build_load_balancing_policy () {
108120 // The base LBP can be augmented by special wrappers (whitelist,
109121 // token aware, latency aware)
110- if (load_balancing_policy_ ) {
111- LoadBalancingPolicy* chain = load_balancing_policy_ ->new_instance ();
122+ if (base_load_balancing_policy_ ) {
123+ LoadBalancingPolicy* chain = base_load_balancing_policy_ ->new_instance ();
112124
113125 if (!blacklist_.empty ()) {
114126 chain = new BlacklistPolicy (chain, blacklist_);
@@ -159,6 +171,7 @@ class ExecutionProfile : public Allocated {
159171 ContactPointList whitelist_;
160172 DcList whitelist_dc_;
161173 LoadBalancingPolicy::Ptr load_balancing_policy_;
174+ LoadBalancingPolicy::Ptr base_load_balancing_policy_;
162175 RetryPolicy::Ptr retry_policy_;
163176 SpeculativeExecutionPolicy::Ptr speculative_execution_policy_;
164177};
0 commit comments