1
#include "source/common/upstream/prod_cluster_info_factory.h"
2

            
3
#include "envoy/stats/scope.h"
4

            
5
#include "source/common/protobuf/message_validator_impl.h"
6
#include "source/common/protobuf/protobuf.h"
7
#include "source/common/protobuf/utility.h"
8
#include "source/common/upstream/upstream_impl.h"
9

            
10
namespace Envoy {
11
namespace Upstream {
12

            
13
ClusterInfoConstSharedPtr
14
46
ProdClusterInfoFactory::createClusterInfo(const CreateClusterInfoParams& params) {
15
46
  Envoy::Stats::ScopeSharedPtr scope =
16
46
      params.stats_.createScope(fmt::format("cluster.{}.", params.cluster_.name()));
17

            
18
46
  Envoy::Server::Configuration::TransportSocketFactoryContextImpl factory_context(
19
46
      params.server_context_, *scope, params.server_context_.messageValidationVisitor());
20

            
21
  // TODO(JimmyCYJ): Support SDS for HDS cluster.
22
46
  Network::UpstreamTransportSocketFactoryPtr socket_factory = THROW_OR_RETURN_VALUE(
23
46
      Upstream::createTransportSocketFactory(params.cluster_, factory_context),
24
46
      Network::UpstreamTransportSocketFactoryPtr);
25
46
  OptRef<const xds::type::matcher::v3::Matcher> matcher;
26
46
  if (params.cluster_.has_transport_socket_matcher()) {
27
    matcher = makeOptRefFromPtr(&params.cluster_.transport_socket_matcher());
28
  }
29
46
  auto socket_matcher = THROW_OR_RETURN_VALUE(
30
46
      TransportSocketMatcherImpl::create(params.cluster_.transport_socket_matches(), matcher,
31
46
                                         factory_context, socket_factory, *scope),
32
46
      std::unique_ptr<TransportSocketMatcherImpl>);
33

            
34
46
  return THROW_OR_RETURN_VALUE(
35
46
      ClusterInfoImpl::create(params.server_context_.initManager(), params.server_context_,
36
46
                              params.cluster_, params.bind_config_,
37
46
                              params.server_context_.runtime(), std::move(socket_matcher),
38
46
                              std::move(scope), params.added_via_api_, factory_context),
39
46
      std::unique_ptr<ClusterInfoImpl>);
40
46
}
41

            
42
} // namespace Upstream
43
} // namespace Envoy