From 9a6744b6bffab4b216c29a4ac8f77109c9c1dba9 Mon Sep 17 00:00:00 2001 From: Craig Tiller <ctiller@google.com> Date: Tue, 2 Jan 2024 09:43:53 -0800 Subject: [PATCH] [call-v3] Convert ServiceConfigChannelArgFilter to new API (#35418) Omitting experiments in this case because the conversion is trivial Closes #35418 COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/35418 from ctiller:scca ae131d81645d2256ae1943c5c55d2592cb134c9e PiperOrigin-RevId: 595140546 --- .../service_config_channel_arg_filter.cc | 42 +++++++++++++------ 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc b/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc index 9de7fe2e374..54169fcab06 100644 --- a/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +++ b/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc @@ -54,7 +54,8 @@ namespace grpc_core { namespace { -class ServiceConfigChannelArgFilter : public ChannelFilter { +class ServiceConfigChannelArgFilter + : public ImplementChannelFilter<ServiceConfigChannelArgFilter> { public: static absl::StatusOr<ServiceConfigChannelArgFilter> Create( const ChannelArgs& args, ChannelFilter::Args) { @@ -74,28 +75,43 @@ class ServiceConfigChannelArgFilter : public ChannelFilter { } } - // Construct a promise for one call. - ArenaPromise<ServerMetadataHandle> MakeCallPromise( - CallArgs call_args, NextPromiseFactory next_promise_factory) override; + class Call { + public: + void OnClientInitialMetadata(ClientMetadata& md, + ServiceConfigChannelArgFilter* filter); + static const NoInterceptor OnServerInitialMetadata; + static const NoInterceptor OnServerTrailingMetadata; + static const NoInterceptor OnClientToServerMessage; + static const NoInterceptor OnServerToClientMessage; + static const NoInterceptor OnFinalize; + }; private: RefCountedPtr<ServiceConfig> service_config_; }; -ArenaPromise<ServerMetadataHandle> -ServiceConfigChannelArgFilter::MakeCallPromise( - CallArgs call_args, NextPromiseFactory next_promise_factory) { +const NoInterceptor + ServiceConfigChannelArgFilter::Call::OnServerInitialMetadata; +const NoInterceptor + ServiceConfigChannelArgFilter::Call::OnServerTrailingMetadata; +const NoInterceptor + ServiceConfigChannelArgFilter::Call::OnClientToServerMessage; +const NoInterceptor + ServiceConfigChannelArgFilter::Call::OnServerToClientMessage; +const NoInterceptor ServiceConfigChannelArgFilter::Call::OnFinalize; + +void ServiceConfigChannelArgFilter::Call::OnClientInitialMetadata( + ClientMetadata& md, ServiceConfigChannelArgFilter* filter) { const ServiceConfigParser::ParsedConfigVector* method_configs = nullptr; - if (service_config_ != nullptr) { - method_configs = service_config_->GetMethodParsedConfigVector( - call_args.client_initial_metadata->get_pointer(HttpPathMetadata()) - ->c_slice()); + if (filter->service_config_ != nullptr) { + method_configs = filter->service_config_->GetMethodParsedConfigVector( + md.get_pointer(HttpPathMetadata())->c_slice()); } auto* arena = GetContext<Arena>(); auto* service_config_call_data = arena->New<ServiceConfigCallData>( arena, GetContext<grpc_call_context_element>()); - service_config_call_data->SetServiceConfig(service_config_, method_configs); - return next_promise_factory(std::move(call_args)); + service_config_call_data->SetServiceConfig(filter->service_config_, + method_configs); } const grpc_channel_filter kServiceConfigChannelArgFilter =