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

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

            
5
#include "source/extensions/load_balancing_policies/random/random_lb.h"
6

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

            
12
6
TypedRandomLbConfig::TypedRandomLbConfig(const RandomLbProto& lb_config) : lb_config_(lb_config) {}
13

            
14
78
TypedRandomLbConfig::TypedRandomLbConfig(const CommonLbConfigProto& common_lb_config) {
15
78
  Upstream::LoadBalancerConfigHelper::convertLocalityLbConfigTo(common_lb_config, lb_config_);
16
78
}
17

            
18
Upstream::LoadBalancerPtr RandomCreator::operator()(
19
    Upstream::LoadBalancerParams params, OptRef<const Upstream::LoadBalancerConfig> lb_config,
20
    const Upstream::ClusterInfo& cluster_info, const Upstream::PrioritySet&,
21
167
    Runtime::Loader& runtime, Envoy::Random::RandomGenerator& random, TimeSource&) {
22

            
23
167
  const auto typed_lb_config = dynamic_cast<const TypedRandomLbConfig*>(lb_config.ptr());
24
167
  ASSERT(typed_lb_config != nullptr, "Invalid random load balancer config");
25

            
26
167
  return std::make_unique<Upstream::RandomLoadBalancer>(
27
167
      params.priority_set, params.local_priority_set, cluster_info.lbStats(), runtime, random,
28
167
      PROTOBUF_PERCENT_TO_ROUNDED_INTEGER_OR_DEFAULT(cluster_info.lbConfig(),
29
167
                                                     healthy_panic_threshold, 100, 50),
30
167
      typed_lb_config->lb_config_);
31
167
}
32

            
33
/**
34
 * Static registration for the Factory. @see RegisterFactory.
35
 */
36
REGISTER_FACTORY(Factory, Upstream::TypedLoadBalancerFactory);
37

            
38
} // namespace Random
39
} // namespace LoadBalancingPolicies
40
} // namespace Extensions
41
} // namespace Envoy