1
#pragma once
2

            
3
#include "source/extensions/load_balancing_policies/common/load_balancer_impl.h"
4

            
5
namespace Envoy {
6
namespace Upstream {
7

            
8
/**
9
 * Random load balancer that picks a random host out of all hosts.
10
 */
11
class RandomLoadBalancer : public ZoneAwareLoadBalancerBase {
12
public:
13
  RandomLoadBalancer(
14
      const PrioritySet& priority_set, const PrioritySet* local_priority_set, ClusterLbStats& stats,
15
      Runtime::Loader& runtime, Random::RandomGenerator& random, uint32_t healthy_panic_threshold,
16
      const envoy::extensions::load_balancing_policies::random::v3::Random& random_config)
17
173
      : ZoneAwareLoadBalancerBase(
18
173
            priority_set, local_priority_set, stats, runtime, random, healthy_panic_threshold,
19
173
            LoadBalancerConfigHelper::localityLbConfigFromProto(random_config)) {}
20

            
21
  // Upstream::ZoneAwareLoadBalancerBase
22
  HostConstSharedPtr chooseHostOnce(LoadBalancerContext* context) override;
23
  HostConstSharedPtr peekAnotherHost(LoadBalancerContext* context) override;
24

            
25
protected:
26
  HostConstSharedPtr peekOrChoose(LoadBalancerContext* context, bool peek);
27
};
28

            
29
} // namespace Upstream
30
} // namespace Envoy