Line data Source code
1 : #include "source/extensions/load_balancing_policies/ring_hash/config.h" 2 : 3 : #include "source/extensions/load_balancing_policies/ring_hash/ring_hash_lb.h" 4 : 5 : namespace Envoy { 6 : namespace Extensions { 7 : namespace LoadBalancingPolices { 8 : namespace RingHash { 9 : 10 : Upstream::ThreadAwareLoadBalancerPtr 11 : Factory::create(OptRef<const Upstream::LoadBalancerConfig> lb_config, 12 : const Upstream::ClusterInfo& cluster_info, 13 : const Upstream::PrioritySet& priority_set, Runtime::Loader& runtime, 14 0 : Random::RandomGenerator& random, TimeSource&) { 15 : 16 0 : auto active_or_legacy = 17 0 : Common::ActiveOrLegacy<Upstream::TypedRingHashLbConfig, 18 0 : Upstream::LegacyRingHashLbConfig>::get(lb_config.ptr()); 19 : 20 : // Assume legacy config. 21 0 : if (!active_or_legacy.hasActive()) { 22 0 : return std::make_unique<Upstream::RingHashLoadBalancer>( 23 0 : priority_set, cluster_info.lbStats(), cluster_info.statsScope(), runtime, random, 24 0 : !active_or_legacy.hasLegacy() ? cluster_info.lbRingHashConfig() 25 0 : : active_or_legacy.legacy()->lbConfig(), 26 0 : cluster_info.lbConfig()); 27 0 : } 28 : 29 0 : return std::make_unique<Upstream::RingHashLoadBalancer>( 30 0 : priority_set, cluster_info.lbStats(), cluster_info.statsScope(), runtime, random, 31 0 : PROTOBUF_PERCENT_TO_ROUNDED_INTEGER_OR_DEFAULT(cluster_info.lbConfig(), 32 0 : healthy_panic_threshold, 100, 50), 33 0 : active_or_legacy.active()->lb_config_); 34 0 : } 35 : 36 : /** 37 : * Static registration for the Factory. @see RegisterFactory. 38 : */ 39 : REGISTER_FACTORY(Factory, Upstream::TypedLoadBalancerFactory); 40 : 41 : } // namespace RingHash 42 : } // namespace LoadBalancingPolices 43 : } // namespace Extensions 44 : } // namespace Envoy