Line data Source code
1 : #pragma once 2 : 3 : #include <memory> 4 : 5 : #include "envoy/extensions/load_balancing_policies/maglev/v3/maglev.pb.h" 6 : #include "envoy/extensions/load_balancing_policies/maglev/v3/maglev.pb.validate.h" 7 : #include "envoy/upstream/load_balancer.h" 8 : 9 : #include "source/common/upstream/load_balancer_factory_base.h" 10 : #include "source/extensions/load_balancing_policies/common/factory_base.h" 11 : #include "source/extensions/load_balancing_policies/maglev/maglev_lb.h" 12 : 13 : namespace Envoy { 14 : namespace Extensions { 15 : namespace LoadBalancingPolices { 16 : namespace Maglev { 17 : 18 : using MaglevLbProto = envoy::extensions::load_balancing_policies::maglev::v3::Maglev; 19 : 20 : class Factory : public Upstream::TypedLoadBalancerFactoryBase<MaglevLbProto> { 21 : public: 22 13 : Factory() : TypedLoadBalancerFactoryBase("envoy.load_balancing_policies.maglev") {} 23 : 24 : Upstream::ThreadAwareLoadBalancerPtr create(OptRef<const Upstream::LoadBalancerConfig> lb_config, 25 : const Upstream::ClusterInfo& cluster_info, 26 : const Upstream::PrioritySet& priority_set, 27 : Runtime::Loader& runtime, 28 : Random::RandomGenerator& random, 29 : TimeSource& time_source) override; 30 : 31 : Upstream::LoadBalancerConfigPtr loadConfig(const Protobuf::Message& config, 32 0 : ProtobufMessage::ValidationVisitor&) override { 33 0 : auto active_or_legacy = 34 0 : Common::ActiveOrLegacy<Upstream::MaglevLbProto, Upstream::ClusterProto>::get(&config); 35 : 36 0 : ASSERT(active_or_legacy.hasLegacy() || active_or_legacy.hasActive()); 37 : 38 0 : return active_or_legacy.hasLegacy() 39 0 : ? Upstream::LoadBalancerConfigPtr{new Upstream::LegacyMaglevLbConfig( 40 0 : *active_or_legacy.legacy())} 41 0 : : Upstream::LoadBalancerConfigPtr{ 42 0 : new Upstream::TypedMaglevLbConfig(*active_or_legacy.active())}; 43 0 : } 44 : }; 45 : 46 : } // namespace Maglev 47 : } // namespace LoadBalancingPolices 48 : } // namespace Extensions 49 : } // namespace Envoy