From ae131d81645d2256ae1943c5c55d2592cb134c9e Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Tue, 2 Jan 2024 05:09:26 +0000 Subject: [PATCH] x --- .../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 { public: static absl::StatusOr Create( const ChannelArgs& args, ChannelFilter::Args) { @@ -74,28 +75,43 @@ class ServiceConfigChannelArgFilter : public ChannelFilter { } } - // Construct a promise for one call. - ArenaPromise 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 service_config_; }; -ArenaPromise -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(); auto* service_config_call_data = arena->New( arena, GetContext()); - 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 =