From 610f439342148117a82472bc09f64474e694f2ee Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Thu, 1 Feb 2024 11:51:29 -0800 Subject: [PATCH] [channel] Add CallFactory, CallDestination (#35766) Closes #35766 COPYBARA_INTEGRATE_REVIEW=https://github.com/grpc/grpc/pull/35766 from ctiller:chan3 ea9a3260e38f45eccca0fc193cc1cf4eb9d57552 PiperOrigin-RevId: 603437058 --- BUILD | 2 +- CMakeLists.txt | 3 ++ Makefile | 2 + Package.swift | 2 + build_autogenerated.yaml | 6 +++ config.m4 | 1 + config.w32 | 1 + gRPC-C++.podspec | 2 + gRPC-Core.podspec | 3 ++ grpc.gemspec | 2 + grpc.gyp | 3 ++ package.xml | 2 + src/core/BUILD | 32 ++++++++++++ src/core/lib/surface/channel.cc | 32 ++++++------ src/core/lib/surface/channel.h | 10 ++-- src/core/lib/transport/call_destination.h | 35 +++++++++++++ src/core/lib/transport/call_factory.cc | 41 +++++++++++++++ src/core/lib/transport/call_factory.h | 56 +++++++++++++++++++++ src/python/grpcio/grpc_core_dependencies.py | 1 + tools/doxygen/Doxyfile.c++.internal | 2 + tools/doxygen/Doxyfile.core.internal | 2 + 21 files changed, 216 insertions(+), 24 deletions(-) create mode 100644 src/core/lib/transport/call_destination.h create mode 100644 src/core/lib/transport/call_factory.cc create mode 100644 src/core/lib/transport/call_factory.h diff --git a/BUILD b/BUILD index 12f5560f78d..6534f189793 100644 --- a/BUILD +++ b/BUILD @@ -1531,9 +1531,9 @@ grpc_cc_library( "//src/core:arena_promise", "//src/core:atomic_utils", "//src/core:bitset", + "//src/core:call_factory", "//src/core:call_filters", "//src/core:call_final_info", - "//src/core:call_size_estimator", "//src/core:call_spine", "//src/core:cancel_callback", "//src/core:channel_args", diff --git a/CMakeLists.txt b/CMakeLists.txt index 76ed926128c..acd54733f57 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2526,6 +2526,7 @@ add_library(grpc src/core/lib/surface/version.cc src/core/lib/transport/batch_builder.cc src/core/lib/transport/bdp_estimator.cc + src/core/lib/transport/call_factory.cc src/core/lib/transport/call_filters.cc src/core/lib/transport/call_final_info.cc src/core/lib/transport/call_size_estimator.cc @@ -3243,6 +3244,7 @@ add_library(grpc_unsecure src/core/lib/surface/version.cc src/core/lib/transport/batch_builder.cc src/core/lib/transport/bdp_estimator.cc + src/core/lib/transport/call_factory.cc src/core/lib/transport/call_filters.cc src/core/lib/transport/call_final_info.cc src/core/lib/transport/call_size_estimator.cc @@ -5332,6 +5334,7 @@ add_library(grpc_authorization_provider src/core/lib/surface/validate_metadata.cc src/core/lib/surface/version.cc src/core/lib/transport/batch_builder.cc + src/core/lib/transport/call_factory.cc src/core/lib/transport/call_filters.cc src/core/lib/transport/call_final_info.cc src/core/lib/transport/call_size_estimator.cc diff --git a/Makefile b/Makefile index dcd36453e93..2ae705ccef8 100644 --- a/Makefile +++ b/Makefile @@ -1708,6 +1708,7 @@ LIBGRPC_SRC = \ src/core/lib/surface/version.cc \ src/core/lib/transport/batch_builder.cc \ src/core/lib/transport/bdp_estimator.cc \ + src/core/lib/transport/call_factory.cc \ src/core/lib/transport/call_filters.cc \ src/core/lib/transport/call_final_info.cc \ src/core/lib/transport/call_size_estimator.cc \ @@ -2259,6 +2260,7 @@ LIBGRPC_UNSECURE_SRC = \ src/core/lib/surface/version.cc \ src/core/lib/transport/batch_builder.cc \ src/core/lib/transport/bdp_estimator.cc \ + src/core/lib/transport/call_factory.cc \ src/core/lib/transport/call_filters.cc \ src/core/lib/transport/call_final_info.cc \ src/core/lib/transport/call_size_estimator.cc \ diff --git a/Package.swift b/Package.swift index 01210a2c043..bab01bcf692 100644 --- a/Package.swift +++ b/Package.swift @@ -1899,6 +1899,8 @@ let package = Package( "src/core/lib/transport/batch_builder.h", "src/core/lib/transport/bdp_estimator.cc", "src/core/lib/transport/bdp_estimator.h", + "src/core/lib/transport/call_factory.cc", + "src/core/lib/transport/call_factory.h", "src/core/lib/transport/call_filters.cc", "src/core/lib/transport/call_filters.h", "src/core/lib/transport/call_final_info.cc", diff --git a/build_autogenerated.yaml b/build_autogenerated.yaml index 2d90e5b657b..05981fbb7c9 100644 --- a/build_autogenerated.yaml +++ b/build_autogenerated.yaml @@ -1177,6 +1177,7 @@ libs: - src/core/lib/surface/wait_for_cq_end_op.h - src/core/lib/transport/batch_builder.h - src/core/lib/transport/bdp_estimator.h + - src/core/lib/transport/call_factory.h - src/core/lib/transport/call_filters.h - src/core/lib/transport/call_final_info.h - src/core/lib/transport/call_size_estimator.h @@ -1982,6 +1983,7 @@ libs: - src/core/lib/surface/version.cc - src/core/lib/transport/batch_builder.cc - src/core/lib/transport/bdp_estimator.cc + - src/core/lib/transport/call_factory.cc - src/core/lib/transport/call_filters.cc - src/core/lib/transport/call_final_info.cc - src/core/lib/transport/call_size_estimator.cc @@ -2630,6 +2632,7 @@ libs: - src/core/lib/surface/wait_for_cq_end_op.h - src/core/lib/transport/batch_builder.h - src/core/lib/transport/bdp_estimator.h + - src/core/lib/transport/call_factory.h - src/core/lib/transport/call_filters.h - src/core/lib/transport/call_final_info.h - src/core/lib/transport/call_size_estimator.h @@ -3051,6 +3054,7 @@ libs: - src/core/lib/surface/version.cc - src/core/lib/transport/batch_builder.cc - src/core/lib/transport/bdp_estimator.cc + - src/core/lib/transport/call_factory.cc - src/core/lib/transport/call_filters.cc - src/core/lib/transport/call_final_info.cc - src/core/lib/transport/call_size_estimator.cc @@ -4675,6 +4679,7 @@ libs: - src/core/lib/surface/validate_metadata.h - src/core/lib/surface/wait_for_cq_end_op.h - src/core/lib/transport/batch_builder.h + - src/core/lib/transport/call_factory.h - src/core/lib/transport/call_filters.h - src/core/lib/transport/call_final_info.h - src/core/lib/transport/call_size_estimator.h @@ -4973,6 +4978,7 @@ libs: - src/core/lib/surface/validate_metadata.cc - src/core/lib/surface/version.cc - src/core/lib/transport/batch_builder.cc + - src/core/lib/transport/call_factory.cc - src/core/lib/transport/call_filters.cc - src/core/lib/transport/call_final_info.cc - src/core/lib/transport/call_size_estimator.cc diff --git a/config.m4 b/config.m4 index 15a71315994..35683cf5ede 100644 --- a/config.m4 +++ b/config.m4 @@ -836,6 +836,7 @@ if test "$PHP_GRPC" != "no"; then src/core/lib/surface/version.cc \ src/core/lib/transport/batch_builder.cc \ src/core/lib/transport/bdp_estimator.cc \ + src/core/lib/transport/call_factory.cc \ src/core/lib/transport/call_filters.cc \ src/core/lib/transport/call_final_info.cc \ src/core/lib/transport/call_size_estimator.cc \ diff --git a/config.w32 b/config.w32 index c31177db3c3..b34f443eeea 100644 --- a/config.w32 +++ b/config.w32 @@ -801,6 +801,7 @@ if (PHP_GRPC != "no") { "src\\core\\lib\\surface\\version.cc " + "src\\core\\lib\\transport\\batch_builder.cc " + "src\\core\\lib\\transport\\bdp_estimator.cc " + + "src\\core\\lib\\transport\\call_factory.cc " + "src\\core\\lib\\transport\\call_filters.cc " + "src\\core\\lib\\transport\\call_final_info.cc " + "src\\core\\lib\\transport\\call_size_estimator.cc " + diff --git a/gRPC-C++.podspec b/gRPC-C++.podspec index b8e1e878059..2550b7b9ac1 100644 --- a/gRPC-C++.podspec +++ b/gRPC-C++.podspec @@ -1281,6 +1281,7 @@ Pod::Spec.new do |s| 'src/core/lib/surface/wait_for_cq_end_op.h', 'src/core/lib/transport/batch_builder.h', 'src/core/lib/transport/bdp_estimator.h', + 'src/core/lib/transport/call_factory.h', 'src/core/lib/transport/call_filters.h', 'src/core/lib/transport/call_final_info.h', 'src/core/lib/transport/call_size_estimator.h', @@ -2537,6 +2538,7 @@ Pod::Spec.new do |s| 'src/core/lib/surface/wait_for_cq_end_op.h', 'src/core/lib/transport/batch_builder.h', 'src/core/lib/transport/bdp_estimator.h', + 'src/core/lib/transport/call_factory.h', 'src/core/lib/transport/call_filters.h', 'src/core/lib/transport/call_final_info.h', 'src/core/lib/transport/call_size_estimator.h', diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec index a79a6ea519d..63bb150a140 100644 --- a/gRPC-Core.podspec +++ b/gRPC-Core.podspec @@ -2008,6 +2008,8 @@ Pod::Spec.new do |s| 'src/core/lib/transport/batch_builder.h', 'src/core/lib/transport/bdp_estimator.cc', 'src/core/lib/transport/bdp_estimator.h', + 'src/core/lib/transport/call_factory.cc', + 'src/core/lib/transport/call_factory.h', 'src/core/lib/transport/call_filters.cc', 'src/core/lib/transport/call_filters.h', 'src/core/lib/transport/call_final_info.cc', @@ -3316,6 +3318,7 @@ Pod::Spec.new do |s| 'src/core/lib/surface/wait_for_cq_end_op.h', 'src/core/lib/transport/batch_builder.h', 'src/core/lib/transport/bdp_estimator.h', + 'src/core/lib/transport/call_factory.h', 'src/core/lib/transport/call_filters.h', 'src/core/lib/transport/call_final_info.h', 'src/core/lib/transport/call_size_estimator.h', diff --git a/grpc.gemspec b/grpc.gemspec index 9f9e1f89573..392ba76a0a1 100644 --- a/grpc.gemspec +++ b/grpc.gemspec @@ -1901,6 +1901,8 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/transport/batch_builder.h ) s.files += %w( src/core/lib/transport/bdp_estimator.cc ) s.files += %w( src/core/lib/transport/bdp_estimator.h ) + s.files += %w( src/core/lib/transport/call_factory.cc ) + s.files += %w( src/core/lib/transport/call_factory.h ) s.files += %w( src/core/lib/transport/call_filters.cc ) s.files += %w( src/core/lib/transport/call_filters.h ) s.files += %w( src/core/lib/transport/call_final_info.cc ) diff --git a/grpc.gyp b/grpc.gyp index f7b87a379c3..4e36b01858c 100644 --- a/grpc.gyp +++ b/grpc.gyp @@ -1022,6 +1022,7 @@ 'src/core/lib/surface/version.cc', 'src/core/lib/transport/batch_builder.cc', 'src/core/lib/transport/bdp_estimator.cc', + 'src/core/lib/transport/call_factory.cc', 'src/core/lib/transport/call_filters.cc', 'src/core/lib/transport/call_final_info.cc', 'src/core/lib/transport/call_size_estimator.cc', @@ -1513,6 +1514,7 @@ 'src/core/lib/surface/version.cc', 'src/core/lib/transport/batch_builder.cc', 'src/core/lib/transport/bdp_estimator.cc', + 'src/core/lib/transport/call_factory.cc', 'src/core/lib/transport/call_filters.cc', 'src/core/lib/transport/call_final_info.cc', 'src/core/lib/transport/call_size_estimator.cc', @@ -2284,6 +2286,7 @@ 'src/core/lib/surface/validate_metadata.cc', 'src/core/lib/surface/version.cc', 'src/core/lib/transport/batch_builder.cc', + 'src/core/lib/transport/call_factory.cc', 'src/core/lib/transport/call_filters.cc', 'src/core/lib/transport/call_final_info.cc', 'src/core/lib/transport/call_size_estimator.cc', diff --git a/package.xml b/package.xml index 1928ed1a16c..1e28a2a052f 100644 --- a/package.xml +++ b/package.xml @@ -1883,6 +1883,8 @@ + + diff --git a/src/core/BUILD b/src/core/BUILD index 127c4110910..60003cf37bf 100644 --- a/src/core/BUILD +++ b/src/core/BUILD @@ -6734,6 +6734,38 @@ grpc_cc_library( ], ) +grpc_cc_library( + name = "call_factory", + srcs = [ + "lib/transport/call_factory.cc", + ], + hdrs = [ + "lib/transport/call_factory.h", + ], + deps = [ + "arena", + "call_size_estimator", + "call_spine", + "channel_args", + "ref_counted", + "resource_quota", + "//:gpr_platform", + "//:stats", + ], +) + +grpc_cc_library( + name = "call_destination", + hdrs = [ + "lib/transport/call_destination.h", + ], + deps = [ + "call_spine", + "//:gpr_platform", + "//:orphanable", + ], +) + grpc_cc_library( name = "parsed_metadata", srcs = [ diff --git a/src/core/lib/surface/channel.cc b/src/core/lib/surface/channel.cc index e2015e3acdf..7886baba05e 100644 --- a/src/core/lib/surface/channel.cc +++ b/src/core/lib/surface/channel.cc @@ -58,12 +58,25 @@ #include "src/core/lib/surface/channel_init.h" #include "src/core/lib/surface/channel_stack_type.h" #include "src/core/lib/surface/init_internally.h" +#include "src/core/lib/transport/call_factory.h" #include "src/core/lib/transport/transport.h" // IWYU pragma: no_include namespace grpc_core { +namespace { + +class NotReallyACallFactory final : public CallFactory { + public: + using CallFactory::CallFactory; + CallInitiator CreateCall(ClientMetadataHandle, Arena*) override { + Crash("NotReallyACallFactory::CreateCall should never be called"); + } +}; + +} // namespace + Channel::Channel(bool is_client, bool is_promising, std::string target, const ChannelArgs& channel_args, grpc_compression_options compression_options, @@ -71,14 +84,10 @@ Channel::Channel(bool is_client, bool is_promising, std::string target, : is_client_(is_client), is_promising_(is_promising), compression_options_(compression_options), - call_size_estimator_(channel_stack->call_stack_size + - grpc_call_get_initial_size_estimate()), channelz_node_(channel_args.GetObjectRef()), - allocator_(channel_args.GetObject() - ->memory_quota() - ->CreateMemoryOwner()), target_(std::move(target)), - channel_stack_(std::move(channel_stack)) { + channel_stack_(std::move(channel_stack)), + call_factory_(MakeRefCounted(channel_args)) { // We need to make sure that grpc_shutdown() does not shut things down // until after the channel is destroyed. However, the channel may not // actually be destroyed by the time grpc_channel_destroy() returns, @@ -107,17 +116,6 @@ Channel::Channel(bool is_client, bool is_promising, std::string target, }; } -Arena* Channel::CreateArena() { - const size_t initial_size = call_size_estimator_.CallSizeEstimate(); - global_stats().IncrementCallInitialSize(initial_size); - return Arena::Create(initial_size, &allocator_); -} - -void Channel::DestroyArena(Arena* arena) { - call_size_estimator_.UpdateCallSizeEstimate(arena->TotalUsedBytes()); - arena->Destroy(); -} - absl::StatusOr> Channel::CreateWithBuilder( ChannelStackBuilder* builder) { auto channel_args = builder->channel_args(); diff --git a/src/core/lib/surface/channel.h b/src/core/lib/surface/channel.h index d7a6e1f5acc..4796331893e 100644 --- a/src/core/lib/surface/channel.h +++ b/src/core/lib/surface/channel.h @@ -52,10 +52,9 @@ #include "src/core/lib/gprpp/sync.h" #include "src/core/lib/gprpp/time.h" #include "src/core/lib/iomgr/iomgr_fwd.h" -#include "src/core/lib/resource_quota/memory_quota.h" #include "src/core/lib/slice/slice.h" #include "src/core/lib/surface/channel_stack_type.h" -#include "src/core/lib/transport/call_size_estimator.h" +#include "src/core/lib/transport/call_factory.h" #include "src/core/lib/transport/transport.h" /// The same as grpc_channel_destroy, but doesn't create an ExecCtx, and so @@ -122,8 +121,8 @@ class Channel : public RefCounted, channelz::ChannelNode* channelz_node() const { return channelz_node_.get(); } - Arena* CreateArena(); - void DestroyArena(Arena* arena); + Arena* CreateArena() { return call_factory_->CreateArena(); } + void DestroyArena(Arena* arena) { return call_factory_->DestroyArena(arena); } absl::string_view target() const { return target_; } bool is_client() const { return is_client_; } @@ -148,12 +147,11 @@ class Channel : public RefCounted, const bool is_client_; const bool is_promising_; const grpc_compression_options compression_options_; - CallSizeEstimator call_size_estimator_; CallRegistrationTable registration_table_; RefCountedPtr channelz_node_; - MemoryAllocator allocator_; std::string target_; const RefCountedPtr channel_stack_; + const RefCountedPtr call_factory_; }; } // namespace grpc_core diff --git a/src/core/lib/transport/call_destination.h b/src/core/lib/transport/call_destination.h new file mode 100644 index 00000000000..e291bd703cb --- /dev/null +++ b/src/core/lib/transport/call_destination.h @@ -0,0 +1,35 @@ +// Copyright 2024 gRPC authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef GRPC_SRC_CORE_LIB_TRANSPORT_CALL_DESTINATION_H +#define GRPC_SRC_CORE_LIB_TRANSPORT_CALL_DESTINATION_H + +#include + +#include "src/core/lib/gprpp/orphanable.h" +#include "src/core/lib/transport/call_spine.h" + +namespace grpc_core { + +// CallDestination is responsible for the processing of a CallHandler. +// It might be a transport, the server API, or a subchannel on the client (for +// instance). +class CallDestination : public Orphanable { + public: + virtual void StartCall(CallHandler call_handler) = 0; +}; + +} // namespace grpc_core + +#endif // GRPC_SRC_CORE_LIB_TRANSPORT_CALL_DESTINATION_H diff --git a/src/core/lib/transport/call_factory.cc b/src/core/lib/transport/call_factory.cc new file mode 100644 index 00000000000..bcc01cc87ff --- /dev/null +++ b/src/core/lib/transport/call_factory.cc @@ -0,0 +1,41 @@ +// Copyright 2024 gRPC authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include + +#include "src/core/lib/transport/call_factory.h" + +#include "src/core/lib/debug/stats.h" +#include "src/core/lib/resource_quota/resource_quota.h" + +namespace grpc_core { + +CallFactory::CallFactory(const ChannelArgs& args) + : call_size_estimator_(1024), + allocator_(args.GetObject() + ->memory_quota() + ->CreateMemoryOwner()) {} + +Arena* CallFactory::CreateArena() { + const size_t initial_size = call_size_estimator_.CallSizeEstimate(); + global_stats().IncrementCallInitialSize(initial_size); + return Arena::Create(initial_size, &allocator_); +} + +void CallFactory::DestroyArena(Arena* arena) { + call_size_estimator_.UpdateCallSizeEstimate(arena->TotalUsedBytes()); + arena->Destroy(); +} + +} // namespace grpc_core diff --git a/src/core/lib/transport/call_factory.h b/src/core/lib/transport/call_factory.h new file mode 100644 index 00000000000..99bb1768650 --- /dev/null +++ b/src/core/lib/transport/call_factory.h @@ -0,0 +1,56 @@ +// Copyright 2024 gRPC authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef GRPC_SRC_CORE_LIB_TRANSPORT_CALL_FACTORY_H +#define GRPC_SRC_CORE_LIB_TRANSPORT_CALL_FACTORY_H + +#include + +#include "src/core/lib/channel/channel_args.h" +#include "src/core/lib/gprpp/ref_counted.h" +#include "src/core/lib/resource_quota/arena.h" +#include "src/core/lib/transport/call_size_estimator.h" +#include "src/core/lib/transport/call_spine.h" + +namespace grpc_core { + +// CallFactory creates calls. +class CallFactory : public RefCounted { + public: + explicit CallFactory(const ChannelArgs& args); + + // Create an arena for a call. + // We do this as a separate step so that servers can create arenas without + // creating the call into it - in the case that we have a HTTP/2 rapid reset + // like attack this saves a lot of cpu time. + Arena* CreateArena(); + // Destroy an arena created by CreateArena. + // Updates the call size estimator so that we always create arenas of about + // the right size. + void DestroyArena(Arena* arena); + + // Create a call. The call will be created in the given arena. + // It is the CallFactory's responsibility to ensure that the CallHandler + // associated with the call is eventually handled by something (typically a + // CallDestination, but this is not strictly required). + virtual CallInitiator CreateCall(ClientMetadataHandle md, Arena* arena) = 0; + + private: + CallSizeEstimator call_size_estimator_; + MemoryAllocator allocator_; +}; + +} // namespace grpc_core + +#endif // GRPC_SRC_CORE_LIB_TRANSPORT_CALL_FACTORY_H diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py index 4c942baf42e..1b68ac8336b 100644 --- a/src/python/grpcio/grpc_core_dependencies.py +++ b/src/python/grpcio/grpc_core_dependencies.py @@ -810,6 +810,7 @@ CORE_SOURCE_FILES = [ 'src/core/lib/surface/version.cc', 'src/core/lib/transport/batch_builder.cc', 'src/core/lib/transport/bdp_estimator.cc', + 'src/core/lib/transport/call_factory.cc', 'src/core/lib/transport/call_filters.cc', 'src/core/lib/transport/call_final_info.cc', 'src/core/lib/transport/call_size_estimator.cc', diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal index 13d4cb43767..72c4c872253 100644 --- a/tools/doxygen/Doxyfile.c++.internal +++ b/tools/doxygen/Doxyfile.c++.internal @@ -2900,6 +2900,8 @@ src/core/lib/transport/batch_builder.cc \ src/core/lib/transport/batch_builder.h \ src/core/lib/transport/bdp_estimator.cc \ src/core/lib/transport/bdp_estimator.h \ +src/core/lib/transport/call_factory.cc \ +src/core/lib/transport/call_factory.h \ src/core/lib/transport/call_filters.cc \ src/core/lib/transport/call_filters.h \ src/core/lib/transport/call_final_info.cc \ diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal index 7433bc02717..a6963aa893d 100644 --- a/tools/doxygen/Doxyfile.core.internal +++ b/tools/doxygen/Doxyfile.core.internal @@ -2681,6 +2681,8 @@ src/core/lib/transport/batch_builder.cc \ src/core/lib/transport/batch_builder.h \ src/core/lib/transport/bdp_estimator.cc \ src/core/lib/transport/bdp_estimator.h \ +src/core/lib/transport/call_factory.cc \ +src/core/lib/transport/call_factory.h \ src/core/lib/transport/call_filters.cc \ src/core/lib/transport/call_filters.h \ src/core/lib/transport/call_final_info.cc \