grpc 1.60.2 → 1.61.0.pre2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (279) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +208 -165
  3. data/include/grpc/event_engine/event_engine.h +59 -12
  4. data/include/grpc/event_engine/internal/memory_allocator_impl.h +6 -0
  5. data/include/grpc/event_engine/internal/slice_cast.h +12 -0
  6. data/include/grpc/event_engine/memory_allocator.h +3 -1
  7. data/include/grpc/event_engine/slice.h +5 -0
  8. data/include/grpc/grpc_security.h +22 -1
  9. data/include/grpc/impl/call.h +29 -0
  10. data/include/grpc/impl/channel_arg_names.h +12 -1
  11. data/include/grpc/impl/slice_type.h +1 -1
  12. data/include/grpc/module.modulemap +1 -0
  13. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +54 -7
  14. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +20 -6
  15. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +10 -13
  16. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +18 -10
  17. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +326 -0
  18. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +143 -0
  19. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -2
  20. data/src/core/ext/filters/client_channel/client_channel.cc +32 -6
  21. data/src/core/ext/filters/client_channel/client_channel_internal.h +2 -0
  22. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +1 -1
  23. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +54 -21
  24. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +3 -2
  25. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +2 -1
  26. data/src/core/ext/filters/client_channel/lb_policy/endpoint_list.cc +12 -15
  27. data/src/core/ext/filters/client_channel/lb_policy/endpoint_list.h +8 -5
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +139 -92
  29. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +9 -4
  30. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +9 -4
  31. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +10 -11
  32. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +94 -93
  33. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +5 -3
  34. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +12 -15
  35. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +38 -16
  36. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +25 -28
  37. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +10 -10
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +37 -35
  39. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +11 -9
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +504 -461
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +232 -122
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -6
  43. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +642 -251
  44. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +2 -6
  45. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +7 -8
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +2 -1
  47. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +3 -1
  48. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +2 -2
  49. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +2 -2
  50. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +6 -8
  51. data/src/core/ext/filters/client_channel/resolver/xds/xds_dependency_manager.cc +1031 -0
  52. data/src/core/ext/filters/client_channel/resolver/xds/xds_dependency_manager.h +277 -0
  53. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +128 -270
  54. data/src/core/ext/filters/client_channel/resolver/xds/{xds_resolver.h → xds_resolver_attributes.h} +5 -4
  55. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver_trace.cc +25 -0
  56. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver_trace.h +30 -0
  57. data/src/core/ext/filters/client_channel/retry_filter.cc +1 -0
  58. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +35 -17
  59. data/src/core/ext/filters/deadline/deadline_filter.cc +12 -0
  60. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +17 -13
  61. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +13 -4
  62. data/src/core/ext/filters/http/client/http_client_filter.cc +23 -32
  63. data/src/core/ext/filters/http/client/http_client_filter.h +10 -5
  64. data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
  65. data/src/core/ext/filters/http/client_authority_filter.h +12 -4
  66. data/src/core/ext/filters/http/http_filters_plugin.cc +42 -20
  67. data/src/core/ext/filters/http/message_compress/compression_filter.cc +55 -80
  68. data/src/core/ext/filters/http/message_compress/compression_filter.h +54 -12
  69. data/src/core/ext/filters/http/message_compress/legacy_compression_filter.cc +325 -0
  70. data/src/core/ext/filters/http/message_compress/legacy_compression_filter.h +139 -0
  71. data/src/core/ext/filters/http/server/http_server_filter.cc +41 -41
  72. data/src/core/ext/filters/http/server/http_server_filter.h +11 -4
  73. data/src/core/ext/filters/message_size/message_size_filter.cc +56 -76
  74. data/src/core/ext/filters/message_size/message_size_filter.h +35 -23
  75. data/src/core/ext/filters/rbac/rbac_filter.cc +15 -11
  76. data/src/core/ext/filters/rbac/rbac_filter.h +11 -4
  77. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +25 -13
  78. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +47 -50
  79. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +21 -4
  80. data/src/core/ext/transport/chttp2/alpn/alpn.cc +1 -1
  81. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -2
  82. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +11 -2
  83. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +68 -145
  84. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -3
  85. data/src/core/ext/transport/chttp2/transport/flow_control.cc +21 -82
  86. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -8
  87. data/src/core/ext/transport/chttp2/transport/frame.cc +506 -0
  88. data/src/core/ext/transport/chttp2/transport/frame.h +214 -0
  89. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +1 -1
  90. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +33 -79
  91. data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -7
  92. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +27 -36
  93. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +0 -2
  94. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +122 -32
  95. data/src/core/ext/transport/chttp2/transport/http2_settings.h +142 -37
  96. data/src/core/ext/transport/chttp2/transport/internal.h +1 -22
  97. data/src/core/ext/transport/chttp2/transport/parsing.cc +23 -37
  98. data/src/core/ext/transport/chttp2/transport/writing.cc +26 -58
  99. data/src/core/ext/transport/inproc/inproc_transport.cc +172 -13
  100. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +712 -0
  101. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +151 -0
  102. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h +33 -0
  103. data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c +133 -0
  104. data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h +50 -0
  105. data/src/core/ext/xds/certificate_provider_store.cc +2 -1
  106. data/src/core/ext/xds/certificate_provider_store.h +0 -5
  107. data/src/core/ext/xds/xds_api.cc +31 -18
  108. data/src/core/ext/xds/xds_api.h +2 -2
  109. data/src/core/ext/xds/xds_bootstrap.h +3 -0
  110. data/src/core/ext/xds/xds_certificate_provider.cc +88 -287
  111. data/src/core/ext/xds/xds_certificate_provider.h +44 -111
  112. data/src/core/ext/xds/xds_client.cc +420 -414
  113. data/src/core/ext/xds/xds_client.h +31 -22
  114. data/src/core/ext/xds/xds_client_grpc.cc +3 -1
  115. data/src/core/ext/xds/xds_cluster.cc +104 -11
  116. data/src/core/ext/xds/xds_cluster.h +9 -1
  117. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +9 -5
  118. data/src/core/ext/xds/xds_common_types.cc +14 -10
  119. data/src/core/ext/xds/xds_endpoint.cc +9 -4
  120. data/src/core/ext/xds/xds_endpoint.h +5 -1
  121. data/src/core/ext/xds/xds_health_status.cc +12 -2
  122. data/src/core/ext/xds/xds_health_status.h +4 -2
  123. data/src/core/ext/xds/xds_http_rbac_filter.cc +5 -3
  124. data/src/core/ext/xds/xds_listener.cc +14 -8
  125. data/src/core/ext/xds/xds_resource_type_impl.h +6 -4
  126. data/src/core/ext/xds/xds_route_config.cc +34 -22
  127. data/src/core/ext/xds/xds_route_config.h +1 -0
  128. data/src/core/ext/xds/xds_server_config_fetcher.cc +61 -57
  129. data/src/core/ext/xds/xds_transport.h +3 -0
  130. data/src/core/ext/xds/xds_transport_grpc.cc +47 -50
  131. data/src/core/ext/xds/xds_transport_grpc.h +4 -0
  132. data/src/core/lib/channel/call_tracer.cc +12 -0
  133. data/src/core/lib/channel/call_tracer.h +17 -3
  134. data/src/core/lib/channel/channel_args.cc +24 -14
  135. data/src/core/lib/channel/channel_args.h +74 -13
  136. data/src/core/lib/channel/channel_stack.cc +27 -0
  137. data/src/core/lib/channel/channel_stack.h +10 -10
  138. data/src/core/lib/channel/connected_channel.cc +64 -18
  139. data/src/core/lib/channel/promise_based_filter.h +1041 -1
  140. data/src/core/lib/channel/server_call_tracer_filter.cc +43 -35
  141. data/src/core/lib/compression/compression_internal.cc +0 -3
  142. data/src/core/lib/event_engine/ares_resolver.cc +35 -14
  143. data/src/core/lib/event_engine/ares_resolver.h +9 -10
  144. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +8 -1
  145. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +132 -0
  146. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +61 -0
  147. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +52 -36
  148. data/src/core/lib/event_engine/posix_engine/posix_engine.h +4 -9
  149. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +11 -3
  150. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +9 -2
  151. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +7 -0
  152. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +17 -27
  153. data/src/core/lib/event_engine/posix_engine/timer_manager.h +0 -3
  154. data/src/core/lib/event_engine/ref_counted_dns_resolver_interface.h +55 -0
  155. data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +114 -0
  156. data/src/core/lib/event_engine/windows/native_windows_dns_resolver.h +51 -0
  157. data/src/core/lib/event_engine/windows/windows_engine.cc +7 -7
  158. data/src/core/lib/experiments/config.cc +13 -0
  159. data/src/core/lib/experiments/config.h +3 -0
  160. data/src/core/lib/experiments/experiments.cc +245 -366
  161. data/src/core/lib/experiments/experiments.h +50 -156
  162. data/src/core/lib/gprpp/debug_location.h +13 -0
  163. data/src/core/lib/gprpp/dual_ref_counted.h +36 -7
  164. data/src/core/lib/gprpp/orphanable.h +27 -0
  165. data/src/core/lib/gprpp/ref_counted.h +63 -22
  166. data/src/core/lib/gprpp/ref_counted_ptr.h +70 -27
  167. data/src/core/lib/gprpp/ref_counted_string.h +13 -0
  168. data/src/core/lib/gprpp/status_helper.cc +1 -2
  169. data/src/core/lib/iomgr/combiner.cc +15 -51
  170. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +31 -0
  171. data/src/core/lib/iomgr/event_engine_shims/endpoint.h +16 -0
  172. data/src/core/lib/iomgr/tcp_client_posix.cc +4 -3
  173. data/src/core/lib/load_balancing/lb_policy.h +1 -1
  174. data/src/core/lib/promise/activity.cc +17 -2
  175. data/src/core/lib/promise/activity.h +5 -4
  176. data/src/core/lib/promise/all_ok.h +80 -0
  177. data/src/core/lib/promise/detail/join_state.h +2077 -0
  178. data/src/core/lib/promise/detail/promise_factory.h +1 -0
  179. data/src/core/lib/promise/detail/promise_like.h +8 -1
  180. data/src/core/lib/promise/detail/seq_state.h +3458 -150
  181. data/src/core/lib/promise/detail/status.h +42 -5
  182. data/src/core/lib/promise/for_each.h +13 -1
  183. data/src/core/lib/promise/if.h +4 -0
  184. data/src/core/lib/promise/latch.h +6 -3
  185. data/src/core/lib/promise/party.cc +33 -31
  186. data/src/core/lib/promise/party.h +142 -6
  187. data/src/core/lib/promise/poll.h +39 -13
  188. data/src/core/lib/promise/promise.h +4 -0
  189. data/src/core/lib/promise/seq.h +107 -7
  190. data/src/core/lib/promise/status_flag.h +196 -0
  191. data/src/core/lib/promise/try_join.h +132 -0
  192. data/src/core/lib/promise/try_seq.h +132 -10
  193. data/src/core/lib/resolver/endpoint_addresses.cc +0 -1
  194. data/src/core/lib/resolver/endpoint_addresses.h +48 -0
  195. data/src/core/lib/resource_quota/arena.h +2 -2
  196. data/src/core/lib/resource_quota/memory_quota.cc +57 -8
  197. data/src/core/lib/resource_quota/memory_quota.h +6 -0
  198. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +14 -11
  199. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +14 -5
  200. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +4 -0
  201. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +4 -0
  202. data/src/core/lib/security/credentials/external/external_account_credentials.cc +28 -20
  203. data/src/core/lib/security/credentials/external/external_account_credentials.h +4 -0
  204. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +4 -0
  205. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -0
  206. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -0
  207. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +4 -0
  208. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -1
  209. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +0 -3
  210. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +12 -0
  211. data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.cc +22 -5
  212. data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.h +1 -5
  213. data/src/core/lib/security/credentials/tls/tls_credentials.cc +16 -0
  214. data/src/core/lib/security/credentials/xds/xds_credentials.cc +21 -28
  215. data/src/core/lib/security/credentials/xds/xds_credentials.h +2 -4
  216. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +4 -3
  217. data/src/core/lib/security/transport/auth_filters.h +71 -4
  218. data/src/core/lib/security/transport/client_auth_filter.cc +2 -4
  219. data/src/core/lib/security/transport/legacy_server_auth_filter.cc +244 -0
  220. data/src/core/lib/security/transport/server_auth_filter.cc +70 -90
  221. data/src/core/lib/slice/slice_buffer.h +3 -0
  222. data/src/core/lib/surface/builtins.cc +1 -1
  223. data/src/core/lib/surface/call.cc +683 -196
  224. data/src/core/lib/surface/call.h +26 -13
  225. data/src/core/lib/surface/call_trace.cc +42 -1
  226. data/src/core/lib/surface/channel.cc +0 -1
  227. data/src/core/lib/surface/channel.h +0 -6
  228. data/src/core/lib/surface/channel_init.h +26 -0
  229. data/src/core/lib/surface/init.cc +14 -8
  230. data/src/core/lib/surface/server.cc +256 -237
  231. data/src/core/lib/surface/server.h +26 -54
  232. data/src/core/lib/surface/version.cc +2 -2
  233. data/src/core/lib/surface/wait_for_cq_end_op.h +94 -0
  234. data/src/core/lib/transport/call_final_info.cc +38 -0
  235. data/src/core/lib/transport/call_final_info.h +54 -0
  236. data/src/core/lib/transport/connectivity_state.cc +3 -2
  237. data/src/core/lib/transport/connectivity_state.h +4 -0
  238. data/src/core/lib/transport/metadata_batch.h +4 -4
  239. data/src/core/lib/transport/transport.cc +70 -19
  240. data/src/core/lib/transport/transport.h +395 -25
  241. data/src/core/plugin_registry/grpc_plugin_registry.cc +3 -0
  242. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +0 -3
  243. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
  244. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
  245. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -1
  246. data/src/core/tsi/ssl_transport_security.cc +65 -43
  247. data/src/ruby/ext/grpc/rb_channel_args.c +3 -1
  248. data/src/ruby/ext/grpc/rb_grpc.c +0 -1
  249. data/src/ruby/ext/grpc/rb_grpc.h +0 -2
  250. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  251. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  252. data/src/ruby/lib/grpc/version.rb +1 -1
  253. data/third_party/upb/upb/reflection/def_pool.h +2 -2
  254. data/third_party/zlib/adler32.c +5 -27
  255. data/third_party/zlib/compress.c +5 -16
  256. data/third_party/zlib/crc32.c +86 -162
  257. data/third_party/zlib/deflate.c +233 -336
  258. data/third_party/zlib/deflate.h +8 -8
  259. data/third_party/zlib/gzguts.h +11 -12
  260. data/third_party/zlib/infback.c +7 -23
  261. data/third_party/zlib/inffast.c +1 -4
  262. data/third_party/zlib/inffast.h +1 -1
  263. data/third_party/zlib/inflate.c +30 -99
  264. data/third_party/zlib/inftrees.c +6 -11
  265. data/third_party/zlib/inftrees.h +3 -3
  266. data/third_party/zlib/trees.c +224 -302
  267. data/third_party/zlib/uncompr.c +4 -12
  268. data/third_party/zlib/zconf.h +6 -2
  269. data/third_party/zlib/zlib.h +191 -188
  270. data/third_party/zlib/zutil.c +16 -44
  271. data/third_party/zlib/zutil.h +10 -10
  272. metadata +35 -13
  273. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +0 -1173
  274. data/src/core/lib/event_engine/memory_allocator.cc +0 -74
  275. data/src/core/lib/transport/pid_controller.cc +0 -51
  276. data/src/core/lib/transport/pid_controller.h +0 -116
  277. data/third_party/upb/upb/collections/array.h +0 -17
  278. data/third_party/upb/upb/collections/map.h +0 -17
  279. data/third_party/upb/upb/upb.hpp +0 -18
