diff --git a/envoy/access_log/BUILD b/envoy/access_log/BUILD index ba815e166f501..1f916d130620b 100644 --- a/envoy/access_log/BUILD +++ b/envoy/access_log/BUILD @@ -32,5 +32,6 @@ envoy_cc_library( "//envoy/formatter:substitution_formatter_interface", "//envoy/server:factory_context_interface", "//source/common/protobuf", + "@abseil-cpp//absl/status:statusor", ], ) diff --git a/envoy/access_log/access_log_config.h b/envoy/access_log/access_log_config.h index 533475264142f..ccd480beee7f2 100644 --- a/envoy/access_log/access_log_config.h +++ b/envoy/access_log/access_log_config.h @@ -11,6 +11,8 @@ #include "source/common/protobuf/protobuf.h" +#include "absl/status/statusor.h" + namespace Envoy { namespace AccessLog { @@ -27,8 +29,9 @@ class ExtensionFilterFactory : public Config::TypedFactory { * @param context supplies the factory context. * @return an instance of extension filter implementation from a config proto. */ - virtual FilterPtr createFilter(const envoy::config::accesslog::v3::ExtensionFilter& config, - Server::Configuration::GenericFactoryContext& context) PURE; + virtual absl::StatusOr + createFilter(const envoy::config::accesslog::v3::ExtensionFilter& config, + Server::Configuration::GenericFactoryContext& context) PURE; std::string category() const override { return "envoy.access_loggers.extension_filters"; } }; diff --git a/source/common/access_log/access_log_impl.cc b/source/common/access_log/access_log_impl.cc index 7a51caafe8fe4..f4eb261998506 100644 --- a/source/common/access_log/access_log_impl.cc +++ b/source/common/access_log/access_log_impl.cc @@ -91,7 +91,8 @@ FilterPtr FilterFactory::fromProto(const envoy::config::accesslog::v3::AccessLog { auto& factory = Config::Utility::getAndCheckFactory(config.extension_filter()); - return factory.createFilter(config.extension_filter(), context); + return THROW_OR_RETURN_VALUE(factory.createFilter(config.extension_filter(), context), + FilterPtr); } case envoy::config::accesslog::v3::AccessLogFilter::FilterSpecifierCase::FILTER_SPECIFIER_NOT_SET: PANIC_DUE_TO_PROTO_UNSET; diff --git a/source/extensions/access_loggers/filters/cel/config.cc b/source/extensions/access_loggers/filters/cel/config.cc index d8f48f98328f2..3748fb4fc2457 100644 --- a/source/extensions/access_loggers/filters/cel/config.cc +++ b/source/extensions/access_loggers/filters/cel/config.cc @@ -14,7 +14,7 @@ namespace AccessLoggers { namespace Filters { namespace CEL { -Envoy::AccessLog::FilterPtr CELAccessLogExtensionFilterFactory::createFilter( +absl::StatusOr CELAccessLogExtensionFilterFactory::createFilter( const envoy::config::accesslog::v3::ExtensionFilter& config, Server::Configuration::GenericFactoryContext& context) { diff --git a/source/extensions/access_loggers/filters/cel/config.h b/source/extensions/access_loggers/filters/cel/config.h index 2e915316868cf..c175d44d6ca47 100644 --- a/source/extensions/access_loggers/filters/cel/config.h +++ b/source/extensions/access_loggers/filters/cel/config.h @@ -20,7 +20,7 @@ namespace CEL { class CELAccessLogExtensionFilterFactory : public Envoy::AccessLog::ExtensionFilterFactory { public: - Envoy::AccessLog::FilterPtr + absl::StatusOr createFilter(const envoy::config::accesslog::v3::ExtensionFilter& config, Server::Configuration::GenericFactoryContext& context) override; ProtobufTypes::MessagePtr createEmptyConfigProto() override; diff --git a/source/extensions/access_loggers/filters/process_ratelimit/config.cc b/source/extensions/access_loggers/filters/process_ratelimit/config.cc index 0908dcfd9084d..f4ee6f71be520 100644 --- a/source/extensions/access_loggers/filters/process_ratelimit/config.cc +++ b/source/extensions/access_loggers/filters/process_ratelimit/config.cc @@ -12,7 +12,7 @@ namespace AccessLoggers { namespace Filters { namespace ProcessRateLimit { -AccessLog::FilterPtr ProcessRateLimitFilterFactory::createFilter( +absl::StatusOr ProcessRateLimitFilterFactory::createFilter( const envoy::config::accesslog::v3::ExtensionFilter& config, Server::Configuration::GenericFactoryContext& context) { auto factory_config = diff --git a/source/extensions/access_loggers/filters/process_ratelimit/config.h b/source/extensions/access_loggers/filters/process_ratelimit/config.h index 5664975604ef4..67a62732e30a5 100644 --- a/source/extensions/access_loggers/filters/process_ratelimit/config.h +++ b/source/extensions/access_loggers/filters/process_ratelimit/config.h @@ -13,8 +13,9 @@ namespace ProcessRateLimit { class ProcessRateLimitFilterFactory : public AccessLog::ExtensionFilterFactory { public: - AccessLog::FilterPtr createFilter(const envoy::config::accesslog::v3::ExtensionFilter& config, - Server::Configuration::GenericFactoryContext& context) override; + absl::StatusOr + createFilter(const envoy::config::accesslog::v3::ExtensionFilter& config, + Server::Configuration::GenericFactoryContext& context) override; ProtobufTypes::MessagePtr createEmptyConfigProto() override; std::string name() const override { return "envoy.access_loggers.extension_filters.process_ratelimit"; diff --git a/test/common/access_log/access_log_impl_test.cc b/test/common/access_log/access_log_impl_test.cc index 993403f6aba12..1bd2ef8d00574 100644 --- a/test/common/access_log/access_log_impl_test.cc +++ b/test/common/access_log/access_log_impl_test.cc @@ -1630,8 +1630,9 @@ class TestHeaderFilterFactory : public ExtensionFilterFactory { public: ~TestHeaderFilterFactory() override = default; - FilterPtr createFilter(const envoy::config::accesslog::v3::ExtensionFilter& config, - Server::Configuration::GenericFactoryContext& context) override { + absl::StatusOr + createFilter(const envoy::config::accesslog::v3::ExtensionFilter& config, + Server::Configuration::GenericFactoryContext& context) override { auto factory_config = Config::Utility::translateToFactoryConfig( config, context.messageValidationVisitor(), *this); const auto& header_config = @@ -1725,8 +1726,9 @@ class SampleExtensionFilterFactory : public ExtensionFilterFactory { public: ~SampleExtensionFilterFactory() override = default; - FilterPtr createFilter(const envoy::config::accesslog::v3::ExtensionFilter& config, - Server::Configuration::GenericFactoryContext& context) override { + absl::StatusOr + createFilter(const envoy::config::accesslog::v3::ExtensionFilter& config, + Server::Configuration::GenericFactoryContext& context) override { auto factory_config = Config::Utility::translateToFactoryConfig( config, context.messageValidationVisitor(), *this); diff --git a/test/extensions/filters/network/generic_proxy/fake_codec.h b/test/extensions/filters/network/generic_proxy/fake_codec.h index b3fac550664f4..5cf0802a4da3f 100644 --- a/test/extensions/filters/network/generic_proxy/fake_codec.h +++ b/test/extensions/filters/network/generic_proxy/fake_codec.h @@ -439,8 +439,9 @@ class FakeAccessLogExtensionFilter : public AccessLog::Filter { class FakeAccessLogExtensionFilterFactory : public AccessLog::ExtensionFilterFactory { public: // AccessLogFilterFactory - AccessLog::FilterPtr createFilter(const envoy::config::accesslog::v3::ExtensionFilter&, - Server::Configuration::GenericFactoryContext&) override { + absl::StatusOr + createFilter(const envoy::config::accesslog::v3::ExtensionFilter&, + Server::Configuration::GenericFactoryContext&) override { return std::make_unique(); } diff --git a/tools/code_format/config.yaml b/tools/code_format/config.yaml index 0391039d009a8..c186b19769319 100644 --- a/tools/code_format/config.yaml +++ b/tools/code_format/config.yaml @@ -91,6 +91,7 @@ paths: # valid situation identified so far is template functions used for config # processing. - envoy/common/exception.h + - source/common/access_log/access_log_impl.cc - source/common/filter/config_discovery_impl.h - source/common/config/utility.h - source/common/matcher/matcher.h