From f959ba6e178ed312477eeb8bd3a429ab08dbf097 Mon Sep 17 00:00:00 2001 From: Sotiris Nanopoulos Date: Mon, 12 Apr 2021 13:37:00 -0700 Subject: [PATCH 01/10] Add support for validation mode with TAP sockets Signed-off-by: Sotiris Nanopoulos --- configs/envoy-tap-config.yaml | 69 +++++++++++++++++++++++ source/server/config_validation/BUILD | 2 + source/server/config_validation/admin.cc | 2 +- source/server/config_validation/admin.h | 9 +++ source/server/config_validation/server.cc | 5 ++ 5 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 configs/envoy-tap-config.yaml diff --git a/configs/envoy-tap-config.yaml b/configs/envoy-tap-config.yaml new file mode 100644 index 0000000000000..4f10856d1422f --- /dev/null +++ b/configs/envoy-tap-config.yaml @@ -0,0 +1,69 @@ +admin: + address: + socket_address: + protocol: TCP + address: 0.0.0.0 + port_value: 9901 +static_resources: + listeners: + - name: listener_0 + address: + socket_address: + protocol: TCP + address: 0.0.0.0 + port_value: 10000 + filter_chains: + - filters: + - name: envoy.filters.network.http_connection_manager + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager + stat_prefix: ingress_http + access_log: + - name: envoy.access_loggers.stdout + typed_config: + "@type": type.googleapis.com/envoy.extensions.access_loggers.stream.v3.StdoutAccessLog + route_config: + name: local_route + virtual_hosts: + - name: local_service + domains: ["*"] + routes: + - match: + prefix: "/" + route: + host_rewrite_literal: www.envoyproxy.io + cluster: service_envoyproxy_io + http_filters: + - name: envoy.filters.http.router + clusters: + - name: service_envoyproxy_io + connect_timeout: 30s + type: LOGICAL_DNS + # Comment out the following line to test on v6 networks + dns_lookup_family: V4_ONLY + lb_policy: ROUND_ROBIN + load_assignment: + cluster_name: service_envoyproxy_io + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: www.envoyproxy.io + port_value: 443 + transport_socket: + name: envoy.transport_sockets.tap + typed_config: + '@type': type.googleapis.com/envoy.extensions.transport_sockets.tap.v3.Tap + common_config: + admin_config: + config_id: api-gateway + transport_socket: + name: envoy.transport_sockets.tls + typed_config: + '@type': type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext + allow_renegotiation: true + common_tls_context: + tls_params: + tls_minimum_protocol_version: TLSv1_2 + sni: "service" \ No newline at end of file diff --git a/source/server/config_validation/BUILD b/source/server/config_validation/BUILD index cabe630583071..bcf753dcf197c 100644 --- a/source/server/config_validation/BUILD +++ b/source/server/config_validation/BUILD @@ -9,8 +9,10 @@ envoy_cc_library( srcs = ["admin.cc"], hdrs = ["admin.h"], deps = [ + "//include/envoy/network:listen_socket_interface", "//include/envoy/server:admin_interface", "//source/common/common:assert_lib", + "//source/common/network:listen_socket_lib", "//source/server/admin:config_tracker_lib", ], ) diff --git a/source/server/config_validation/admin.cc b/source/server/config_validation/admin.cc index b0ecaf1014865..8a0874ee0e119 100644 --- a/source/server/config_validation/admin.cc +++ b/source/server/config_validation/admin.cc @@ -10,7 +10,7 @@ bool ValidationAdmin::addHandler(const std::string&, const std::string&, Handler bool ValidationAdmin::removeHandler(const std::string&) { return true; } -const Network::Socket& ValidationAdmin::socket() { NOT_IMPLEMENTED_GCOVR_EXCL_LINE; } +const Network::Socket& ValidationAdmin::socket() { return *socket_; } ConfigTracker& ValidationAdmin::getConfigTracker() { return config_tracker_; } diff --git a/source/server/config_validation/admin.h b/source/server/config_validation/admin.h index f10a5f8b6d889..c8e0dd49f99b7 100644 --- a/source/server/config_validation/admin.h +++ b/source/server/config_validation/admin.h @@ -1,9 +1,11 @@ #pragma once +#include "envoy/network/listen_socket.h" #include "envoy/server/admin.h" #include "common/common/assert.h" +#include "common/network/listen_socket_impl.h" #include "server/admin/config_tracker_impl.h" namespace Envoy { @@ -30,8 +32,15 @@ class ValidationAdmin : public Admin { void addListenerToHandler(Network::ConnectionHandler* handler) override; uint32_t concurrency() const override { return 1; } + // We want to implement the socket interface without implementing the http listener function. + // This is useful for TAP because it wants to emit warnings when the address type is UDS + void createHttpListenerSocket(Network::Address::InstanceConstSharedPtr address) { + socket_ = std::make_shared(nullptr, address, nullptr); + } + private: ConfigTrackerImpl config_tracker_; + Network::SocketSharedPtr socket_; }; } // namespace Server diff --git a/source/server/config_validation/server.cc b/source/server/config_validation/server.cc index 2dced0c68d5db..70dcf126e273c 100644 --- a/source/server/config_validation/server.cc +++ b/source/server/config_validation/server.cc @@ -94,6 +94,11 @@ void ValidationInstance::initialize(const Options& options, messageValidationContext().staticValidationVisitor(), *api_, options_); listener_manager_ = std::make_unique(*this, *this, *this, false); Configuration::InitialImpl initial_config(bootstrap, options, *this); + + if (initial_config.admin().address()) { + admin_.createHttpListenerSocket(initial_config.admin().address()); + } + thread_local_.registerThread(*dispatcher_, true); runtime_singleton_ = std::make_unique( component_factory.createRuntime(*this, initial_config)); From 338387e93de4e8c4279d1e0bc83872768f3adbaa Mon Sep 17 00:00:00 2001 From: Sotiris Nanopoulos Date: Mon, 12 Apr 2021 13:41:48 -0700 Subject: [PATCH 02/10] fix format Signed-off-by: Sotiris Nanopoulos --- source/server/config_validation/admin.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/server/config_validation/admin.h b/source/server/config_validation/admin.h index c8e0dd49f99b7..e5b78345c780a 100644 --- a/source/server/config_validation/admin.h +++ b/source/server/config_validation/admin.h @@ -4,8 +4,8 @@ #include "envoy/server/admin.h" #include "common/common/assert.h" - #include "common/network/listen_socket_impl.h" + #include "server/admin/config_tracker_impl.h" namespace Envoy { From 9e705a676090e0850512e30f41e0df0be02c4baf Mon Sep 17 00:00:00 2001 From: Sotiris Nanopoulos Date: Mon, 12 Apr 2021 13:50:52 -0700 Subject: [PATCH 03/10] fix newline Signed-off-by: Sotiris Nanopoulos --- configs/envoy-tap-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configs/envoy-tap-config.yaml b/configs/envoy-tap-config.yaml index 4f10856d1422f..f8d4ef0836484 100644 --- a/configs/envoy-tap-config.yaml +++ b/configs/envoy-tap-config.yaml @@ -66,4 +66,4 @@ static_resources: common_tls_context: tls_params: tls_minimum_protocol_version: TLSv1_2 - sni: "service" \ No newline at end of file + sni: "service" From e3cc551d110e9bcae0a098b2c661c49fe6b46a91 Mon Sep 17 00:00:00 2001 From: Sotiris Nanopoulos Date: Mon, 12 Apr 2021 13:55:35 -0700 Subject: [PATCH 04/10] add release note Signed-off-by: Sotiris Nanopoulos --- docs/root/version_history/current.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/root/version_history/current.rst b/docs/root/version_history/current.rst index 982f985d6d122..03534605cf1f0 100644 --- a/docs/root/version_history/current.rst +++ b/docs/root/version_history/current.rst @@ -77,7 +77,7 @@ Bug Fixes --------- *Changes expected to improve the state of the world and are unlikely to have negative effects* -* active http health checks: properly handles HTTP/2 GOAWAY frames from the upstream. Previously a GOAWAY frame due to a graceful listener drain could cause improper failed health checks due to streams being refused by the upstream on a connection that is going away. To revert to old GOAWAY handling behavior, set the runtime feature `envoy.reloadable_features.health_check.graceful_goaway_handling` to false. +* active http health checks: properly handles HTTP/2 GOAWAY frames from the upstream. Previously a GON/AAWAY frame due to a graceful listener drain could cause improper failed health checks due to streams being refused by the upstream on a connection that is going away. To revert to old GOAWAY handling behavior, set the runtime feature `envoy.reloadable_features.health_check.graceful_goaway_handling` to false. * adaptive concurrency: fixed a bug where concurrent requests on different worker threads could update minRTT back-to-back. * buffer: tighten network connection read and write buffer high watermarks in preparation to more careful enforcement of read limits. Buffer high-watermark is now set to the exact configured value; previously it was set to value + 1. * cdn_loop: check that the entirety of the :ref:`cdn_id ` field is a valid CDN identifier. @@ -102,6 +102,7 @@ Bug Fixes * tls: fix issue where OCSP was inadvertently removed from SSL response in multi-context scenarios. * upstream: fix handling of moving endpoints between priorities when active health checks are enabled. Previously moving to a higher numbered priority was a NOOP, and moving to a lower numbered priority caused an abort. * upstream: retry budgets will now set default values for xDS configurations. +* validation: fix an issue that causes TAP sockets to panic during config validation mode. * zipkin: fix 'verbose' mode to emit annotations for stream events. This was the documented behavior, but wasn't behaving as documented. Removed Config or Runtime From 1294d55ee29d1a10d73e19149a6b34b38dfc059e Mon Sep 17 00:00:00 2001 From: Sotiris Nanopoulos Date: Mon, 12 Apr 2021 17:17:25 -0700 Subject: [PATCH 05/10] fix mocks Signed-off-by: Sotiris Nanopoulos --- test/mocks/server/admin.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/mocks/server/admin.cc b/test/mocks/server/admin.cc index 61d5e6dea1753..5adc684691fea 100644 --- a/test/mocks/server/admin.cc +++ b/test/mocks/server/admin.cc @@ -3,6 +3,7 @@ #include "gmock/gmock.h" #include "gtest/gtest.h" +using testing::_; using testing::Return; using testing::ReturnRef; @@ -13,6 +14,8 @@ MockAdmin::MockAdmin() { ON_CALL(*this, getConfigTracker()).WillByDefault(ReturnRef(config_tracker_)); ON_CALL(*this, concurrency()).WillByDefault(Return(1)); ON_CALL(*this, socket()).WillByDefault(ReturnRef(socket_)); + ON_CALL(*this, addHandler(_,_,_,_,_)).WillByDefault(Return(true)); + ON_CALL(*this, removeHandler(_)).WillByDefault(Return(true)); } MockAdmin::~MockAdmin() = default; From 4dc1deeb2ac1af0da3964b0abe84f2f6ccb838ff Mon Sep 17 00:00:00 2001 From: Sotiris Nanopoulos Date: Mon, 12 Apr 2021 17:17:59 -0700 Subject: [PATCH 06/10] format Signed-off-by: Sotiris Nanopoulos --- test/mocks/server/admin.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/mocks/server/admin.cc b/test/mocks/server/admin.cc index 5adc684691fea..db35d25034e4f 100644 --- a/test/mocks/server/admin.cc +++ b/test/mocks/server/admin.cc @@ -14,7 +14,7 @@ MockAdmin::MockAdmin() { ON_CALL(*this, getConfigTracker()).WillByDefault(ReturnRef(config_tracker_)); ON_CALL(*this, concurrency()).WillByDefault(Return(1)); ON_CALL(*this, socket()).WillByDefault(ReturnRef(socket_)); - ON_CALL(*this, addHandler(_,_,_,_,_)).WillByDefault(Return(true)); + ON_CALL(*this, addHandler(_, _, _, _, _)).WillByDefault(Return(true)); ON_CALL(*this, removeHandler(_)).WillByDefault(Return(true)); } From 2cf43a55597b14c77e62892549b89b4132c6dca9 Mon Sep 17 00:00:00 2001 From: Sotiris Nanopoulos Date: Wed, 14 Apr 2021 11:34:33 -0700 Subject: [PATCH 07/10] fix PR comments Signed-off-by: Sotiris Nanopoulos --- docs/root/version_history/current.rst | 2 +- source/server/config_validation/admin.h | 11 +++++------ source/server/config_validation/server.cc | 8 ++------ source/server/config_validation/server.h | 4 ++-- 4 files changed, 10 insertions(+), 15 deletions(-) diff --git a/docs/root/version_history/current.rst b/docs/root/version_history/current.rst index de5a3b99a533a..aef24010b7401 100644 --- a/docs/root/version_history/current.rst +++ b/docs/root/version_history/current.rst @@ -77,7 +77,7 @@ Bug Fixes --------- *Changes expected to improve the state of the world and are unlikely to have negative effects* -* active http health checks: properly handles HTTP/2 GOAWAY frames from the upstream. Previously a GON/AAWAY frame due to a graceful listener drain could cause improper failed health checks due to streams being refused by the upstream on a connection that is going away. To revert to old GOAWAY handling behavior, set the runtime feature `envoy.reloadable_features.health_check.graceful_goaway_handling` to false. +* active http health checks: properly handles HTTP/2 GOAWAY frames from the upstream. Previously a GOAWAY frame due to a graceful listener drain could cause improper failed health checks due to streams being refused by the upstream on a connection that is going away. To revert to old GOAWAY handling behavior, set the runtime feature `envoy.reloadable_features.health_check.graceful_goaway_handling` to false. * adaptive concurrency: fixed a bug where concurrent requests on different worker threads could update minRTT back-to-back. * buffer: tighten network connection read and write buffer high watermarks in preparation to more careful enforcement of read limits. Buffer high-watermark is now set to the exact configured value; previously it was set to value + 1. * cdn_loop: check that the entirety of the :ref:`cdn_id ` field is a valid CDN identifier. diff --git a/source/server/config_validation/admin.h b/source/server/config_validation/admin.h index e5b78345c780a..a2b4a9e203847 100644 --- a/source/server/config_validation/admin.h +++ b/source/server/config_validation/admin.h @@ -18,6 +18,11 @@ namespace Server { */ class ValidationAdmin : public Admin { public: + // We want to implement the socket interface without implementing the http listener function. + // This is useful for TAP because it wants to emit warnings when the address type is UDS + ValidationAdmin(Network::Address::InstanceConstSharedPtr address) + : socket_(address ? std::make_shared(nullptr, address, nullptr) + : nullptr) {} bool addHandler(const std::string&, const std::string&, HandlerCb, bool, bool) override; bool removeHandler(const std::string&) override; const Network::Socket& socket() override; @@ -32,12 +37,6 @@ class ValidationAdmin : public Admin { void addListenerToHandler(Network::ConnectionHandler* handler) override; uint32_t concurrency() const override { return 1; } - // We want to implement the socket interface without implementing the http listener function. - // This is useful for TAP because it wants to emit warnings when the address type is UDS - void createHttpListenerSocket(Network::Address::InstanceConstSharedPtr address) { - socket_ = std::make_shared(nullptr, address, nullptr); - } - private: ConfigTrackerImpl config_tracker_; Network::SocketSharedPtr socket_; diff --git a/source/server/config_validation/server.cc b/source/server/config_validation/server.cc index 70dcf126e273c..100647275b8c7 100644 --- a/source/server/config_validation/server.cc +++ b/source/server/config_validation/server.cc @@ -92,13 +92,9 @@ void ValidationInstance::initialize(const Options& options, overload_manager_ = std::make_unique( dispatcher(), stats(), threadLocal(), bootstrap.overload_manager(), messageValidationContext().staticValidationVisitor(), *api_, options_); - listener_manager_ = std::make_unique(*this, *this, *this, false); Configuration::InitialImpl initial_config(bootstrap, options, *this); - - if (initial_config.admin().address()) { - admin_.createHttpListenerSocket(initial_config.admin().address()); - } - + admin_ = std::make_unique(initial_config.admin().address()); + listener_manager_ = std::make_unique(*this, *this, *this, false); thread_local_.registerThread(*dispatcher_, true); runtime_singleton_ = std::make_unique( component_factory.createRuntime(*this, initial_config)); diff --git a/source/server/config_validation/server.h b/source/server/config_validation/server.h index dc137d8fc2711..1919a6643ad85 100644 --- a/source/server/config_validation/server.h +++ b/source/server/config_validation/server.h @@ -69,7 +69,7 @@ class ValidationInstance final : Logger::Loggable, Filesystem::Instance& file_system); // Server::Instance - Admin& admin() override { return admin_; } + Admin& admin() override { return *admin_; } Api::Api& api() override { return *api_; } Upstream::ClusterManager& clusterManager() override { return *config_.clusterManager(); } Ssl::ContextManager& sslContextManager() override { return *ssl_context_manager_; } @@ -192,7 +192,7 @@ class ValidationInstance final : Logger::Loggable, ThreadLocal::InstanceImpl thread_local_; Api::ApiPtr api_; Event::DispatcherPtr dispatcher_; - Server::ValidationAdmin admin_; + std::unique_ptr admin_; Singleton::ManagerPtr singleton_manager_; std::unique_ptr runtime_singleton_; Random::RandomGeneratorImpl random_generator_; From 696e9942b2dce28c6f66c7d7766ac72a5c6f6771 Mon Sep 17 00:00:00 2001 From: Sotiris Nanopoulos Date: Mon, 19 Apr 2021 15:46:15 -0700 Subject: [PATCH 08/10] reset current.rst Signed-off-by: Sotiris Nanopoulos --- docs/root/version_history/current.rst | 28 --------------------------- 1 file changed, 28 deletions(-) diff --git a/docs/root/version_history/current.rst b/docs/root/version_history/current.rst index 0a0f68435aeb0..e22f5520065a2 100644 --- a/docs/root/version_history/current.rst +++ b/docs/root/version_history/current.rst @@ -19,34 +19,6 @@ Bug Fixes --------- *Changes expected to improve the state of the world and are unlikely to have negative effects* -* active http health checks: properly handles HTTP/2 GOAWAY frames from the upstream. Previously a GOAWAY frame due to a graceful listener drain could cause improper failed health checks due to streams being refused by the upstream on a connection that is going away. To revert to old GOAWAY handling behavior, set the runtime feature `envoy.reloadable_features.health_check.graceful_goaway_handling` to false. -* adaptive concurrency: fixed a bug where concurrent requests on different worker threads could update minRTT back-to-back. -* buffer: tighten network connection read and write buffer high watermarks in preparation to more careful enforcement of read limits. Buffer high-watermark is now set to the exact configured value; previously it was set to value + 1. -* cdn_loop: check that the entirety of the :ref:`cdn_id ` field is a valid CDN identifier. -* cds: fix blocking the update for a warming cluster when the update is the same as the active version. -* ext_authz: emit :ref:`CheckResponse.dynamic_metadata ` when the external authorization response has "Denied" check status. -* fault injection: stop counting as active fault after delay elapsed. Previously fault injection filter continues to count the injected delay as an active fault even after it has elapsed. This produces incorrect output statistics and impacts the max number of consecutive faults allowed (e.g., for long-lived streams). This change decreases the active fault count when the delay fault is the only active and has gone finished. -* filter_chain: fix filter chain matching with the server name as the case-insensitive way. -* grpc-web: fix local reply and non-proto-encoded gRPC response handling for small response bodies. This fix can be temporarily reverted by setting `envoy.reloadable_features.grpc_web_fix_non_proto_encoded_response_handling` to false. -* grpc_http_bridge: the downstream HTTP status is now correctly set for trailers-only responses from the upstream. -* header map: pick the right delimiter to append multiple header values to the same key. Previouly header with multiple values are coalesced with ",", after this fix cookie headers should be coalesced with " ;". This doesn't affect Http1 or Http2 requests because these 2 codecs coalesce cookie headers before adding it to header map. To revert to the old behavior, set the runtime feature `envoy.reloadable_features.header_map_correctly_coalesce_cookies` to false. -* http: avoid grpc-status overwrite on Http::Utility::sendLocalReply() if that field has already been set. -* http: disallowing "host:" in request_headers_to_add for behavioral consistency with rejecting :authority header. This behavior can be temporarily reverted by setting `envoy.reloadable_features.treat_host_like_authority` to false. -* http: fixed an issue where Enovy did not handle peer stream limits correctly, and queued streams in nghttp2 rather than establish new connections. This behavior can be temporarily reverted by setting `envoy.reloadable_features.improved_stream_limit_handling` to false. -* http: fixed a bug where setting :ref:`MaxStreamDuration proto ` did not disable legacy timeout defaults. -* http: reverting a behavioral change where upstream connect timeouts were temporarily treated differently from other connection failures. The change back to the original behavior can be temporarily reverted by setting `envoy.reloadable_features.treat_upstream_connect_timeout_as_connect_failure` to false. -* jwt_authn: reject requests with a proper error if JWT has the wrong issuer when allow_missing is used. Before this change, the requests are accepted. -* listener: prevent crashing when an unknown listener config proto is received and debug logging is enabled. -* mysql_filter: improve the codec ability of mysql filter at connection phase, it can now decode MySQL5.7+ connection phase protocol packet. -* overload: fix a bug that can cause use-after-free when one scaled timer disables another one with the same duration. -* sni: as the server name in sni should be case-insensitive, envoy will convert the server name as lower case first before any other process inside envoy. -* tls: fix the subject alternative name of the presented certificate matches the specified matchers as the case-insensitive way when it uses DNS name. -* tls: fix issue where OCSP was inadvertently removed from SSL response in multi-context scenarios. -* upstream: fix handling of moving endpoints between priorities when active health checks are enabled. Previously moving to a higher numbered priority was a NOOP, and moving to a lower numbered priority caused an abort. -* upstream: retry budgets will now set default values for xDS configurations. -* validation: fix an issue that causes TAP sockets to panic during config validation mode. -* zipkin: fix 'verbose' mode to emit annotations for stream events. This was the documented behavior, but wasn't behaving as documented. - Removed Config or Runtime ------------------------- *Normally occurs at the end of the* :ref:`deprecation period ` From b27025a329d84b635b9bc6b52d310ae8c39f7a5f Mon Sep 17 00:00:00 2001 From: Sotiris Nanopoulos Date: Mon, 19 Apr 2021 16:43:39 -0700 Subject: [PATCH 09/10] fix PR comments Signed-off-by: Sotiris Nanopoulos --- docs/root/version_history/current.rst | 2 ++ source/server/config_validation/admin.h | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/root/version_history/current.rst b/docs/root/version_history/current.rst index e22f5520065a2..243383cd8b8d6 100644 --- a/docs/root/version_history/current.rst +++ b/docs/root/version_history/current.rst @@ -19,6 +19,8 @@ Bug Fixes --------- *Changes expected to improve the state of the world and are unlikely to have negative effects* +* validation: fix an issue that causes TAP sockets to panic during config validation mode. + Removed Config or Runtime ------------------------- *Normally occurs at the end of the* :ref:`deprecation period ` diff --git a/source/server/config_validation/admin.h b/source/server/config_validation/admin.h index a2b4a9e203847..ab21e1f0420b7 100644 --- a/source/server/config_validation/admin.h +++ b/source/server/config_validation/admin.h @@ -20,8 +20,8 @@ class ValidationAdmin : public Admin { public: // We want to implement the socket interface without implementing the http listener function. // This is useful for TAP because it wants to emit warnings when the address type is UDS - ValidationAdmin(Network::Address::InstanceConstSharedPtr address) - : socket_(address ? std::make_shared(nullptr, address, nullptr) + explicit ValidationAdmin(Network::Address::InstanceConstSharedPtr address) + : socket_(address ? std::make_shared(nullptr, std::move(address), nullptr) : nullptr) {} bool addHandler(const std::string&, const std::string&, HandlerCb, bool, bool) override; bool removeHandler(const std::string&) override; From 952d7dec068ff197edb91fb21c433f694f99a90d Mon Sep 17 00:00:00 2001 From: Sotiris Nanopoulos Date: Mon, 19 Apr 2021 16:47:01 -0700 Subject: [PATCH 10/10] fix format Signed-off-by: Sotiris Nanopoulos --- source/server/config_validation/admin.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/server/config_validation/admin.h b/source/server/config_validation/admin.h index ab21e1f0420b7..68a309aee4bb9 100644 --- a/source/server/config_validation/admin.h +++ b/source/server/config_validation/admin.h @@ -21,7 +21,8 @@ class ValidationAdmin : public Admin { // We want to implement the socket interface without implementing the http listener function. // This is useful for TAP because it wants to emit warnings when the address type is UDS explicit ValidationAdmin(Network::Address::InstanceConstSharedPtr address) - : socket_(address ? std::make_shared(nullptr, std::move(address), nullptr) + : socket_(address ? std::make_shared(nullptr, std::move(address), + nullptr) : nullptr) {} bool addHandler(const std::string&, const std::string&, HandlerCb, bool, bool) override; bool removeHandler(const std::string&) override;