@@ -77,34 +77,35 @@ typedef struct grpc_call_create_args {
77
77
  } grpc_call_create_args;
78
78
 
79
79
  namespace grpc_core {
80
- class PromiseBasedCall;
80
+ class BasicPromiseBasedCall;
81
81
  class ServerPromiseBasedCall;
82
82
 
83
83
  class ServerCallContext {
84
84
  public:
85
- ServerCallContext(ServerPromiseBasedCall* call,
86
- const void* server_stream_data)
87
- : call_(call), server_stream_data_(server_stream_data) {}
88
- ArenaPromise<ServerMetadataHandle> MakeTopOfServerCallPromise(
85
+ virtual void PublishInitialMetadata(
86
+ ClientMetadataHandle metadata,
87
+ grpc_metadata_array* publish_initial_metadata) = 0;
88
+
89
+ // Construct the top of the server call promise for the v2 filter stack.
90
+ // TODO(ctiller): delete when v3 is available.
91
+ virtual ArenaPromise<ServerMetadataHandle> MakeTopOfServerCallPromise(
89
92
  CallArgs call_args, grpc_completion_queue* cq,
90
- grpc_metadata_array* publish_initial_metadata,
91
- absl::FunctionRef<void(grpc_call* call)> publish);
93
+ absl::FunctionRef<void(grpc_call* call)> publish) = 0;
92
94
 
93
95
  // Server stream data as supplied by the transport (so we can link the
94
96
  // transport stream up with the call again).
95
97
  // TODO(ctiller): legacy API - once we move transports to promises we'll
96
98
  // create the promise directly and not need to pass around this token.
97
- const void* server_stream_data() { return server_stream_data_; }
99
+ virtual const void* server_stream_data() = 0;
98
100
 
99
- private:
100
- ServerPromiseBasedCall* const call_;
101
- const void* const server_stream_data_;
101
+ protected:
102
+ ~ServerCallContext() = default;
102
103
  };
103
104
 
104
105
  // TODO(ctiller): move more call things into this type
105
106
  class CallContext {
106
107
  public:
107
- explicit CallContext(PromiseBasedCall* call) : call_(call) {}
108
+ explicit CallContext(BasicPromiseBasedCall* call) : call_(call) {}
108
109
 
109
110
  // Update the deadline (if deadline < the current deadline).
110
111
  void UpdateDeadline(Timestamp deadline);
@@ -135,13 +136,21 @@ class CallContext {
135
136
  void set_traced(bool traced) { traced_ = traced; }
136
137
  bool traced() const { return traced_; }
137
138
 
139
+ // TEMPORARY HACK
140
+ // Create a call spine object for this call.
141
+ // Said object should only be created once.
142
+ // Allows interop between the v2 call stack and the v3 (which is required by
143
+ // transports).
144
+ RefCountedPtr<CallSpineInterface> MakeCallSpine(CallArgs call_args);
145
+ grpc_call* c_call();
146
+
138
147
  private:
139
148
  friend class PromiseBasedCall;
140
149
  // Call final info.
141
150
  grpc_call_stats call_stats_;
142
151
  // TODO(ctiller): remove this once transport APIs are promise based and we
143
152
  // don't need refcounting here.
144
- PromiseBasedCall* const call_;
153
+ BasicPromiseBasedCall* const call_;
145
154
  gpr_cycle_counter start_time_ = gpr_get_cycle_counter();
146
155
  // Is this call traced?
147
156
  bool traced_ = false;
@@ -150,6 +159,10 @@ class CallContext {
150
159
  template <>
151
160
  struct ContextType<CallContext> {};
152
161
 
162
+ RefCountedPtr<CallSpineInterface> MakeServerCall(Server* server,
163
+ Channel* channel,
164
+ Arena* arena);
165
+
153
166
  } // namespace grpc_core
154
167
 
155
168
  // Create a new call based on \a args.
@@ -77,7 +77,48 @@ const grpc_channel_filter* PromiseTracingFilterFor(
77
77
  return r;
78
78
  };
79
79
  },
80
- grpc_channel_next_op, /* sizeof_call_data: */ 0,
80
+ /* init_call: */
81
+ [](grpc_channel_element* elem, CallSpineInterface* call) {
82
+ auto* source_filter =
83
+ static_cast<const DerivedFilter*>(elem->filter)->filter;
84
+ call->client_initial_metadata().receiver.InterceptAndMap(
85
+ [source_filter](ClientMetadataHandle md) {
86
+ gpr_log(GPR_DEBUG, "%s[%s] OnClientInitialMetadata: %s",
87
+ Activity::current()->DebugTag().c_str(),
88
+ source_filter->name, md->DebugString().c_str());
89
+ return md;
90
+ });
91
+ call->client_to_server_messages().receiver.InterceptAndMap(
92
+ [source_filter](MessageHandle msg) {
93
+ gpr_log(GPR_DEBUG, "%s[%s] OnClientToServerMessage: %s",
94
+ Activity::current()->DebugTag().c_str(),
95
+ source_filter->name, msg->DebugString().c_str());
96
+ return msg;
97
+ });
98
+ call->server_initial_metadata().sender.InterceptAndMap(
99
+ [source_filter](ServerMetadataHandle md) {
100
+ gpr_log(GPR_DEBUG, "%s[%s] OnServerInitialMetadata: %s",
101
+ Activity::current()->DebugTag().c_str(),
102
+ source_filter->name, md->DebugString().c_str());
103
+ return md;
104
+ });
105
+ call->server_to_client_messages().sender.InterceptAndMap(
106
+ [source_filter](MessageHandle msg) {
107
+ gpr_log(GPR_DEBUG, "%s[%s] OnServerToClientMessage: %s",
108
+ Activity::current()->DebugTag().c_str(),
109
+ source_filter->name, msg->DebugString().c_str());
110
+ return msg;
111
+ });
112
+ call->server_trailing_metadata().sender.InterceptAndMap(
113
+ [source_filter](ServerMetadataHandle md) {
114
+ gpr_log(GPR_DEBUG, "%s[%s] OnServerTrailingMetadata: %s",
115
+ Activity::current()->DebugTag().c_str(),
116
+ source_filter->name, md->DebugString().c_str());
117
+ return md;
118
+ });
119
+ },
120
+ grpc_channel_next_op,
121
+ /* sizeof_call_data: */ 0,
81
122
  // init_call_elem:
82
123
  [](grpc_call_element*, const grpc_call_element_args*) {
83
124
  return absl::OkStatus();
@@ -376,7 +376,6 @@ namespace grpc_core {
376
376
 
377
377
  RegisteredCall* Channel::RegisterCall(const char* method, const char* host) {
378
378
  MutexLock lock(&registration_table_.mu);
379
- registration_table_.method_registration_attempts++;
380
379
  auto key = std::make_pair(std::string(host != nullptr ? host : ""),
381
380
  std::string(method != nullptr ? method : ""));
382
381
  auto rc_posn = registration_table_.map.find(key);
@@ -103,7 +103,6 @@ struct CallRegistrationTable {
103
103
  // C++ or other wrapped language Channel that registered these calls).
104
104
  std::map<std::pair<std::string, std::string>, RegisteredCall> map
105
105
  ABSL_GUARDED_BY(mu);
106
- int method_registration_attempts ABSL_GUARDED_BY(mu) = 0;
107
106
  };
108
107
 
109
108
  class Channel : public RefCounted<Channel>,
@@ -150,11 +149,6 @@ class Channel : public RefCounted<Channel>,
150
149
  return registration_table_.map.size();
151
150
  }
152
151
 
153
- int TestOnlyRegistrationAttempts() {
154
- MutexLock lock(&registration_table_.mu);
155
- return registration_table_.method_registration_attempts;
156
- }
157
-
158
152
  grpc_event_engine::experimental::EventEngine* event_engine() const {
159
153
  return channel_stack_->EventEngine();
160
154
  }
@@ -87,11 +87,30 @@ class ChannelInit {
87
87
  // Ensure that this filter is placed *after* the filters listed here.
88
88
  // By Build() time all filters listed here must also be registered against
89
89
  // the same channel stack type as this registration.
90
+ template <typename Filter>
91
+ FilterRegistration& After() {
92
+ return After({&Filter::kFilter});
93
+ }
94
+ // Ensure that this filter is placed *before* the filters listed here.
95
+ // By Build() time all filters listed here must also be registered against
96
+ // the same channel stack type as this registration.
97
+ template <typename Filter>
98
+ FilterRegistration& Before() {
99
+ return Before({&Filter::kFilter});
100
+ }
101
+
102
+ // Ensure that this filter is placed *after* the filters listed here.
103
+ // By Build() time all filters listed here must also be registered against
104
+ // the same channel stack type as this registration.
105
+ // TODO(ctiller): remove in favor of the version that does not mention
106
+ // grpc_channel_filter
90
107
  FilterRegistration& After(
91
108
  std::initializer_list<const grpc_channel_filter*> filters);
92
109
  // Ensure that this filter is placed *before* the filters listed here.
93
110
  // By Build() time all filters listed here must also be registered against
94
111
  // the same channel stack type as this registration.
112
+ // TODO(ctiller): remove in favor of the version that does not mention
113
+ // grpc_channel_filter
95
114
  FilterRegistration& Before(
96
115
  std::initializer_list<const grpc_channel_filter*> filters);
97
116
  // Add a predicate for this filters inclusion.
@@ -145,9 +164,16 @@ class ChannelInit {
145
164
  // This occurs first during channel build time.
146
165
  // The FilterRegistration methods can be called to declaratively define
147
166
  // properties of the filter being registered.
167
+ // TODO(ctiller): remove in favor of the version that does not mention
168
+ // grpc_channel_filter
148
169
  FilterRegistration& RegisterFilter(grpc_channel_stack_type type,
149
170
  const grpc_channel_filter* filter,
150
171
  SourceLocation registration_source = {});
172
+ template <typename Filter>
173
+ FilterRegistration& RegisterFilter(
174
+ grpc_channel_stack_type type, SourceLocation registration_source = {}) {
175
+ return RegisterFilter(type, &Filter::kFilter, registration_source);
176
+ }
151
177
 
152
178
  // Register a post processor for the builder.
153
179
  // These run after the main graph has been placed into the builder.
@@ -67,19 +67,25 @@ static bool g_shutting_down ABSL_GUARDED_BY(g_init_mu) = false;
67
67
  namespace grpc_core {
68
68
  void RegisterSecurityFilters(CoreConfiguration::Builder* builder) {
69
69
  builder->channel_init()
70
- ->RegisterFilter(GRPC_CLIENT_SUBCHANNEL, &ClientAuthFilter::kFilter)
70
+ ->RegisterFilter<ClientAuthFilter>(GRPC_CLIENT_SUBCHANNEL)
71
71
  .IfHasChannelArg(GRPC_ARG_SECURITY_CONNECTOR);
72
72
  builder->channel_init()
73
- ->RegisterFilter(GRPC_CLIENT_DIRECT_CHANNEL, &ClientAuthFilter::kFilter)
73
+ ->RegisterFilter<ClientAuthFilter>(GRPC_CLIENT_DIRECT_CHANNEL)
74
74
  .IfHasChannelArg(GRPC_ARG_SECURITY_CONNECTOR);
75
+ if (IsV3ServerAuthFilterEnabled()) {
76
+ builder->channel_init()
77
+ ->RegisterFilter<ServerAuthFilter>(GRPC_SERVER_CHANNEL)
78
+ .IfHasChannelArg(GRPC_SERVER_CREDENTIALS_ARG);
79
+ } else {
80
+ builder->channel_init()
81
+ ->RegisterFilter<LegacyServerAuthFilter>(GRPC_SERVER_CHANNEL)
82
+ .IfHasChannelArg(GRPC_SERVER_CREDENTIALS_ARG);
83
+ }
75
84
  builder->channel_init()
76
- ->RegisterFilter(GRPC_SERVER_CHANNEL, &ServerAuthFilter::kFilter)
77
- .IfHasChannelArg(GRPC_SERVER_CREDENTIALS_ARG);
78
- builder->channel_init()
79
- ->RegisterFilter(GRPC_SERVER_CHANNEL,
80
- &GrpcServerAuthzFilter::kFilterVtable)
85
+ ->RegisterFilter<GrpcServerAuthzFilter>(GRPC_SERVER_CHANNEL)
81
86
  .IfHasChannelArg(GRPC_ARG_AUTHORIZATION_POLICY_PROVIDER)
82
- .After({&ServerAuthFilter::kFilter});
87
+ .After<ServerAuthFilter>()
88
+ .After<LegacyServerAuthFilter>();
83
89
  }
84
90
  } // namespace grpc_core
85
91