1
#pragma once
2

            
3
#include <memory>
4

            
5
#include "envoy/upstream/load_balancer.h"
6

            
7
#include "source/common/upstream/load_balancer_factory_base.h"
8
#include "source/extensions/load_balancing_policies/subset/subset_lb.h"
9

            
10
namespace Envoy {
11
namespace Extensions {
12
namespace LoadBalancingPolicies {
13
namespace Subset {
14

            
15
class SubsetLbFactory
16
    : public Upstream::TypedLoadBalancerFactoryBase<Upstream::SubsetLbConfigProto> {
17
public:
18
16
  SubsetLbFactory() : TypedLoadBalancerFactoryBase("envoy.load_balancing_policies.subset") {}
19

            
20
  Upstream::ThreadAwareLoadBalancerPtr create(OptRef<const Upstream::LoadBalancerConfig> lb_config,
21
                                              const Upstream::ClusterInfo& cluster_info,
22
                                              const Upstream::PrioritySet& priority_set,
23
                                              Runtime::Loader& runtime,
24
                                              Random::RandomGenerator& random,
25
                                              TimeSource& time_source) override;
26

            
27
  absl::StatusOr<Upstream::LoadBalancerConfigPtr>
28
  loadConfig(Server::Configuration::ServerFactoryContext& factory_context,
29
             const Protobuf::Message& config) override;
30

            
31
  absl::StatusOr<Upstream::LoadBalancerConfigPtr>
32
  loadLegacy(Server::Configuration::ServerFactoryContext& factory_context,
33
             const Upstream::ClusterProto& cluster) override;
34
};
35

            
36
} // namespace Subset
37
} // namespace LoadBalancingPolicies
38
} // namespace Extensions
39
} // namespace Envoy