1
#pragma once
2

            
3
#include "source/common/memory/heap_shrinker.h"
4
#include "source/server/server.h"
5

            
6
namespace Envoy {
7
namespace Server {
8

            
9
// The production server instance, which creates all of the required components.
10
class InstanceImpl : public InstanceBase {
11
public:
12
  using InstanceBase::InstanceBase;
13

            
14
protected:
15
  void maybeCreateHeapShrinker() override;
16
  absl::StatusOr<std::unique_ptr<OverloadManager>> createOverloadManager() override;
17
  std::unique_ptr<OverloadManager> createNullOverloadManager() override;
18
  std::unique_ptr<Server::GuardDog>
19
  maybeCreateGuardDog(absl::string_view name,
20
                      const Server::Configuration::Watchdog& config) override;
21
  std::unique_ptr<HdsDelegateApi>
22
  maybeCreateHdsDelegate(Configuration::ServerFactoryContext& server_context, Stats::Scope& scope,
23
                         Grpc::RawAsyncClientPtr&& async_client, Envoy::Stats::Store& stats,
24
                         Ssl::ContextManager& ssl_context_manager) override;
25

            
26
private:
27
  std::unique_ptr<Memory::HeapShrinker> heap_shrinker_;
28
};
29

            
30
} // namespace Server
31
} // namespace Envoy