1
#include "source/extensions/load_balancing_policies/least_request/config.h"
2

            
3
#include "envoy/extensions/load_balancing_policies/least_request/v3/least_request.pb.h"
4

            
5
#include "source/extensions/load_balancing_policies/least_request/least_request_lb.h"
6

            
7
namespace Envoy {
8
namespace Extensions {
9
namespace LoadBalancingPolicies {
10
namespace LeastRequest {
11

            
12
TypedLeastRequestLbConfig::TypedLeastRequestLbConfig(const CommonLbConfigProto& common_lb_config,
13
23
                                                     const LegacyLeastRequestLbProto& lb_config) {
14
23
  Upstream::LoadBalancerConfigHelper::convertLocalityLbConfigTo(common_lb_config, lb_config_);
15

            
16
23
  Upstream::LoadBalancerConfigHelper::convertSlowStartConfigTo(lb_config, lb_config_);
17
23
  if (lb_config.has_choice_count()) {
18
1
    *lb_config_.mutable_choice_count() = lb_config.choice_count();
19
1
  }
20
23
  if (lb_config.has_active_request_bias()) {
21
1
    *lb_config_.mutable_active_request_bias() = lb_config.active_request_bias();
22
1
  }
23
23
}
24

            
25
TypedLeastRequestLbConfig::TypedLeastRequestLbConfig(const LeastRequestLbProto& lb_config)
26
4
    : lb_config_(lb_config) {}
27

            
28
Upstream::LoadBalancerPtr LeastRequestCreator::operator()(
29
    Upstream::LoadBalancerParams params, OptRef<const Upstream::LoadBalancerConfig> lb_config,
30
    const Upstream::ClusterInfo& cluster_info, const Upstream::PrioritySet&,
31
13
    Runtime::Loader& runtime, Random::RandomGenerator& random, TimeSource& time_source) {
32

            
33
13
  const auto typed_lb_config = dynamic_cast<const TypedLeastRequestLbConfig*>(lb_config.ptr());
34
13
  ASSERT(typed_lb_config != nullptr, "Invalid least request load balancer config");
35

            
36
13
  return std::make_unique<Upstream::LeastRequestLoadBalancer>(
37
13
      params.priority_set, params.local_priority_set, cluster_info.lbStats(), runtime, random,
38
13
      PROTOBUF_PERCENT_TO_ROUNDED_INTEGER_OR_DEFAULT(cluster_info.lbConfig(),
39
13
                                                     healthy_panic_threshold, 100, 50),
40
13
      typed_lb_config->lb_config_, time_source);
41
13
}
42

            
43
/**
44
 * Static registration for the Factory. @see RegisterFactory.
45
 */
46
REGISTER_FACTORY(Factory, Upstream::TypedLoadBalancerFactory);
47

            
48
} // namespace LeastRequest
49
} // namespace LoadBalancingPolicies
50
} // namespace Extensions
51
} // namespace Envoy