grpc 1.64.0 → 1.68.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2325) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +127 -99
  3. data/include/grpc/compression.h +1 -2
  4. data/include/grpc/credentials.h +2 -3
  5. data/include/grpc/event_engine/README.md +1 -1
  6. data/include/grpc/event_engine/endpoint_config.h +2 -2
  7. data/include/grpc/event_engine/event_engine.h +33 -12
  8. data/include/grpc/event_engine/extensible.h +5 -2
  9. data/include/grpc/event_engine/internal/memory_allocator_impl.h +4 -4
  10. data/include/grpc/event_engine/internal/slice_cast.h +1 -1
  11. data/include/grpc/event_engine/memory_allocator.h +3 -4
  12. data/include/grpc/event_engine/memory_request.h +19 -2
  13. data/include/grpc/event_engine/slice.h +3 -5
  14. data/include/grpc/event_engine/slice_buffer.h +6 -8
  15. data/include/grpc/grpc.h +1 -2
  16. data/include/grpc/grpc_audit_logging.h +3 -3
  17. data/include/grpc/grpc_crl_provider.h +5 -5
  18. data/include/grpc/grpc_posix.h +1 -2
  19. data/include/grpc/grpc_security.h +1 -2
  20. data/include/grpc/impl/call.h +2 -2
  21. data/include/grpc/impl/channel_arg_names.h +8 -4
  22. data/include/grpc/impl/grpc_types.h +1 -2
  23. data/include/grpc/impl/slice_type.h +1 -2
  24. data/include/grpc/module.modulemap +1 -0
  25. data/include/grpc/passive_listener.h +62 -0
  26. data/include/grpc/support/alloc.h +1 -2
  27. data/include/grpc/support/json.h +1 -2
  28. data/include/grpc/support/log.h +37 -64
  29. data/include/grpc/support/metrics.h +21 -6
  30. data/include/grpc/support/port_platform.h +31 -1
  31. data/include/grpc/support/sync_generic.h +2 -4
  32. data/include/grpc/support/sync_posix.h +1 -2
  33. data/include/grpc/support/time.h +1 -2
  34. data/src/core/channelz/channel_trace.cc +6 -7
  35. data/src/core/channelz/channel_trace.h +6 -8
  36. data/src/core/channelz/channelz.cc +8 -10
  37. data/src/core/channelz/channelz.h +15 -17
  38. data/src/core/channelz/channelz_registry.cc +10 -11
  39. data/src/core/channelz/channelz_registry.h +4 -5
  40. data/src/core/client_channel/backup_poller.cc +24 -15
  41. data/src/core/client_channel/client_channel.cc +1426 -0
  42. data/src/core/client_channel/client_channel.h +245 -0
  43. data/src/core/client_channel/client_channel_factory.cc +2 -2
  44. data/src/core/client_channel/client_channel_factory.h +1 -2
  45. data/src/core/client_channel/client_channel_filter.cc +348 -861
  46. data/src/core/client_channel/client_channel_filter.h +23 -76
  47. data/src/core/client_channel/client_channel_internal.h +23 -9
  48. data/src/core/client_channel/client_channel_plugin.cc +2 -17
  49. data/src/core/client_channel/client_channel_service_config.cc +2 -3
  50. data/src/core/client_channel/client_channel_service_config.h +6 -8
  51. data/src/core/client_channel/config_selector.h +21 -22
  52. data/src/core/client_channel/connector.h +3 -3
  53. data/src/core/client_channel/direct_channel.cc +83 -0
  54. data/src/core/client_channel/direct_channel.h +101 -0
  55. data/src/core/client_channel/dynamic_filters.cc +16 -14
  56. data/src/core/client_channel/dynamic_filters.h +9 -10
  57. data/src/core/client_channel/global_subchannel_pool.cc +2 -2
  58. data/src/core/client_channel/global_subchannel_pool.h +2 -3
  59. data/src/core/client_channel/lb_metadata.cc +120 -0
  60. data/src/core/client_channel/lb_metadata.h +55 -0
  61. data/src/core/client_channel/load_balanced_call_destination.cc +273 -0
  62. data/src/core/client_channel/load_balanced_call_destination.h +48 -0
  63. data/src/core/client_channel/local_subchannel_pool.cc +2 -5
  64. data/src/core/client_channel/local_subchannel_pool.h +1 -1
  65. data/src/core/client_channel/retry_filter.cc +8 -17
  66. data/src/core/client_channel/retry_filter.h +6 -15
  67. data/src/core/client_channel/retry_filter_legacy_call_data.cc +206 -318
  68. data/src/core/client_channel/retry_filter_legacy_call_data.h +9 -14
  69. data/src/core/client_channel/retry_service_config.cc +9 -12
  70. data/src/core/client_channel/retry_service_config.h +5 -7
  71. data/src/core/client_channel/retry_throttle.cc +3 -4
  72. data/src/core/client_channel/retry_throttle.h +4 -7
  73. data/src/core/client_channel/subchannel.cc +282 -164
  74. data/src/core/client_channel/subchannel.h +48 -40
  75. data/src/core/client_channel/subchannel_interface_internal.h +1 -1
  76. data/src/core/client_channel/subchannel_pool_interface.cc +1 -5
  77. data/src/core/client_channel/subchannel_pool_interface.h +4 -7
  78. data/src/core/client_channel/subchannel_stream_client.cc +43 -59
  79. data/src/core/client_channel/subchannel_stream_client.h +10 -14
  80. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +22 -27
  81. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +3 -1
  82. data/src/core/ext/filters/backend_metrics/backend_metric_provider.h +7 -0
  83. data/src/core/ext/filters/census/grpc_context.cc +7 -10
  84. data/src/core/ext/filters/channel_idle/idle_filter_state.cc +1 -2
  85. data/src/core/ext/filters/channel_idle/idle_filter_state.h +0 -1
  86. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +34 -45
  87. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +12 -8
  88. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +16 -19
  89. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +4 -3
  90. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +2 -3
  91. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +6 -9
  92. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +205 -0
  93. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +97 -0
  94. data/src/core/ext/filters/gcp_authentication/gcp_authentication_service_config_parser.cc +80 -0
  95. data/src/core/ext/filters/gcp_authentication/gcp_authentication_service_config_parser.h +86 -0
  96. data/src/core/ext/filters/http/client/http_client_filter.cc +14 -8
  97. data/src/core/ext/filters/http/client/http_client_filter.h +3 -1
  98. data/src/core/ext/filters/http/client_authority_filter.cc +8 -7
  99. data/src/core/ext/filters/http/client_authority_filter.h +3 -1
  100. data/src/core/ext/filters/http/http_filters_plugin.cc +0 -1
  101. data/src/core/ext/filters/http/message_compress/compression_filter.cc +48 -44
  102. data/src/core/ext/filters/http/message_compress/compression_filter.h +8 -4
  103. data/src/core/ext/filters/http/server/http_server_filter.cc +16 -13
  104. data/src/core/ext/filters/http/server/http_server_filter.h +3 -1
  105. data/src/core/ext/filters/message_size/message_size_filter.cc +32 -32
  106. data/src/core/ext/filters/message_size/message_size_filter.h +11 -9
  107. data/src/core/ext/filters/rbac/rbac_filter.cc +8 -11
  108. data/src/core/ext/filters/rbac/rbac_filter.h +3 -2
  109. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +16 -10
  110. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +2 -4
  111. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +13 -15
  112. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +5 -4
  113. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +2 -3
  114. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +5 -7
  115. data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -4
  116. data/src/core/ext/transport/chttp2/alpn/alpn.h +1 -2
  117. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +71 -101
  118. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +5 -11
  119. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +426 -314
  120. data/src/core/ext/transport/chttp2/server/chttp2_server.h +35 -2
  121. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +19 -32
  122. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -3
  123. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -4
  124. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -2
  125. data/src/core/ext/transport/chttp2/transport/call_tracer_wrapper.cc +53 -0
  126. data/src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h +72 -0
  127. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +562 -516
  128. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +15 -16
  129. data/src/core/ext/transport/chttp2/transport/context_list_entry.h +2 -3
  130. data/src/core/ext/transport/chttp2/transport/decode_huff.h +2 -2
  131. data/src/core/ext/transport/chttp2/transport/flow_control.cc +6 -11
  132. data/src/core/ext/transport/chttp2/transport/flow_control.h +2 -7
  133. data/src/core/ext/transport/chttp2/transport/frame.cc +2 -5
  134. data/src/core/ext/transport/chttp2/transport/frame.h +2 -3
  135. data/src/core/ext/transport/chttp2/transport/frame_data.cc +7 -13
  136. data/src/core/ext/transport/chttp2/transport/frame_data.h +4 -5
  137. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +3 -6
  138. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +1 -2
  139. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +14 -19
  140. data/src/core/ext/transport/chttp2/transport/frame_ping.h +1 -2
  141. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +17 -18
  142. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -5
  143. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +20 -20
  144. data/src/core/ext/transport/chttp2/transport/frame_settings.h +3 -4
  145. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +10 -7
  146. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -3
  147. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +2 -2
  148. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +14 -16
  149. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +16 -12
  150. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +2 -3
  151. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +1 -2
  152. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +2 -4
  153. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +4 -7
  154. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +56 -51
  155. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +6 -6
  156. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +41 -16
  157. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +29 -10
  158. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +2 -3
  159. data/src/core/ext/transport/chttp2/transport/http2_settings.h +2 -4
  160. data/src/core/ext/transport/chttp2/transport/internal.h +46 -79
  161. data/src/core/ext/transport/chttp2/transport/parsing.cc +101 -109
  162. data/src/core/ext/transport/chttp2/transport/ping_abuse_policy.cc +3 -3
  163. data/src/core/ext/transport/chttp2/transport/ping_abuse_policy.h +3 -3
  164. data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +2 -5
  165. data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +3 -7
  166. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +33 -18
  167. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +7 -8
  168. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +13 -16
  169. data/src/core/ext/transport/chttp2/transport/stream_lists.h +65 -0
  170. data/src/core/ext/transport/chttp2/transport/varint.cc +2 -2
  171. data/src/core/ext/transport/chttp2/transport/varint.h +1 -3
  172. data/src/core/ext/transport/chttp2/transport/write_size_policy.cc +2 -3
  173. data/src/core/ext/transport/chttp2/transport/write_size_policy.h +2 -3
  174. data/src/core/ext/transport/chttp2/transport/writing.cc +145 -120
  175. data/src/core/ext/transport/inproc/inproc_transport.cc +149 -67
  176. data/src/core/ext/transport/inproc/inproc_transport.h +1 -3
  177. data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +120 -121
  178. data/src/core/ext/transport/inproc/legacy_inproc_transport.h +0 -2
  179. data/src/core/ext/upb-gen/envoy/admin/v3/certs.upb.h +43 -12
  180. data/src/core/ext/upb-gen/envoy/admin/v3/certs.upb_minitable.c +36 -14
  181. data/src/core/ext/upb-gen/envoy/admin/v3/certs.upb_minitable.h +7 -1
  182. data/src/core/ext/upb-gen/envoy/admin/v3/clusters.upb.h +56 -24
  183. data/src/core/ext/upb-gen/envoy/admin/v3/clusters.upb_minitable.c +33 -15
  184. data/src/core/ext/upb-gen/envoy/admin/v3/clusters.upb_minitable.h +6 -1
  185. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump.upb.h +47 -12
  186. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump.upb_minitable.c +39 -17
  187. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump.upb_minitable.h +7 -1
  188. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump_shared.upb.h +184 -51
  189. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump_shared.upb_minitable.c +143 -65
  190. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump_shared.upb_minitable.h +21 -1
  191. data/src/core/ext/upb-gen/envoy/admin/v3/init_dump.upb.h +8 -2
  192. data/src/core/ext/upb-gen/envoy/admin/v3/init_dump.upb_minitable.c +13 -3
  193. data/src/core/ext/upb-gen/envoy/admin/v3/init_dump.upb_minitable.h +4 -1
  194. data/src/core/ext/upb-gen/envoy/admin/v3/listeners.upb.h +16 -3
  195. data/src/core/ext/upb-gen/envoy/admin/v3/listeners.upb_minitable.c +16 -6
  196. data/src/core/ext/upb-gen/envoy/admin/v3/listeners.upb_minitable.h +4 -1
  197. data/src/core/ext/upb-gen/envoy/admin/v3/memory.upb.h +8 -7
  198. data/src/core/ext/upb-gen/envoy/admin/v3/memory.upb_minitable.c +7 -1
  199. data/src/core/ext/upb-gen/envoy/admin/v3/memory.upb_minitable.h +3 -1
  200. data/src/core/ext/upb-gen/envoy/admin/v3/metrics.upb.h +5 -4
  201. data/src/core/ext/upb-gen/envoy/admin/v3/metrics.upb_minitable.c +7 -1
  202. data/src/core/ext/upb-gen/envoy/admin/v3/metrics.upb_minitable.h +3 -1
  203. data/src/core/ext/upb-gen/envoy/admin/v3/mutex_stats.upb.h +5 -4
  204. data/src/core/ext/upb-gen/envoy/admin/v3/mutex_stats.upb_minitable.c +7 -1
  205. data/src/core/ext/upb-gen/envoy/admin/v3/mutex_stats.upb_minitable.h +3 -1
  206. data/src/core/ext/upb-gen/envoy/admin/v3/server_info.upb.h +126 -79
  207. data/src/core/ext/upb-gen/envoy/admin/v3/server_info.upb_minitable.c +37 -25
  208. data/src/core/ext/upb-gen/envoy/admin/v3/server_info.upb_minitable.h +4 -1
  209. data/src/core/ext/upb-gen/envoy/admin/v3/tap.upb.h +6 -3
  210. data/src/core/ext/upb-gen/envoy/admin/v3/tap.upb_minitable.c +9 -3
  211. data/src/core/ext/upb-gen/envoy/admin/v3/tap.upb_minitable.h +3 -1
  212. data/src/core/ext/upb-gen/envoy/annotations/deprecation.upb.h +6 -5
  213. data/src/core/ext/upb-gen/envoy/annotations/deprecation.upb_minitable.c +7 -1
  214. data/src/core/ext/upb-gen/envoy/annotations/deprecation.upb_minitable.h +2 -1
  215. data/src/core/ext/upb-gen/envoy/annotations/resource.upb.h +13 -3
  216. data/src/core/ext/upb-gen/envoy/annotations/resource.upb_minitable.c +12 -5
  217. data/src/core/ext/upb-gen/envoy/annotations/resource.upb_minitable.h +3 -1
  218. data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb.h +88 -31
  219. data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb_minitable.c +103 -37
  220. data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb_minitable.h +18 -1
  221. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb.h +541 -251
  222. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb_minitable.c +247 -131
  223. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb_minitable.h +26 -1
  224. data/src/core/ext/upb-gen/envoy/config/cluster/v3/circuit_breaker.upb.h +38 -11
  225. data/src/core/ext/upb-gen/envoy/config/cluster/v3/circuit_breaker.upb_minitable.c +28 -14
  226. data/src/core/ext/upb-gen/envoy/config/cluster/v3/circuit_breaker.upb_minitable.h +5 -1
  227. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb.h +496 -138
  228. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb_minitable.c +247 -122
  229. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb_minitable.h +28 -1
  230. data/src/core/ext/upb-gen/envoy/config/cluster/v3/filter.upb.h +9 -4
  231. data/src/core/ext/upb-gen/envoy/config/cluster/v3/filter.upb_minitable.c +10 -4
  232. data/src/core/ext/upb-gen/envoy/config/cluster/v3/filter.upb_minitable.h +3 -1
  233. data/src/core/ext/upb-gen/envoy/config/cluster/v3/outlier_detection.upb.h +168 -24
  234. data/src/core/ext/upb-gen/envoy/config/cluster/v3/outlier_detection.upb_minitable.c +53 -26
  235. data/src/core/ext/upb-gen/envoy/config/cluster/v3/outlier_detection.upb_minitable.h +3 -1
  236. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb.h +124 -32
  237. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb_minitable.c +111 -49
  238. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb_minitable.h +17 -1
  239. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb.h +64 -24
  240. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb_minitable.c +55 -21
  241. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb_minitable.h +10 -1
  242. data/src/core/ext/upb-gen/envoy/config/core/v3/backoff.upb.h +8 -3
  243. data/src/core/ext/upb-gen/envoy/config/core/v3/backoff.upb_minitable.c +10 -4
  244. data/src/core/ext/upb-gen/envoy/config/core/v3/backoff.upb_minitable.h +3 -1
  245. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb.h +752 -69
  246. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb_minitable.c +304 -59
  247. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb_minitable.h +36 -1
  248. data/src/core/ext/upb-gen/envoy/config/core/v3/config_source.upb.h +64 -22
  249. data/src/core/ext/upb-gen/envoy/config/core/v3/config_source.upb_minitable.c +52 -22
  250. data/src/core/ext/upb-gen/envoy/config/core/v3/config_source.upb_minitable.h +9 -1
  251. data/src/core/ext/upb-gen/envoy/config/core/v3/event_service_config.upb.h +5 -2
  252. data/src/core/ext/upb-gen/envoy/config/core/v3/event_service_config.upb_minitable.c +9 -3
  253. data/src/core/ext/upb-gen/envoy/config/core/v3/event_service_config.upb_minitable.h +3 -1
  254. data/src/core/ext/upb-gen/envoy/config/core/v3/extension.upb.h +6 -3
  255. data/src/core/ext/upb-gen/envoy/config/core/v3/extension.upb_minitable.c +9 -3
  256. data/src/core/ext/upb-gen/envoy/config/core/v3/extension.upb_minitable.h +3 -1
  257. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_method_list.upb.h +8 -2
  258. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_method_list.upb_minitable.c +13 -3
  259. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_method_list.upb_minitable.h +4 -1
  260. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb.h +198 -59
  261. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb_minitable.c +111 -44
  262. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb_minitable.h +16 -1
  263. data/src/core/ext/upb-gen/envoy/config/core/v3/health_check.upb.h +193 -59
  264. data/src/core/ext/upb-gen/envoy/config/core/v3/health_check.upb_minitable.c +90 -48
  265. data/src/core/ext/upb-gen/envoy/config/core/v3/health_check.upb_minitable.h +11 -1
  266. data/src/core/ext/upb-gen/envoy/config/core/v3/http_service.upb.h +10 -2
  267. data/src/core/ext/upb-gen/envoy/config/core/v3/http_service.upb_minitable.c +10 -4
  268. data/src/core/ext/upb-gen/envoy/config/core/v3/http_service.upb_minitable.h +3 -1
  269. data/src/core/ext/upb-gen/envoy/config/core/v3/http_uri.upb.h +7 -4
  270. data/src/core/ext/upb-gen/envoy/config/core/v3/http_uri.upb_minitable.c +9 -3
  271. data/src/core/ext/upb-gen/envoy/config/core/v3/http_uri.upb_minitable.h +3 -1
  272. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb.h +228 -73
  273. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb_minitable.c +139 -67
  274. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb_minitable.h +18 -1
  275. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb.h +7 -4
  276. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb_minitable.c +13 -3
  277. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb_minitable.h +4 -1
  278. data/src/core/ext/upb-gen/envoy/config/core/v3/resolver.upb.h +12 -4
  279. data/src/core/ext/upb-gen/envoy/config/core/v3/resolver.upb_minitable.c +14 -4
  280. data/src/core/ext/upb-gen/envoy/config/core/v3/resolver.upb_minitable.h +4 -1
  281. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb.h +13 -7
  282. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb_minitable.c +13 -3
  283. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb_minitable.h +4 -1
  284. data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb.h +20 -8
  285. data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb_minitable.c +16 -6
  286. data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb_minitable.h +4 -1
  287. data/src/core/ext/upb-gen/envoy/config/core/v3/udp_socket_config.upb.h +8 -3
  288. data/src/core/ext/upb-gen/envoy/config/core/v3/udp_socket_config.upb_minitable.c +10 -4
  289. data/src/core/ext/upb-gen/envoy/config/core/v3/udp_socket_config.upb_minitable.h +3 -1
  290. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb.h +39 -8
  291. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb_minitable.c +31 -13
  292. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb_minitable.h +6 -1
  293. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb.h +103 -31
  294. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb_minitable.c +62 -30
  295. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb_minitable.h +9 -1
  296. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/load_report.upb.h +278 -34
  297. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/load_report.upb_minitable.c +78 -24
  298. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/load_report.upb_minitable.h +9 -1
  299. data/src/core/ext/upb-gen/envoy/config/listener/v3/api_listener.upb.h +5 -2
  300. data/src/core/ext/upb-gen/envoy/config/listener/v3/api_listener.upb_minitable.c +9 -3
  301. data/src/core/ext/upb-gen/envoy/config/listener/v3/api_listener.upb_minitable.h +3 -1
  302. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb.h +139 -44
  303. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb_minitable.c +85 -42
  304. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb_minitable.h +12 -1
  305. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb.h +88 -26
  306. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb_minitable.c +61 -31
  307. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb_minitable.h +9 -1
  308. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb.h +90 -10
  309. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb_minitable.c +23 -13
  310. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb_minitable.h +3 -1
  311. data/src/core/ext/upb-gen/envoy/config/listener/v3/udp_listener_config.upb.h +11 -4
  312. data/src/core/ext/upb-gen/envoy/config/listener/v3/udp_listener_config.upb_minitable.c +15 -5
  313. data/src/core/ext/upb-gen/envoy/config/listener/v3/udp_listener_config.upb_minitable.h +4 -1
  314. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb.h +11 -6
  315. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb_minitable.c +10 -4
  316. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb_minitable.h +3 -1
  317. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb.h +48 -19
  318. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb_minitable.c +52 -18
  319. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb_minitable.h +10 -1
  320. data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb.h +65 -18
  321. data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb_minitable.c +64 -22
  322. data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb_minitable.h +12 -1
  323. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb.h +156 -35
  324. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb_minitable.c +95 -47
  325. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb_minitable.h +13 -1
  326. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb.h +58 -10
  327. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb_minitable.c +30 -16
  328. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb_minitable.h +5 -1
  329. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb.h +705 -230
  330. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb_minitable.c +454 -217
  331. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb_minitable.h +60 -1
  332. data/src/core/ext/upb-gen/envoy/config/route/v3/scoped_route.upb.h +17 -7
  333. data/src/core/ext/upb-gen/envoy/config/route/v3/scoped_route.upb_minitable.c +20 -6
  334. data/src/core/ext/upb-gen/envoy/config/route/v3/scoped_route.upb_minitable.h +5 -1
  335. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb.h +97 -32
  336. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb_minitable.c +86 -36
  337. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb_minitable.h +14 -1
  338. data/src/core/ext/upb-gen/envoy/config/trace/v3/datadog.upb.h +115 -13
  339. data/src/core/ext/upb-gen/envoy/config/trace/v3/datadog.upb_minitable.c +43 -12
  340. data/src/core/ext/upb-gen/envoy/config/trace/v3/datadog.upb_minitable.h +5 -1
  341. data/src/core/ext/upb-gen/envoy/config/trace/v3/dynamic_ot.upb.h +6 -3
  342. data/src/core/ext/upb-gen/envoy/config/trace/v3/dynamic_ot.upb_minitable.c +9 -3
  343. data/src/core/ext/upb-gen/envoy/config/trace/v3/dynamic_ot.upb_minitable.h +3 -1
  344. data/src/core/ext/upb-gen/envoy/config/trace/v3/http_tracer.upb.h +9 -4
  345. data/src/core/ext/upb-gen/envoy/config/trace/v3/http_tracer.upb_minitable.c +15 -5
  346. data/src/core/ext/upb-gen/envoy/config/trace/v3/http_tracer.upb_minitable.h +4 -1
  347. data/src/core/ext/upb-gen/envoy/config/trace/v3/lightstep.upb.h +7 -4
  348. data/src/core/ext/upb-gen/envoy/config/trace/v3/lightstep.upb_minitable.c +9 -3
  349. data/src/core/ext/upb-gen/envoy/config/trace/v3/lightstep.upb_minitable.h +3 -1
  350. data/src/core/ext/upb-gen/envoy/config/trace/v3/opencensus.upb.h +19 -12
  351. data/src/core/ext/upb-gen/envoy/config/trace/v3/opencensus.upb_minitable.c +11 -5
  352. data/src/core/ext/upb-gen/envoy/config/trace/v3/opencensus.upb_minitable.h +3 -1
  353. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb.h +17 -5
  354. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb_minitable.c +12 -6
  355. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb_minitable.h +3 -1
  356. data/src/core/ext/upb-gen/envoy/config/trace/v3/service.upb.h +5 -2
  357. data/src/core/ext/upb-gen/envoy/config/trace/v3/service.upb_minitable.c +9 -3
  358. data/src/core/ext/upb-gen/envoy/config/trace/v3/service.upb_minitable.h +3 -1
  359. data/src/core/ext/upb-gen/envoy/config/trace/v3/skywalking.upb.h +14 -7
  360. data/src/core/ext/upb-gen/envoy/config/trace/v3/skywalking.upb_minitable.c +16 -6
  361. data/src/core/ext/upb-gen/envoy/config/trace/v3/skywalking.upb_minitable.h +4 -1
  362. data/src/core/ext/upb-gen/envoy/config/trace/v3/trace.upb.h +2 -1
  363. data/src/core/ext/upb-gen/envoy/config/trace/v3/trace.upb_minitable.c +3 -1
  364. data/src/core/ext/upb-gen/envoy/config/trace/v3/trace.upb_minitable.h +2 -1
  365. data/src/core/ext/upb-gen/envoy/config/trace/v3/xray.upb.h +16 -7
  366. data/src/core/ext/upb-gen/envoy/config/trace/v3/xray.upb_minitable.c +17 -7
  367. data/src/core/ext/upb-gen/envoy/config/trace/v3/xray.upb_minitable.h +4 -1
  368. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb.h +11 -8
  369. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb_minitable.c +9 -3
  370. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb_minitable.h +3 -1
  371. data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb.h +213 -99
  372. data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb_minitable.c +115 -48
  373. data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb_minitable.h +18 -1
  374. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +2 -1
  375. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb_minitable.c +7 -1
  376. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb_minitable.h +3 -1
  377. data/src/core/ext/upb-gen/envoy/extensions/filters/common/fault/v3/fault.upb.h +21 -8
  378. data/src/core/ext/upb-gen/envoy/extensions/filters/common/fault/v3/fault.upb_minitable.c +31 -9
  379. data/src/core/ext/upb-gen/envoy/extensions/filters/common/fault/v3/fault.upb_minitable.h +7 -1
  380. data/src/core/ext/upb-gen/envoy/extensions/filters/http/fault/v3/fault.upb.h +39 -19
  381. data/src/core/ext/upb-gen/envoy/extensions/filters/http/fault/v3/fault.upb_minitable.c +25 -11
  382. data/src/core/ext/upb-gen/envoy/extensions/filters/http/fault/v3/fault.upb_minitable.h +5 -1
  383. data/src/core/ext/upb-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upb.h +444 -0
  384. data/src/core/ext/upb-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upb_minitable.c +135 -0
  385. data/src/core/ext/upb-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upb_minitable.h +38 -0
  386. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +53 -10
  387. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb_minitable.c +27 -11
  388. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb_minitable.h +4 -1
  389. data/src/core/ext/upb-gen/envoy/extensions/filters/http/router/v3/router.upb.h +26 -9
  390. data/src/core/ext/upb-gen/envoy/extensions/filters/http/router/v3/router.upb_minitable.c +18 -8
  391. data/src/core/ext/upb-gen/envoy/extensions/filters/http/router/v3/router.upb_minitable.h +4 -1
  392. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +10 -5
  393. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb_minitable.c +15 -5
  394. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb_minitable.h +4 -1
  395. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +324 -131
  396. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.c +189 -102
  397. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.h +23 -1
  398. data/src/core/ext/upb-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +5 -2
  399. data/src/core/ext/upb-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb_minitable.c +9 -3
  400. data/src/core/ext/upb-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb_minitable.h +3 -1
  401. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +20 -7
  402. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb_minitable.c +14 -8
  403. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb_minitable.h +3 -1
  404. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +28 -11
  405. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb_minitable.c +35 -13
  406. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb_minitable.h +7 -1
  407. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb.h +3 -2
  408. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb_minitable.c +7 -1
  409. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb_minitable.h +3 -1
  410. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +19 -8
  411. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb_minitable.c +13 -7
  412. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb_minitable.h +3 -1
  413. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +5 -2
  414. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb_minitable.c +9 -3
  415. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb_minitable.h +3 -1
  416. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upb.h +106 -0
  417. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upb_minitable.c +52 -0
  418. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upb_minitable.h +32 -0
  419. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +2 -1
  420. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/cert.upb_minitable.c +3 -1
  421. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/cert.upb_minitable.h +2 -1
  422. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb.h +167 -28
  423. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb_minitable.c +78 -32
  424. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb_minitable.h +11 -1
  425. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +22 -9
  426. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.c +24 -10
  427. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.h +5 -1
  428. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +109 -36
  429. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb_minitable.c +67 -37
  430. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb_minitable.h +9 -1
  431. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +11 -3
  432. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.c +15 -5
  433. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.h +4 -1
  434. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +55 -17
  435. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +40 -22
  436. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h +6 -1
  437. data/src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb.h +2 -1
  438. data/src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb_minitable.c +7 -1
  439. data/src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb_minitable.h +3 -1
  440. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb.h +119 -37
  441. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb_minitable.c +95 -37
  442. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb_minitable.h +16 -1
  443. data/src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb.h +15 -5
  444. data/src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb_minitable.c +16 -6
  445. data/src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb_minitable.h +4 -1
  446. data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb.h +62 -21
  447. data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb_minitable.c +42 -20
  448. data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb_minitable.h +7 -1
  449. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb.h +7 -4
  450. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb_minitable.c +9 -3
  451. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb_minitable.h +3 -1
  452. data/src/core/ext/upb-gen/envoy/type/http/v3/path_transformation.upb.h +13 -3
  453. data/src/core/ext/upb-gen/envoy/type/http/v3/path_transformation.upb_minitable.c +24 -6
  454. data/src/core/ext/upb-gen/envoy/type/http/v3/path_transformation.upb_minitable.h +6 -1
  455. data/src/core/ext/upb-gen/envoy/type/matcher/v3/filter_state.upb.h +6 -3
  456. data/src/core/ext/upb-gen/envoy/type/matcher/v3/filter_state.upb_minitable.c +9 -3
  457. data/src/core/ext/upb-gen/envoy/type/matcher/v3/filter_state.upb_minitable.h +3 -1
  458. data/src/core/ext/upb-gen/envoy/type/matcher/v3/http_inputs.upb.h +7 -6
  459. data/src/core/ext/upb-gen/envoy/type/matcher/v3/http_inputs.upb_minitable.c +23 -1
  460. data/src/core/ext/upb-gen/envoy/type/matcher/v3/http_inputs.upb_minitable.h +7 -1
  461. data/src/core/ext/upb-gen/envoy/type/matcher/v3/metadata.upb.h +13 -5
  462. data/src/core/ext/upb-gen/envoy/type/matcher/v3/metadata.upb_minitable.c +14 -4
  463. data/src/core/ext/upb-gen/envoy/type/matcher/v3/metadata.upb_minitable.h +4 -1
  464. data/src/core/ext/upb-gen/envoy/type/matcher/v3/node.upb.h +10 -2
  465. data/src/core/ext/upb-gen/envoy/type/matcher/v3/node.upb_minitable.c +10 -4
  466. data/src/core/ext/upb-gen/envoy/type/matcher/v3/node.upb_minitable.h +3 -1
  467. data/src/core/ext/upb-gen/envoy/type/matcher/v3/number.upb.h +6 -3
  468. data/src/core/ext/upb-gen/envoy/type/matcher/v3/number.upb_minitable.c +9 -3
  469. data/src/core/ext/upb-gen/envoy/type/matcher/v3/number.upb_minitable.h +3 -1
  470. data/src/core/ext/upb-gen/envoy/type/matcher/v3/path.upb.h +5 -2
  471. data/src/core/ext/upb-gen/envoy/type/matcher/v3/path.upb_minitable.c +9 -3
  472. data/src/core/ext/upb-gen/envoy/type/matcher/v3/path.upb_minitable.h +3 -1
  473. data/src/core/ext/upb-gen/envoy/type/matcher/v3/regex.upb.h +13 -6
  474. data/src/core/ext/upb-gen/envoy/type/matcher/v3/regex.upb_minitable.c +21 -7
  475. data/src/core/ext/upb-gen/envoy/type/matcher/v3/regex.upb_minitable.h +5 -1
  476. data/src/core/ext/upb-gen/envoy/type/matcher/v3/status_code_input.upb.h +2 -1
  477. data/src/core/ext/upb-gen/envoy/type/matcher/v3/status_code_input.upb_minitable.c +11 -1
  478. data/src/core/ext/upb-gen/envoy/type/matcher/v3/status_code_input.upb_minitable.h +4 -1
  479. data/src/core/ext/upb-gen/envoy/type/matcher/v3/string.upb.h +48 -7
  480. data/src/core/ext/upb-gen/envoy/type/matcher/v3/string.upb_minitable.c +28 -7
  481. data/src/core/ext/upb-gen/envoy/type/matcher/v3/string.upb_minitable.h +4 -1
  482. data/src/core/ext/upb-gen/envoy/type/matcher/v3/struct.upb.h +11 -3
  483. data/src/core/ext/upb-gen/envoy/type/matcher/v3/struct.upb_minitable.c +14 -4
  484. data/src/core/ext/upb-gen/envoy/type/matcher/v3/struct.upb_minitable.h +4 -1
  485. data/src/core/ext/upb-gen/envoy/type/matcher/v3/value.upb.h +27 -9
  486. data/src/core/ext/upb-gen/envoy/type/matcher/v3/value.upb_minitable.c +29 -11
  487. data/src/core/ext/upb-gen/envoy/type/matcher/v3/value.upb_minitable.h +6 -1
  488. data/src/core/ext/upb-gen/envoy/type/metadata/v3/metadata.upb.h +21 -7
  489. data/src/core/ext/upb-gen/envoy/type/metadata/v3/metadata.upb_minitable.c +38 -8
  490. data/src/core/ext/upb-gen/envoy/type/metadata/v3/metadata.upb_minitable.h +9 -1
  491. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb.h +27 -14
  492. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb_minitable.c +31 -9
  493. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb_minitable.h +7 -1
  494. data/src/core/ext/upb-gen/envoy/type/v3/hash_policy.upb.h +9 -4
  495. data/src/core/ext/upb-gen/envoy/type/v3/hash_policy.upb_minitable.c +18 -4
  496. data/src/core/ext/upb-gen/envoy/type/v3/hash_policy.upb_minitable.h +5 -1
  497. data/src/core/ext/upb-gen/envoy/type/v3/http.upb.h +2 -1
  498. data/src/core/ext/upb-gen/envoy/type/v3/http.upb_minitable.c +3 -1
  499. data/src/core/ext/upb-gen/envoy/type/v3/http.upb_minitable.h +2 -1
  500. data/src/core/ext/upb-gen/envoy/type/v3/http_status.upb.h +3 -2
  501. data/src/core/ext/upb-gen/envoy/type/v3/http_status.upb_minitable.c +7 -1
  502. data/src/core/ext/upb-gen/envoy/type/v3/http_status.upb_minitable.h +3 -1
  503. data/src/core/ext/upb-gen/envoy/type/v3/percent.upb.h +5 -4
  504. data/src/core/ext/upb-gen/envoy/type/v3/percent.upb_minitable.c +11 -1
  505. data/src/core/ext/upb-gen/envoy/type/v3/percent.upb_minitable.h +4 -1
  506. data/src/core/ext/upb-gen/envoy/type/v3/range.upb.h +8 -7
  507. data/src/core/ext/upb-gen/envoy/type/v3/range.upb_minitable.c +15 -1
  508. data/src/core/ext/upb-gen/envoy/type/v3/range.upb_minitable.h +5 -1
  509. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_strategy.upb.h +11 -6
  510. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_strategy.upb_minitable.c +14 -4
  511. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_strategy.upb_minitable.h +4 -1
  512. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_unit.upb.h +2 -1
  513. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_unit.upb_minitable.c +3 -1
  514. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_unit.upb_minitable.h +2 -1
  515. data/src/core/ext/upb-gen/envoy/type/v3/semantic_version.upb.h +5 -4
  516. data/src/core/ext/upb-gen/envoy/type/v3/semantic_version.upb_minitable.c +7 -1
  517. data/src/core/ext/upb-gen/envoy/type/v3/semantic_version.upb_minitable.h +3 -1
  518. data/src/core/ext/upb-gen/envoy/type/v3/token_bucket.upb.h +9 -4
  519. data/src/core/ext/upb-gen/envoy/type/v3/token_bucket.upb_minitable.c +10 -4
  520. data/src/core/ext/upb-gen/envoy/type/v3/token_bucket.upb_minitable.h +3 -1
  521. data/src/core/ext/upb-gen/google/api/annotations.upb.h +12 -2
  522. data/src/core/ext/upb-gen/google/api/annotations.upb_minitable.c +4 -1
  523. data/src/core/ext/upb-gen/google/api/annotations.upb_minitable.h +2 -1
  524. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb.h +132 -33
  525. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb_minitable.c +108 -43
  526. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb_minitable.h +15 -1
  527. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb.h +522 -66
  528. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb_minitable.c +191 -57
  529. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb_minitable.h +20 -1
  530. data/src/core/ext/upb-gen/google/api/http.upb.h +26 -13
  531. data/src/core/ext/upb-gen/google/api/http.upb_minitable.c +20 -6
  532. data/src/core/ext/upb-gen/google/api/http.upb_minitable.h +5 -1
  533. data/src/core/ext/upb-gen/google/api/httpbody.upb.h +9 -3
  534. data/src/core/ext/upb-gen/google/api/httpbody.upb_minitable.c +9 -3
  535. data/src/core/ext/upb-gen/google/api/httpbody.upb_minitable.h +3 -1
  536. data/src/core/ext/upb-gen/google/protobuf/any.upb.h +4 -3
  537. data/src/core/ext/upb-gen/google/protobuf/any.upb_minitable.c +7 -1
  538. data/src/core/ext/upb-gen/google/protobuf/any.upb_minitable.h +3 -1
  539. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb.h +579 -178
  540. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.c +292 -131
  541. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.h +36 -1
  542. data/src/core/ext/upb-gen/google/protobuf/duration.upb.h +4 -3
  543. data/src/core/ext/upb-gen/google/protobuf/duration.upb_minitable.c +7 -1
  544. data/src/core/ext/upb-gen/google/protobuf/duration.upb_minitable.h +3 -1
  545. data/src/core/ext/upb-gen/google/protobuf/empty.upb.h +2 -1
  546. data/src/core/ext/upb-gen/google/protobuf/empty.upb_minitable.c +7 -1
  547. data/src/core/ext/upb-gen/google/protobuf/empty.upb_minitable.h +3 -1
  548. data/src/core/ext/upb-gen/google/protobuf/struct.upb.h +29 -7
  549. data/src/core/ext/upb-gen/google/protobuf/struct.upb_minitable.c +28 -10
  550. data/src/core/ext/upb-gen/google/protobuf/struct.upb_minitable.h +6 -1
  551. data/src/core/ext/upb-gen/google/protobuf/timestamp.upb.h +4 -3
  552. data/src/core/ext/upb-gen/google/protobuf/timestamp.upb_minitable.c +7 -1
  553. data/src/core/ext/upb-gen/google/protobuf/timestamp.upb_minitable.h +3 -1
  554. data/src/core/ext/upb-gen/google/protobuf/wrappers.upb.h +11 -10
  555. data/src/core/ext/upb-gen/google/protobuf/wrappers.upb_minitable.c +39 -1
  556. data/src/core/ext/upb-gen/google/protobuf/wrappers.upb_minitable.h +11 -1
  557. data/src/core/ext/upb-gen/google/rpc/status.upb.h +9 -3
  558. data/src/core/ext/upb-gen/google/rpc/status.upb_minitable.c +9 -3
  559. data/src/core/ext/upb-gen/google/rpc/status.upb_minitable.h +3 -1
  560. data/src/core/ext/upb-gen/opencensus/proto/trace/v1/trace_config.upb.h +18 -11
  561. data/src/core/ext/upb-gen/opencensus/proto/trace/v1/trace_config.upb_minitable.c +23 -5
  562. data/src/core/ext/upb-gen/opencensus/proto/trace/v1/trace_config.upb_minitable.h +6 -1
  563. data/src/core/ext/upb-gen/src/proto/grpc/gcp/altscontext.upb.h +16 -7
  564. data/src/core/ext/upb-gen/src/proto/grpc/gcp/altscontext.upb_minitable.c +14 -4
  565. data/src/core/ext/upb-gen/src/proto/grpc/gcp/altscontext.upb_minitable.h +4 -1
  566. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb.h +95 -36
  567. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.c +79 -29
  568. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.h +14 -1
  569. data/src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb.h +10 -5
  570. data/src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb_minitable.c +14 -4
  571. data/src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb_minitable.h +4 -1
  572. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb.h +4 -3
  573. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb_minitable.c +11 -1
  574. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb_minitable.h +4 -1
  575. data/src/core/ext/upb-gen/src/proto/grpc/lb/v1/load_balancer.upb.h +44 -19
  576. data/src/core/ext/upb-gen/src/proto/grpc/lb/v1/load_balancer.upb_minitable.c +53 -15
  577. data/src/core/ext/upb-gen/src/proto/grpc/lb/v1/load_balancer.upb_minitable.h +11 -1
  578. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls.upb.h +12 -5
  579. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls.upb_minitable.c +17 -3
  580. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls.upb_minitable.h +5 -1
  581. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls_config.upb.h +69 -16
  582. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls_config.upb_minitable.c +56 -18
  583. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls_config.upb_minitable.h +11 -1
  584. data/src/core/ext/upb-gen/udpa/annotations/migrate.upb.h +56 -10
  585. data/src/core/ext/upb-gen/udpa/annotations/migrate.upb_minitable.c +26 -7
  586. data/src/core/ext/upb-gen/udpa/annotations/migrate.upb_minitable.h +5 -1
  587. data/src/core/ext/upb-gen/udpa/annotations/security.upb.h +14 -4
  588. data/src/core/ext/upb-gen/udpa/annotations/security.upb_minitable.c +12 -5
  589. data/src/core/ext/upb-gen/udpa/annotations/security.upb_minitable.h +3 -1
  590. data/src/core/ext/upb-gen/udpa/annotations/sensitive.upb.h +3 -2
  591. data/src/core/ext/upb-gen/udpa/annotations/sensitive.upb_minitable.c +4 -1
  592. data/src/core/ext/upb-gen/udpa/annotations/sensitive.upb_minitable.h +2 -1
  593. data/src/core/ext/upb-gen/udpa/annotations/status.upb.h +14 -4
  594. data/src/core/ext/upb-gen/udpa/annotations/status.upb_minitable.c +12 -5
  595. data/src/core/ext/upb-gen/udpa/annotations/status.upb_minitable.h +3 -1
  596. data/src/core/ext/upb-gen/udpa/annotations/versioning.upb.h +13 -3
  597. data/src/core/ext/upb-gen/udpa/annotations/versioning.upb_minitable.c +12 -5
  598. data/src/core/ext/upb-gen/udpa/annotations/versioning.upb_minitable.h +3 -1
  599. data/src/core/ext/upb-gen/validate/validate.upb.h +259 -167
  600. data/src/core/ext/upb-gen/validate/validate.upb_minitable.c +178 -80
  601. data/src/core/ext/upb-gen/validate/validate.upb_minitable.h +25 -1
  602. data/src/core/ext/upb-gen/xds/annotations/v3/migrate.upb.h +56 -10
  603. data/src/core/ext/upb-gen/xds/annotations/v3/migrate.upb_minitable.c +26 -7
  604. data/src/core/ext/upb-gen/xds/annotations/v3/migrate.upb_minitable.h +5 -1
  605. data/src/core/ext/upb-gen/xds/annotations/v3/security.upb.h +14 -4
  606. data/src/core/ext/upb-gen/xds/annotations/v3/security.upb_minitable.c +12 -5
  607. data/src/core/ext/upb-gen/xds/annotations/v3/security.upb_minitable.h +3 -1
  608. data/src/core/ext/upb-gen/xds/annotations/v3/sensitive.upb.h +3 -2
  609. data/src/core/ext/upb-gen/xds/annotations/v3/sensitive.upb_minitable.c +4 -1
  610. data/src/core/ext/upb-gen/xds/annotations/v3/sensitive.upb_minitable.h +2 -1
  611. data/src/core/ext/upb-gen/xds/annotations/v3/status.upb.h +37 -9
  612. data/src/core/ext/upb-gen/xds/annotations/v3/status.upb_minitable.c +29 -8
  613. data/src/core/ext/upb-gen/xds/annotations/v3/status.upb_minitable.h +6 -1
  614. data/src/core/ext/upb-gen/xds/annotations/v3/versioning.upb.h +13 -3
  615. data/src/core/ext/upb-gen/xds/annotations/v3/versioning.upb_minitable.c +12 -5
  616. data/src/core/ext/upb-gen/xds/annotations/v3/versioning.upb_minitable.h +3 -1
  617. data/src/core/ext/upb-gen/xds/core/v3/authority.upb.h +3 -2
  618. data/src/core/ext/upb-gen/xds/core/v3/authority.upb_minitable.c +7 -1
  619. data/src/core/ext/upb-gen/xds/core/v3/authority.upb_minitable.h +3 -1
  620. data/src/core/ext/upb-gen/xds/core/v3/cidr.upb.h +6 -3
  621. data/src/core/ext/upb-gen/xds/core/v3/cidr.upb_minitable.c +9 -3
  622. data/src/core/ext/upb-gen/xds/core/v3/cidr.upb_minitable.h +3 -1
  623. data/src/core/ext/upb-gen/xds/core/v3/collection_entry.upb.h +13 -6
  624. data/src/core/ext/upb-gen/xds/core/v3/collection_entry.upb_minitable.c +16 -6
  625. data/src/core/ext/upb-gen/xds/core/v3/collection_entry.upb_minitable.h +4 -1
  626. data/src/core/ext/upb-gen/xds/core/v3/context_params.upb.h +8 -1
  627. data/src/core/ext/upb-gen/xds/core/v3/context_params.upb_minitable.c +13 -3
  628. data/src/core/ext/upb-gen/xds/core/v3/context_params.upb_minitable.h +4 -1
  629. data/src/core/ext/upb-gen/xds/core/v3/extension.upb.h +6 -3
  630. data/src/core/ext/upb-gen/xds/core/v3/extension.upb_minitable.c +9 -3
  631. data/src/core/ext/upb-gen/xds/core/v3/extension.upb_minitable.h +3 -1
  632. data/src/core/ext/upb-gen/xds/core/v3/resource.upb.h +9 -4
  633. data/src/core/ext/upb-gen/xds/core/v3/resource.upb_minitable.c +10 -4
  634. data/src/core/ext/upb-gen/xds/core/v3/resource.upb_minitable.h +3 -1
  635. data/src/core/ext/upb-gen/xds/core/v3/resource_locator.upb.h +18 -8
  636. data/src/core/ext/upb-gen/xds/core/v3/resource_locator.upb_minitable.c +16 -6
  637. data/src/core/ext/upb-gen/xds/core/v3/resource_locator.upb_minitable.h +4 -1
  638. data/src/core/ext/upb-gen/xds/core/v3/resource_name.upb.h +8 -5
  639. data/src/core/ext/upb-gen/xds/core/v3/resource_name.upb_minitable.c +9 -3
  640. data/src/core/ext/upb-gen/xds/core/v3/resource_name.upb_minitable.h +3 -1
  641. data/src/core/ext/upb-gen/xds/data/orca/v3/orca_load_report.upb.h +26 -7
  642. data/src/core/ext/upb-gen/xds/data/orca/v3/orca_load_report.upb_minitable.c +23 -5
  643. data/src/core/ext/upb-gen/xds/data/orca/v3/orca_load_report.upb_minitable.h +6 -1
  644. data/src/core/ext/upb-gen/xds/service/orca/v3/orca.upb.h +5 -2
  645. data/src/core/ext/upb-gen/xds/service/orca/v3/orca.upb_minitable.c +9 -3
  646. data/src/core/ext/upb-gen/xds/service/orca/v3/orca.upb_minitable.h +3 -1
  647. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb.h +6 -3
  648. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb_minitable.c +9 -3
  649. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb_minitable.h +3 -1
  650. data/src/core/ext/upb-gen/xds/type/matcher/v3/domain.upb.h +10 -2
  651. data/src/core/ext/upb-gen/xds/type/matcher/v3/domain.upb_minitable.c +15 -5
  652. data/src/core/ext/upb-gen/xds/type/matcher/v3/domain.upb_minitable.h +4 -1
  653. data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb.h +2 -1
  654. data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb_minitable.c +7 -1
  655. data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb_minitable.h +3 -1
  656. data/src/core/ext/upb-gen/xds/type/matcher/v3/ip.upb.h +16 -3
  657. data/src/core/ext/upb-gen/xds/type/matcher/v3/ip.upb_minitable.c +16 -6
  658. data/src/core/ext/upb-gen/xds/type/matcher/v3/ip.upb_minitable.h +4 -1
  659. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb.h +78 -19
  660. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb_minitable.c +75 -33
  661. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb_minitable.h +12 -1
  662. data/src/core/ext/upb-gen/xds/type/matcher/v3/range.upb.h +41 -4
  663. data/src/core/ext/upb-gen/xds/type/matcher/v3/range.upb_minitable.c +42 -16
  664. data/src/core/ext/upb-gen/xds/type/matcher/v3/range.upb_minitable.h +8 -1
  665. data/src/core/ext/upb-gen/xds/type/matcher/v3/regex.upb.h +6 -3
  666. data/src/core/ext/upb-gen/xds/type/matcher/v3/regex.upb_minitable.c +13 -3
  667. data/src/core/ext/upb-gen/xds/type/matcher/v3/regex.upb_minitable.h +4 -1
  668. data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb.h +15 -7
  669. data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb_minitable.c +15 -5
  670. data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb_minitable.h +4 -1
  671. data/src/core/ext/upb-gen/xds/type/v3/cel.upb.h +14 -5
  672. data/src/core/ext/upb-gen/xds/type/v3/cel.upb_minitable.c +17 -7
  673. data/src/core/ext/upb-gen/xds/type/v3/cel.upb_minitable.h +4 -1
  674. data/src/core/ext/upb-gen/xds/type/v3/range.upb.h +8 -7
  675. data/src/core/ext/upb-gen/xds/type/v3/range.upb_minitable.c +15 -1
  676. data/src/core/ext/upb-gen/xds/type/v3/range.upb_minitable.h +5 -1
  677. data/src/core/ext/upb-gen/xds/type/v3/typed_struct.upb.h +6 -3
  678. data/src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.c +9 -3
  679. data/src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.h +3 -1
  680. data/src/core/ext/upbdefs-gen/envoy/admin/v3/certs.upbdefs.c +2 -1
  681. data/src/core/ext/upbdefs-gen/envoy/admin/v3/certs.upbdefs.h +2 -1
  682. data/src/core/ext/upbdefs-gen/envoy/admin/v3/clusters.upbdefs.c +2 -1
  683. data/src/core/ext/upbdefs-gen/envoy/admin/v3/clusters.upbdefs.h +2 -1
  684. data/src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump.upbdefs.c +2 -1
  685. data/src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump.upbdefs.h +2 -1
  686. data/src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump_shared.upbdefs.c +2 -1
  687. data/src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump_shared.upbdefs.h +2 -1
  688. data/src/core/ext/upbdefs-gen/envoy/admin/v3/init_dump.upbdefs.c +2 -1
  689. data/src/core/ext/upbdefs-gen/envoy/admin/v3/init_dump.upbdefs.h +2 -1
  690. data/src/core/ext/upbdefs-gen/envoy/admin/v3/listeners.upbdefs.c +2 -1
  691. data/src/core/ext/upbdefs-gen/envoy/admin/v3/listeners.upbdefs.h +2 -1
  692. data/src/core/ext/upbdefs-gen/envoy/admin/v3/memory.upbdefs.c +2 -1
  693. data/src/core/ext/upbdefs-gen/envoy/admin/v3/memory.upbdefs.h +2 -1
  694. data/src/core/ext/upbdefs-gen/envoy/admin/v3/metrics.upbdefs.c +2 -1
  695. data/src/core/ext/upbdefs-gen/envoy/admin/v3/metrics.upbdefs.h +2 -1
  696. data/src/core/ext/upbdefs-gen/envoy/admin/v3/mutex_stats.upbdefs.c +2 -1
  697. data/src/core/ext/upbdefs-gen/envoy/admin/v3/mutex_stats.upbdefs.h +2 -1
  698. data/src/core/ext/upbdefs-gen/envoy/admin/v3/server_info.upbdefs.c +88 -82
  699. data/src/core/ext/upbdefs-gen/envoy/admin/v3/server_info.upbdefs.h +2 -1
  700. data/src/core/ext/upbdefs-gen/envoy/admin/v3/tap.upbdefs.c +2 -1
  701. data/src/core/ext/upbdefs-gen/envoy/admin/v3/tap.upbdefs.h +2 -1
  702. data/src/core/ext/upbdefs-gen/envoy/annotations/deprecation.upbdefs.c +2 -1
  703. data/src/core/ext/upbdefs-gen/envoy/annotations/deprecation.upbdefs.h +2 -1
  704. data/src/core/ext/upbdefs-gen/envoy/annotations/resource.upbdefs.c +2 -1
  705. data/src/core/ext/upbdefs-gen/envoy/annotations/resource.upbdefs.h +2 -1
  706. data/src/core/ext/upbdefs-gen/envoy/config/accesslog/v3/accesslog.upbdefs.c +63 -61
  707. data/src/core/ext/upbdefs-gen/envoy/config/accesslog/v3/accesslog.upbdefs.h +2 -1
  708. data/src/core/ext/upbdefs-gen/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +223 -211
  709. data/src/core/ext/upbdefs-gen/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +7 -1
  710. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +2 -1
  711. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +2 -1
  712. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/cluster.upbdefs.c +319 -298
  713. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/cluster.upbdefs.h +7 -1
  714. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/filter.upbdefs.c +2 -1
  715. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/filter.upbdefs.h +2 -1
  716. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/outlier_detection.upbdefs.c +116 -106
  717. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/outlier_detection.upbdefs.h +2 -1
  718. data/src/core/ext/upbdefs-gen/envoy/config/common/matcher/v3/matcher.upbdefs.c +2 -1
  719. data/src/core/ext/upbdefs-gen/envoy/config/common/matcher/v3/matcher.upbdefs.h +2 -1
  720. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/address.upbdefs.c +2 -1
  721. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/address.upbdefs.h +2 -1
  722. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/backoff.upbdefs.c +2 -1
  723. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/backoff.upbdefs.h +2 -1
  724. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/base.upbdefs.c +187 -141
  725. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/base.upbdefs.h +27 -1
  726. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/config_source.upbdefs.c +12 -12
  727. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/config_source.upbdefs.h +2 -1
  728. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/event_service_config.upbdefs.c +2 -1
  729. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/event_service_config.upbdefs.h +2 -1
  730. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/extension.upbdefs.c +2 -1
  731. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/extension.upbdefs.h +2 -1
  732. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/grpc_method_list.upbdefs.c +2 -1
  733. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/grpc_method_list.upbdefs.h +2 -1
  734. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/grpc_service.upbdefs.c +175 -165
  735. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/grpc_service.upbdefs.h +2 -1
  736. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/health_check.upbdefs.c +199 -188
  737. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/health_check.upbdefs.h +2 -1
  738. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/http_service.upbdefs.c +2 -1
  739. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/http_service.upbdefs.h +2 -1
  740. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/http_uri.upbdefs.c +2 -1
  741. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/http_uri.upbdefs.h +2 -1
  742. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/protocol.upbdefs.c +231 -223
  743. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/protocol.upbdefs.h +2 -1
  744. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/proxy_protocol.upbdefs.c +2 -1
  745. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/proxy_protocol.upbdefs.h +2 -1
  746. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/resolver.upbdefs.c +2 -1
  747. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/resolver.upbdefs.h +2 -1
  748. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/socket_option.upbdefs.c +2 -1
  749. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/socket_option.upbdefs.h +2 -1
  750. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/substitution_format_string.upbdefs.c +2 -1
  751. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/substitution_format_string.upbdefs.h +2 -1
  752. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/udp_socket_config.upbdefs.c +2 -1
  753. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/udp_socket_config.upbdefs.h +2 -1
  754. data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint.upbdefs.c +2 -1
  755. data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint.upbdefs.h +2 -1
  756. data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +41 -37
  757. data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +2 -1
  758. data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/load_report.upbdefs.c +124 -94
  759. data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/load_report.upbdefs.h +7 -1
  760. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/api_listener.upbdefs.c +2 -1
  761. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/api_listener.upbdefs.h +2 -1
  762. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener.upbdefs.c +43 -40
  763. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener.upbdefs.h +2 -1
  764. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener_components.upbdefs.c +2 -1
  765. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener_components.upbdefs.h +2 -1
  766. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/quic_config.upbdefs.c +22 -13
  767. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/quic_config.upbdefs.h +2 -1
  768. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/udp_listener_config.upbdefs.c +2 -1
  769. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/udp_listener_config.upbdefs.h +2 -1
  770. data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/metrics_service.upbdefs.c +2 -1
  771. data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/metrics_service.upbdefs.h +2 -1
  772. data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/stats.upbdefs.c +2 -1
  773. data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/stats.upbdefs.h +2 -1
  774. data/src/core/ext/upbdefs-gen/envoy/config/overload/v3/overload.upbdefs.c +2 -1
  775. data/src/core/ext/upbdefs-gen/envoy/config/overload/v3/overload.upbdefs.h +2 -1
  776. data/src/core/ext/upbdefs-gen/envoy/config/rbac/v3/rbac.upbdefs.c +71 -66
  777. data/src/core/ext/upbdefs-gen/envoy/config/rbac/v3/rbac.upbdefs.h +2 -1
  778. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route.upbdefs.c +2 -1
  779. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route.upbdefs.h +2 -1
  780. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route_components.upbdefs.c +613 -605
  781. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route_components.upbdefs.h +2 -1
  782. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/scoped_route.upbdefs.c +2 -1
  783. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/scoped_route.upbdefs.h +2 -1
  784. data/src/core/ext/upbdefs-gen/envoy/config/tap/v3/common.upbdefs.c +2 -1
  785. data/src/core/ext/upbdefs-gen/envoy/config/tap/v3/common.upbdefs.h +2 -1
  786. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/datadog.upbdefs.c +32 -21
  787. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/datadog.upbdefs.h +7 -1
  788. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/dynamic_ot.upbdefs.c +20 -18
  789. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/dynamic_ot.upbdefs.h +2 -1
  790. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/http_tracer.upbdefs.c +2 -1
  791. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/http_tracer.upbdefs.h +2 -1
  792. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/lightstep.upbdefs.c +2 -1
  793. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/lightstep.upbdefs.h +2 -1
  794. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/opencensus.upbdefs.c +64 -60
  795. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/opencensus.upbdefs.h +2 -1
  796. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/opentelemetry.upbdefs.c +2 -1
  797. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/opentelemetry.upbdefs.h +2 -1
  798. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/service.upbdefs.c +2 -1
  799. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/service.upbdefs.h +2 -1
  800. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/skywalking.upbdefs.c +2 -1
  801. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/skywalking.upbdefs.h +2 -1
  802. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/trace.upbdefs.c +2 -1
  803. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/trace.upbdefs.h +2 -1
  804. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/xray.upbdefs.c +2 -1
  805. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/xray.upbdefs.h +2 -1
  806. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/zipkin.upbdefs.c +23 -21
  807. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/zipkin.upbdefs.h +2 -1
  808. data/src/core/ext/upbdefs-gen/envoy/data/accesslog/v3/accesslog.upbdefs.c +147 -143
  809. data/src/core/ext/upbdefs-gen/envoy/data/accesslog/v3/accesslog.upbdefs.h +2 -1
  810. data/src/core/ext/upbdefs-gen/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +2 -1
  811. data/src/core/ext/upbdefs-gen/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +2 -1
  812. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +2 -1
  813. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +2 -1
  814. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +2 -1
  815. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +2 -1
  816. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upbdefs.c +87 -0
  817. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upbdefs.h +48 -0
  818. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +38 -34
  819. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +2 -1
  820. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/router/v3/router.upbdefs.c +2 -1
  821. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/router/v3/router.upbdefs.h +2 -1
  822. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +2 -1
  823. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +2 -1
  824. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +292 -289
  825. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +2 -1
  826. data/src/core/ext/upbdefs-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +2 -1
  827. data/src/core/ext/upbdefs-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +2 -1
  828. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upbdefs.c +53 -0
  829. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upbdefs.h +33 -0
  830. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +2 -1
  831. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +2 -1
  832. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +84 -76
  833. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +7 -1
  834. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +2 -1
  835. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +2 -1
  836. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +2 -1
  837. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +2 -1
  838. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +2 -1
  839. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +2 -1
  840. data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c +2 -1
  841. data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h +2 -1
  842. data/src/core/ext/upbdefs-gen/envoy/service/discovery/v3/ads.upbdefs.c +2 -1
  843. data/src/core/ext/upbdefs-gen/envoy/service/discovery/v3/ads.upbdefs.h +2 -1
  844. data/src/core/ext/upbdefs-gen/envoy/service/discovery/v3/discovery.upbdefs.c +2 -1
  845. data/src/core/ext/upbdefs-gen/envoy/service/discovery/v3/discovery.upbdefs.h +2 -1
  846. data/src/core/ext/upbdefs-gen/envoy/service/load_stats/v3/lrs.upbdefs.c +2 -1
  847. data/src/core/ext/upbdefs-gen/envoy/service/load_stats/v3/lrs.upbdefs.h +2 -1
  848. data/src/core/ext/upbdefs-gen/envoy/service/status/v3/csds.upbdefs.c +2 -1
  849. data/src/core/ext/upbdefs-gen/envoy/service/status/v3/csds.upbdefs.h +2 -1
  850. data/src/core/ext/upbdefs-gen/envoy/type/http/v3/cookie.upbdefs.c +2 -1
  851. data/src/core/ext/upbdefs-gen/envoy/type/http/v3/cookie.upbdefs.h +2 -1
  852. data/src/core/ext/upbdefs-gen/envoy/type/http/v3/path_transformation.upbdefs.c +2 -1
  853. data/src/core/ext/upbdefs-gen/envoy/type/http/v3/path_transformation.upbdefs.h +2 -1
  854. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/filter_state.upbdefs.c +2 -1
  855. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/filter_state.upbdefs.h +2 -1
  856. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/http_inputs.upbdefs.c +2 -1
  857. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/http_inputs.upbdefs.h +2 -1
  858. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/metadata.upbdefs.c +2 -1
  859. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/metadata.upbdefs.h +2 -1
  860. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/node.upbdefs.c +2 -1
  861. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/node.upbdefs.h +2 -1
  862. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/number.upbdefs.c +2 -1
  863. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/number.upbdefs.h +2 -1
  864. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/path.upbdefs.c +2 -1
  865. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/path.upbdefs.h +2 -1
  866. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/regex.upbdefs.c +2 -1
  867. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/regex.upbdefs.h +2 -1
  868. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/status_code_input.upbdefs.c +2 -1
  869. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/status_code_input.upbdefs.h +2 -1
  870. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/string.upbdefs.c +41 -34
  871. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/string.upbdefs.h +2 -1
  872. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/struct.upbdefs.c +2 -1
  873. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/struct.upbdefs.h +2 -1
  874. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/value.upbdefs.c +2 -1
  875. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/value.upbdefs.h +2 -1
  876. data/src/core/ext/upbdefs-gen/envoy/type/metadata/v3/metadata.upbdefs.c +2 -1
  877. data/src/core/ext/upbdefs-gen/envoy/type/metadata/v3/metadata.upbdefs.h +2 -1
  878. data/src/core/ext/upbdefs-gen/envoy/type/tracing/v3/custom_tag.upbdefs.c +2 -1
  879. data/src/core/ext/upbdefs-gen/envoy/type/tracing/v3/custom_tag.upbdefs.h +2 -1
  880. data/src/core/ext/upbdefs-gen/envoy/type/v3/hash_policy.upbdefs.c +2 -1
  881. data/src/core/ext/upbdefs-gen/envoy/type/v3/hash_policy.upbdefs.h +2 -1
  882. data/src/core/ext/upbdefs-gen/envoy/type/v3/http.upbdefs.c +2 -1
  883. data/src/core/ext/upbdefs-gen/envoy/type/v3/http.upbdefs.h +2 -1
  884. data/src/core/ext/upbdefs-gen/envoy/type/v3/http_status.upbdefs.c +2 -1
  885. data/src/core/ext/upbdefs-gen/envoy/type/v3/http_status.upbdefs.h +2 -1
  886. data/src/core/ext/upbdefs-gen/envoy/type/v3/percent.upbdefs.c +2 -1
  887. data/src/core/ext/upbdefs-gen/envoy/type/v3/percent.upbdefs.h +2 -1
  888. data/src/core/ext/upbdefs-gen/envoy/type/v3/range.upbdefs.c +2 -1
  889. data/src/core/ext/upbdefs-gen/envoy/type/v3/range.upbdefs.h +2 -1
  890. data/src/core/ext/upbdefs-gen/envoy/type/v3/ratelimit_strategy.upbdefs.c +2 -1
  891. data/src/core/ext/upbdefs-gen/envoy/type/v3/ratelimit_strategy.upbdefs.h +2 -1
  892. data/src/core/ext/upbdefs-gen/envoy/type/v3/ratelimit_unit.upbdefs.c +2 -1
  893. data/src/core/ext/upbdefs-gen/envoy/type/v3/ratelimit_unit.upbdefs.h +2 -1
  894. data/src/core/ext/upbdefs-gen/envoy/type/v3/semantic_version.upbdefs.c +2 -1
  895. data/src/core/ext/upbdefs-gen/envoy/type/v3/semantic_version.upbdefs.h +2 -1
  896. data/src/core/ext/upbdefs-gen/envoy/type/v3/token_bucket.upbdefs.c +2 -1
  897. data/src/core/ext/upbdefs-gen/envoy/type/v3/token_bucket.upbdefs.h +2 -1
  898. data/src/core/ext/upbdefs-gen/google/api/annotations.upbdefs.c +2 -1
  899. data/src/core/ext/upbdefs-gen/google/api/annotations.upbdefs.h +2 -1
  900. data/src/core/ext/upbdefs-gen/google/api/expr/v1alpha1/checked.upbdefs.c +110 -108
  901. data/src/core/ext/upbdefs-gen/google/api/expr/v1alpha1/checked.upbdefs.h +2 -1
  902. data/src/core/ext/upbdefs-gen/google/api/expr/v1alpha1/syntax.upbdefs.c +103 -79
  903. data/src/core/ext/upbdefs-gen/google/api/expr/v1alpha1/syntax.upbdefs.h +12 -1
  904. data/src/core/ext/upbdefs-gen/google/api/http.upbdefs.c +2 -1
  905. data/src/core/ext/upbdefs-gen/google/api/http.upbdefs.h +2 -1
  906. data/src/core/ext/upbdefs-gen/google/api/httpbody.upbdefs.c +2 -1
  907. data/src/core/ext/upbdefs-gen/google/api/httpbody.upbdefs.h +2 -1
  908. data/src/core/ext/upbdefs-gen/google/protobuf/any.upbdefs.c +2 -1
  909. data/src/core/ext/upbdefs-gen/google/protobuf/any.upbdefs.h +2 -1
  910. data/src/core/ext/upbdefs-gen/google/protobuf/descriptor.upbdefs.c +283 -257
  911. data/src/core/ext/upbdefs-gen/google/protobuf/descriptor.upbdefs.h +7 -1
  912. data/src/core/ext/upbdefs-gen/google/protobuf/duration.upbdefs.c +2 -1
  913. data/src/core/ext/upbdefs-gen/google/protobuf/duration.upbdefs.h +2 -1
  914. data/src/core/ext/upbdefs-gen/google/protobuf/empty.upbdefs.c +2 -1
  915. data/src/core/ext/upbdefs-gen/google/protobuf/empty.upbdefs.h +2 -1
  916. data/src/core/ext/upbdefs-gen/google/protobuf/struct.upbdefs.c +2 -1
  917. data/src/core/ext/upbdefs-gen/google/protobuf/struct.upbdefs.h +2 -1
  918. data/src/core/ext/upbdefs-gen/google/protobuf/timestamp.upbdefs.c +2 -1
  919. data/src/core/ext/upbdefs-gen/google/protobuf/timestamp.upbdefs.h +2 -1
  920. data/src/core/ext/upbdefs-gen/google/protobuf/wrappers.upbdefs.c +2 -1
  921. data/src/core/ext/upbdefs-gen/google/protobuf/wrappers.upbdefs.h +2 -1
  922. data/src/core/ext/upbdefs-gen/google/rpc/status.upbdefs.c +2 -1
  923. data/src/core/ext/upbdefs-gen/google/rpc/status.upbdefs.h +2 -1
  924. data/src/core/ext/upbdefs-gen/opencensus/proto/trace/v1/trace_config.upbdefs.c +2 -1
  925. data/src/core/ext/upbdefs-gen/opencensus/proto/trace/v1/trace_config.upbdefs.h +2 -1
  926. data/src/core/ext/upbdefs-gen/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +2 -1
  927. data/src/core/ext/upbdefs-gen/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +2 -1
  928. data/src/core/ext/upbdefs-gen/udpa/annotations/migrate.upbdefs.c +2 -1
  929. data/src/core/ext/upbdefs-gen/udpa/annotations/migrate.upbdefs.h +2 -1
  930. data/src/core/ext/upbdefs-gen/udpa/annotations/security.upbdefs.c +2 -1
  931. data/src/core/ext/upbdefs-gen/udpa/annotations/security.upbdefs.h +2 -1
  932. data/src/core/ext/upbdefs-gen/udpa/annotations/sensitive.upbdefs.c +2 -1
  933. data/src/core/ext/upbdefs-gen/udpa/annotations/sensitive.upbdefs.h +2 -1
  934. data/src/core/ext/upbdefs-gen/udpa/annotations/status.upbdefs.c +2 -1
  935. data/src/core/ext/upbdefs-gen/udpa/annotations/status.upbdefs.h +2 -1
  936. data/src/core/ext/upbdefs-gen/udpa/annotations/versioning.upbdefs.c +2 -1
  937. data/src/core/ext/upbdefs-gen/udpa/annotations/versioning.upbdefs.h +2 -1
  938. data/src/core/ext/upbdefs-gen/validate/validate.upbdefs.c +2 -1
  939. data/src/core/ext/upbdefs-gen/validate/validate.upbdefs.h +2 -1
  940. data/src/core/ext/upbdefs-gen/xds/annotations/v3/migrate.upbdefs.c +2 -1
  941. data/src/core/ext/upbdefs-gen/xds/annotations/v3/migrate.upbdefs.h +2 -1
  942. data/src/core/ext/upbdefs-gen/xds/annotations/v3/security.upbdefs.c +2 -1
  943. data/src/core/ext/upbdefs-gen/xds/annotations/v3/security.upbdefs.h +2 -1
  944. data/src/core/ext/upbdefs-gen/xds/annotations/v3/sensitive.upbdefs.c +2 -1
  945. data/src/core/ext/upbdefs-gen/xds/annotations/v3/sensitive.upbdefs.h +2 -1
  946. data/src/core/ext/upbdefs-gen/xds/annotations/v3/status.upbdefs.c +2 -1
  947. data/src/core/ext/upbdefs-gen/xds/annotations/v3/status.upbdefs.h +2 -1
  948. data/src/core/ext/upbdefs-gen/xds/annotations/v3/versioning.upbdefs.c +2 -1
  949. data/src/core/ext/upbdefs-gen/xds/annotations/v3/versioning.upbdefs.h +2 -1
  950. data/src/core/ext/upbdefs-gen/xds/core/v3/authority.upbdefs.c +2 -1
  951. data/src/core/ext/upbdefs-gen/xds/core/v3/authority.upbdefs.h +2 -1
  952. data/src/core/ext/upbdefs-gen/xds/core/v3/cidr.upbdefs.c +2 -1
  953. data/src/core/ext/upbdefs-gen/xds/core/v3/cidr.upbdefs.h +2 -1
  954. data/src/core/ext/upbdefs-gen/xds/core/v3/collection_entry.upbdefs.c +2 -1
  955. data/src/core/ext/upbdefs-gen/xds/core/v3/collection_entry.upbdefs.h +2 -1
  956. data/src/core/ext/upbdefs-gen/xds/core/v3/context_params.upbdefs.c +2 -1
  957. data/src/core/ext/upbdefs-gen/xds/core/v3/context_params.upbdefs.h +2 -1
  958. data/src/core/ext/upbdefs-gen/xds/core/v3/extension.upbdefs.c +2 -1
  959. data/src/core/ext/upbdefs-gen/xds/core/v3/extension.upbdefs.h +2 -1
  960. data/src/core/ext/upbdefs-gen/xds/core/v3/resource.upbdefs.c +2 -1
  961. data/src/core/ext/upbdefs-gen/xds/core/v3/resource.upbdefs.h +2 -1
  962. data/src/core/ext/upbdefs-gen/xds/core/v3/resource_locator.upbdefs.c +2 -1
  963. data/src/core/ext/upbdefs-gen/xds/core/v3/resource_locator.upbdefs.h +2 -1
  964. data/src/core/ext/upbdefs-gen/xds/core/v3/resource_name.upbdefs.c +2 -1
  965. data/src/core/ext/upbdefs-gen/xds/core/v3/resource_name.upbdefs.h +2 -1
  966. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/cel.upbdefs.c +2 -1
  967. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/cel.upbdefs.h +2 -1
  968. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/domain.upbdefs.c +2 -1
  969. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/domain.upbdefs.h +2 -1
  970. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/http_inputs.upbdefs.c +2 -1
  971. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/http_inputs.upbdefs.h +2 -1
  972. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/ip.upbdefs.c +2 -1
  973. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/ip.upbdefs.h +2 -1
  974. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/matcher.upbdefs.c +2 -1
  975. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/matcher.upbdefs.h +2 -1
  976. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/range.upbdefs.c +2 -1
  977. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/range.upbdefs.h +2 -1
  978. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/regex.upbdefs.c +2 -1
  979. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/regex.upbdefs.h +2 -1
  980. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/string.upbdefs.c +2 -1
  981. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/string.upbdefs.h +2 -1
  982. data/src/core/ext/upbdefs-gen/xds/type/v3/cel.upbdefs.c +2 -1
  983. data/src/core/ext/upbdefs-gen/xds/type/v3/cel.upbdefs.h +2 -1
  984. data/src/core/ext/upbdefs-gen/xds/type/v3/range.upbdefs.c +2 -1
  985. data/src/core/ext/upbdefs-gen/xds/type/v3/range.upbdefs.h +2 -1
  986. data/src/core/ext/upbdefs-gen/xds/type/v3/typed_struct.upbdefs.c +2 -1
  987. data/src/core/ext/upbdefs-gen/xds/type/v3/typed_struct.upbdefs.h +2 -1
  988. data/src/core/filter/blackboard.cc +33 -0
  989. data/src/core/filter/blackboard.h +70 -0
  990. data/src/core/handshaker/endpoint_info/endpoint_info_handshaker.cc +13 -12
  991. data/src/core/handshaker/handshaker.cc +127 -159
  992. data/src/core/handshaker/handshaker.h +58 -52
  993. data/src/core/handshaker/handshaker_registry.cc +1 -2
  994. data/src/core/handshaker/handshaker_registry.h +2 -2
  995. data/src/core/handshaker/http_connect/http_connect_handshaker.cc +113 -159
  996. data/src/core/handshaker/http_connect/http_proxy_mapper.cc +30 -37
  997. data/src/core/handshaker/http_connect/http_proxy_mapper.h +2 -3
  998. data/src/core/handshaker/http_connect/xds_http_proxy_mapper.cc +57 -0
  999. data/src/core/handshaker/http_connect/xds_http_proxy_mapper.h +46 -0
  1000. data/src/core/handshaker/proxy_mapper.h +2 -3
  1001. data/src/core/handshaker/proxy_mapper_registry.cc +2 -2
  1002. data/src/core/handshaker/proxy_mapper_registry.h +2 -3
  1003. data/src/core/handshaker/security/secure_endpoint.cc +95 -82
  1004. data/src/core/handshaker/security/secure_endpoint.h +6 -7
  1005. data/src/core/handshaker/security/security_handshaker.cc +166 -220
  1006. data/src/core/handshaker/security/security_handshaker.h +2 -3
  1007. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +47 -61
  1008. data/src/core/lib/address_utils/parse_address.cc +30 -43
  1009. data/src/core/lib/address_utils/parse_address.h +2 -4
  1010. data/src/core/lib/address_utils/sockaddr_utils.cc +9 -12
  1011. data/src/core/lib/address_utils/sockaddr_utils.h +1 -3
  1012. data/src/core/lib/channel/call_finalization.h +2 -2
  1013. data/src/core/lib/channel/channel_args.cc +17 -23
  1014. data/src/core/lib/channel/channel_args.h +34 -20
  1015. data/src/core/lib/channel/channel_args_preconditioning.cc +2 -2
  1016. data/src/core/lib/channel/channel_args_preconditioning.h +3 -3
  1017. data/src/core/lib/channel/channel_stack.cc +13 -76
  1018. data/src/core/lib/channel/channel_stack.h +26 -61
  1019. data/src/core/lib/channel/channel_stack_builder.cc +2 -2
  1020. data/src/core/lib/channel/channel_stack_builder.h +3 -9
  1021. data/src/core/lib/channel/channel_stack_builder_impl.cc +5 -150
  1022. data/src/core/lib/channel/channel_stack_builder_impl.h +14 -4
  1023. data/src/core/lib/channel/connected_channel.cc +46 -688
  1024. data/src/core/lib/channel/promise_based_filter.cc +180 -250
  1025. data/src/core/lib/channel/promise_based_filter.h +173 -509
  1026. data/src/core/lib/channel/status_util.cc +2 -4
  1027. data/src/core/lib/channel/status_util.h +3 -3
  1028. data/src/core/lib/compression/compression.cc +7 -9
  1029. data/src/core/lib/compression/compression_internal.cc +5 -8
  1030. data/src/core/lib/compression/compression_internal.h +3 -5
  1031. data/src/core/lib/compression/message_compress.cc +9 -12
  1032. data/src/core/lib/config/config_vars.cc +15 -18
  1033. data/src/core/lib/config/config_vars.h +10 -13
  1034. data/src/core/lib/config/config_vars_non_generated.cc +2 -2
  1035. data/src/core/lib/config/core_configuration.cc +2 -3
  1036. data/src/core/lib/config/core_configuration.h +2 -4
  1037. data/src/core/lib/config/load_config.cc +2 -4
  1038. data/src/core/lib/config/load_config.h +1 -2
  1039. data/src/core/lib/debug/trace.cc +47 -65
  1040. data/src/core/lib/debug/trace.h +2 -97
  1041. data/src/core/lib/debug/trace_flags.cc +242 -0
  1042. data/src/core/lib/debug/trace_flags.h +131 -0
  1043. data/src/core/lib/debug/trace_impl.h +125 -0
  1044. data/src/core/lib/event_engine/ares_resolver.cc +151 -75
  1045. data/src/core/lib/event_engine/ares_resolver.h +13 -20
  1046. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +13 -16
  1047. data/src/core/lib/event_engine/cf_engine/cf_engine.h +1 -1
  1048. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +44 -31
  1049. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +4 -6
  1050. data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +1 -1
  1051. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +19 -26
  1052. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +3 -5
  1053. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +3 -4
  1054. data/src/core/lib/event_engine/channel_args_endpoint_config.h +2 -3
  1055. data/src/core/lib/event_engine/common_closures.h +3 -3
  1056. data/src/core/lib/event_engine/default_event_engine.cc +12 -14
  1057. data/src/core/lib/event_engine/default_event_engine.h +3 -3
  1058. data/src/core/lib/event_engine/default_event_engine_factory.cc +2 -2
  1059. data/src/core/lib/event_engine/default_event_engine_factory.h +2 -2
  1060. data/src/core/lib/event_engine/event_engine.cc +35 -4
  1061. data/src/core/lib/event_engine/event_engine_context.h +4 -2
  1062. data/src/core/lib/event_engine/extensions/can_track_errors.h +2 -2
  1063. data/src/core/lib/event_engine/extensions/chaotic_good_extension.h +1 -2
  1064. data/src/core/lib/event_engine/extensions/supports_fd.h +27 -3
  1065. data/src/core/lib/event_engine/extensions/tcp_trace.h +42 -0
  1066. data/src/core/lib/event_engine/forkable.cc +6 -8
  1067. data/src/core/lib/event_engine/forkable.h +2 -14
  1068. data/src/core/lib/event_engine/grpc_polled_fd.h +3 -4
  1069. data/src/core/lib/event_engine/handle_containers.h +2 -3
  1070. data/src/core/lib/event_engine/memory_allocator_factory.h +3 -4
  1071. data/src/core/lib/event_engine/poller.h +2 -2
  1072. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +21 -23
  1073. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +8 -9
  1074. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +13 -17
  1075. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +4 -5
  1076. data/src/core/lib/event_engine/posix_engine/event_poller.h +3 -4
  1077. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +3 -4
  1078. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +2 -2
  1079. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +4 -6
  1080. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +4 -4
  1081. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +1 -2
  1082. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +5 -7
  1083. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +2 -3
  1084. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +3 -4
  1085. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +2 -3
  1086. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +73 -79
  1087. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +11 -12
  1088. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +74 -55
  1089. data/src/core/lib/event_engine/posix_engine/posix_engine.h +18 -14
  1090. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +3 -3
  1091. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +23 -27
  1092. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +14 -13
  1093. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +22 -28
  1094. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +1 -2
  1095. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +44 -38
  1096. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +10 -10
  1097. data/src/core/lib/event_engine/posix_engine/timer.cc +5 -5
  1098. data/src/core/lib/event_engine/posix_engine/timer.h +5 -7
  1099. data/src/core/lib/event_engine/posix_engine/timer_heap.cc +1 -2
  1100. data/src/core/lib/event_engine/posix_engine/timer_heap.h +2 -2
  1101. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +12 -21
  1102. data/src/core/lib/event_engine/posix_engine/timer_manager.h +5 -7
  1103. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +6 -8
  1104. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +3 -5
  1105. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +5 -6
  1106. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +2 -3
  1107. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +4 -5
  1108. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +2 -3
  1109. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +2 -2
  1110. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +2 -3
  1111. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +2 -2
  1112. data/src/core/lib/event_engine/query_extensions.h +2 -2
  1113. data/src/core/lib/event_engine/ref_counted_dns_resolver_interface.h +3 -5
  1114. data/src/core/lib/event_engine/resolved_address.cc +5 -5
  1115. data/src/core/lib/event_engine/shim.cc +1 -1
  1116. data/src/core/lib/event_engine/slice.cc +3 -6
  1117. data/src/core/lib/event_engine/slice_buffer.cc +1 -2
  1118. data/src/core/lib/event_engine/tcp_socket_utils.cc +9 -12
  1119. data/src/core/lib/event_engine/tcp_socket_utils.h +3 -3
  1120. data/src/core/lib/event_engine/thread_local.h +1 -1
  1121. data/src/core/lib/event_engine/thread_pool/thread_count.cc +5 -7
  1122. data/src/core/lib/event_engine/thread_pool/thread_count.h +6 -7
  1123. data/src/core/lib/event_engine/thread_pool/thread_pool.h +2 -4
  1124. data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +2 -3
  1125. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +39 -46
  1126. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +10 -15
  1127. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +50 -23
  1128. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +9 -8
  1129. data/src/core/lib/event_engine/time_util.cc +2 -2
  1130. data/src/core/lib/event_engine/time_util.h +1 -2
  1131. data/src/core/lib/event_engine/utils.cc +19 -5
  1132. data/src/core/lib/event_engine/utils.h +10 -4
  1133. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +125 -100
  1134. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +4 -6
  1135. data/src/core/lib/event_engine/windows/iocp.cc +14 -14
  1136. data/src/core/lib/event_engine/windows/iocp.h +2 -3
  1137. data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +4 -6
  1138. data/src/core/lib/event_engine/windows/win_socket.cc +42 -33
  1139. data/src/core/lib/event_engine/windows/win_socket.h +8 -10
  1140. data/src/core/lib/event_engine/windows/windows_endpoint.cc +26 -27
  1141. data/src/core/lib/event_engine/windows/windows_engine.cc +242 -134
  1142. data/src/core/lib/event_engine/windows/windows_engine.h +143 -33
  1143. data/src/core/lib/event_engine/windows/windows_listener.cc +22 -37
  1144. data/src/core/lib/event_engine/windows/windows_listener.h +4 -5
  1145. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +3 -3
  1146. data/src/core/lib/event_engine/work_queue/basic_work_queue.h +3 -5
  1147. data/src/core/lib/event_engine/work_queue/work_queue.h +2 -3
  1148. data/src/core/lib/experiments/config.cc +54 -27
  1149. data/src/core/lib/experiments/config.h +56 -3
  1150. data/src/core/lib/experiments/experiments.cc +159 -293
  1151. data/src/core/lib/experiments/experiments.h +84 -124
  1152. data/src/core/lib/iomgr/buffer_list.cc +5 -5
  1153. data/src/core/lib/iomgr/buffer_list.h +2 -3
  1154. data/src/core/lib/iomgr/call_combiner.cc +39 -66
  1155. data/src/core/lib/iomgr/call_combiner.h +12 -16
  1156. data/src/core/lib/iomgr/cfstream_handle.cc +14 -20
  1157. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  1158. data/src/core/lib/iomgr/closure.cc +2 -2
  1159. data/src/core/lib/iomgr/closure.h +12 -19
  1160. data/src/core/lib/iomgr/combiner.cc +33 -48
  1161. data/src/core/lib/iomgr/combiner.h +1 -4
  1162. data/src/core/lib/iomgr/endpoint.cc +0 -6
  1163. data/src/core/lib/iomgr/endpoint.h +3 -4
  1164. data/src/core/lib/iomgr/endpoint_cfstream.cc +40 -73
  1165. data/src/core/lib/iomgr/endpoint_pair_posix.cc +3 -6
  1166. data/src/core/lib/iomgr/endpoint_pair_windows.cc +6 -8
  1167. data/src/core/lib/iomgr/error.cc +22 -32
  1168. data/src/core/lib/iomgr/error.h +7 -10
  1169. data/src/core/lib/iomgr/error_cfstream.cc +1 -3
  1170. data/src/core/lib/iomgr/ev_apple.cc +15 -23
  1171. data/src/core/lib/iomgr/ev_epoll1_linux.cc +67 -113
  1172. data/src/core/lib/iomgr/ev_poll_posix.cc +53 -53
  1173. data/src/core/lib/iomgr/ev_posix.cc +66 -57
  1174. data/src/core/lib/iomgr/ev_posix.h +9 -12
  1175. data/src/core/lib/iomgr/event_engine_shims/closure.cc +10 -13
  1176. data/src/core/lib/iomgr/event_engine_shims/closure.h +1 -2
  1177. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +33 -51
  1178. data/src/core/lib/iomgr/event_engine_shims/endpoint.h +2 -2
  1179. data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +9 -13
  1180. data/src/core/lib/iomgr/exec_ctx.cc +10 -14
  1181. data/src/core/lib/iomgr/exec_ctx.h +33 -25
  1182. data/src/core/lib/iomgr/executor.cc +55 -53
  1183. data/src/core/lib/iomgr/executor.h +2 -2
  1184. data/src/core/lib/iomgr/fork_posix.cc +11 -15
  1185. data/src/core/lib/iomgr/fork_windows.cc +3 -2
  1186. data/src/core/lib/iomgr/internal_errqueue.cc +4 -4
  1187. data/src/core/lib/iomgr/iocp_windows.cc +8 -10
  1188. data/src/core/lib/iomgr/iomgr.cc +17 -23
  1189. data/src/core/lib/iomgr/iomgr.h +1 -2
  1190. data/src/core/lib/iomgr/iomgr_internal.cc +1 -2
  1191. data/src/core/lib/iomgr/iomgr_internal.h +1 -2
  1192. data/src/core/lib/iomgr/iomgr_windows.cc +1 -4
  1193. data/src/core/lib/iomgr/lockfree_event.cc +10 -20
  1194. data/src/core/lib/iomgr/polling_entity.cc +13 -7
  1195. data/src/core/lib/iomgr/pollset.h +0 -2
  1196. data/src/core/lib/iomgr/pollset_set_windows.cc +1 -2
  1197. data/src/core/lib/iomgr/pollset_windows.cc +2 -6
  1198. data/src/core/lib/iomgr/port.h +2 -2
  1199. data/src/core/lib/iomgr/resolve_address.cc +3 -5
  1200. data/src/core/lib/iomgr/resolve_address.h +4 -6
  1201. data/src/core/lib/iomgr/resolve_address_impl.h +1 -2
  1202. data/src/core/lib/iomgr/resolve_address_posix.cc +12 -21
  1203. data/src/core/lib/iomgr/resolve_address_posix.h +2 -2
  1204. data/src/core/lib/iomgr/resolve_address_windows.cc +9 -12
  1205. data/src/core/lib/iomgr/resolve_address_windows.h +2 -2
  1206. data/src/core/lib/iomgr/resolved_address.h +1 -2
  1207. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +3 -6
  1208. data/src/core/lib/iomgr/socket_factory_posix.cc +1 -1
  1209. data/src/core/lib/iomgr/socket_mutator.cc +2 -3
  1210. data/src/core/lib/iomgr/socket_mutator.h +1 -2
  1211. data/src/core/lib/iomgr/socket_utils.h +1 -2
  1212. data/src/core/lib/iomgr/socket_utils_common_posix.cc +43 -52
  1213. data/src/core/lib/iomgr/socket_utils_linux.cc +1 -3
  1214. data/src/core/lib/iomgr/socket_utils_posix.cc +4 -7
  1215. data/src/core/lib/iomgr/socket_utils_windows.cc +1 -3
  1216. data/src/core/lib/iomgr/socket_windows.cc +7 -11
  1217. data/src/core/lib/iomgr/socket_windows.h +1 -2
  1218. data/src/core/lib/iomgr/tcp_client_cfstream.cc +12 -20
  1219. data/src/core/lib/iomgr/tcp_client_posix.cc +17 -30
  1220. data/src/core/lib/iomgr/tcp_client_windows.cc +5 -10
  1221. data/src/core/lib/iomgr/tcp_posix.cc +85 -155
  1222. data/src/core/lib/iomgr/tcp_posix.h +0 -2
  1223. data/src/core/lib/iomgr/tcp_server.h +2 -2
  1224. data/src/core/lib/iomgr/tcp_server_posix.cc +40 -58
  1225. data/src/core/lib/iomgr/tcp_server_utils_posix.h +2 -3
  1226. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +7 -11
  1227. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -11
  1228. data/src/core/lib/iomgr/tcp_server_windows.cc +17 -25
  1229. data/src/core/lib/iomgr/tcp_windows.cc +32 -62
  1230. data/src/core/lib/iomgr/timer.h +2 -2
  1231. data/src/core/lib/iomgr/timer_generic.cc +71 -104
  1232. data/src/core/lib/iomgr/timer_heap.cc +2 -3
  1233. data/src/core/lib/iomgr/timer_manager.cc +25 -43
  1234. data/src/core/lib/iomgr/timer_manager.h +1 -2
  1235. data/src/core/lib/iomgr/unix_sockets_posix.cc +4 -6
  1236. data/src/core/lib/iomgr/unix_sockets_posix.h +3 -4
  1237. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +0 -4
  1238. data/src/core/lib/iomgr/vsock.cc +3 -6
  1239. data/src/core/lib/iomgr/vsock.h +3 -4
  1240. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +2 -4
  1241. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +5 -6
  1242. data/src/core/lib/promise/activity.cc +2 -4
  1243. data/src/core/lib/promise/activity.h +48 -17
  1244. data/src/core/lib/promise/all_ok.h +17 -11
  1245. data/src/core/lib/promise/arena_promise.h +2 -4
  1246. data/src/core/lib/promise/cancel_callback.h +34 -6
  1247. data/src/core/lib/promise/context.h +19 -10
  1248. data/src/core/lib/promise/detail/basic_seq.h +2 -3
  1249. data/src/core/lib/promise/detail/join_state.h +556 -762
  1250. data/src/core/lib/promise/detail/promise_factory.h +46 -30
  1251. data/src/core/lib/promise/detail/promise_like.h +29 -14
  1252. data/src/core/lib/promise/detail/seq_state.h +1314 -1977
  1253. data/src/core/lib/promise/detail/status.h +36 -15
  1254. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +2 -3
  1255. data/src/core/lib/promise/for_each.h +34 -37
  1256. data/src/core/lib/promise/if.h +23 -19
  1257. data/src/core/lib/promise/interceptor_list.h +21 -35
  1258. data/src/core/lib/promise/latch.h +19 -34
  1259. data/src/core/lib/promise/loop.h +16 -12
  1260. data/src/core/lib/promise/map.h +26 -9
  1261. data/src/core/lib/promise/observable.h +181 -0
  1262. data/src/core/lib/promise/party.cc +297 -147
  1263. data/src/core/lib/promise/party.h +139 -361
  1264. data/src/core/lib/promise/pipe.h +21 -44
  1265. data/src/core/lib/promise/poll.h +102 -38
  1266. data/src/core/lib/promise/prioritized_race.h +2 -2
  1267. data/src/core/lib/promise/promise.h +14 -8
  1268. data/src/core/lib/promise/race.h +12 -7
  1269. data/src/core/lib/promise/seq.h +55 -39
  1270. data/src/core/lib/promise/sleep.cc +3 -3
  1271. data/src/core/lib/promise/sleep.h +4 -5
  1272. data/src/core/lib/promise/status_flag.h +148 -49
  1273. data/src/core/lib/promise/try_join.h +37 -21
  1274. data/src/core/lib/promise/try_seq.h +86 -49
  1275. data/src/core/lib/resource_quota/api.cc +4 -6
  1276. data/src/core/lib/resource_quota/api.h +1 -2
  1277. data/src/core/lib/resource_quota/arena.cc +64 -86
  1278. data/src/core/lib/resource_quota/arena.h +143 -215
  1279. data/src/core/lib/resource_quota/connection_quota.cc +2 -3
  1280. data/src/core/lib/resource_quota/connection_quota.h +5 -6
  1281. data/src/core/lib/resource_quota/memory_quota.cc +28 -40
  1282. data/src/core/lib/resource_quota/memory_quota.h +20 -18
  1283. data/src/core/lib/resource_quota/periodic_update.cc +4 -4
  1284. data/src/core/lib/resource_quota/periodic_update.h +2 -4
  1285. data/src/core/lib/resource_quota/resource_quota.h +8 -9
  1286. data/src/core/lib/resource_quota/thread_quota.cc +2 -3
  1287. data/src/core/lib/resource_quota/thread_quota.h +5 -6
  1288. data/src/core/lib/security/authorization/audit_logging.cc +5 -7
  1289. data/src/core/lib/security/authorization/audit_logging.h +5 -6
  1290. data/src/core/lib/security/authorization/authorization_engine.h +3 -3
  1291. data/src/core/lib/security/authorization/authorization_policy_provider.h +4 -5
  1292. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +2 -2
  1293. data/src/core/lib/security/authorization/evaluate_args.cc +10 -14
  1294. data/src/core/lib/security/authorization/evaluate_args.h +3 -4
  1295. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +2 -4
  1296. data/src/core/lib/security/authorization/grpc_authorization_engine.h +2 -3
  1297. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +22 -30
  1298. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +5 -3
  1299. data/src/core/lib/security/authorization/matchers.cc +5 -7
  1300. data/src/core/lib/security/authorization/matchers.h +2 -4
  1301. data/src/core/lib/security/authorization/rbac_policy.cc +2 -2
  1302. data/src/core/lib/security/authorization/rbac_policy.h +3 -5
  1303. data/src/core/lib/security/authorization/stdout_logger.cc +4 -5
  1304. data/src/core/lib/security/authorization/stdout_logger.h +4 -4
  1305. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +8 -9
  1306. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +4 -5
  1307. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +2 -3
  1308. data/src/core/lib/security/context/security_context.cc +48 -48
  1309. data/src/core/lib/security/context/security_context.h +39 -18
  1310. data/src/core/lib/security/credentials/alts/alts_credentials.cc +5 -5
  1311. data/src/core/lib/security/credentials/alts/alts_credentials.h +9 -5
  1312. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +4 -4
  1313. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +1 -2
  1314. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +3 -5
  1315. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +3 -5
  1316. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +4 -5
  1317. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +3 -3
  1318. data/src/core/lib/security/credentials/call_creds_util.cc +8 -7
  1319. data/src/core/lib/security/credentials/call_creds_util.h +2 -2
  1320. data/src/core/lib/security/credentials/channel_creds_registry.h +7 -8
  1321. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +14 -13
  1322. data/src/core/lib/security/credentials/composite/composite_credentials.cc +10 -14
  1323. data/src/core/lib/security/credentials/composite/composite_credentials.h +11 -10
  1324. data/src/core/lib/security/credentials/credentials.cc +18 -19
  1325. data/src/core/lib/security/credentials/credentials.h +12 -14
  1326. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +335 -339
  1327. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +60 -48
  1328. data/src/core/lib/security/credentials/external/aws_request_signer.cc +4 -5
  1329. data/src/core/lib/security/credentials/external/aws_request_signer.h +3 -3
  1330. data/src/core/lib/security/credentials/external/external_account_credentials.cc +408 -374
  1331. data/src/core/lib/security/credentials/external/external_account_credentials.h +128 -60
  1332. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +90 -52
  1333. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +32 -11
  1334. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +102 -129
  1335. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +22 -24
  1336. data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -4
  1337. data/src/core/lib/security/credentials/fake/fake_credentials.h +8 -7
  1338. data/src/core/lib/security/credentials/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +195 -0
  1339. data/src/core/lib/security/credentials/gcp_service_account_identity/gcp_service_account_identity_credentials.h +90 -0
  1340. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +6 -7
  1341. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +55 -73
  1342. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +8 -6
  1343. data/src/core/lib/security/credentials/iam/iam_credentials.cc +5 -10
  1344. data/src/core/lib/security/credentials/iam/iam_credentials.h +8 -7
  1345. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +2 -2
  1346. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +2 -2
  1347. data/src/core/lib/security/credentials/jwt/json_token.cc +25 -29
  1348. data/src/core/lib/security/credentials/jwt/json_token.h +2 -3
  1349. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +22 -29
  1350. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +10 -10
  1351. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +67 -74
  1352. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +3 -4
  1353. data/src/core/lib/security/credentials/local/local_credentials.cc +2 -2
  1354. data/src/core/lib/security/credentials/local/local_credentials.h +3 -3
  1355. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +195 -296
  1356. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +50 -73
  1357. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +20 -33
  1358. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +12 -14
  1359. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +35 -47
  1360. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +5 -8
  1361. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +3 -4
  1362. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +4 -5
  1363. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_match.cc +1 -3
  1364. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +102 -42
  1365. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +14 -13
  1366. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +6 -10
  1367. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +9 -11
  1368. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +10 -13
  1369. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +1 -1
  1370. data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.cc +6 -10
  1371. data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.h +8 -10
  1372. data/src/core/lib/security/credentials/tls/tls_credentials.cc +20 -23
  1373. data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -3
  1374. data/src/core/lib/security/credentials/tls/tls_utils.cc +5 -6
  1375. data/src/core/lib/security/credentials/tls/tls_utils.h +3 -3
  1376. data/src/core/lib/security/credentials/token_fetcher/token_fetcher_credentials.cc +298 -0
  1377. data/src/core/lib/security/credentials/token_fetcher/token_fetcher_credentials.h +175 -0
  1378. data/src/core/lib/security/credentials/xds/xds_credentials.cc +15 -13
  1379. data/src/core/lib/security/credentials/xds/xds_credentials.h +7 -9
  1380. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -27
  1381. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +1 -1
  1382. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +24 -24
  1383. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +1 -1
  1384. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +4 -7
  1385. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +5 -6
  1386. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +9 -11
  1387. data/src/core/lib/security/security_connector/load_system_roots_windows.cc +4 -6
  1388. data/src/core/lib/security/security_connector/local/local_security_connector.cc +25 -25
  1389. data/src/core/lib/security/security_connector/local/local_security_connector.h +1 -1
  1390. data/src/core/lib/security/security_connector/security_connector.cc +6 -11
  1391. data/src/core/lib/security/security_connector/security_connector.h +8 -11
  1392. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +23 -27
  1393. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +2 -3
  1394. data/src/core/lib/security/security_connector/ssl_utils.cc +33 -34
  1395. data/src/core/lib/security/security_connector/ssl_utils.h +6 -8
  1396. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +37 -50
  1397. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +7 -8
  1398. data/src/core/lib/security/transport/auth_filters.h +7 -3
  1399. data/src/core/lib/security/transport/client_auth_filter.cc +16 -25
  1400. data/src/core/lib/security/transport/server_auth_filter.cc +20 -31
  1401. data/src/core/lib/security/util/json_util.cc +4 -5
  1402. data/src/core/lib/security/util/json_util.h +1 -1
  1403. data/src/core/lib/slice/percent_encoding.cc +2 -5
  1404. data/src/core/lib/slice/slice.cc +4 -7
  1405. data/src/core/lib/slice/slice.h +6 -9
  1406. data/src/core/lib/slice/slice_buffer.cc +4 -7
  1407. data/src/core/lib/slice/slice_buffer.h +3 -4
  1408. data/src/core/lib/slice/slice_internal.h +3 -6
  1409. data/src/core/lib/slice/slice_refcount.h +8 -15
  1410. data/src/core/lib/slice/slice_string_helpers.cc +1 -1
  1411. data/src/core/lib/slice/slice_string_helpers.h +1 -2
  1412. data/src/core/lib/surface/byte_buffer.cc +1 -2
  1413. data/src/core/lib/surface/byte_buffer_reader.cc +3 -6
  1414. data/src/core/lib/surface/call.cc +161 -3826
  1415. data/src/core/lib/surface/call.h +63 -157
  1416. data/src/core/lib/surface/call_details.cc +4 -3
  1417. data/src/core/lib/surface/call_log_batch.cc +8 -11
  1418. data/src/core/lib/surface/call_test_only.h +1 -2
  1419. data/src/core/lib/surface/call_utils.cc +231 -0
  1420. data/src/core/lib/surface/call_utils.h +482 -0
  1421. data/src/core/lib/surface/channel.cc +41 -40
  1422. data/src/core/lib/surface/channel.h +21 -19
  1423. data/src/core/lib/surface/channel_create.cc +27 -12
  1424. data/src/core/lib/surface/channel_create.h +5 -5
  1425. data/src/core/lib/surface/channel_init.cc +269 -266
  1426. data/src/core/lib/surface/channel_init.h +172 -118
  1427. data/src/core/lib/surface/client_call.cc +427 -0
  1428. data/src/core/lib/surface/client_call.h +179 -0
  1429. data/src/core/lib/surface/completion_queue.cc +110 -106
  1430. data/src/core/lib/surface/completion_queue.h +3 -12
  1431. data/src/core/lib/surface/completion_queue_factory.cc +1 -3
  1432. data/src/core/lib/surface/event_string.cc +2 -2
  1433. data/src/core/lib/surface/event_string.h +2 -2
  1434. data/src/core/lib/surface/filter_stack_call.cc +1156 -0
  1435. data/src/core/lib/surface/filter_stack_call.h +366 -0
  1436. data/src/core/lib/surface/init.cc +55 -18
  1437. data/src/core/lib/surface/init.h +5 -0
  1438. data/src/core/lib/surface/lame_client.cc +11 -14
  1439. data/src/core/lib/surface/lame_client.h +6 -5
  1440. data/src/core/lib/surface/legacy_channel.cc +60 -46
  1441. data/src/core/lib/surface/legacy_channel.h +15 -25
  1442. data/src/core/lib/surface/metadata_array.cc +5 -5
  1443. data/src/core/lib/surface/server_call.cc +221 -0
  1444. data/src/core/lib/surface/server_call.h +168 -0
  1445. data/src/core/lib/surface/validate_metadata.cc +3 -4
  1446. data/src/core/lib/surface/validate_metadata.h +2 -5
  1447. data/src/core/lib/surface/version.cc +2 -2
  1448. data/src/core/lib/transport/bdp_estimator.cc +11 -19
  1449. data/src/core/lib/transport/bdp_estimator.h +10 -16
  1450. data/src/core/lib/transport/call_arena_allocator.cc +4 -18
  1451. data/src/core/lib/transport/call_arena_allocator.h +30 -12
  1452. data/src/core/lib/transport/call_destination.h +76 -0
  1453. data/src/core/lib/transport/call_filters.cc +61 -405
  1454. data/src/core/lib/transport/call_filters.h +802 -752
  1455. data/src/core/lib/transport/call_final_info.cc +2 -2
  1456. data/src/core/lib/transport/call_final_info.h +2 -2
  1457. data/src/core/lib/transport/call_spine.cc +98 -73
  1458. data/src/core/lib/transport/call_spine.h +183 -380
  1459. data/src/core/lib/transport/call_state.cc +39 -0
  1460. data/src/core/lib/transport/call_state.h +1061 -0
  1461. data/src/core/lib/transport/connectivity_state.cc +37 -45
  1462. data/src/core/lib/transport/connectivity_state.h +5 -8
  1463. data/src/core/lib/transport/error_utils.cc +3 -4
  1464. data/src/core/lib/transport/error_utils.h +4 -5
  1465. data/src/core/lib/transport/interception_chain.cc +147 -0
  1466. data/src/core/lib/transport/interception_chain.h +253 -0
  1467. data/src/core/lib/transport/message.cc +2 -2
  1468. data/src/core/lib/transport/message.h +5 -0
  1469. data/src/core/lib/transport/metadata.cc +27 -3
  1470. data/src/core/lib/transport/metadata.h +37 -2
  1471. data/src/core/lib/transport/metadata_batch.cc +1 -3
  1472. data/src/core/lib/transport/metadata_batch.h +64 -12
  1473. data/src/core/lib/transport/metadata_compression_traits.h +1 -2
  1474. data/src/core/lib/transport/metadata_info.h +1 -1
  1475. data/src/core/lib/transport/parsed_metadata.h +3 -5
  1476. data/src/core/lib/transport/simple_slice_based_metadata.h +1 -2
  1477. data/src/core/lib/transport/status_conversion.h +1 -1
  1478. data/src/core/lib/transport/timeout_encoding.cc +3 -4
  1479. data/src/core/lib/transport/timeout_encoding.h +2 -4
  1480. data/src/core/lib/transport/transport.cc +7 -12
  1481. data/src/core/lib/transport/transport.h +59 -56
  1482. data/src/core/lib/transport/transport_op_string.cc +4 -6
  1483. data/src/core/load_balancing/address_filtering.cc +2 -4
  1484. data/src/core/load_balancing/address_filtering.h +4 -5
  1485. data/src/core/load_balancing/backend_metric_data.h +2 -2
  1486. data/src/core/load_balancing/backend_metric_parser.cc +1 -2
  1487. data/src/core/load_balancing/backend_metric_parser.h +1 -3
  1488. data/src/core/load_balancing/child_policy_handler.cc +36 -40
  1489. data/src/core/load_balancing/child_policy_handler.h +4 -5
  1490. data/src/core/load_balancing/delegating_helper.h +6 -7
  1491. data/src/core/load_balancing/endpoint_list.cc +11 -13
  1492. data/src/core/load_balancing/endpoint_list.h +7 -9
  1493. data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +12 -6
  1494. data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +5 -2
  1495. data/src/core/load_balancing/grpclb/grpclb.cc +153 -187
  1496. data/src/core/load_balancing/grpclb/grpclb_balancer_addresses.cc +2 -3
  1497. data/src/core/load_balancing/grpclb/grpclb_client_stats.cc +2 -3
  1498. data/src/core/load_balancing/grpclb/grpclb_client_stats.h +5 -7
  1499. data/src/core/load_balancing/grpclb/load_balancer_api.cc +7 -10
  1500. data/src/core/load_balancing/grpclb/load_balancer_api.h +4 -6
  1501. data/src/core/load_balancing/health_check_client.cc +60 -80
  1502. data/src/core/load_balancing/health_check_client.h +3 -3
  1503. data/src/core/load_balancing/health_check_client_internal.h +8 -9
  1504. data/src/core/load_balancing/lb_policy.cc +5 -8
  1505. data/src/core/load_balancing/lb_policy.h +72 -38
  1506. data/src/core/load_balancing/lb_policy_factory.h +5 -6
  1507. data/src/core/load_balancing/lb_policy_registry.cc +5 -7
  1508. data/src/core/load_balancing/lb_policy_registry.h +5 -6
  1509. data/src/core/load_balancing/oob_backend_metric.cc +19 -25
  1510. data/src/core/load_balancing/oob_backend_metric.h +3 -3
  1511. data/src/core/load_balancing/oob_backend_metric_internal.h +8 -9
  1512. data/src/core/load_balancing/outlier_detection/outlier_detection.cc +139 -184
  1513. data/src/core/load_balancing/outlier_detection/outlier_detection.h +6 -8
  1514. data/src/core/load_balancing/pick_first/pick_first.cc +219 -303
  1515. data/src/core/load_balancing/priority/priority.cc +93 -137
  1516. data/src/core/load_balancing/ring_hash/ring_hash.cc +52 -76
  1517. data/src/core/load_balancing/ring_hash/ring_hash.h +6 -7
  1518. data/src/core/load_balancing/rls/rls.cc +340 -345
  1519. data/src/core/load_balancing/round_robin/round_robin.cc +56 -83
  1520. data/src/core/load_balancing/subchannel_interface.h +17 -6
  1521. data/src/core/load_balancing/weighted_round_robin/static_stride_scheduler.cc +2 -3
  1522. data/src/core/load_balancing/weighted_round_robin/static_stride_scheduler.h +1 -2
  1523. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +138 -155
  1524. data/src/core/load_balancing/weighted_target/weighted_target.cc +71 -107
  1525. data/src/core/load_balancing/xds/cds.cc +53 -69
  1526. data/src/core/load_balancing/xds/xds_cluster_impl.cc +178 -155
  1527. data/src/core/load_balancing/xds/xds_cluster_manager.cc +52 -84
  1528. data/src/core/load_balancing/xds/xds_override_host.cc +117 -179
  1529. data/src/core/load_balancing/xds/xds_override_host.h +6 -7
  1530. data/src/core/load_balancing/xds/xds_wrr_locality.cc +38 -48
  1531. data/src/core/plugin_registry/grpc_plugin_registry.cc +5 -7
  1532. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +5 -0
  1533. data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +85 -60
  1534. data/src/core/resolver/dns/c_ares/dns_resolver_ares.h +1 -2
  1535. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +4 -6
  1536. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -6
  1537. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +118 -100
  1538. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +166 -151
  1539. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +4 -18
  1540. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  1541. data/src/core/resolver/dns/dns_resolver_plugin.cc +9 -10
  1542. data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +52 -59
  1543. data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.h +3 -4
  1544. data/src/core/resolver/dns/event_engine/service_config_helper.cc +8 -10
  1545. data/src/core/resolver/dns/event_engine/service_config_helper.h +2 -2
  1546. data/src/core/resolver/dns/native/dns_resolver.cc +21 -30
  1547. data/src/core/resolver/endpoint_addresses.cc +2 -5
  1548. data/src/core/resolver/endpoint_addresses.h +5 -3
  1549. data/src/core/resolver/fake/fake_resolver.cc +7 -9
  1550. data/src/core/resolver/fake/fake_resolver.h +8 -9
  1551. data/src/core/resolver/google_c2p/google_c2p_resolver.cc +23 -25
  1552. data/src/core/resolver/polling_resolver.cc +39 -55
  1553. data/src/core/resolver/polling_resolver.h +8 -9
  1554. data/src/core/resolver/resolver.cc +2 -6
  1555. data/src/core/resolver/resolver.h +4 -10
  1556. data/src/core/resolver/resolver_factory.h +4 -5
  1557. data/src/core/resolver/resolver_registry.cc +8 -10
  1558. data/src/core/resolver/resolver_registry.h +4 -5
  1559. data/src/core/resolver/sockaddr/sockaddr_resolver.cc +7 -8
  1560. data/src/core/resolver/xds/xds_config.cc +95 -0
  1561. data/src/core/resolver/xds/xds_config.h +108 -0
  1562. data/src/core/resolver/xds/xds_dependency_manager.cc +82 -171
  1563. data/src/core/resolver/xds/xds_dependency_manager.h +6 -71
  1564. data/src/core/resolver/xds/xds_resolver.cc +123 -104
  1565. data/src/core/resolver/xds/xds_resolver_attributes.h +7 -4
  1566. data/src/core/server/server.cc +382 -484
  1567. data/src/core/server/server.h +48 -32
  1568. data/src/core/server/server_call_tracer_filter.cc +20 -19
  1569. data/src/core/server/server_config_selector.h +6 -7
  1570. data/src/core/server/server_config_selector_filter.cc +17 -12
  1571. data/src/core/server/server_interface.h +2 -0
  1572. data/src/core/server/xds_channel_stack_modifier.cc +4 -4
  1573. data/src/core/server/xds_channel_stack_modifier.h +6 -7
  1574. data/src/core/server/xds_server_config_fetcher.cc +63 -73
  1575. data/src/core/service_config/service_config.h +4 -6
  1576. data/src/core/service_config/service_config_call_data.h +21 -20
  1577. data/src/core/service_config/service_config_channel_arg_filter.cc +16 -12
  1578. data/src/core/service_config/service_config_impl.cc +8 -10
  1579. data/src/core/service_config/service_config_impl.h +5 -8
  1580. data/src/core/service_config/service_config_parser.cc +4 -8
  1581. data/src/core/service_config/service_config_parser.h +3 -5
  1582. data/src/core/{lib/channel → telemetry}/call_tracer.cc +56 -34
  1583. data/src/core/{lib/channel → telemetry}/call_tracer.h +51 -14
  1584. data/src/core/{lib/debug → telemetry}/histogram_view.cc +1 -1
  1585. data/src/core/{lib/debug → telemetry}/histogram_view.h +4 -5
  1586. data/src/core/telemetry/metrics.cc +177 -0
  1587. data/src/core/telemetry/metrics.h +565 -0
  1588. data/src/core/{lib/debug → telemetry}/stats.cc +2 -3
  1589. data/src/core/{lib/debug → telemetry}/stats.h +7 -9
  1590. data/src/core/{lib/debug → telemetry}/stats_data.cc +88 -3
  1591. data/src/core/{lib/debug → telemetry}/stats_data.h +73 -8
  1592. data/src/core/{lib/channel → telemetry}/tcp_tracer.h +4 -5
  1593. data/src/core/tsi/alts/crypt/aes_gcm.cc +5 -8
  1594. data/src/core/tsi/alts/crypt/gsec.cc +2 -3
  1595. data/src/core/tsi/alts/crypt/gsec.h +3 -4
  1596. data/src/core/tsi/alts/frame_protector/alts_counter.cc +1 -2
  1597. data/src/core/tsi/alts/frame_protector/alts_counter.h +2 -3
  1598. data/src/core/tsi/alts/frame_protector/alts_crypter.cc +1 -2
  1599. data/src/core/tsi/alts/frame_protector/alts_crypter.h +2 -3
  1600. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +16 -18
  1601. data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +1 -2
  1602. data/src/core/tsi/alts/frame_protector/frame_handler.cc +11 -12
  1603. data/src/core/tsi/alts/frame_protector/frame_handler.h +1 -2
  1604. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +41 -46
  1605. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +2 -4
  1606. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +1 -1
  1607. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +55 -57
  1608. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +3 -3
  1609. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +17 -24
  1610. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +1 -2
  1611. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +14 -17
  1612. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +1 -2
  1613. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +11 -12
  1614. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +1 -2
  1615. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +9 -11
  1616. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +3 -5
  1617. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +1 -2
  1618. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -13
  1619. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +1 -2
  1620. data/src/core/tsi/fake_transport_security.cc +27 -32
  1621. data/src/core/tsi/local_transport_security.cc +9 -10
  1622. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +9 -12
  1623. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +8 -10
  1624. data/src/core/tsi/ssl/session_cache/ssl_session.h +4 -5
  1625. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +7 -9
  1626. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +7 -8
  1627. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -4
  1628. data/src/core/tsi/ssl_transport_security.cc +126 -111
  1629. data/src/core/tsi/ssl_transport_security.h +4 -6
  1630. data/src/core/tsi/ssl_transport_security_utils.cc +77 -24
  1631. data/src/core/tsi/ssl_transport_security_utils.h +13 -4
  1632. data/src/core/tsi/ssl_types.h +1 -2
  1633. data/src/core/tsi/transport_security.cc +2 -7
  1634. data/src/core/tsi/transport_security.h +1 -4
  1635. data/src/core/tsi/transport_security_interface.h +1 -6
  1636. data/src/core/{lib/gpr → util}/alloc.cc +2 -6
  1637. data/src/core/{lib/gpr → util}/alloc.h +3 -3
  1638. data/src/core/{lib/gpr → util}/atm.cc +2 -3
  1639. data/src/core/{lib/gprpp → util}/atomic_utils.h +5 -5
  1640. data/src/core/{lib/avl → util}/avl.h +7 -8
  1641. data/src/core/{lib/backoff → util}/backoff.cc +10 -11
  1642. data/src/core/{lib/backoff → util}/backoff.h +8 -11
  1643. data/src/core/{lib/gprpp → util}/bitset.h +6 -7
  1644. data/src/core/{lib/gprpp → util}/chunked_vector.h +6 -8
  1645. data/src/core/{lib/gprpp → util}/construct_destruct.h +8 -7
  1646. data/src/core/{lib/gprpp → util}/cpp_impl_of.h +3 -3
  1647. data/src/core/{lib/gprpp → util}/crash.cc +4 -6
  1648. data/src/core/{lib/gprpp → util}/crash.h +5 -6
  1649. data/src/core/{lib/gprpp → util}/debug_location.h +11 -4
  1650. data/src/core/{lib/gprpp → util}/directory_reader.h +5 -5
  1651. data/src/core/{lib/gprpp → util}/down_cast.h +7 -8
  1652. data/src/core/{lib/gprpp → util}/dual_ref_counted.h +54 -43
  1653. data/src/core/util/dump_args.cc +54 -0
  1654. data/src/core/util/dump_args.h +122 -0
  1655. data/src/core/{lib/gprpp → util}/env.h +5 -5
  1656. data/src/core/{lib/debug → util}/event_log.cc +3 -4
  1657. data/src/core/{lib/debug → util}/event_log.h +7 -9
  1658. data/src/core/{lib/gprpp → util}/examine_stack.cc +1 -1
  1659. data/src/core/{lib/gprpp → util}/examine_stack.h +5 -5
  1660. data/src/core/{lib/gprpp → util}/fork.cc +4 -4
  1661. data/src/core/{lib/gprpp → util}/fork.h +5 -5
  1662. data/src/core/{ext/gcp/metadata_query.cc → util/gcp_metadata_query.cc} +31 -36
  1663. data/src/core/{ext/gcp/metadata_query.h → util/gcp_metadata_query.h} +13 -14
  1664. data/src/core/{lib/iomgr → util}/gethostname.h +3 -3
  1665. data/src/core/{lib/iomgr → util}/gethostname_fallback.cc +1 -1
  1666. data/src/core/{lib/iomgr → util}/gethostname_host_name_max.cc +2 -3
  1667. data/src/core/{lib/iomgr → util}/gethostname_sysconf.cc +2 -3
  1668. data/src/core/util/glob.cc +70 -0
  1669. data/src/core/util/glob.h +29 -0
  1670. data/src/core/{lib/gpr/time.cc → util/gpr_time.cc} +3 -6
  1671. data/src/core/{lib/iomgr → util}/grpc_if_nametoindex.h +4 -5
  1672. data/src/core/{lib/iomgr → util}/grpc_if_nametoindex_posix.cc +4 -6
  1673. data/src/core/{lib/iomgr → util}/grpc_if_nametoindex_unsupported.cc +5 -8
  1674. data/src/core/{lib/gprpp → util}/host_port.cc +2 -4
  1675. data/src/core/{lib/gprpp → util}/host_port.h +5 -5
  1676. data/src/core/{lib/http → util/http_client}/format_request.cc +4 -6
  1677. data/src/core/{lib/http → util/http_client}/format_request.h +4 -4
  1678. data/src/core/{lib/http → util/http_client}/httpcli.cc +43 -62
  1679. data/src/core/{lib/http → util/http_client}/httpcli.h +32 -30
  1680. data/src/core/{lib/http → util/http_client}/httpcli_security_connector.cc +17 -20
  1681. data/src/core/{lib/http → util/http_client}/httpcli_ssl_credentials.h +4 -4
  1682. data/src/core/{lib/http → util/http_client}/parser.cc +7 -11
  1683. data/src/core/{lib/http → util/http_client}/parser.h +5 -8
  1684. data/src/core/{lib/gprpp → util}/if_list.h +3 -3
  1685. data/src/core/{lib/gpr → util}/iphone/cpu.cc +1 -2
  1686. data/src/core/{lib → util}/json/json.h +3 -3
  1687. data/src/core/{lib → util}/json/json_args.h +5 -5
  1688. data/src/core/{lib → util}/json/json_channel_args.h +6 -7
  1689. data/src/core/{lib → util}/json/json_object_loader.cc +4 -4
  1690. data/src/core/{lib → util}/json/json_object_loader.h +11 -12
  1691. data/src/core/{lib → util}/json/json_reader.cc +4 -7
  1692. data/src/core/{lib → util}/json/json_reader.h +6 -7
  1693. data/src/core/{lib → util}/json/json_util.cc +5 -5
  1694. data/src/core/{lib → util}/json/json_util.h +7 -8
  1695. data/src/core/{lib → util}/json/json_writer.cc +2 -4
  1696. data/src/core/{lib → util}/json/json_writer.h +6 -6
  1697. data/src/core/util/latent_see.cc +142 -0
  1698. data/src/core/util/latent_see.h +327 -0
  1699. data/src/core/{lib/gpr → util}/linux/cpu.cc +11 -12
  1700. data/src/core/{lib/gprpp → util}/linux/env.cc +3 -3
  1701. data/src/core/{lib/gprpp → util}/load_file.cc +4 -6
  1702. data/src/core/{lib/gprpp → util}/load_file.h +5 -6
  1703. data/src/core/util/log.cc +127 -0
  1704. data/src/core/util/lru_cache.h +122 -0
  1705. data/src/core/{lib/gprpp → util}/manual_constructor.h +5 -6
  1706. data/src/core/{lib/gprpp → util}/match.h +6 -7
  1707. data/src/core/{lib/matchers → util}/matchers.cc +10 -3
  1708. data/src/core/{lib/matchers → util}/matchers.h +9 -5
  1709. data/src/core/{lib/gprpp → util}/memory.h +6 -6
  1710. data/src/core/{lib/gprpp → util}/mpscq.cc +1 -1
  1711. data/src/core/{lib/gprpp → util}/mpscq.h +6 -8
  1712. data/src/core/{lib/gpr → util}/msys/tmpfile.cc +5 -7
  1713. data/src/core/{lib/gprpp → util}/no_destruct.h +6 -6
  1714. data/src/core/{lib/gprpp → util}/notification.h +6 -7
  1715. data/src/core/{lib/gprpp → util}/orphanable.h +9 -9
  1716. data/src/core/{lib/gprpp → util}/overload.h +5 -5
  1717. data/src/core/{lib/gprpp → util}/packed_table.h +5 -5
  1718. data/src/core/{lib/gprpp → util}/per_cpu.cc +2 -2
  1719. data/src/core/{lib/gprpp → util}/per_cpu.h +5 -6
  1720. data/src/core/{lib/gpr → util}/posix/cpu.cc +6 -7
  1721. data/src/core/{lib/gprpp → util}/posix/directory_reader.cc +4 -4
  1722. data/src/core/{lib/gprpp → util}/posix/env.cc +1 -1
  1723. data/src/core/{lib/gprpp → util}/posix/stat.cc +7 -9
  1724. data/src/core/{lib/gpr → util}/posix/string.cc +2 -3
  1725. data/src/core/{lib/gpr → util}/posix/sync.cc +3 -6
  1726. data/src/core/{lib/gprpp → util}/posix/thd.cc +16 -20
  1727. data/src/core/{lib/gpr → util}/posix/time.cc +5 -7
  1728. data/src/core/{lib/gpr → util}/posix/tmpfile.cc +11 -13
  1729. data/src/core/{lib/backoff → util}/random_early_detection.cc +3 -3
  1730. data/src/core/{lib/backoff → util}/random_early_detection.h +4 -5
  1731. data/src/core/{lib/gprpp → util}/ref_counted.h +39 -32
  1732. data/src/core/{lib/gprpp → util}/ref_counted_ptr.h +6 -8
  1733. data/src/core/{lib/gprpp → util}/ref_counted_string.cc +3 -4
  1734. data/src/core/{lib/gprpp → util}/ref_counted_string.h +6 -8
  1735. data/src/core/util/ring_buffer.h +123 -0
  1736. data/src/core/{lib/gprpp → util}/single_set_ptr.h +10 -9
  1737. data/src/core/{lib/gprpp → util}/sorted_pack.h +6 -6
  1738. data/src/core/{lib/gpr → util}/spinlock.h +5 -7
  1739. data/src/core/{lib/gprpp → util}/stat.h +4 -5
  1740. data/src/core/{lib/gprpp → util}/status_helper.cc +16 -38
  1741. data/src/core/{lib/gprpp → util}/status_helper.h +8 -38
  1742. data/src/core/{lib/gprpp → util}/strerror.cc +2 -3
  1743. data/src/core/{lib/gprpp → util}/strerror.h +5 -5
  1744. data/src/core/{lib/gpr → util}/string.cc +13 -16
  1745. data/src/core/{lib/gpr → util}/string.h +4 -6
  1746. data/src/core/{lib/gpr → util}/sync.cc +3 -6
  1747. data/src/core/{lib/gprpp → util}/sync.h +7 -8
  1748. data/src/core/{lib/gpr → util}/sync_abseil.cc +5 -8
  1749. data/src/core/{lib/gprpp → util}/table.h +56 -22
  1750. data/src/core/{lib/gprpp → util}/tchar.cc +1 -1
  1751. data/src/core/{lib/gprpp → util}/tchar.h +3 -3
  1752. data/src/core/{lib/gprpp → util}/thd.h +5 -7
  1753. data/src/core/{lib/gprpp → util}/time.cc +8 -10
  1754. data/src/core/{lib/gprpp → util}/time.h +28 -27
  1755. data/src/core/{lib/gprpp → util}/time_averaged_stats.cc +1 -1
  1756. data/src/core/{lib/gprpp → util}/time_averaged_stats.h +3 -3
  1757. data/src/core/{lib/gpr → util}/time_precise.cc +7 -7
  1758. data/src/core/{lib/gpr → util}/time_precise.h +3 -4
  1759. data/src/core/{lib/gprpp → util}/time_util.cc +3 -5
  1760. data/src/core/{lib/gprpp → util}/time_util.h +5 -5
  1761. data/src/core/{lib/gpr → util}/tmpfile.h +3 -4
  1762. data/src/core/{lib/gprpp → util}/type_list.h +3 -3
  1763. data/src/core/util/unique_ptr_with_bitset.h +86 -0
  1764. data/src/core/{lib/gprpp → util}/unique_type_name.h +34 -15
  1765. data/src/core/{xds/grpc → util}/upb_utils.h +3 -5
  1766. data/src/core/{lib/uri/uri_parser.cc → util/uri.cc} +2 -4
  1767. data/src/core/{lib/uri/uri_parser.h → util/uri.h} +5 -5
  1768. data/src/core/{lib/gpr → util}/useful.h +23 -52
  1769. data/src/core/{lib/gprpp → util}/uuid_v4.cc +3 -3
  1770. data/src/core/{lib/gprpp → util}/uuid_v4.h +4 -5
  1771. data/src/core/{lib/gprpp → util}/validation_errors.cc +12 -4
  1772. data/src/core/{lib/gprpp → util}/validation_errors.h +15 -5
  1773. data/src/core/{lib/gpr → util}/windows/cpu.cc +1 -2
  1774. data/src/core/{lib/gprpp → util}/windows/directory_reader.cc +1 -3
  1775. data/src/core/{lib/gprpp → util}/windows/env.cc +2 -2
  1776. data/src/core/{lib/gprpp → util}/windows/stat.cc +6 -8
  1777. data/src/core/{lib/gpr → util}/windows/string.cc +3 -4
  1778. data/src/core/{lib/gpr → util}/windows/string_util.cc +6 -8
  1779. data/src/core/{lib/gpr → util}/windows/sync.cc +2 -4
  1780. data/src/core/{lib/gprpp → util}/windows/thd.cc +8 -10
  1781. data/src/core/{lib/gpr → util}/windows/time.cc +3 -6
  1782. data/src/core/{lib/gpr → util}/windows/tmpfile.cc +5 -7
  1783. data/src/core/{lib/gprpp → util}/work_serializer.cc +75 -95
  1784. data/src/core/{lib/gprpp → util}/work_serializer.h +8 -9
  1785. data/src/core/{lib/gprpp → util}/xxhash_inline.h +3 -3
  1786. data/src/core/xds/grpc/certificate_provider_store.cc +4 -5
  1787. data/src/core/xds/grpc/certificate_provider_store.h +12 -13
  1788. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +6 -7
  1789. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +9 -10
  1790. data/src/core/xds/grpc/xds_audit_logger_registry.cc +5 -5
  1791. data/src/core/xds/grpc/xds_audit_logger_registry.h +4 -5
  1792. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +8 -166
  1793. data/src/core/xds/grpc/xds_bootstrap_grpc.h +9 -39
  1794. data/src/core/xds/grpc/xds_certificate_provider.cc +4 -5
  1795. data/src/core/xds/grpc/xds_certificate_provider.h +12 -11
  1796. data/src/core/xds/grpc/xds_client_grpc.cc +98 -76
  1797. data/src/core/xds/grpc/xds_client_grpc.h +16 -10
  1798. data/src/core/xds/grpc/xds_cluster.cc +12 -737
  1799. data/src/core/xds/grpc/xds_cluster.h +36 -45
  1800. data/src/core/xds/grpc/xds_cluster_parser.cc +772 -0
  1801. data/src/core/xds/grpc/xds_cluster_parser.h +61 -0
  1802. data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +6 -9
  1803. data/src/core/xds/grpc/xds_cluster_specifier_plugin.h +5 -6
  1804. data/src/core/xds/grpc/xds_common_types.cc +33 -438
  1805. data/src/core/xds/grpc/xds_common_types.h +10 -28
  1806. data/src/core/xds/grpc/xds_common_types_parser.cc +503 -0
  1807. data/src/core/xds/grpc/xds_common_types_parser.h +76 -0
  1808. data/src/core/xds/grpc/xds_endpoint.cc +0 -420
  1809. data/src/core/xds/grpc/xds_endpoint.h +7 -29
  1810. data/src/core/xds/grpc/xds_endpoint_parser.cc +444 -0
  1811. data/src/core/xds/grpc/xds_endpoint_parser.h +47 -0
  1812. data/src/core/xds/grpc/xds_health_status.cc +0 -2
  1813. data/src/core/xds/grpc/xds_health_status.h +0 -3
  1814. data/src/core/xds/grpc/xds_http_fault_filter.cc +28 -16
  1815. data/src/core/xds/grpc/xds_http_fault_filter.h +11 -7
  1816. data/src/core/xds/grpc/{xds_http_filters.h → xds_http_filter.h} +21 -69
  1817. data/src/core/xds/grpc/{xds_http_filters.cc → xds_http_filter_registry.cc} +11 -5
  1818. data/src/core/xds/grpc/xds_http_filter_registry.h +104 -0
  1819. data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +141 -0
  1820. data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +60 -0
  1821. data/src/core/xds/grpc/xds_http_rbac_filter.cc +64 -49
  1822. data/src/core/xds/grpc/xds_http_rbac_filter.h +11 -7
  1823. data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +24 -11
  1824. data/src/core/xds/grpc/xds_http_stateful_session_filter.h +11 -7
  1825. data/src/core/xds/grpc/xds_lb_policy_registry.cc +22 -27
  1826. data/src/core/xds/grpc/xds_lb_policy_registry.h +4 -5
  1827. data/src/core/xds/grpc/xds_listener.cc +19 -986
  1828. data/src/core/xds/grpc/xds_listener.h +2 -35
  1829. data/src/core/xds/grpc/xds_listener_parser.cc +993 -0
  1830. data/src/core/xds/grpc/xds_listener_parser.h +59 -0
  1831. data/src/core/xds/grpc/xds_metadata.cc +62 -0
  1832. data/src/core/xds/grpc/xds_metadata.h +150 -0
  1833. data/src/core/xds/grpc/xds_metadata_parser.cc +184 -0
  1834. data/src/core/xds/grpc/xds_metadata_parser.h +35 -0
  1835. data/src/core/xds/grpc/xds_route_config.cc +2 -919
  1836. data/src/core/xds/grpc/xds_route_config.h +8 -41
  1837. data/src/core/xds/grpc/xds_route_config_parser.cc +962 -0
  1838. data/src/core/xds/grpc/xds_route_config_parser.h +77 -0
  1839. data/src/core/xds/grpc/xds_routing.cc +60 -27
  1840. data/src/core/xds/grpc/xds_routing.h +12 -6
  1841. data/src/core/xds/grpc/xds_server_grpc.cc +160 -0
  1842. data/src/core/xds/grpc/xds_server_grpc.h +63 -0
  1843. data/src/core/xds/grpc/xds_transport_grpc.cc +98 -55
  1844. data/src/core/xds/grpc/xds_transport_grpc.h +34 -23
  1845. data/src/core/xds/xds_client/lrs_client.cc +1292 -0
  1846. data/src/core/xds/xds_client/lrs_client.h +394 -0
  1847. data/src/core/xds/xds_client/xds_api.cc +38 -256
  1848. data/src/core/xds/xds_client/xds_api.h +13 -36
  1849. data/src/core/xds/xds_client/xds_backend_metric_propagation.cc +63 -0
  1850. data/src/core/xds/xds_client/xds_backend_metric_propagation.h +59 -0
  1851. data/src/core/xds/xds_client/xds_bootstrap.cc +3 -4
  1852. data/src/core/xds/xds_client/xds_bootstrap.h +3 -3
  1853. data/src/core/xds/xds_client/xds_client.cc +175 -793
  1854. data/src/core/xds/xds_client/xds_client.h +33 -89
  1855. data/src/core/xds/xds_client/xds_locality.h +102 -0
  1856. data/src/core/xds/xds_client/xds_metrics.h +2 -2
  1857. data/src/core/xds/xds_client/xds_resource_type.h +4 -5
  1858. data/src/core/xds/xds_client/xds_resource_type_impl.h +3 -4
  1859. data/src/core/xds/xds_client/xds_transport.h +29 -14
  1860. data/src/ruby/bin/math_pb.rb +1 -22
  1861. data/src/ruby/ext/grpc/extconf.rb +1 -1
  1862. data/src/ruby/ext/grpc/rb_byte_buffer.c +3 -3
  1863. data/src/ruby/ext/grpc/rb_call.c +15 -8
  1864. data/src/ruby/ext/grpc/rb_call_credentials.c +39 -33
  1865. data/src/ruby/ext/grpc/rb_channel.c +42 -37
  1866. data/src/ruby/ext/grpc/rb_channel_args.c +4 -4
  1867. data/src/ruby/ext/grpc/rb_channel_credentials.c +5 -6
  1868. data/src/ruby/ext/grpc/rb_channel_credentials.h +1 -2
  1869. data/src/ruby/ext/grpc/rb_completion_queue.c +18 -36
  1870. data/src/ruby/ext/grpc/rb_completion_queue.h +7 -1
  1871. data/src/ruby/ext/grpc/rb_compression_options.c +9 -10
  1872. data/src/ruby/ext/grpc/rb_event_thread.c +9 -9
  1873. data/src/ruby/ext/grpc/rb_grpc.c +16 -16
  1874. data/src/ruby/ext/grpc/rb_grpc.h +7 -0
  1875. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +6 -14
  1876. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +9 -21
  1877. data/src/ruby/ext/grpc/rb_server.c +47 -28
  1878. data/src/ruby/ext/grpc/rb_server_credentials.c +3 -3
  1879. data/src/ruby/ext/grpc/rb_server_credentials.h +1 -2
  1880. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +5 -6
  1881. data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +1 -2
  1882. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +4 -4
  1883. data/src/ruby/ext/grpc/rb_xds_server_credentials.h +1 -2
  1884. data/src/ruby/lib/grpc/generic/active_call.rb +8 -5
  1885. data/src/ruby/lib/grpc/logconfig.rb +13 -0
  1886. data/src/ruby/lib/grpc/version.rb +1 -1
  1887. data/src/ruby/pb/grpc/health/v1/health_pb.rb +1 -22
  1888. data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services_pb.rb +5 -5
  1889. data/src/ruby/pb/grpc/testing/metrics_pb.rb +10 -19
  1890. data/src/ruby/pb/grpc/testing/metrics_services_pb.rb +5 -5
  1891. data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +1 -22
  1892. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +1 -22
  1893. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +1 -22
  1894. data/src/ruby/spec/call_spec.rb +53 -40
  1895. data/src/ruby/spec/channel_spec.rb +4 -2
  1896. data/src/ruby/spec/client_server_spec.rb +148 -507
  1897. data/src/ruby/spec/generic/active_call_spec.rb +64 -86
  1898. data/src/ruby/spec/generic/client_stub_spec.rb +20 -20
  1899. data/src/ruby/spec/logconfig_spec.rb +30 -0
  1900. data/src/ruby/spec/support/services.rb +3 -0
  1901. data/third_party/abseil-cpp/absl/algorithm/container.h +57 -18
  1902. data/third_party/abseil-cpp/absl/base/attributes.h +84 -0
  1903. data/third_party/abseil-cpp/absl/base/config.h +32 -51
  1904. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +0 -16
  1905. data/third_party/abseil-cpp/absl/base/internal/nullability_impl.h +3 -1
  1906. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +13 -3
  1907. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +0 -12
  1908. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +4 -4
  1909. data/third_party/abseil-cpp/absl/base/macros.h +48 -0
  1910. data/third_party/abseil-cpp/absl/base/no_destructor.h +35 -40
  1911. data/third_party/abseil-cpp/absl/base/nullability.h +33 -7
  1912. data/third_party/abseil-cpp/absl/base/optimization.h +11 -0
  1913. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  1914. data/third_party/abseil-cpp/absl/base/prefetch.h +1 -1
  1915. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +68 -12
  1916. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +60 -6
  1917. data/third_party/abseil-cpp/absl/container/hash_container_defaults.h +45 -0
  1918. data/third_party/abseil-cpp/absl/container/inlined_vector.h +13 -0
  1919. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +20 -11
  1920. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +15 -16
  1921. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +34 -1
  1922. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +68 -1
  1923. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +50 -0
  1924. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +22 -7
  1925. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +26 -8
  1926. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +39 -35
  1927. data/third_party/abseil-cpp/absl/container/internal/layout.h +190 -74
  1928. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +8 -6
  1929. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +334 -71
  1930. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1299 -458
  1931. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +19 -17
  1932. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.cc +4 -3
  1933. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_fallback.cc +2 -1
  1934. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +12 -8
  1935. data/third_party/abseil-cpp/absl/crc/internal/crc_non_temporal_memcpy.cc +1 -1
  1936. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +11 -7
  1937. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +18 -17
  1938. data/third_party/abseil-cpp/absl/debugging/internal/bounded_utf8_length_sequence.h +126 -0
  1939. data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +258 -0
  1940. data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +55 -0
  1941. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1057 -86
  1942. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +3 -0
  1943. data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.cc +925 -0
  1944. data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.h +42 -0
  1945. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +43 -16
  1946. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +8 -7
  1947. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +10 -7
  1948. data/third_party/abseil-cpp/absl/debugging/internal/utf8_for_code_point.cc +70 -0
  1949. data/third_party/abseil-cpp/absl/debugging/internal/utf8_for_code_point.h +47 -0
  1950. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +11 -0
  1951. data/third_party/abseil-cpp/absl/flags/flag.h +2 -0
  1952. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +117 -30
  1953. data/third_party/abseil-cpp/absl/flags/internal/flag.h +192 -30
  1954. data/third_party/abseil-cpp/absl/flags/reflection.cc +10 -0
  1955. data/third_party/abseil-cpp/absl/functional/any_invocable.h +13 -3
  1956. data/third_party/abseil-cpp/absl/functional/bind_front.h +3 -2
  1957. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +7 -7
  1958. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +9 -9
  1959. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +1 -1
  1960. data/third_party/abseil-cpp/absl/hash/internal/hash.h +13 -3
  1961. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +60 -28
  1962. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +4 -0
  1963. data/third_party/abseil-cpp/absl/log/absl_vlog_is_on.h +3 -3
  1964. data/third_party/abseil-cpp/absl/log/globals.h +28 -15
  1965. data/third_party/abseil-cpp/absl/log/internal/check_op.cc +20 -0
  1966. data/third_party/abseil-cpp/absl/log/internal/check_op.h +63 -21
  1967. data/third_party/abseil-cpp/absl/log/internal/conditions.h +2 -2
  1968. data/third_party/abseil-cpp/absl/log/internal/log_impl.h +23 -23
  1969. data/third_party/abseil-cpp/absl/log/internal/log_message.cc +104 -47
  1970. data/third_party/abseil-cpp/absl/log/internal/log_message.h +23 -4
  1971. data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -10
  1972. data/third_party/abseil-cpp/absl/log/internal/strip.h +36 -0
  1973. data/third_party/abseil-cpp/absl/log/log.h +5 -1
  1974. data/third_party/abseil-cpp/absl/log/log_sink.h +11 -4
  1975. data/third_party/abseil-cpp/absl/log/vlog_is_on.h +3 -3
  1976. data/third_party/abseil-cpp/absl/meta/type_traits.h +138 -42
  1977. data/third_party/abseil-cpp/absl/numeric/int128.cc +0 -3
  1978. data/third_party/abseil-cpp/absl/numeric/int128.h +35 -5
  1979. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +14 -0
  1980. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +18 -0
  1981. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +6 -2
  1982. data/third_party/abseil-cpp/absl/random/beta_distribution.h +8 -8
  1983. data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +9 -7
  1984. data/third_party/abseil-cpp/absl/random/distributions.h +11 -11
  1985. data/third_party/abseil-cpp/absl/random/seed_sequences.h +2 -0
  1986. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +61 -2
  1987. data/third_party/abseil-cpp/absl/status/status.cc +0 -4
  1988. data/third_party/abseil-cpp/absl/status/status.h +4 -4
  1989. data/third_party/abseil-cpp/absl/status/statusor.h +108 -142
  1990. data/third_party/abseil-cpp/absl/strings/ascii.cc +32 -71
  1991. data/third_party/abseil-cpp/absl/strings/cord.cc +20 -15
  1992. data/third_party/abseil-cpp/absl/strings/cord.h +68 -7
  1993. data/third_party/abseil-cpp/absl/strings/escaping.cc +96 -21
  1994. data/third_party/abseil-cpp/absl/strings/escaping.h +25 -8
  1995. data/third_party/abseil-cpp/absl/strings/has_absl_stringify.h +1 -0
  1996. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +10 -0
  1997. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +29 -9
  1998. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +2 -2
  1999. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +19 -13
  2000. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +23 -13
  2001. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +24 -24
  2002. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +12 -7
  2003. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +9 -4
  2004. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +5 -2
  2005. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +23 -2
  2006. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +5 -1
  2007. data/third_party/abseil-cpp/absl/strings/numbers.cc +107 -333
  2008. data/third_party/abseil-cpp/absl/strings/numbers.h +12 -151
  2009. data/third_party/abseil-cpp/absl/strings/str_cat.cc +49 -142
  2010. data/third_party/abseil-cpp/absl/strings/str_cat.h +70 -85
  2011. data/third_party/abseil-cpp/absl/strings/str_format.h +1 -1
  2012. data/third_party/abseil-cpp/absl/strings/str_join.h +19 -5
  2013. data/third_party/abseil-cpp/absl/strings/str_split.h +2 -2
  2014. data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
  2015. data/third_party/abseil-cpp/absl/strings/substitute.cc +4 -0
  2016. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +11 -2
  2017. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +5 -0
  2018. data/third_party/abseil-cpp/absl/synchronization/mutex.h +5 -4
  2019. data/third_party/abseil-cpp/absl/time/civil_time.h +2 -2
  2020. data/third_party/abseil-cpp/absl/time/clock.cc +15 -1
  2021. data/third_party/abseil-cpp/absl/time/duration.cc +58 -53
  2022. data/third_party/abseil-cpp/absl/time/format.cc +2 -1
  2023. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +1 -1
  2024. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +0 -29
  2025. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +3 -3
  2026. data/third_party/abseil-cpp/absl/time/time.h +73 -29
  2027. data/third_party/abseil-cpp/absl/types/compare.h +505 -0
  2028. data/third_party/abseil-cpp/absl/types/internal/optional.h +2 -2
  2029. data/third_party/abseil-cpp/absl/types/internal/variant.h +55 -67
  2030. data/third_party/abseil-cpp/absl/types/optional.h +15 -18
  2031. data/third_party/abseil-cpp/absl/types/span.h +3 -2
  2032. data/third_party/abseil-cpp/absl/types/variant.h +19 -24
  2033. data/third_party/abseil-cpp/absl/utility/utility.h +3 -41
  2034. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +4 -0
  2035. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/rand/fork_detect.h → bcm_support.h} +51 -6
  2036. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +12 -12
  2037. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +3 -5
  2038. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +7 -0
  2039. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +43 -0
  2040. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +66 -41
  2041. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_linux.c +4 -1
  2042. data/third_party/boringssl-with-bazel/src/crypto/cpu_intel.c +71 -37
  2043. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +8 -62
  2044. data/third_party/boringssl-with-bazel/src/crypto/dilithium/dilithium.c +1539 -0
  2045. data/third_party/boringssl-with-bazel/src/crypto/dilithium/internal.h +58 -0
  2046. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +10 -3
  2047. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +0 -2
  2048. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +2 -0
  2049. data/third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c +160 -14
  2050. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/{aes.c → aes.c.inc} +21 -0
  2051. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +33 -7
  2052. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +84 -80
  2053. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm_interface.h +89 -0
  2054. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{div.c → div.c.inc} +146 -179
  2055. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{exponentiation.c → exponentiation.c.inc} +45 -1
  2056. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +33 -23
  2057. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{random.c → random.c.inc} +6 -8
  2058. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{sqrt.c → sqrt.c.inc} +1 -1
  2059. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/{e_aes.c → e_aes.c.inc} +9 -8
  2060. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{ec_key.c → ec_key.c.inc} +11 -7
  2061. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-nistz.c → p256-nistz.c.inc} +104 -7
  2062. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.h +65 -8
  2063. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/{ecdsa.c → ecdsa.c.inc} +52 -107
  2064. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +28 -11
  2065. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c +3 -6
  2066. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +1 -80
  2067. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/{rand.c → rand.c.inc} +26 -40
  2068. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/{padding.c → padding.c.inc} +2 -5
  2069. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/{rsa_impl.c → rsa_impl.c.inc} +1 -1
  2070. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/{fips.c → fips.c.inc} +6 -4
  2071. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/{self_check.c → self_check.c.inc} +9 -35
  2072. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/internal.h +2 -2
  2073. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/{service_indicator.c → service_indicator.c.inc} +2 -2
  2074. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +9 -4
  2075. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/{sha512.c → sha512.c.inc} +6 -0
  2076. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +293 -2
  2077. data/third_party/boringssl-with-bazel/src/crypto/internal.h +98 -24
  2078. data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +1 -0
  2079. data/third_party/boringssl-with-bazel/src/crypto/mem.c +7 -3
  2080. data/third_party/boringssl-with-bazel/src/crypto/mldsa/internal.h +73 -0
  2081. data/third_party/boringssl-with-bazel/src/crypto/mldsa/mldsa.c +1687 -0
  2082. data/third_party/boringssl-with-bazel/src/crypto/mlkem/internal.h +90 -0
  2083. data/third_party/boringssl-with-bazel/src/crypto/mlkem/mlkem.cc +1097 -0
  2084. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +4 -1
  2085. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +4 -5
  2086. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +2 -3
  2087. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +1 -1
  2088. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +1 -0
  2089. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +9 -1
  2090. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/rand → rand_extra}/fork_detect.c +26 -28
  2091. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/getentropy.c +9 -1
  2092. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/ios.c +9 -1
  2093. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +19 -3
  2094. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +26 -23
  2095. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/sysrand_internal.h +37 -0
  2096. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/trusty.c +9 -1
  2097. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/rand → rand_extra}/urandom.c +19 -19
  2098. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +8 -1
  2099. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/internal.h +2 -0
  2100. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +0 -4
  2101. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_utl.c +49 -16
  2102. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +0 -10
  2103. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +7 -17
  2104. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +14 -1
  2105. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +8 -6
  2106. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +14 -9
  2107. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +9 -11
  2108. data/third_party/boringssl-with-bazel/src/include/openssl/experimental/dilithium.h +129 -0
  2109. data/third_party/boringssl-with-bazel/src/include/openssl/experimental/kyber.h +10 -0
  2110. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +8 -6
  2111. data/third_party/boringssl-with-bazel/src/include/openssl/mldsa.h +136 -0
  2112. data/third_party/boringssl-with-bazel/src/include/openssl/mlkem.h +246 -0
  2113. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +3 -0
  2114. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +3 -4
  2115. data/third_party/boringssl-with-bazel/src/include/openssl/service_indicator.h +2 -2
  2116. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +48 -12
  2117. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +118 -38
  2118. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +0 -23
  2119. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +9 -12
  2120. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +6 -0
  2121. data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +10 -5
  2122. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +14 -2
  2123. data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +296 -61
  2124. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +24 -16
  2125. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +71 -39
  2126. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +16 -4
  2127. data/third_party/boringssl-with-bazel/src/ssl/internal.h +125 -38
  2128. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +44 -16
  2129. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +21 -1
  2130. data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +86 -1
  2131. data/third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc +7 -4
  2132. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +98 -3
  2133. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +69 -29
  2134. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +59 -20
  2135. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +7 -1
  2136. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +2 -1
  2137. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +18 -4
  2138. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +96 -34
  2139. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +15 -5
  2140. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +4 -24
  2141. data/third_party/upb/upb/base/string_view.h +1 -1
  2142. data/third_party/upb/upb/json/decode.c +21 -3
  2143. data/third_party/upb/upb/json/encode.c +2 -2
  2144. data/third_party/upb/upb/lex/round_trip.c +10 -0
  2145. data/third_party/upb/upb/mem/arena.c +79 -3
  2146. data/third_party/upb/upb/mem/arena.h +20 -9
  2147. data/third_party/upb/upb/mem/arena.hpp +5 -1
  2148. data/third_party/upb/upb/mem/internal/arena.h +11 -8
  2149. data/third_party/upb/upb/message/accessors.c +6 -7
  2150. data/third_party/upb/upb/message/accessors.h +180 -378
  2151. data/third_party/upb/upb/message/array.c +26 -3
  2152. data/third_party/upb/upb/message/array.h +17 -9
  2153. data/third_party/upb/upb/message/compat.c +5 -5
  2154. data/third_party/upb/upb/message/compat.h +3 -3
  2155. data/third_party/upb/upb/message/copy.c +23 -20
  2156. data/third_party/upb/upb/message/internal/accessors.h +610 -55
  2157. data/third_party/upb/upb/message/internal/array.h +23 -15
  2158. data/third_party/upb/upb/message/internal/compare_unknown.c +289 -0
  2159. data/third_party/upb/upb/message/internal/compare_unknown.h +49 -0
  2160. data/third_party/upb/upb/message/internal/extension.c +12 -12
  2161. data/third_party/upb/upb/message/internal/extension.h +9 -12
  2162. data/third_party/upb/upb/message/internal/map.h +15 -0
  2163. data/third_party/upb/upb/message/internal/map_sorter.h +4 -5
  2164. data/third_party/upb/upb/message/internal/message.c +19 -3
  2165. data/third_party/upb/upb/message/internal/message.h +11 -0
  2166. data/third_party/upb/upb/message/internal/tagged_ptr.h +5 -5
  2167. data/third_party/upb/upb/message/internal/types.h +41 -1
  2168. data/third_party/upb/upb/message/map.c +25 -0
  2169. data/third_party/upb/upb/message/map.h +11 -7
  2170. data/third_party/upb/upb/message/merge.c +38 -0
  2171. data/third_party/upb/upb/message/merge.h +26 -0
  2172. data/third_party/upb/upb/message/message.c +83 -4
  2173. data/third_party/upb/upb/message/message.h +16 -1
  2174. data/third_party/upb/upb/message/tagged_ptr.h +4 -8
  2175. data/third_party/upb/upb/message/value.h +26 -0
  2176. data/third_party/upb/upb/mini_descriptor/build_enum.c +3 -3
  2177. data/third_party/upb/upb/mini_descriptor/build_enum.h +6 -14
  2178. data/third_party/upb/upb/mini_descriptor/decode.c +19 -3
  2179. data/third_party/upb/upb/mini_descriptor/link.c +23 -21
  2180. data/third_party/upb/upb/mini_table/enum.h +2 -4
  2181. data/third_party/upb/upb/mini_table/extension.h +4 -12
  2182. data/third_party/upb/upb/mini_table/extension_registry.c +18 -0
  2183. data/third_party/upb/upb/mini_table/extension_registry.h +17 -0
  2184. data/third_party/upb/upb/mini_table/field.h +12 -38
  2185. data/third_party/upb/upb/mini_table/file.h +6 -19
  2186. data/third_party/upb/upb/mini_table/internal/enum.h +1 -1
  2187. data/third_party/upb/upb/mini_table/internal/extension.h +18 -9
  2188. data/third_party/upb/upb/mini_table/internal/field.h +23 -23
  2189. data/third_party/upb/upb/mini_table/internal/file.h +7 -7
  2190. data/third_party/upb/upb/mini_table/internal/message.c +21 -1
  2191. data/third_party/upb/upb/mini_table/internal/message.h +80 -36
  2192. data/third_party/upb/upb/mini_table/internal/sub.h +9 -4
  2193. data/third_party/upb/upb/mini_table/message.h +23 -22
  2194. data/third_party/upb/upb/mini_table/sub.h +4 -12
  2195. data/third_party/upb/upb/port/def.inc +83 -6
  2196. data/third_party/upb/upb/port/undef.inc +5 -1
  2197. data/third_party/upb/upb/reflection/def.hpp +35 -0
  2198. data/third_party/upb/upb/reflection/def_pool.h +2 -2
  2199. data/third_party/upb/upb/reflection/enum_def.c +5 -1
  2200. data/third_party/upb/upb/reflection/enum_def.h +1 -0
  2201. data/third_party/upb/upb/reflection/enum_value_def.c +3 -8
  2202. data/third_party/upb/upb/reflection/field_def.c +69 -29
  2203. data/third_party/upb/upb/reflection/field_def.h +4 -0
  2204. data/third_party/upb/upb/reflection/file_def.c +30 -4
  2205. data/third_party/upb/upb/reflection/file_def.h +3 -0
  2206. data/third_party/upb/upb/reflection/internal/upb_edition_defaults.h +1 -1
  2207. data/third_party/upb/upb/reflection/message.c +26 -9
  2208. data/third_party/upb/upb/reflection/message.h +2 -2
  2209. data/third_party/upb/upb/reflection/message_def.c +14 -9
  2210. data/third_party/upb/upb/reflection/method_def.h +8 -7
  2211. data/third_party/upb/upb/reflection/service_def.h +6 -5
  2212. data/third_party/upb/upb/text/encode.c +60 -389
  2213. data/third_party/upb/upb/text/encode.h +1 -11
  2214. data/third_party/upb/upb/text/internal/encode.c +180 -0
  2215. data/third_party/upb/upb/text/internal/encode.h +240 -0
  2216. data/third_party/upb/upb/text/options.h +22 -0
  2217. data/third_party/upb/upb/wire/decode.c +160 -94
  2218. data/third_party/upb/upb/wire/decode.h +14 -1
  2219. data/third_party/upb/upb/wire/encode.c +89 -48
  2220. data/third_party/upb/upb/wire/encode.h +12 -1
  2221. data/third_party/upb/upb/wire/eps_copy_input_stream.h +3 -3
  2222. data/third_party/upb/upb/wire/internal/decode_fast.c +28 -29
  2223. data/third_party/upb/upb/wire/internal/reader.h +3 -3
  2224. data/third_party/upb/upb/wire/reader.c +1 -2
  2225. data/third_party/upb/upb/wire/reader.h +4 -8
  2226. metadata +360 -275
  2227. data/src/core/client_channel/config_selector.cc +0 -60
  2228. data/src/core/ext/transport/chttp2/transport/http_trace.cc +0 -19
  2229. data/src/core/ext/transport/chttp2/transport/http_trace.h +0 -24
  2230. data/src/core/ext/transport/chttp2/transport/max_concurrent_streams_policy.cc +0 -45
  2231. data/src/core/ext/transport/chttp2/transport/max_concurrent_streams_policy.h +0 -67
  2232. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -23
  2233. data/src/core/handshaker/security/tsi_error.cc +0 -31
  2234. data/src/core/handshaker/security/tsi_error.h +0 -30
  2235. data/src/core/lib/channel/channel_stack_trace.cc +0 -19
  2236. data/src/core/lib/channel/channel_stack_trace.h +0 -24
  2237. data/src/core/lib/channel/context.h +0 -105
  2238. data/src/core/lib/channel/metrics.cc +0 -334
  2239. data/src/core/lib/channel/metrics.h +0 -365
  2240. data/src/core/lib/event_engine/trace.cc +0 -25
  2241. data/src/core/lib/event_engine/trace.h +0 -48
  2242. data/src/core/lib/gpr/android/log.cc +0 -79
  2243. data/src/core/lib/gpr/linux/log.cc +0 -114
  2244. data/src/core/lib/gpr/log.cc +0 -166
  2245. data/src/core/lib/gpr/posix/log.cc +0 -111
  2246. data/src/core/lib/gpr/windows/log.cc +0 -116
  2247. data/src/core/lib/iomgr/ev_windows.cc +0 -30
  2248. data/src/core/lib/promise/trace.cc +0 -20
  2249. data/src/core/lib/promise/trace.h +0 -24
  2250. data/src/core/lib/resource_quota/trace.cc +0 -19
  2251. data/src/core/lib/resource_quota/trace.h +0 -24
  2252. data/src/core/lib/slice/slice_refcount.cc +0 -20
  2253. data/src/core/lib/surface/api_trace.cc +0 -25
  2254. data/src/core/lib/surface/api_trace.h +0 -52
  2255. data/src/core/lib/surface/call_trace.h +0 -24
  2256. data/src/core/lib/surface/wait_for_cq_end_op.cc +0 -75
  2257. data/src/core/lib/surface/wait_for_cq_end_op.h +0 -72
  2258. data/src/core/lib/transport/batch_builder.cc +0 -172
  2259. data/src/core/lib/transport/batch_builder.h +0 -474
  2260. data/src/core/resolver/binder/binder_resolver.cc +0 -154
  2261. data/src/core/resolver/xds/xds_resolver_trace.cc +0 -25
  2262. data/src/core/resolver/xds/xds_resolver_trace.h +0 -30
  2263. data/src/core/xds/xds_client/xds_client_stats.cc +0 -172
  2264. data/src/core/xds/xds_client/xds_client_stats.h +0 -258
  2265. data/third_party/abseil-cpp/absl/strings/internal/has_absl_stringify.h +0 -44
  2266. data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +0 -122
  2267. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/{aes_nohw.c → aes_nohw.c.inc} +0 -0
  2268. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/{key_wrap.c → key_wrap.c.inc} +0 -0
  2269. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/{mode_wrappers.c → mode_wrappers.c.inc} +0 -0
  2270. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{add.c → add.c.inc} +0 -0
  2271. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/asm/{x86_64-gcc.c → x86_64-gcc.c.inc} +0 -0
  2272. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{bn.c → bn.c.inc} +0 -0
  2273. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{bytes.c → bytes.c.inc} +0 -0
  2274. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{cmp.c → cmp.c.inc} +0 -0
  2275. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{ctx.c → ctx.c.inc} +0 -0
  2276. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{div_extra.c → div_extra.c.inc} +0 -0
  2277. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{gcd.c → gcd.c.inc} +0 -0
  2278. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{gcd_extra.c → gcd_extra.c.inc} +0 -0
  2279. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{generic.c → generic.c.inc} +0 -0
  2280. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{jacobi.c → jacobi.c.inc} +0 -0
  2281. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{montgomery.c → montgomery.c.inc} +0 -0
  2282. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{montgomery_inv.c → montgomery_inv.c.inc} +0 -0
  2283. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{mul.c → mul.c.inc} +0 -0
  2284. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{prime.c → prime.c.inc} +0 -0
  2285. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{rsaz_exp.c → rsaz_exp.c.inc} +0 -0
  2286. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{shift.c → shift.c.inc} +0 -0
  2287. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/{aead.c → aead.c.inc} +0 -0
  2288. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/{cipher.c → cipher.c.inc} +0 -0
  2289. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/{e_aesccm.c → e_aesccm.c.inc} +0 -0
  2290. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cmac/{cmac.c → cmac.c.inc} +0 -0
  2291. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/{check.c → check.c.inc} +0 -0
  2292. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/{dh.c → dh.c.inc} +0 -0
  2293. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/{digest.c → digest.c.inc} +0 -0
  2294. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/{digests.c → digests.c.inc} +0 -0
  2295. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digestsign/{digestsign.c → digestsign.c.inc} +0 -0
  2296. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{ec.c → ec.c.inc} +0 -0
  2297. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{ec_montgomery.c → ec_montgomery.c.inc} +0 -0
  2298. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{felem.c → felem.c.inc} +0 -0
  2299. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{oct.c → oct.c.inc} +0 -0
  2300. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p224-64.c → p224-64.c.inc} +0 -0
  2301. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256.c → p256.c.inc} +0 -0
  2302. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{scalar.c → scalar.c.inc} +0 -0
  2303. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{simple.c → simple.c.inc} +0 -0
  2304. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{simple_mul.c → simple_mul.c.inc} +0 -0
  2305. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{util.c → util.c.inc} +0 -0
  2306. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{wnaf.c → wnaf.c.inc} +0 -0
  2307. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/{ecdh.c → ecdh.c.inc} +0 -0
  2308. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/hkdf/{hkdf.c → hkdf.c.inc} +0 -0
  2309. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/hmac/{hmac.c → hmac.c.inc} +0 -0
  2310. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/{md4.c → md4.c.inc} +0 -0
  2311. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/{md5.c → md5.c.inc} +0 -0
  2312. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/{cbc.c → cbc.c.inc} +0 -0
  2313. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/{cfb.c → cfb.c.inc} +0 -0
  2314. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/{ctr.c → ctr.c.inc} +0 -0
  2315. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/{gcm.c → gcm.c.inc} +0 -0
  2316. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/{gcm_nohw.c → gcm_nohw.c.inc} +0 -0
  2317. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/{ofb.c → ofb.c.inc} +0 -0
  2318. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/{polyval.c → polyval.c.inc} +0 -0
  2319. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/{ctrdrbg.c → ctrdrbg.c.inc} +0 -0
  2320. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/{blinding.c → blinding.c.inc} +0 -0
  2321. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/{rsa.c → rsa.c.inc} +0 -0
  2322. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/{sha1.c → sha1.c.inc} +0 -0
  2323. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/{sha256.c → sha256.c.inc} +0 -0
  2324. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/{kdf.c → kdf.c.inc} +0 -0
  2325. /data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/rand → rand_extra}/getrandom_fillin.h +0 -0
@@ -18,6 +18,19 @@
18
18
 
19
19
  #include "src/core/lib/surface/call.h"
20
20
 
21
+ #include <grpc/byte_buffer.h>
22
+ #include <grpc/compression.h>
23
+ #include <grpc/event_engine/event_engine.h>
24
+ #include <grpc/grpc.h>
25
+ #include <grpc/impl/call.h>
26
+ #include <grpc/impl/propagation_bits.h>
27
+ #include <grpc/slice.h>
28
+ #include <grpc/slice_buffer.h>
29
+ #include <grpc/status.h>
30
+ #include <grpc/support/alloc.h>
31
+ #include <grpc/support/atm.h>
32
+ #include <grpc/support/port_platform.h>
33
+ #include <grpc/support/string_util.h>
21
34
  #include <inttypes.h>
22
35
  #include <limits.h>
23
36
  #include <stdlib.h>
@@ -25,8 +38,10 @@
25
38
 
26
39
  #include <algorithm>
27
40
  #include <atomic>
41
+ #include <cstdint>
28
42
  #include <memory>
29
43
  #include <new>
44
+ #include <queue>
30
45
  #include <string>
31
46
  #include <type_traits>
32
47
  #include <utility>
@@ -34,58 +49,29 @@
34
49
 
35
50
  #include "absl/base/thread_annotations.h"
36
51
  #include "absl/log/check.h"
52
+ #include "absl/log/log.h"
37
53
  #include "absl/status/status.h"
38
54
  #include "absl/strings/str_cat.h"
39
55
  #include "absl/strings/str_format.h"
40
56
  #include "absl/strings/str_join.h"
41
57
  #include "absl/strings/string_view.h"
42
-
43
- #include <grpc/byte_buffer.h>
44
- #include <grpc/compression.h>
45
- #include <grpc/event_engine/event_engine.h>
46
- #include <grpc/grpc.h>
47
- #include <grpc/impl/call.h>
48
- #include <grpc/impl/propagation_bits.h>
49
- #include <grpc/slice.h>
50
- #include <grpc/slice_buffer.h>
51
- #include <grpc/status.h>
52
- #include <grpc/support/alloc.h>
53
- #include <grpc/support/atm.h>
54
- #include <grpc/support/log.h>
55
- #include <grpc/support/port_platform.h>
56
- #include <grpc/support/string_util.h>
57
-
58
58
  #include "src/core/channelz/channelz.h"
59
59
  #include "src/core/lib/channel/call_finalization.h"
60
- #include "src/core/lib/channel/call_tracer.h"
61
60
  #include "src/core/lib/channel/channel_stack.h"
62
- #include "src/core/lib/channel/context.h"
63
61
  #include "src/core/lib/channel/status_util.h"
64
62
  #include "src/core/lib/compression/compression_internal.h"
65
- #include "src/core/lib/debug/stats.h"
66
- #include "src/core/lib/debug/stats_data.h"
63
+ #include "src/core/lib/event_engine/event_engine_context.h"
67
64
  #include "src/core/lib/experiments/experiments.h"
68
- #include "src/core/lib/gpr/alloc.h"
69
- #include "src/core/lib/gpr/time_precise.h"
70
- #include "src/core/lib/gpr/useful.h"
71
- #include "src/core/lib/gprpp/bitset.h"
72
- #include "src/core/lib/gprpp/cpp_impl_of.h"
73
- #include "src/core/lib/gprpp/crash.h"
74
- #include "src/core/lib/gprpp/debug_location.h"
75
- #include "src/core/lib/gprpp/ref_counted.h"
76
- #include "src/core/lib/gprpp/ref_counted_ptr.h"
77
- #include "src/core/lib/gprpp/status_helper.h"
78
- #include "src/core/lib/gprpp/sync.h"
79
65
  #include "src/core/lib/iomgr/call_combiner.h"
80
66
  #include "src/core/lib/iomgr/exec_ctx.h"
81
67
  #include "src/core/lib/iomgr/polling_entity.h"
82
68
  #include "src/core/lib/promise/activity.h"
83
69
  #include "src/core/lib/promise/all_ok.h"
84
70
  #include "src/core/lib/promise/arena_promise.h"
71
+ #include "src/core/lib/promise/cancel_callback.h"
85
72
  #include "src/core/lib/promise/context.h"
86
73
  #include "src/core/lib/promise/latch.h"
87
74
  #include "src/core/lib/promise/map.h"
88
- #include "src/core/lib/promise/party.h"
89
75
  #include "src/core/lib/promise/pipe.h"
90
76
  #include "src/core/lib/promise/poll.h"
91
77
  #include "src/core/lib/promise/race.h"
@@ -95,22 +81,30 @@
95
81
  #include "src/core/lib/resource_quota/arena.h"
96
82
  #include "src/core/lib/slice/slice_buffer.h"
97
83
  #include "src/core/lib/slice/slice_internal.h"
98
- #include "src/core/lib/surface/api_trace.h"
99
84
  #include "src/core/lib/surface/call_test_only.h"
100
85
  #include "src/core/lib/surface/channel.h"
101
86
  #include "src/core/lib/surface/completion_queue.h"
102
87
  #include "src/core/lib/surface/validate_metadata.h"
103
- #include "src/core/lib/surface/wait_for_cq_end_op.h"
104
- #include "src/core/lib/transport/batch_builder.h"
105
88
  #include "src/core/lib/transport/error_utils.h"
89
+ #include "src/core/lib/transport/metadata.h"
106
90
  #include "src/core/lib/transport/metadata_batch.h"
107
91
  #include "src/core/lib/transport/transport.h"
108
92
  #include "src/core/server/server_interface.h"
109
-
110
- grpc_core::TraceFlag grpc_call_error_trace(false, "call_error");
111
- grpc_core::TraceFlag grpc_compression_trace(false, "compression");
112
- grpc_core::TraceFlag grpc_call_trace(false, "call");
113
- grpc_core::DebugOnlyTraceFlag grpc_call_refcount_trace(false, "call_refcount");
93
+ #include "src/core/telemetry/call_tracer.h"
94
+ #include "src/core/telemetry/stats.h"
95
+ #include "src/core/telemetry/stats_data.h"
96
+ #include "src/core/util/alloc.h"
97
+ #include "src/core/util/bitset.h"
98
+ #include "src/core/util/cpp_impl_of.h"
99
+ #include "src/core/util/crash.h"
100
+ #include "src/core/util/debug_location.h"
101
+ #include "src/core/util/match.h"
102
+ #include "src/core/util/ref_counted.h"
103
+ #include "src/core/util/ref_counted_ptr.h"
104
+ #include "src/core/util/status_helper.h"
105
+ #include "src/core/util/sync.h"
106
+ #include "src/core/util/time_precise.h"
107
+ #include "src/core/util/useful.h"
114
108
 
115
109
  namespace grpc_core {
116
110
 
@@ -121,10 +115,20 @@ using GrpcClosure = Closure;
121
115
  ///////////////////////////////////////////////////////////////////////////////
122
116
  // Call
123
117
 
118
+ Call::Call(bool is_client, Timestamp send_deadline, RefCountedPtr<Arena> arena)
119
+ : arena_(std::move(arena)),
120
+ send_deadline_(send_deadline),
121
+ is_client_(is_client) {
122
+ DCHECK_NE(arena_.get(), nullptr);
123
+ DCHECK_NE(arena_->GetContext<grpc_event_engine::experimental::EventEngine>(),
124
+ nullptr);
125
+ arena_->SetContext<Call>(this);
126
+ }
127
+
124
128
  Call::ParentCall* Call::GetOrCreateParentCall() {
125
129
  ParentCall* p = parent_call_.load(std::memory_order_acquire);
126
130
  if (p == nullptr) {
127
- p = arena_->New<ParentCall>();
131
+ p = arena()->New<ParentCall>();
128
132
  ParentCall* expected = nullptr;
129
133
  if (!parent_call_.compare_exchange_strong(expected, p,
130
134
  std::memory_order_release,
@@ -160,8 +164,8 @@ absl::Status Call::InitParent(Call* parent, uint32_t propagation_mask) {
160
164
  "Census tracing propagation requested without Census context "
161
165
  "propagation");
162
166
  }
163
- ContextSet(GRPC_CONTEXT_TRACING, parent->ContextGet(GRPC_CONTEXT_TRACING),
164
- nullptr);
167
+ arena()->SetContext<census_context>(
168
+ parent->arena()->GetContext<census_context>());
165
169
  } else if (propagation_mask & GRPC_PROPAGATE_CENSUS_STATS_CONTEXT) {
166
170
  return absl::UnknownError(
167
171
  "Census context propagation requested without Census tracing "
@@ -243,28 +247,6 @@ void Call::PropagateCancellationToChildren() {
243
247
  }
244
248
  }
245
249
 
246
- char* Call::GetPeer() {
247
- Slice peer_slice = GetPeerString();
248
- if (!peer_slice.empty()) {
249
- absl::string_view peer_string_view = peer_slice.as_string_view();
250
- char* peer_string =
251
- static_cast<char*>(gpr_malloc(peer_string_view.size() + 1));
252
- memcpy(peer_string, peer_string_view.data(), peer_string_view.size());
253
- peer_string[peer_string_view.size()] = '\0';
254
- return peer_string;
255
- }
256
- char* peer_string = grpc_channel_get_target(channel_->c_ptr());
257
- if (peer_string != nullptr) return peer_string;
258
- return gpr_strdup("unknown");
259
- }
260
-
261
- void Call::DeleteThis() {
262
- RefCountedPtr<Channel> channel = std::move(channel_);
263
- Arena* arena = arena_;
264
- this->~Call();
265
- channel->DestroyArena(arena);
266
- }
267
-
268
250
  void Call::PrepareOutgoingInitialMetadata(const grpc_op& op,
269
251
  grpc_metadata_batch& md) {
270
252
  // TODO(juanlishen): If the user has already specified a compression
@@ -279,7 +261,7 @@ void Call::PrepareOutgoingInitialMetadata(const grpc_op& op,
279
261
  op.data.send_initial_metadata.maybe_compression_level.level;
280
262
  level_set = true;
281
263
  } else {
282
- const grpc_compression_options copts = channel()->compression_options();
264
+ const grpc_compression_options copts = compression_options();
283
265
  if (copts.default_level.is_set) {
284
266
  level_set = true;
285
267
  effective_compression_level = copts.default_level.level;
@@ -305,26 +287,25 @@ void Call::ProcessIncomingInitialMetadata(grpc_metadata_batch& md) {
305
287
  Slice* peer_string = md.get_pointer(PeerString());
306
288
  if (peer_string != nullptr) SetPeerString(peer_string->Ref());
307
289
 
308
- incoming_compression_algorithm_ =
309
- md.Take(GrpcEncodingMetadata()).value_or(GRPC_COMPRESS_NONE);
290
+ SetIncomingCompressionAlgorithm(
291
+ md.Take(GrpcEncodingMetadata()).value_or(GRPC_COMPRESS_NONE));
310
292
  encodings_accepted_by_peer_ =
311
293
  md.Take(GrpcAcceptEncodingMetadata())
312
294
  .value_or(CompressionAlgorithmSet{GRPC_COMPRESS_NONE});
313
295
 
314
- const grpc_compression_options compression_options =
315
- channel_->compression_options();
296
+ const grpc_compression_options copts = compression_options();
316
297
  const grpc_compression_algorithm compression_algorithm =
317
- incoming_compression_algorithm_;
318
- if (GPR_UNLIKELY(!CompressionAlgorithmSet::FromUint32(
319
- compression_options.enabled_algorithms_bitset)
320
- .IsSet(compression_algorithm))) {
298
+ incoming_compression_algorithm();
299
+ if (GPR_UNLIKELY(
300
+ !CompressionAlgorithmSet::FromUint32(copts.enabled_algorithms_bitset)
301
+ .IsSet(compression_algorithm))) {
321
302
  // check if algorithm is supported by current channel config
322
303
  HandleCompressionAlgorithmDisabled(compression_algorithm);
323
304
  }
324
305
  // GRPC_COMPRESS_NONE is always set.
325
306
  DCHECK(encodings_accepted_by_peer_.IsSet(GRPC_COMPRESS_NONE));
326
307
  if (GPR_UNLIKELY(!encodings_accepted_by_peer_.IsSet(compression_algorithm))) {
327
- if (GRPC_TRACE_FLAG_ENABLED(grpc_compression_trace)) {
308
+ if (GRPC_TRACE_FLAG_ENABLED(compression)) {
328
309
  HandleCompressionAlgorithmNotAccepted(compression_algorithm);
329
310
  }
330
311
  }
@@ -334,11 +315,9 @@ void Call::HandleCompressionAlgorithmNotAccepted(
334
315
  grpc_compression_algorithm compression_algorithm) {
335
316
  const char* algo_name = nullptr;
336
317
  grpc_compression_algorithm_name(compression_algorithm, &algo_name);
337
- gpr_log(GPR_ERROR,
338
- "Compression algorithm ('%s') not present in the "
339
- "accepted encodings (%s)",
340
- algo_name,
341
- std::string(encodings_accepted_by_peer_.ToString()).c_str());
318
+ LOG(ERROR) << "Compression algorithm ('" << algo_name
319
+ << "') not present in the accepted encodings ("
320
+ << encodings_accepted_by_peer_.ToString() << ")";
342
321
  }
343
322
 
344
323
  void Call::HandleCompressionAlgorithmDisabled(
@@ -347,7 +326,7 @@ void Call::HandleCompressionAlgorithmDisabled(
347
326
  grpc_compression_algorithm_name(compression_algorithm, &algo_name);
348
327
  std::string error_msg =
349
328
  absl::StrFormat("Compression algorithm '%s' is disabled.", algo_name);
350
- gpr_log(GPR_ERROR, "%s", error_msg.c_str());
329
+ LOG(ERROR) << error_msg;
351
330
  CancelWithError(grpc_error_set_int(absl::UnimplementedError(error_msg),
352
331
  StatusIntProperty::kRpcStatus,
353
332
  GRPC_STATUS_UNIMPLEMENTED));
@@ -355,10 +334,9 @@ void Call::HandleCompressionAlgorithmDisabled(
355
334
 
356
335
  void Call::UpdateDeadline(Timestamp deadline) {
357
336
  ReleasableMutexLock lock(&deadline_mu_);
358
- if (grpc_call_trace.enabled()) {
359
- gpr_log(GPR_DEBUG, "[call %p] UpdateDeadline from=%s to=%s", this,
360
- deadline_.ToString().c_str(), deadline.ToString().c_str());
361
- }
337
+ GRPC_TRACE_LOG(call, INFO)
338
+ << "[call " << this << "] UpdateDeadline from=" << deadline_.ToString()
339
+ << " to=" << deadline.ToString();
362
340
  if (deadline >= deadline_) return;
363
341
  if (deadline < Timestamp::Now()) {
364
342
  lock.Release();
@@ -367,7 +345,8 @@ void Call::UpdateDeadline(Timestamp deadline) {
367
345
  StatusIntProperty::kRpcStatus, GRPC_STATUS_DEADLINE_EXCEEDED));
368
346
  return;
369
347
  }
370
- auto* const event_engine = channel()->event_engine();
348
+ auto* event_engine =
349
+ arena_->GetContext<grpc_event_engine::experimental::EventEngine>();
371
350
  if (deadline_ != Timestamp::InfFuture()) {
372
351
  if (!event_engine->Cancel(deadline_task_)) return;
373
352
  } else {
@@ -381,8 +360,10 @@ void Call::ResetDeadline() {
381
360
  {
382
361
  MutexLock lock(&deadline_mu_);
383
362
  if (deadline_ == Timestamp::InfFuture()) return;
384
- auto* const event_engine = channel()->event_engine();
385
- if (!event_engine->Cancel(deadline_task_)) return;
363
+ if (!arena_->GetContext<grpc_event_engine::experimental::EventEngine>()
364
+ ->Cancel(deadline_task_)) {
365
+ return;
366
+ }
386
367
  deadline_ = Timestamp::InfFuture();
387
368
  }
388
369
  InternalUnref("deadline[reset]");
@@ -391,3788 +372,139 @@ void Call::ResetDeadline() {
391
372
  void Call::Run() {
392
373
  ApplicationCallbackExecCtx callback_exec_ctx;
393
374
  ExecCtx exec_ctx;
375
+ GRPC_TRACE_LOG(call, INFO)
376
+ << "call deadline expired "
377
+ << GRPC_DUMP_ARGS(Timestamp::Now(), send_deadline_);
394
378
  CancelWithError(grpc_error_set_int(
395
379
  absl::DeadlineExceededError("Deadline Exceeded"),
396
380
  StatusIntProperty::kRpcStatus, GRPC_STATUS_DEADLINE_EXCEEDED));
397
381
  InternalUnref("deadline[run]");
398
382
  }
399
383
 
400
- ///////////////////////////////////////////////////////////////////////////////
401
- // FilterStackCall
402
- // To be removed once promise conversion is complete
403
-
404
- class FilterStackCall final : public Call {
405
- public:
406
- ~FilterStackCall() override {
407
- for (int i = 0; i < GRPC_CONTEXT_COUNT; ++i) {
408
- if (context_[i].destroy) {
409
- context_[i].destroy(context_[i].value);
410
- }
411
- }
412
- gpr_free(static_cast<void*>(const_cast<char*>(final_info_.error_string)));
413
- }
414
-
415
- bool Completed() override {
416
- return gpr_atm_acq_load(&received_final_op_atm_) != 0;
417
- }
418
-
419
- // TODO(ctiller): return absl::StatusOr<SomeSmartPointer<Call>>?
420
- static grpc_error_handle Create(grpc_call_create_args* args,
421
- grpc_call** out_call);
422
-
423
- static Call* FromTopElem(grpc_call_element* elem) {
424
- return FromCallStack(grpc_call_stack_from_top_element(elem));
425
- }
426
-
427
- grpc_call_stack* call_stack() override {
428
- return reinterpret_cast<grpc_call_stack*>(
429
- reinterpret_cast<char*>(this) +
430
- GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(*this)));
431
- }
432
-
433
- grpc_event_engine::experimental::EventEngine* event_engine() const override {
434
- return channel()->event_engine();
435
- }
436
-
437
- grpc_call_element* call_elem(size_t idx) {
438
- return grpc_call_stack_element(call_stack(), idx);
439
- }
440
-
441
- CallCombiner* call_combiner() { return &call_combiner_; }
442
-
443
- void CancelWithError(grpc_error_handle error) override;
444
- void SetCompletionQueue(grpc_completion_queue* cq) override;
445
- grpc_call_error StartBatch(const grpc_op* ops, size_t nops, void* notify_tag,
446
- bool is_notify_tag_closure) override;
447
- void ExternalRef() override { ext_ref_.Ref(); }
448
- void ExternalUnref() override;
449
- void InternalRef(const char* reason) override {
450
- GRPC_CALL_STACK_REF(call_stack(), reason);
451
- }
452
- void InternalUnref(const char* reason) override {
453
- GRPC_CALL_STACK_UNREF(call_stack(), reason);
454
- }
455
-
456
- void ContextSet(grpc_context_index elem, void* value,
457
- void (*destroy)(void* value)) override;
458
- void* ContextGet(grpc_context_index elem) const override {
459
- return context_[elem].value;
460
- }
461
-
462
- bool is_trailers_only() const override {
463
- bool result = is_trailers_only_;
464
- DCHECK(!result || recv_initial_metadata_.TransportSize() == 0);
465
- return result;
466
- }
467
-
468
- bool failed_before_recv_message() const override {
469
- return call_failed_before_recv_message_;
470
- }
471
-
472
- absl::string_view GetServerAuthority() const override {
473
- const Slice* authority_metadata =
474
- recv_initial_metadata_.get_pointer(HttpAuthorityMetadata());
475
- if (authority_metadata == nullptr) return "";
476
- return authority_metadata->as_string_view();
477
- }
478
-
479
- static size_t InitialSizeEstimate() {
480
- return sizeof(FilterStackCall) +
481
- sizeof(BatchControl) * kMaxConcurrentBatches;
482
- }
483
-
484
- private:
485
- class ScopedContext : public promise_detail::Context<Arena> {
486
- public:
487
- explicit ScopedContext(FilterStackCall* call)
488
- : promise_detail::Context<Arena>(call->arena()) {}
489
- };
490
-
491
- static constexpr gpr_atm kRecvNone = 0;
492
- static constexpr gpr_atm kRecvInitialMetadataFirst = 1;
493
-
494
- enum class PendingOp {
495
- kRecvMessage,
496
- kRecvInitialMetadata,
497
- kRecvTrailingMetadata,
498
- kSends
499
- };
500
- static intptr_t PendingOpMask(PendingOp op) {
501
- return static_cast<intptr_t>(1) << static_cast<intptr_t>(op);
502
- }
503
- static std::string PendingOpString(intptr_t pending_ops) {
504
- std::vector<absl::string_view> pending_op_strings;
505
- if (pending_ops & PendingOpMask(PendingOp::kRecvMessage)) {
506
- pending_op_strings.push_back("kRecvMessage");
507
- }
508
- if (pending_ops & PendingOpMask(PendingOp::kRecvInitialMetadata)) {
509
- pending_op_strings.push_back("kRecvInitialMetadata");
510
- }
511
- if (pending_ops & PendingOpMask(PendingOp::kRecvTrailingMetadata)) {
512
- pending_op_strings.push_back("kRecvTrailingMetadata");
513
- }
514
- if (pending_ops & PendingOpMask(PendingOp::kSends)) {
515
- pending_op_strings.push_back("kSends");
516
- }
517
- return absl::StrCat("{", absl::StrJoin(pending_op_strings, ","), "}");
518
- }
519
- struct BatchControl {
520
- FilterStackCall* call_ = nullptr;
521
- CallTracerAnnotationInterface* call_tracer_ = nullptr;
522
- grpc_transport_stream_op_batch op_;
523
- // Share memory for cq_completion and notify_tag as they are never needed
524
- // simultaneously. Each byte used in this data structure count as six bytes
525
- // per call, so any savings we can make are worthwhile,
526
-
527
- // We use notify_tag to determine whether or not to send notification to the
528
- // completion queue. Once we've made that determination, we can reuse the
529
- // memory for cq_completion.
530
- union {
531
- grpc_cq_completion cq_completion;
532
- struct {
533
- // Any given op indicates completion by either (a) calling a closure or
534
- // (b) sending a notification on the call's completion queue. If
535
- // \a is_closure is true, \a tag indicates a closure to be invoked;
536
- // otherwise, \a tag indicates the tag to be used in the notification to
537
- // be sent to the completion queue.
538
- void* tag;
539
- bool is_closure;
540
- } notify_tag;
541
- } completion_data_;
542
- grpc_closure start_batch_;
543
- grpc_closure finish_batch_;
544
- std::atomic<intptr_t> ops_pending_{0};
545
- AtomicError batch_error_;
546
- void set_pending_ops(uintptr_t ops) {
547
- ops_pending_.store(ops, std::memory_order_release);
548
- }
549
- bool completed_batch_step(PendingOp op) {
550
- auto mask = PendingOpMask(op);
551
- auto r = ops_pending_.fetch_sub(mask, std::memory_order_acq_rel);
552
- if (grpc_call_trace.enabled()) {
553
- gpr_log(GPR_DEBUG, "BATCH:%p COMPLETE:%s REMAINING:%s (tag:%p)", this,
554
- PendingOpString(mask).c_str(),
555
- PendingOpString(r & ~mask).c_str(),
556
- completion_data_.notify_tag.tag);
557
- }
558
- CHECK_NE((r & mask), 0);
559
- return r == mask;
560
- }
561
-
562
- void PostCompletion();
563
- void FinishStep(PendingOp op);
564
- void ProcessDataAfterMetadata();
565
- void ReceivingStreamReady(grpc_error_handle error);
566
- void ReceivingInitialMetadataReady(grpc_error_handle error);
567
- void ReceivingTrailingMetadataReady(grpc_error_handle error);
568
- void FinishBatch(grpc_error_handle error);
569
- };
570
-
571
- FilterStackCall(Arena* arena, const grpc_call_create_args& args)
572
- : Call(arena, args.server_transport_data == nullptr, args.send_deadline,
573
- args.channel->Ref()),
574
- cq_(args.cq),
575
- stream_op_payload_(context_) {
576
- context_[GRPC_CONTEXT_CALL].value = this;
577
- }
578
-
579
- static void ReleaseCall(void* call, grpc_error_handle);
580
- static void DestroyCall(void* call, grpc_error_handle);
581
-
582
- static FilterStackCall* FromCallStack(grpc_call_stack* call_stack) {
583
- return reinterpret_cast<FilterStackCall*>(
584
- reinterpret_cast<char*>(call_stack) -
585
- GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(FilterStackCall)));
586
- }
587
-
588
- void ExecuteBatch(grpc_transport_stream_op_batch* batch,
589
- grpc_closure* start_batch_closure);
590
- void SetFinalStatus(grpc_error_handle error);
591
- BatchControl* ReuseOrAllocateBatchControl(const grpc_op* ops);
592
- bool PrepareApplicationMetadata(size_t count, grpc_metadata* metadata,
593
- bool is_trailing);
594
- void PublishAppMetadata(grpc_metadata_batch* b, bool is_trailing);
595
- void RecvInitialFilter(grpc_metadata_batch* b);
596
- void RecvTrailingFilter(grpc_metadata_batch* b,
597
- grpc_error_handle batch_error);
598
-
599
- RefCount ext_ref_;
600
- CallCombiner call_combiner_;
601
- grpc_completion_queue* cq_;
602
- grpc_polling_entity pollent_;
603
-
604
- /// has grpc_call_unref been called
605
- bool destroy_called_ = false;
606
- // Trailers-only response status
607
- bool is_trailers_only_ = false;
608
- /// which ops are in-flight
609
- bool sent_initial_metadata_ = false;
610
- bool sending_message_ = false;
611
- bool sent_final_op_ = false;
612
- bool received_initial_metadata_ = false;
613
- bool receiving_message_ = false;
614
- bool requested_final_op_ = false;
615
- gpr_atm received_final_op_atm_ = 0;
616
-
617
- BatchControl* active_batches_[kMaxConcurrentBatches] = {};
618
- grpc_transport_stream_op_batch_payload stream_op_payload_;
619
-
620
- // first idx: is_receiving, second idx: is_trailing
621
- grpc_metadata_batch send_initial_metadata_;
622
- grpc_metadata_batch send_trailing_metadata_;
623
- grpc_metadata_batch recv_initial_metadata_;
624
- grpc_metadata_batch recv_trailing_metadata_;
625
-
626
- // Buffered read metadata waiting to be returned to the application.
627
- // Element 0 is initial metadata, element 1 is trailing metadata.
628
- grpc_metadata_array* buffered_metadata_[2] = {};
629
-
630
- // Call data useful used for reporting. Only valid after the call has
631
- // completed
632
- grpc_call_final_info final_info_;
633
-
634
- // Contexts for various subsystems (security, tracing, ...).
635
- grpc_call_context_element context_[GRPC_CONTEXT_COUNT] = {};
636
-
637
- SliceBuffer send_slice_buffer_;
638
- absl::optional<SliceBuffer> receiving_slice_buffer_;
639
- uint32_t receiving_stream_flags_;
640
-
641
- bool call_failed_before_recv_message_ = false;
642
- grpc_byte_buffer** receiving_buffer_ = nullptr;
643
- grpc_slice receiving_slice_ = grpc_empty_slice();
644
- grpc_closure receiving_stream_ready_;
645
- grpc_closure receiving_initial_metadata_ready_;
646
- grpc_closure receiving_trailing_metadata_ready_;
647
- // Status about operation of call
648
- bool sent_server_trailing_metadata_ = false;
649
- gpr_atm cancelled_with_error_ = 0;
650
-
651
- grpc_closure release_call_;
652
-
653
- union {
654
- struct {
655
- grpc_status_code* status;
656
- grpc_slice* status_details;
657
- const char** error_string;
658
- } client;
659
- struct {
660
- int* cancelled;
661
- // backpointer to owning server if this is a server side call.
662
- ServerInterface* core_server;
663
- } server;
664
- } final_op_;
665
- AtomicError status_error_;
666
-
667
- // recv_state can contain one of the following values:
668
- // RECV_NONE : : no initial metadata and messages received
669
- // RECV_INITIAL_METADATA_FIRST : received initial metadata first
670
- // a batch_control* : received messages first
671
-
672
- // +------1------RECV_NONE------3-----+
673
- // | |
674
- // | |
675
- // v v
676
- // RECV_INITIAL_METADATA_FIRST receiving_stream_ready_bctlp
677
- // | ^ | ^
678
- // | | | |
679
- // +-----2-----+ +-----4-----+
680
-
681
- // For 1, 4: See receiving_initial_metadata_ready() function
682
- // For 2, 3: See receiving_stream_ready() function
683
- gpr_atm recv_state_ = 0;
684
- };
685
-
686
- grpc_error_handle FilterStackCall::Create(grpc_call_create_args* args,
687
- grpc_call** out_call) {
688
- Channel* channel = args->channel.get();
689
-
690
- auto add_init_error = [](grpc_error_handle* composite,
691
- grpc_error_handle new_err) {
692
- if (new_err.ok()) return;
693
- if (composite->ok()) {
694
- *composite = GRPC_ERROR_CREATE("Call creation failed");
695
- }
696
- *composite = grpc_error_add_child(*composite, new_err);
697
- };
698
-
699
- FilterStackCall* call;
700
- grpc_error_handle error;
701
- grpc_channel_stack* channel_stack = channel->channel_stack();
702
- size_t call_alloc_size =
703
- GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(FilterStackCall)) +
704
- channel_stack->call_stack_size;
705
-
706
- Arena* arena = channel->CreateArena();
707
- call = new (arena->Alloc(call_alloc_size)) FilterStackCall(arena, *args);
708
- DCHECK(FromC(call->c_ptr()) == call);
709
- DCHECK(FromCallStack(call->call_stack()) == call);
710
- *out_call = call->c_ptr();
711
- grpc_slice path = grpc_empty_slice();
712
- ScopedContext ctx(call);
713
- if (call->is_client()) {
714
- call->final_op_.client.status_details = nullptr;
715
- call->final_op_.client.status = nullptr;
716
- call->final_op_.client.error_string = nullptr;
717
- global_stats().IncrementClientCallsCreated();
718
- path = CSliceRef(args->path->c_slice());
719
- call->send_initial_metadata_.Set(HttpPathMetadata(),
720
- std::move(*args->path));
721
- if (args->authority.has_value()) {
722
- call->send_initial_metadata_.Set(HttpAuthorityMetadata(),
723
- std::move(*args->authority));
724
- }
725
- call->send_initial_metadata_.Set(
726
- GrpcRegisteredMethod(), reinterpret_cast<void*>(static_cast<uintptr_t>(
727
- args->registered_method)));
728
- channel_stack->stats_plugin_group->AddClientCallTracers(
729
- Slice(CSliceRef(path)), args->registered_method, call->context_);
730
- } else {
731
- global_stats().IncrementServerCallsCreated();
732
- call->final_op_.server.cancelled = nullptr;
733
- call->final_op_.server.core_server = args->server;
734
- // TODO(yashykt): In the future, we want to also enable stats and trace
735
- // collecting from when the call is created at the transport. The idea is
736
- // that the transport would create the call tracer and pass it in as part of
737
- // the metadata.
738
- // TODO(yijiem): OpenCensus and internal Census is still using this way to
739
- // set server call tracer. We need to refactor them to stats plugins
740
- // (including removing the client channel filters).
741
- if (args->server != nullptr &&
742
- args->server->server_call_tracer_factory() != nullptr) {
743
- auto* server_call_tracer =
744
- args->server->server_call_tracer_factory()->CreateNewServerCallTracer(
745
- arena, args->server->channel_args());
746
- if (server_call_tracer != nullptr) {
747
- // Note that we are setting both
748
- // GRPC_CONTEXT_CALL_TRACER_ANNOTATION_INTERFACE and
749
- // GRPC_CONTEXT_CALL_TRACER as a matter of convenience. In the future
750
- // promise-based world, we would just a single tracer object for each
751
- // stack (call, subchannel_call, server_call.)
752
- call->ContextSet(GRPC_CONTEXT_CALL_TRACER_ANNOTATION_INTERFACE,
753
- server_call_tracer, nullptr);
754
- call->ContextSet(GRPC_CONTEXT_CALL_TRACER, server_call_tracer, nullptr);
755
- }
756
- }
757
- channel_stack->stats_plugin_group->AddServerCallTracers(call->context_);
758
- }
759
-
760
- Call* parent = Call::FromC(args->parent);
761
- if (parent != nullptr) {
762
- add_init_error(&error, absl_status_to_grpc_error(call->InitParent(
763
- parent, args->propagation_mask)));
764
- }
765
- // initial refcount dropped by grpc_call_unref
766
- grpc_call_element_args call_args = {
767
- call->call_stack(), args->server_transport_data,
768
- call->context_, path,
769
- call->start_time(), call->send_deadline(),
770
- call->arena(), &call->call_combiner_};
771
- add_init_error(&error, grpc_call_stack_init(channel_stack, 1, DestroyCall,
772
- call, &call_args));
773
- // Publish this call to parent only after the call stack has been initialized.
774
- if (parent != nullptr) {
775
- call->PublishToParent(parent);
776
- }
777
-
778
- if (!error.ok()) {
779
- call->CancelWithError(error);
780
- }
781
- if (args->cq != nullptr) {
782
- CHECK(args->pollset_set_alternative == nullptr)
783
- << "Only one of 'cq' and 'pollset_set_alternative' should be "
784
- "non-nullptr.";
785
- GRPC_CQ_INTERNAL_REF(args->cq, "bind");
786
- call->pollent_ =
787
- grpc_polling_entity_create_from_pollset(grpc_cq_pollset(args->cq));
788
- }
789
- if (args->pollset_set_alternative != nullptr) {
790
- call->pollent_ = grpc_polling_entity_create_from_pollset_set(
791
- args->pollset_set_alternative);
792
- }
793
- if (!grpc_polling_entity_is_empty(&call->pollent_)) {
794
- grpc_call_stack_set_pollset_or_pollset_set(call->call_stack(),
795
- &call->pollent_);
796
- }
797
-
798
- if (call->is_client()) {
799
- channelz::ChannelNode* channelz_channel = channel->channelz_node();
800
- if (channelz_channel != nullptr) {
801
- channelz_channel->RecordCallStarted();
802
- }
803
- } else if (call->final_op_.server.core_server != nullptr) {
804
- channelz::ServerNode* channelz_node =
805
- call->final_op_.server.core_server->channelz_node();
806
- if (channelz_node != nullptr) {
807
- channelz_node->RecordCallStarted();
808
- }
809
- }
810
-
811
- if (args->send_deadline != Timestamp::InfFuture()) {
812
- call->UpdateDeadline(args->send_deadline);
813
- }
814
-
815
- CSliceUnref(path);
816
-
817
- return error;
818
- }
819
-
820
- void FilterStackCall::SetCompletionQueue(grpc_completion_queue* cq) {
821
- CHECK(cq);
384
+ } // namespace grpc_core
822
385
 
823
- if (grpc_polling_entity_pollset_set(&pollent_) != nullptr) {
824
- Crash("A pollset_set is already registered for this call.");
825
- }
826
- cq_ = cq;
827
- GRPC_CQ_INTERNAL_REF(cq, "bind");
828
- pollent_ = grpc_polling_entity_create_from_pollset(grpc_cq_pollset(cq));
829
- grpc_call_stack_set_pollset_or_pollset_set(call_stack(), &pollent_);
830
- }
386
+ ///////////////////////////////////////////////////////////////////////////////
387
+ // C-based API
831
388
 
832
- void FilterStackCall::ReleaseCall(void* call, grpc_error_handle /*error*/) {
833
- static_cast<FilterStackCall*>(call)->DeleteThis();
389
+ void* grpc_call_arena_alloc(grpc_call* call, size_t size) {
390
+ grpc_core::ExecCtx exec_ctx;
391
+ return grpc_core::Call::FromC(call)->arena()->Alloc(size);
834
392
  }
835
393
 
836
- void FilterStackCall::DestroyCall(void* call, grpc_error_handle /*error*/) {
837
- auto* c = static_cast<FilterStackCall*>(call);
838
- c->recv_initial_metadata_.Clear();
839
- c->recv_trailing_metadata_.Clear();
840
- c->receiving_slice_buffer_.reset();
841
- ParentCall* pc = c->parent_call();
842
- if (pc != nullptr) {
843
- pc->~ParentCall();
844
- }
845
- if (c->cq_) {
846
- GRPC_CQ_INTERNAL_UNREF(c->cq_, "bind");
847
- }
848
-
849
- grpc_error_handle status_error = c->status_error_.get();
850
- grpc_error_get_status(status_error, c->send_deadline(),
851
- &c->final_info_.final_status, nullptr, nullptr,
852
- &(c->final_info_.error_string));
853
- c->status_error_.set(absl::OkStatus());
854
- c->final_info_.stats.latency =
855
- gpr_cycle_counter_sub(gpr_get_cycle_counter(), c->start_time());
856
- grpc_call_stack_destroy(c->call_stack(), &c->final_info_,
857
- GRPC_CLOSURE_INIT(&c->release_call_, ReleaseCall, c,
858
- grpc_schedule_on_exec_ctx));
394
+ void grpc_call_set_completion_queue(grpc_call* call,
395
+ grpc_completion_queue* cq) {
396
+ grpc_core::Call::FromC(call)->SetCompletionQueue(cq);
859
397
  }
860
398
 
861
- void FilterStackCall::ExternalUnref() {
862
- if (GPR_LIKELY(!ext_ref_.Unref())) return;
863
-
864
- ApplicationCallbackExecCtx callback_exec_ctx;
865
- ExecCtx exec_ctx;
866
-
867
- GRPC_API_TRACE("grpc_call_unref(c=%p)", 1, (this));
868
-
869
- MaybeUnpublishFromParent();
870
-
871
- CHECK(!destroy_called_);
872
- destroy_called_ = true;
873
- bool cancel = gpr_atm_acq_load(&received_final_op_atm_) == 0;
874
- if (cancel) {
875
- CancelWithError(absl::CancelledError());
876
- } else {
877
- // Unset the call combiner cancellation closure. This has the
878
- // effect of scheduling the previously set cancellation closure, if
879
- // any, so that it can release any internal references it may be
880
- // holding to the call stack.
881
- call_combiner_.SetNotifyOnCancel(nullptr);
882
- }
883
- InternalUnref("destroy");
884
- }
399
+ void grpc_call_ref(grpc_call* c) { grpc_core::Call::FromC(c)->ExternalRef(); }
885
400
 
886
- // start_batch_closure points to a caller-allocated closure to be used
887
- // for entering the call combiner.
888
- void FilterStackCall::ExecuteBatch(grpc_transport_stream_op_batch* batch,
889
- grpc_closure* start_batch_closure) {
890
- // This is called via the call combiner to start sending a batch down
891
- // the filter stack.
892
- auto execute_batch_in_call_combiner = [](void* arg, grpc_error_handle) {
893
- grpc_transport_stream_op_batch* batch =
894
- static_cast<grpc_transport_stream_op_batch*>(arg);
895
- auto* call =
896
- static_cast<FilterStackCall*>(batch->handler_private.extra_arg);
897
- grpc_call_element* elem = call->call_elem(0);
898
- GRPC_CALL_LOG_OP(GPR_INFO, elem, batch);
899
- elem->filter->start_transport_stream_op_batch(elem, batch);
900
- };
901
- batch->handler_private.extra_arg = this;
902
- GRPC_CLOSURE_INIT(start_batch_closure, execute_batch_in_call_combiner, batch,
903
- grpc_schedule_on_exec_ctx);
904
- GRPC_CALL_COMBINER_START(call_combiner(), start_batch_closure,
905
- absl::OkStatus(), "executing batch");
401
+ void grpc_call_unref(grpc_call* c) {
402
+ grpc_core::ExecCtx exec_ctx;
403
+ grpc_core::Call::FromC(c)->ExternalUnref();
906
404
  }
907
405
 
908
- namespace {
909
- struct CancelState {
910
- FilterStackCall* call;
911
- grpc_closure start_batch;
912
- grpc_closure finish_batch;
913
- };
914
- } // namespace
915
-
916
- // The on_complete callback used when sending a cancel_stream batch down
917
- // the filter stack. Yields the call combiner when the batch is done.
918
- static void done_termination(void* arg, grpc_error_handle /*error*/) {
919
- CancelState* state = static_cast<CancelState*>(arg);
920
- GRPC_CALL_COMBINER_STOP(state->call->call_combiner(),
921
- "on_complete for cancel_stream op");
922
- state->call->InternalUnref("termination");
923
- delete state;
406
+ char* grpc_call_get_peer(grpc_call* call) {
407
+ return grpc_core::Call::FromC(call)->GetPeer();
924
408
  }
925
409
 
926
- void FilterStackCall::CancelWithError(grpc_error_handle error) {
927
- if (!gpr_atm_rel_cas(&cancelled_with_error_, 0, 1)) {
928
- return;
929
- }
930
- if (GRPC_TRACE_FLAG_ENABLED(grpc_call_error_trace)) {
931
- gpr_log(GPR_INFO, "CancelWithError %s %s", is_client() ? "CLI" : "SVR",
932
- StatusToString(error).c_str());
410
+ grpc_call_error grpc_call_cancel(grpc_call* call, void* reserved) {
411
+ GRPC_TRACE_LOG(api, INFO)
412
+ << "grpc_call_cancel(call=" << call << ", reserved=" << reserved << ")";
413
+ CHECK_EQ(reserved, nullptr);
414
+ if (call == nullptr) {
415
+ return GRPC_CALL_ERROR;
933
416
  }
934
- ClearPeerString();
935
- InternalRef("termination");
936
- ResetDeadline();
937
- // Inform the call combiner of the cancellation, so that it can cancel
938
- // any in-flight asynchronous actions that may be holding the call
939
- // combiner. This ensures that the cancel_stream batch can be sent
940
- // down the filter stack in a timely manner.
941
- call_combiner_.Cancel(error);
942
- CancelState* state = new CancelState;
943
- state->call = this;
944
- GRPC_CLOSURE_INIT(&state->finish_batch, done_termination, state,
945
- grpc_schedule_on_exec_ctx);
946
- grpc_transport_stream_op_batch* op =
947
- grpc_make_transport_stream_op(&state->finish_batch);
948
- op->cancel_stream = true;
949
- op->payload->cancel_stream.cancel_error = error;
950
- ExecuteBatch(op, &state->start_batch);
417
+ grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
418
+ grpc_core::ExecCtx exec_ctx;
419
+ grpc_core::Call::FromC(call)->CancelWithError(absl::CancelledError());
420
+ return GRPC_CALL_OK;
951
421
  }
952
422
 
953
- void FilterStackCall::SetFinalStatus(grpc_error_handle error) {
954
- if (GRPC_TRACE_FLAG_ENABLED(grpc_call_error_trace)) {
955
- gpr_log(GPR_INFO, "set_final_status %s %s", is_client() ? "CLI" : "SVR",
956
- StatusToString(error).c_str());
957
- }
958
- ResetDeadline();
959
- if (is_client()) {
960
- std::string status_details;
961
- grpc_error_get_status(error, send_deadline(), final_op_.client.status,
962
- &status_details, nullptr,
963
- final_op_.client.error_string);
964
- *final_op_.client.status_details =
965
- grpc_slice_from_cpp_string(std::move(status_details));
966
- status_error_.set(error);
967
- channelz::ChannelNode* channelz_channel = channel()->channelz_node();
968
- if (channelz_channel != nullptr) {
969
- if (*final_op_.client.status != GRPC_STATUS_OK) {
970
- channelz_channel->RecordCallFailed();
971
- } else {
972
- channelz_channel->RecordCallSucceeded();
973
- }
974
- }
975
- } else {
976
- *final_op_.server.cancelled =
977
- !error.ok() || !sent_server_trailing_metadata_;
978
- channelz::ServerNode* channelz_node =
979
- final_op_.server.core_server->channelz_node();
980
- if (channelz_node != nullptr) {
981
- if (*final_op_.server.cancelled || !status_error_.ok()) {
982
- channelz_node->RecordCallFailed();
983
- } else {
984
- channelz_node->RecordCallSucceeded();
985
- }
986
- }
423
+ grpc_call_error grpc_call_cancel_with_status(grpc_call* c,
424
+ grpc_status_code status,
425
+ const char* description,
426
+ void* reserved) {
427
+ GRPC_TRACE_LOG(api, INFO)
428
+ << "grpc_call_cancel_with_status(c=" << c << ", status=" << (int)status
429
+ << ", description=" << description << ", reserved=" << reserved << ")";
430
+ CHECK_EQ(reserved, nullptr);
431
+ if (c == nullptr) {
432
+ return GRPC_CALL_ERROR;
987
433
  }
434
+ grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
435
+ grpc_core::ExecCtx exec_ctx;
436
+ grpc_core::Call::FromC(c)->CancelWithStatus(status, description);
437
+ return GRPC_CALL_OK;
988
438
  }
989
439
 
990
- bool FilterStackCall::PrepareApplicationMetadata(size_t count,
991
- grpc_metadata* metadata,
992
- bool is_trailing) {
993
- grpc_metadata_batch* batch =
994
- is_trailing ? &send_trailing_metadata_ : &send_initial_metadata_;
995
- for (size_t i = 0; i < count; i++) {
996
- grpc_metadata* md = &metadata[i];
997
- if (!GRPC_LOG_IF_ERROR("validate_metadata",
998
- grpc_validate_header_key_is_legal(md->key))) {
999
- return false;
1000
- } else if (!grpc_is_binary_header_internal(md->key) &&
1001
- !GRPC_LOG_IF_ERROR(
1002
- "validate_metadata",
1003
- grpc_validate_header_nonbin_value_is_legal(md->value))) {
1004
- return false;
1005
- } else if (GRPC_SLICE_LENGTH(md->value) >= UINT32_MAX) {
1006
- // HTTP2 hpack encoding has a maximum limit.
1007
- return false;
1008
- } else if (grpc_slice_str_cmp(md->key, "content-length") == 0) {
1009
- // Filter "content-length metadata"
1010
- continue;
1011
- }
1012
- batch->Append(StringViewFromSlice(md->key), Slice(CSliceRef(md->value)),
1013
- [md](absl::string_view error, const Slice& value) {
1014
- gpr_log(GPR_DEBUG, "Append error: %s",
1015
- absl::StrCat("key=", StringViewFromSlice(md->key),
1016
- " error=", error,
1017
- " value=", value.as_string_view())
1018
- .c_str());
1019
- });
1020
- }
1021
-
1022
- return true;
440
+ void grpc_call_cancel_internal(grpc_call* call) {
441
+ grpc_core::Call::FromC(call)->CancelWithError(absl::CancelledError());
1023
442
  }
1024
443
 
1025
- namespace {
1026
- class PublishToAppEncoder {
1027
- public:
1028
- explicit PublishToAppEncoder(grpc_metadata_array* dest,
1029
- const grpc_metadata_batch* encoding,
1030
- bool is_client)
1031
- : dest_(dest), encoding_(encoding), is_client_(is_client) {}
1032
-
1033
- void Encode(const Slice& key, const Slice& value) {
1034
- Append(key.c_slice(), value.c_slice());
1035
- }
1036
-
1037
- // Catch anything that is not explicitly handled, and do not publish it to the
1038
- // application. If new metadata is added to a batch that needs to be
1039
- // published, it should be called out here.
1040
- template <typename Which>
1041
- void Encode(Which, const typename Which::ValueType&) {}
1042
-
1043
- void Encode(UserAgentMetadata, const Slice& slice) {
1044
- Append(UserAgentMetadata::key(), slice);
1045
- }
1046
-
1047
- void Encode(HostMetadata, const Slice& slice) {
1048
- Append(HostMetadata::key(), slice);
1049
- }
1050
-
1051
- void Encode(GrpcPreviousRpcAttemptsMetadata, uint32_t count) {
1052
- Append(GrpcPreviousRpcAttemptsMetadata::key(), count);
1053
- }
1054
-
1055
- void Encode(GrpcRetryPushbackMsMetadata, Duration count) {
1056
- Append(GrpcRetryPushbackMsMetadata::key(), count.millis());
1057
- }
1058
-
1059
- void Encode(LbTokenMetadata, const Slice& slice) {
1060
- Append(LbTokenMetadata::key(), slice);
1061
- }
1062
-
1063
- private:
1064
- void Append(absl::string_view key, int64_t value) {
1065
- Append(StaticSlice::FromStaticString(key).c_slice(),
1066
- Slice::FromInt64(value).c_slice());
1067
- }
1068
-
1069
- void Append(absl::string_view key, const Slice& value) {
1070
- Append(StaticSlice::FromStaticString(key).c_slice(), value.c_slice());
1071
- }
1072
-
1073
- void Append(grpc_slice key, grpc_slice value) {
1074
- if (dest_->count == dest_->capacity) {
1075
- Crash(absl::StrCat(
1076
- "Too many metadata entries: capacity=", dest_->capacity, " on ",
1077
- is_client_ ? "client" : "server", " encoding ", encoding_->count(),
1078
- " elements: ", encoding_->DebugString().c_str()));
1079
- }
1080
- auto* mdusr = &dest_->metadata[dest_->count++];
1081
- mdusr->key = key;
1082
- mdusr->value = value;
1083
- }
1084
-
1085
- grpc_metadata_array* const dest_;
1086
- const grpc_metadata_batch* const encoding_;
1087
- const bool is_client_;
1088
- };
1089
- } // namespace
1090
-
1091
- void FilterStackCall::PublishAppMetadata(grpc_metadata_batch* b,
1092
- bool is_trailing) {
1093
- if (b->count() == 0) return;
1094
- if (!is_client() && is_trailing) return;
1095
- if (is_trailing && buffered_metadata_[1] == nullptr) return;
1096
- grpc_metadata_array* dest;
1097
- dest = buffered_metadata_[is_trailing];
1098
- if (dest->count + b->count() > dest->capacity) {
1099
- dest->capacity =
1100
- std::max(dest->capacity + b->count(), dest->capacity * 3 / 2);
1101
- dest->metadata = static_cast<grpc_metadata*>(
1102
- gpr_realloc(dest->metadata, sizeof(grpc_metadata) * dest->capacity));
1103
- }
1104
- PublishToAppEncoder encoder(dest, b, is_client());
1105
- b->Encode(&encoder);
444
+ grpc_compression_algorithm grpc_call_test_only_get_compression_algorithm(
445
+ grpc_call* call) {
446
+ return grpc_core::Call::FromC(call)->incoming_compression_algorithm();
1106
447
  }
1107
448
 
1108
- void FilterStackCall::RecvInitialFilter(grpc_metadata_batch* b) {
1109
- ProcessIncomingInitialMetadata(*b);
1110
- PublishAppMetadata(b, false);
449
+ uint32_t grpc_call_test_only_get_message_flags(grpc_call* call) {
450
+ return grpc_core::Call::FromC(call)->test_only_message_flags();
1111
451
  }
1112
452
 
1113
- void FilterStackCall::RecvTrailingFilter(grpc_metadata_batch* b,
1114
- grpc_error_handle batch_error) {
1115
- if (!batch_error.ok()) {
1116
- SetFinalStatus(batch_error);
1117
- } else {
1118
- absl::optional<grpc_status_code> grpc_status =
1119
- b->Take(GrpcStatusMetadata());
1120
- if (grpc_status.has_value()) {
1121
- grpc_status_code status_code = *grpc_status;
1122
- grpc_error_handle error;
1123
- if (status_code != GRPC_STATUS_OK) {
1124
- Slice peer = GetPeerString();
1125
- error = grpc_error_set_int(
1126
- GRPC_ERROR_CREATE(absl::StrCat("Error received from peer ",
1127
- peer.as_string_view())),
1128
- StatusIntProperty::kRpcStatus, static_cast<intptr_t>(status_code));
1129
- }
1130
- auto grpc_message = b->Take(GrpcMessageMetadata());
1131
- if (grpc_message.has_value()) {
1132
- error = grpc_error_set_str(error, StatusStrProperty::kGrpcMessage,
1133
- grpc_message->as_string_view());
1134
- } else if (!error.ok()) {
1135
- error = grpc_error_set_str(error, StatusStrProperty::kGrpcMessage, "");
1136
- }
1137
- SetFinalStatus(error);
1138
- } else if (!is_client()) {
1139
- SetFinalStatus(absl::OkStatus());
1140
- } else {
1141
- gpr_log(GPR_DEBUG,
1142
- "Received trailing metadata with no error and no status");
1143
- SetFinalStatus(grpc_error_set_int(GRPC_ERROR_CREATE("No status received"),
1144
- StatusIntProperty::kRpcStatus,
1145
- GRPC_STATUS_UNKNOWN));
1146
- }
1147
- }
1148
- PublishAppMetadata(b, true);
453
+ uint32_t grpc_call_test_only_get_encodings_accepted_by_peer(grpc_call* call) {
454
+ return grpc_core::Call::FromC(call)
455
+ ->encodings_accepted_by_peer()
456
+ .ToLegacyBitmask();
1149
457
  }
1150
458
 
1151
- namespace {
1152
- bool AreWriteFlagsValid(uint32_t flags) {
1153
- // check that only bits in GRPC_WRITE_(INTERNAL?)_USED_MASK are set
1154
- const uint32_t allowed_write_positions =
1155
- (GRPC_WRITE_USED_MASK | GRPC_WRITE_INTERNAL_USED_MASK);
1156
- const uint32_t invalid_positions = ~allowed_write_positions;
1157
- return !(flags & invalid_positions);
459
+ grpc_core::Arena* grpc_call_get_arena(grpc_call* call) {
460
+ return grpc_core::Call::FromC(call)->arena();
1158
461
  }
1159
462
 
1160
- bool AreInitialMetadataFlagsValid(uint32_t flags) {
1161
- // check that only bits in GRPC_WRITE_(INTERNAL?)_USED_MASK are set
1162
- uint32_t invalid_positions = ~GRPC_INITIAL_METADATA_USED_MASK;
1163
- return !(flags & invalid_positions);
463
+ grpc_call_stack* grpc_call_get_call_stack(grpc_call* call) {
464
+ return grpc_core::Call::FromC(call)->call_stack();
1164
465
  }
1165
466
 
1166
- size_t BatchSlotForOp(grpc_op_type type) {
1167
- switch (type) {
1168
- case GRPC_OP_SEND_INITIAL_METADATA:
1169
- return 0;
1170
- case GRPC_OP_SEND_MESSAGE:
1171
- return 1;
1172
- case GRPC_OP_SEND_CLOSE_FROM_CLIENT:
1173
- case GRPC_OP_SEND_STATUS_FROM_SERVER:
1174
- return 2;
1175
- case GRPC_OP_RECV_INITIAL_METADATA:
1176
- return 3;
1177
- case GRPC_OP_RECV_MESSAGE:
1178
- return 4;
1179
- case GRPC_OP_RECV_CLOSE_ON_SERVER:
1180
- case GRPC_OP_RECV_STATUS_ON_CLIENT:
1181
- return 5;
1182
- }
1183
- GPR_UNREACHABLE_CODE(return 123456789);
1184
- }
1185
- } // namespace
467
+ grpc_call_error grpc_call_start_batch(grpc_call* call, const grpc_op* ops,
468
+ size_t nops, void* tag, void* reserved) {
469
+ GRPC_TRACE_LOG(api, INFO)
470
+ << "grpc_call_start_batch(call=" << call << ", ops=" << ops
471
+ << ", nops=" << (unsigned long)nops << ", tag=" << tag
472
+ << ", reserved=" << reserved << ")";
1186
473
 
1187
- FilterStackCall::BatchControl* FilterStackCall::ReuseOrAllocateBatchControl(
1188
- const grpc_op* ops) {
1189
- size_t slot_idx = BatchSlotForOp(ops[0].op);
1190
- BatchControl** pslot = &active_batches_[slot_idx];
1191
- BatchControl* bctl;
1192
- if (*pslot != nullptr) {
1193
- bctl = *pslot;
1194
- if (bctl->call_ != nullptr) {
1195
- return nullptr;
1196
- }
1197
- bctl->~BatchControl();
1198
- bctl->op_ = {};
1199
- new (&bctl->batch_error_) AtomicError();
474
+ if (reserved != nullptr || call == nullptr) {
475
+ return GRPC_CALL_ERROR;
1200
476
  } else {
1201
- bctl = arena()->New<BatchControl>();
1202
- *pslot = bctl;
477
+ grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
478
+ grpc_core::ExecCtx exec_ctx;
479
+ return grpc_core::Call::FromC(call)->StartBatch(ops, nops, tag, false);
1203
480
  }
1204
- bctl->call_ = this;
1205
- bctl->call_tracer_ = static_cast<CallTracerAnnotationInterface*>(
1206
- ContextGet(GRPC_CONTEXT_CALL_TRACER_ANNOTATION_INTERFACE));
1207
- bctl->op_.payload = &stream_op_payload_;
1208
- return bctl;
1209
481
  }
1210
482
 
1211
- void FilterStackCall::BatchControl::PostCompletion() {
1212
- FilterStackCall* call = call_;
1213
- grpc_error_handle error = batch_error_.get();
1214
-
1215
- if (IsCallStatusOverrideOnCancellationEnabled()) {
1216
- // On the client side, if final call status is already known (i.e if this op
1217
- // includes recv_trailing_metadata) and if the call status is known to be
1218
- // OK, then disregard the batch error to ensure call->receiving_buffer_ is
1219
- // not cleared.
1220
- if (op_.recv_trailing_metadata && call->is_client() &&
1221
- call->status_error_.ok()) {
1222
- error = absl::OkStatus();
1223
- }
1224
- }
483
+ grpc_call_error grpc_call_start_batch_and_execute(grpc_call* call,
484
+ const grpc_op* ops,
485
+ size_t nops,
486
+ grpc_closure* closure) {
487
+ return grpc_core::Call::FromC(call)->StartBatch(ops, nops, closure, true);
488
+ }
1225
489
 
1226
- if (grpc_call_trace.enabled()) {
1227
- gpr_log(GPR_DEBUG, "tag:%p batch_error=%s op:%s",
1228
- completion_data_.notify_tag.tag, error.ToString().c_str(),
1229
- grpc_transport_stream_op_batch_string(&op_, false).c_str());
1230
- }
1231
-
1232
- if (op_.send_initial_metadata) {
1233
- call->send_initial_metadata_.Clear();
1234
- }
1235
- if (op_.send_message) {
1236
- if (op_.payload->send_message.stream_write_closed && error.ok()) {
1237
- error = grpc_error_add_child(
1238
- error, GRPC_ERROR_CREATE(
1239
- "Attempt to send message after stream was closed."));
1240
- }
1241
- call->sending_message_ = false;
1242
- call->send_slice_buffer_.Clear();
1243
- }
1244
- if (op_.send_trailing_metadata) {
1245
- call->send_trailing_metadata_.Clear();
1246
- }
1247
-
1248
- if (!error.ok() && op_.recv_message && *call->receiving_buffer_ != nullptr) {
1249
- grpc_byte_buffer_destroy(*call->receiving_buffer_);
1250
- *call->receiving_buffer_ = nullptr;
1251
- }
1252
- if (op_.recv_trailing_metadata) {
1253
- // propagate cancellation to any interested children
1254
- gpr_atm_rel_store(&call->received_final_op_atm_, 1);
1255
- call->PropagateCancellationToChildren();
1256
- error = absl::OkStatus();
1257
- }
1258
- batch_error_.set(absl::OkStatus());
1259
-
1260
- if (completion_data_.notify_tag.is_closure) {
1261
- call_ = nullptr;
1262
- GrpcClosure::Run(
1263
- DEBUG_LOCATION,
1264
- static_cast<grpc_closure*>(completion_data_.notify_tag.tag), error);
1265
- call->InternalUnref("completion");
1266
- } else {
1267
- grpc_cq_end_op(
1268
- call->cq_, completion_data_.notify_tag.tag, error,
1269
- [](void* user_data, grpc_cq_completion* /*storage*/) {
1270
- BatchControl* bctl = static_cast<BatchControl*>(user_data);
1271
- Call* call = bctl->call_;
1272
- bctl->call_ = nullptr;
1273
- call->InternalUnref("completion");
1274
- },
1275
- this, &completion_data_.cq_completion);
1276
- }
1277
- }
1278
-
1279
- void FilterStackCall::BatchControl::FinishStep(PendingOp op) {
1280
- if (GPR_UNLIKELY(completed_batch_step(op))) {
1281
- PostCompletion();
1282
- }
1283
- }
1284
-
1285
- void FilterStackCall::BatchControl::ProcessDataAfterMetadata() {
1286
- FilterStackCall* call = call_;
1287
- if (!call->receiving_slice_buffer_.has_value()) {
1288
- *call->receiving_buffer_ = nullptr;
1289
- call->receiving_message_ = false;
1290
- FinishStep(PendingOp::kRecvMessage);
1291
- } else {
1292
- call->NoteLastMessageFlags(call->receiving_stream_flags_);
1293
- if ((call->receiving_stream_flags_ & GRPC_WRITE_INTERNAL_COMPRESS) &&
1294
- (call->incoming_compression_algorithm() != GRPC_COMPRESS_NONE)) {
1295
- *call->receiving_buffer_ = grpc_raw_compressed_byte_buffer_create(
1296
- nullptr, 0, call->incoming_compression_algorithm());
1297
- } else {
1298
- *call->receiving_buffer_ = grpc_raw_byte_buffer_create(nullptr, 0);
1299
- }
1300
- grpc_slice_buffer_move_into(
1301
- call->receiving_slice_buffer_->c_slice_buffer(),
1302
- &(*call->receiving_buffer_)->data.raw.slice_buffer);
1303
- call->receiving_message_ = false;
1304
- call->receiving_slice_buffer_.reset();
1305
- FinishStep(PendingOp::kRecvMessage);
1306
- }
1307
- }
1308
-
1309
- void FilterStackCall::BatchControl::ReceivingStreamReady(
1310
- grpc_error_handle error) {
1311
- if (grpc_call_trace.enabled()) {
1312
- gpr_log(GPR_DEBUG,
1313
- "tag:%p ReceivingStreamReady error=%s "
1314
- "receiving_slice_buffer.has_value=%d recv_state=%" PRIdPTR,
1315
- completion_data_.notify_tag.tag, error.ToString().c_str(),
1316
- call_->receiving_slice_buffer_.has_value(),
1317
- gpr_atm_no_barrier_load(&call_->recv_state_));
1318
- }
1319
- FilterStackCall* call = call_;
1320
- if (!error.ok()) {
1321
- call->receiving_slice_buffer_.reset();
1322
- if (batch_error_.ok()) {
1323
- batch_error_.set(error);
1324
- }
1325
- call->CancelWithError(error);
1326
- }
1327
- // If recv_state is kRecvNone, we will save the batch_control
1328
- // object with rel_cas, and will not use it after the cas. Its corresponding
1329
- // acq_load is in receiving_initial_metadata_ready()
1330
- if (!error.ok() || !call->receiving_slice_buffer_.has_value() ||
1331
- !gpr_atm_rel_cas(&call->recv_state_, kRecvNone,
1332
- reinterpret_cast<gpr_atm>(this))) {
1333
- ProcessDataAfterMetadata();
1334
- }
1335
- }
1336
-
1337
- void FilterStackCall::BatchControl::ReceivingInitialMetadataReady(
1338
- grpc_error_handle error) {
1339
- FilterStackCall* call = call_;
1340
-
1341
- GRPC_CALL_COMBINER_STOP(call->call_combiner(), "recv_initial_metadata_ready");
1342
-
1343
- if (error.ok()) {
1344
- grpc_metadata_batch* md = &call->recv_initial_metadata_;
1345
- call->RecvInitialFilter(md);
1346
-
1347
- absl::optional<Timestamp> deadline = md->get(GrpcTimeoutMetadata());
1348
- if (deadline.has_value() && !call->is_client()) {
1349
- call_->set_send_deadline(*deadline);
1350
- }
1351
- } else {
1352
- if (batch_error_.ok()) {
1353
- batch_error_.set(error);
1354
- }
1355
- call->CancelWithError(error);
1356
- }
1357
-
1358
- grpc_closure* saved_rsr_closure = nullptr;
1359
- while (true) {
1360
- gpr_atm rsr_bctlp = gpr_atm_acq_load(&call->recv_state_);
1361
- // Should only receive initial metadata once
1362
- CHECK_NE(rsr_bctlp, 1);
1363
- if (rsr_bctlp == 0) {
1364
- // We haven't seen initial metadata and messages before, thus initial
1365
- // metadata is received first.
1366
- // no_barrier_cas is used, as this function won't access the batch_control
1367
- // object saved by receiving_stream_ready() if the initial metadata is
1368
- // received first.
1369
- if (gpr_atm_no_barrier_cas(&call->recv_state_, kRecvNone,
1370
- kRecvInitialMetadataFirst)) {
1371
- break;
1372
- }
1373
- } else {
1374
- // Already received messages
1375
- saved_rsr_closure = GRPC_CLOSURE_CREATE(
1376
- [](void* bctl, grpc_error_handle error) {
1377
- static_cast<BatchControl*>(bctl)->ReceivingStreamReady(error);
1378
- },
1379
- reinterpret_cast<BatchControl*>(rsr_bctlp),
1380
- grpc_schedule_on_exec_ctx);
1381
- // No need to modify recv_state
1382
- break;
1383
- }
1384
- }
1385
- if (saved_rsr_closure != nullptr) {
1386
- GrpcClosure::Run(DEBUG_LOCATION, saved_rsr_closure, error);
1387
- }
1388
-
1389
- FinishStep(PendingOp::kRecvInitialMetadata);
1390
- }
1391
-
1392
- void FilterStackCall::BatchControl::ReceivingTrailingMetadataReady(
1393
- grpc_error_handle error) {
1394
- GRPC_CALL_COMBINER_STOP(call_->call_combiner(),
1395
- "recv_trailing_metadata_ready");
1396
- grpc_metadata_batch* md = &call_->recv_trailing_metadata_;
1397
- call_->RecvTrailingFilter(md, error);
1398
- FinishStep(PendingOp::kRecvTrailingMetadata);
1399
- }
1400
-
1401
- void FilterStackCall::BatchControl::FinishBatch(grpc_error_handle error) {
1402
- GRPC_CALL_COMBINER_STOP(call_->call_combiner(), "on_complete");
1403
- if (batch_error_.ok()) {
1404
- batch_error_.set(error);
1405
- }
1406
- if (!error.ok()) {
1407
- call_->CancelWithError(error);
1408
- }
1409
- FinishStep(PendingOp::kSends);
1410
- }
1411
-
1412
- namespace {
1413
- void EndOpImmediately(grpc_completion_queue* cq, void* notify_tag,
1414
- bool is_notify_tag_closure) {
1415
- if (!is_notify_tag_closure) {
1416
- CHECK(grpc_cq_begin_op(cq, notify_tag));
1417
- grpc_cq_end_op(
1418
- cq, notify_tag, absl::OkStatus(),
1419
- [](void*, grpc_cq_completion* completion) { gpr_free(completion); },
1420
- nullptr,
1421
- static_cast<grpc_cq_completion*>(
1422
- gpr_malloc(sizeof(grpc_cq_completion))));
1423
- } else {
1424
- Closure::Run(DEBUG_LOCATION, static_cast<grpc_closure*>(notify_tag),
1425
- absl::OkStatus());
1426
- }
1427
- }
1428
- } // namespace
1429
-
1430
- grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1431
- void* notify_tag,
1432
- bool is_notify_tag_closure) {
1433
- size_t i;
1434
- const grpc_op* op;
1435
- BatchControl* bctl;
1436
- grpc_call_error error = GRPC_CALL_OK;
1437
- grpc_transport_stream_op_batch* stream_op;
1438
- grpc_transport_stream_op_batch_payload* stream_op_payload;
1439
- uint32_t seen_ops = 0;
1440
- intptr_t pending_ops = 0;
1441
-
1442
- for (i = 0; i < nops; i++) {
1443
- if (seen_ops & (1u << ops[i].op)) {
1444
- return GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1445
- }
1446
- seen_ops |= (1u << ops[i].op);
1447
- }
1448
-
1449
- if (!is_client() &&
1450
- (seen_ops & (1u << GRPC_OP_SEND_STATUS_FROM_SERVER)) != 0 &&
1451
- (seen_ops & (1u << GRPC_OP_RECV_MESSAGE)) != 0) {
1452
- gpr_log(GPR_ERROR,
1453
- "******************* SEND_STATUS WITH RECV_MESSAGE "
1454
- "*******************");
1455
- return GRPC_CALL_ERROR;
1456
- }
1457
-
1458
- GRPC_CALL_LOG_BATCH(GPR_INFO, ops, nops);
1459
-
1460
- if (nops == 0) {
1461
- EndOpImmediately(cq_, notify_tag, is_notify_tag_closure);
1462
- error = GRPC_CALL_OK;
1463
- goto done;
1464
- }
1465
-
1466
- bctl = ReuseOrAllocateBatchControl(ops);
1467
- if (bctl == nullptr) {
1468
- return GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1469
- }
1470
- bctl->completion_data_.notify_tag.tag = notify_tag;
1471
- bctl->completion_data_.notify_tag.is_closure =
1472
- static_cast<uint8_t>(is_notify_tag_closure != 0);
1473
-
1474
- stream_op = &bctl->op_;
1475
- stream_op_payload = &stream_op_payload_;
1476
-
1477
- // rewrite batch ops into a transport op
1478
- for (i = 0; i < nops; i++) {
1479
- op = &ops[i];
1480
- if (op->reserved != nullptr) {
1481
- error = GRPC_CALL_ERROR;
1482
- goto done_with_error;
1483
- }
1484
- switch (op->op) {
1485
- case GRPC_OP_SEND_INITIAL_METADATA: {
1486
- // Flag validation: currently allow no flags
1487
- if (!AreInitialMetadataFlagsValid(op->flags)) {
1488
- error = GRPC_CALL_ERROR_INVALID_FLAGS;
1489
- goto done_with_error;
1490
- }
1491
- if (sent_initial_metadata_) {
1492
- error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1493
- goto done_with_error;
1494
- }
1495
- if (op->data.send_initial_metadata.count > INT_MAX) {
1496
- error = GRPC_CALL_ERROR_INVALID_METADATA;
1497
- goto done_with_error;
1498
- }
1499
- stream_op->send_initial_metadata = true;
1500
- sent_initial_metadata_ = true;
1501
- if (!PrepareApplicationMetadata(op->data.send_initial_metadata.count,
1502
- op->data.send_initial_metadata.metadata,
1503
- false)) {
1504
- error = GRPC_CALL_ERROR_INVALID_METADATA;
1505
- goto done_with_error;
1506
- }
1507
- PrepareOutgoingInitialMetadata(*op, send_initial_metadata_);
1508
- // TODO(ctiller): just make these the same variable?
1509
- if (is_client() && send_deadline() != Timestamp::InfFuture()) {
1510
- send_initial_metadata_.Set(GrpcTimeoutMetadata(), send_deadline());
1511
- }
1512
- if (is_client()) {
1513
- send_initial_metadata_.Set(
1514
- WaitForReady(),
1515
- WaitForReady::ValueType{
1516
- (op->flags & GRPC_INITIAL_METADATA_WAIT_FOR_READY) != 0,
1517
- (op->flags &
1518
- GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET) != 0});
1519
- }
1520
- stream_op_payload->send_initial_metadata.send_initial_metadata =
1521
- &send_initial_metadata_;
1522
- pending_ops |= PendingOpMask(PendingOp::kSends);
1523
- break;
1524
- }
1525
- case GRPC_OP_SEND_MESSAGE: {
1526
- if (!AreWriteFlagsValid(op->flags)) {
1527
- error = GRPC_CALL_ERROR_INVALID_FLAGS;
1528
- goto done_with_error;
1529
- }
1530
- if (op->data.send_message.send_message == nullptr) {
1531
- error = GRPC_CALL_ERROR_INVALID_MESSAGE;
1532
- goto done_with_error;
1533
- }
1534
- if (sending_message_) {
1535
- error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1536
- goto done_with_error;
1537
- }
1538
- uint32_t flags = op->flags;
1539
- // If the outgoing buffer is already compressed, mark it as so in the
1540
- // flags. These will be picked up by the compression filter and further
1541
- // (wasteful) attempts at compression skipped.
1542
- if (op->data.send_message.send_message->data.raw.compression >
1543
- GRPC_COMPRESS_NONE) {
1544
- flags |= GRPC_WRITE_INTERNAL_COMPRESS;
1545
- }
1546
- stream_op->send_message = true;
1547
- sending_message_ = true;
1548
- send_slice_buffer_.Clear();
1549
- grpc_slice_buffer_move_into(
1550
- &op->data.send_message.send_message->data.raw.slice_buffer,
1551
- send_slice_buffer_.c_slice_buffer());
1552
- stream_op_payload->send_message.flags = flags;
1553
- stream_op_payload->send_message.send_message = &send_slice_buffer_;
1554
- pending_ops |= PendingOpMask(PendingOp::kSends);
1555
- break;
1556
- }
1557
- case GRPC_OP_SEND_CLOSE_FROM_CLIENT: {
1558
- // Flag validation: currently allow no flags
1559
- if (op->flags != 0) {
1560
- error = GRPC_CALL_ERROR_INVALID_FLAGS;
1561
- goto done_with_error;
1562
- }
1563
- if (!is_client()) {
1564
- error = GRPC_CALL_ERROR_NOT_ON_SERVER;
1565
- goto done_with_error;
1566
- }
1567
- if (sent_final_op_) {
1568
- error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1569
- goto done_with_error;
1570
- }
1571
- stream_op->send_trailing_metadata = true;
1572
- sent_final_op_ = true;
1573
- stream_op_payload->send_trailing_metadata.send_trailing_metadata =
1574
- &send_trailing_metadata_;
1575
- pending_ops |= PendingOpMask(PendingOp::kSends);
1576
- break;
1577
- }
1578
- case GRPC_OP_SEND_STATUS_FROM_SERVER: {
1579
- // Flag validation: currently allow no flags
1580
- if (op->flags != 0) {
1581
- error = GRPC_CALL_ERROR_INVALID_FLAGS;
1582
- goto done_with_error;
1583
- }
1584
- if (is_client()) {
1585
- error = GRPC_CALL_ERROR_NOT_ON_CLIENT;
1586
- goto done_with_error;
1587
- }
1588
- if (sent_final_op_) {
1589
- error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1590
- goto done_with_error;
1591
- }
1592
- if (op->data.send_status_from_server.trailing_metadata_count >
1593
- INT_MAX) {
1594
- error = GRPC_CALL_ERROR_INVALID_METADATA;
1595
- goto done_with_error;
1596
- }
1597
- stream_op->send_trailing_metadata = true;
1598
- sent_final_op_ = true;
1599
-
1600
- if (!PrepareApplicationMetadata(
1601
- op->data.send_status_from_server.trailing_metadata_count,
1602
- op->data.send_status_from_server.trailing_metadata, true)) {
1603
- error = GRPC_CALL_ERROR_INVALID_METADATA;
1604
- goto done_with_error;
1605
- }
1606
-
1607
- grpc_error_handle status_error =
1608
- op->data.send_status_from_server.status == GRPC_STATUS_OK
1609
- ? absl::OkStatus()
1610
- : grpc_error_set_int(
1611
- GRPC_ERROR_CREATE("Server returned error"),
1612
- StatusIntProperty::kRpcStatus,
1613
- static_cast<intptr_t>(
1614
- op->data.send_status_from_server.status));
1615
- if (op->data.send_status_from_server.status_details != nullptr) {
1616
- send_trailing_metadata_.Set(
1617
- GrpcMessageMetadata(),
1618
- Slice(grpc_slice_copy(
1619
- *op->data.send_status_from_server.status_details)));
1620
- if (!status_error.ok()) {
1621
- status_error = grpc_error_set_str(
1622
- status_error, StatusStrProperty::kGrpcMessage,
1623
- StringViewFromSlice(
1624
- *op->data.send_status_from_server.status_details));
1625
- }
1626
- }
1627
-
1628
- status_error_.set(status_error);
1629
-
1630
- send_trailing_metadata_.Set(GrpcStatusMetadata(),
1631
- op->data.send_status_from_server.status);
1632
-
1633
- // Ignore any te metadata key value pairs specified.
1634
- send_trailing_metadata_.Remove(TeMetadata());
1635
- stream_op_payload->send_trailing_metadata.send_trailing_metadata =
1636
- &send_trailing_metadata_;
1637
- stream_op_payload->send_trailing_metadata.sent =
1638
- &sent_server_trailing_metadata_;
1639
- pending_ops |= PendingOpMask(PendingOp::kSends);
1640
- break;
1641
- }
1642
- case GRPC_OP_RECV_INITIAL_METADATA: {
1643
- // Flag validation: currently allow no flags
1644
- if (op->flags != 0) {
1645
- error = GRPC_CALL_ERROR_INVALID_FLAGS;
1646
- goto done_with_error;
1647
- }
1648
- if (received_initial_metadata_) {
1649
- error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1650
- goto done_with_error;
1651
- }
1652
- received_initial_metadata_ = true;
1653
- buffered_metadata_[0] =
1654
- op->data.recv_initial_metadata.recv_initial_metadata;
1655
- GRPC_CLOSURE_INIT(
1656
- &receiving_initial_metadata_ready_,
1657
- [](void* bctl, grpc_error_handle error) {
1658
- static_cast<BatchControl*>(bctl)->ReceivingInitialMetadataReady(
1659
- error);
1660
- },
1661
- bctl, grpc_schedule_on_exec_ctx);
1662
- stream_op->recv_initial_metadata = true;
1663
- stream_op_payload->recv_initial_metadata.recv_initial_metadata =
1664
- &recv_initial_metadata_;
1665
- stream_op_payload->recv_initial_metadata.recv_initial_metadata_ready =
1666
- &receiving_initial_metadata_ready_;
1667
- if (is_client()) {
1668
- stream_op_payload->recv_initial_metadata.trailing_metadata_available =
1669
- &is_trailers_only_;
1670
- }
1671
- pending_ops |= PendingOpMask(PendingOp::kRecvInitialMetadata);
1672
- break;
1673
- }
1674
- case GRPC_OP_RECV_MESSAGE: {
1675
- // Flag validation: currently allow no flags
1676
- if (op->flags != 0) {
1677
- error = GRPC_CALL_ERROR_INVALID_FLAGS;
1678
- goto done_with_error;
1679
- }
1680
- if (receiving_message_) {
1681
- error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1682
- goto done_with_error;
1683
- }
1684
- receiving_message_ = true;
1685
- stream_op->recv_message = true;
1686
- receiving_slice_buffer_.reset();
1687
- receiving_buffer_ = op->data.recv_message.recv_message;
1688
- stream_op_payload->recv_message.recv_message = &receiving_slice_buffer_;
1689
- receiving_stream_flags_ = 0;
1690
- stream_op_payload->recv_message.flags = &receiving_stream_flags_;
1691
- stream_op_payload->recv_message.call_failed_before_recv_message =
1692
- &call_failed_before_recv_message_;
1693
- GRPC_CLOSURE_INIT(
1694
- &receiving_stream_ready_,
1695
- [](void* bctlp, grpc_error_handle error) {
1696
- auto* bctl = static_cast<BatchControl*>(bctlp);
1697
- auto* call = bctl->call_;
1698
- // Yields the call combiner before processing the received
1699
- // message.
1700
- GRPC_CALL_COMBINER_STOP(call->call_combiner(),
1701
- "recv_message_ready");
1702
- bctl->ReceivingStreamReady(error);
1703
- },
1704
- bctl, grpc_schedule_on_exec_ctx);
1705
- stream_op_payload->recv_message.recv_message_ready =
1706
- &receiving_stream_ready_;
1707
- pending_ops |= PendingOpMask(PendingOp::kRecvMessage);
1708
- break;
1709
- }
1710
- case GRPC_OP_RECV_STATUS_ON_CLIENT: {
1711
- // Flag validation: currently allow no flags
1712
- if (op->flags != 0) {
1713
- error = GRPC_CALL_ERROR_INVALID_FLAGS;
1714
- goto done_with_error;
1715
- }
1716
- if (!is_client()) {
1717
- error = GRPC_CALL_ERROR_NOT_ON_SERVER;
1718
- goto done_with_error;
1719
- }
1720
- if (requested_final_op_) {
1721
- error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1722
- goto done_with_error;
1723
- }
1724
- requested_final_op_ = true;
1725
- buffered_metadata_[1] =
1726
- op->data.recv_status_on_client.trailing_metadata;
1727
- final_op_.client.status = op->data.recv_status_on_client.status;
1728
- final_op_.client.status_details =
1729
- op->data.recv_status_on_client.status_details;
1730
- final_op_.client.error_string =
1731
- op->data.recv_status_on_client.error_string;
1732
- stream_op->recv_trailing_metadata = true;
1733
- stream_op_payload->recv_trailing_metadata.recv_trailing_metadata =
1734
- &recv_trailing_metadata_;
1735
- stream_op_payload->recv_trailing_metadata.collect_stats =
1736
- &final_info_.stats.transport_stream_stats;
1737
- GRPC_CLOSURE_INIT(
1738
- &receiving_trailing_metadata_ready_,
1739
- [](void* bctl, grpc_error_handle error) {
1740
- static_cast<BatchControl*>(bctl)->ReceivingTrailingMetadataReady(
1741
- error);
1742
- },
1743
- bctl, grpc_schedule_on_exec_ctx);
1744
- stream_op_payload->recv_trailing_metadata.recv_trailing_metadata_ready =
1745
- &receiving_trailing_metadata_ready_;
1746
- pending_ops |= PendingOpMask(PendingOp::kRecvTrailingMetadata);
1747
- break;
1748
- }
1749
- case GRPC_OP_RECV_CLOSE_ON_SERVER: {
1750
- // Flag validation: currently allow no flags
1751
- if (op->flags != 0) {
1752
- error = GRPC_CALL_ERROR_INVALID_FLAGS;
1753
- goto done_with_error;
1754
- }
1755
- if (is_client()) {
1756
- error = GRPC_CALL_ERROR_NOT_ON_CLIENT;
1757
- goto done_with_error;
1758
- }
1759
- if (requested_final_op_) {
1760
- error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1761
- goto done_with_error;
1762
- }
1763
- requested_final_op_ = true;
1764
- final_op_.server.cancelled = op->data.recv_close_on_server.cancelled;
1765
- stream_op->recv_trailing_metadata = true;
1766
- stream_op_payload->recv_trailing_metadata.recv_trailing_metadata =
1767
- &recv_trailing_metadata_;
1768
- stream_op_payload->recv_trailing_metadata.collect_stats =
1769
- &final_info_.stats.transport_stream_stats;
1770
- GRPC_CLOSURE_INIT(
1771
- &receiving_trailing_metadata_ready_,
1772
- [](void* bctl, grpc_error_handle error) {
1773
- static_cast<BatchControl*>(bctl)->ReceivingTrailingMetadataReady(
1774
- error);
1775
- },
1776
- bctl, grpc_schedule_on_exec_ctx);
1777
- stream_op_payload->recv_trailing_metadata.recv_trailing_metadata_ready =
1778
- &receiving_trailing_metadata_ready_;
1779
- pending_ops |= PendingOpMask(PendingOp::kRecvTrailingMetadata);
1780
- break;
1781
- }
1782
- }
1783
- }
1784
-
1785
- InternalRef("completion");
1786
- if (!is_notify_tag_closure) {
1787
- CHECK(grpc_cq_begin_op(cq_, notify_tag));
1788
- }
1789
- bctl->set_pending_ops(pending_ops);
1790
-
1791
- if (pending_ops & PendingOpMask(PendingOp::kSends)) {
1792
- GRPC_CLOSURE_INIT(
1793
- &bctl->finish_batch_,
1794
- [](void* bctl, grpc_error_handle error) {
1795
- static_cast<BatchControl*>(bctl)->FinishBatch(error);
1796
- },
1797
- bctl, grpc_schedule_on_exec_ctx);
1798
- stream_op->on_complete = &bctl->finish_batch_;
1799
- }
1800
-
1801
- if (grpc_call_trace.enabled()) {
1802
- gpr_log(GPR_DEBUG, "BATCH:%p START:%s BATCH:%s (tag:%p)", bctl,
1803
- PendingOpString(pending_ops).c_str(),
1804
- grpc_transport_stream_op_batch_string(stream_op, false).c_str(),
1805
- bctl->completion_data_.notify_tag.tag);
1806
- }
1807
- ExecuteBatch(stream_op, &bctl->start_batch_);
1808
-
1809
- done:
1810
- return error;
1811
-
1812
- done_with_error:
1813
- // reverse any mutations that occurred
1814
- if (stream_op->send_initial_metadata) {
1815
- sent_initial_metadata_ = false;
1816
- send_initial_metadata_.Clear();
1817
- }
1818
- if (stream_op->send_message) {
1819
- sending_message_ = false;
1820
- }
1821
- if (stream_op->send_trailing_metadata) {
1822
- sent_final_op_ = false;
1823
- send_trailing_metadata_.Clear();
1824
- }
1825
- if (stream_op->recv_initial_metadata) {
1826
- received_initial_metadata_ = false;
1827
- }
1828
- if (stream_op->recv_message) {
1829
- receiving_message_ = false;
1830
- }
1831
- if (stream_op->recv_trailing_metadata) {
1832
- requested_final_op_ = false;
1833
- }
1834
- goto done;
1835
- }
1836
-
1837
- void FilterStackCall::ContextSet(grpc_context_index elem, void* value,
1838
- void (*destroy)(void*)) {
1839
- if (context_[elem].destroy) {
1840
- context_[elem].destroy(context_[elem].value);
1841
- }
1842
- context_[elem].value = value;
1843
- context_[elem].destroy = destroy;
1844
- }
1845
-
1846
- ///////////////////////////////////////////////////////////////////////////////
1847
- // Metadata validation helpers
1848
-
1849
- namespace {
1850
- bool ValidateMetadata(size_t count, grpc_metadata* metadata) {
1851
- if (count > INT_MAX) {
1852
- return false;
1853
- }
1854
- for (size_t i = 0; i < count; i++) {
1855
- grpc_metadata* md = &metadata[i];
1856
- if (!GRPC_LOG_IF_ERROR("validate_metadata",
1857
- grpc_validate_header_key_is_legal(md->key))) {
1858
- return false;
1859
- } else if (!grpc_is_binary_header_internal(md->key) &&
1860
- !GRPC_LOG_IF_ERROR(
1861
- "validate_metadata",
1862
- grpc_validate_header_nonbin_value_is_legal(md->value))) {
1863
- return false;
1864
- } else if (GRPC_SLICE_LENGTH(md->value) >= UINT32_MAX) {
1865
- // HTTP2 hpack encoding has a maximum limit.
1866
- return false;
1867
- }
1868
- }
1869
- return true;
1870
- }
1871
- } // namespace
1872
-
1873
- ///////////////////////////////////////////////////////////////////////////////
1874
- // PromiseBasedCall
1875
- // Will be folded into Call once the promise conversion is done
1876
-
1877
- class BasicPromiseBasedCall : public Call, public Party {
1878
- public:
1879
- using Call::arena;
1880
-
1881
- BasicPromiseBasedCall(Arena* arena, uint32_t initial_external_refs,
1882
- uint32_t initial_internal_refs,
1883
- const grpc_call_create_args& args)
1884
- : Call(arena, args.server_transport_data == nullptr, args.send_deadline,
1885
- args.channel->Ref()),
1886
- Party(initial_internal_refs),
1887
- external_refs_(initial_external_refs),
1888
- cq_(args.cq) {
1889
- if (args.cq != nullptr) {
1890
- GRPC_CQ_INTERNAL_REF(args.cq, "bind");
1891
- }
1892
- context_[GRPC_CONTEXT_CALL].value = this;
1893
- }
1894
-
1895
- ~BasicPromiseBasedCall() override {
1896
- if (cq_) GRPC_CQ_INTERNAL_UNREF(cq_, "bind");
1897
- for (int i = 0; i < GRPC_CONTEXT_COUNT; i++) {
1898
- if (context_[i].destroy) {
1899
- context_[i].destroy(context_[i].value);
1900
- }
1901
- }
1902
- }
1903
-
1904
- virtual void OrphanCall() = 0;
1905
-
1906
- virtual ServerCallContext* server_call_context() { return nullptr; }
1907
- void SetCompletionQueue(grpc_completion_queue* cq) final {
1908
- cq_ = cq;
1909
- GRPC_CQ_INTERNAL_REF(cq, "bind");
1910
- }
1911
-
1912
- // Implementation of call refcounting: move this to DualRefCounted once we
1913
- // don't need to maintain FilterStackCall compatibility
1914
- void ExternalRef() final {
1915
- if (external_refs_.fetch_add(1, std::memory_order_relaxed) == 0) {
1916
- InternalRef("external");
1917
- }
1918
- }
1919
- void ExternalUnref() final {
1920
- if (external_refs_.fetch_sub(1, std::memory_order_acq_rel) == 1) {
1921
- OrphanCall();
1922
- InternalUnref("external");
1923
- }
1924
- }
1925
- void InternalRef(const char* reason) final {
1926
- if (grpc_call_refcount_trace.enabled()) {
1927
- gpr_log(GPR_DEBUG, "INTERNAL_REF:%p:%s", this, reason);
1928
- }
1929
- Party::IncrementRefCount();
1930
- }
1931
- void InternalUnref(const char* reason) final {
1932
- if (grpc_call_refcount_trace.enabled()) {
1933
- gpr_log(GPR_DEBUG, "INTERNAL_UNREF:%p:%s", this, reason);
1934
- }
1935
- Party::Unref();
1936
- }
1937
-
1938
- void RunInContext(absl::AnyInvocable<void()> fn) {
1939
- Spawn(
1940
- "run_in_context",
1941
- [fn = std::move(fn)]() mutable {
1942
- fn();
1943
- return Empty{};
1944
- },
1945
- [](Empty) {});
1946
- }
1947
-
1948
- void ContextSet(grpc_context_index elem, void* value,
1949
- void (*destroy)(void*)) final {
1950
- if (context_[elem].destroy != nullptr) {
1951
- context_[elem].destroy(context_[elem].value);
1952
- }
1953
- context_[elem].value = value;
1954
- context_[elem].destroy = destroy;
1955
- }
1956
-
1957
- void* ContextGet(grpc_context_index elem) const final {
1958
- return context_[elem].value;
1959
- }
1960
-
1961
- // Accept the stats from the context (call once we have proof the transport is
1962
- // done with them).
1963
- void AcceptTransportStatsFromContext() {
1964
- final_stats_ = *call_context_.call_stats();
1965
- }
1966
-
1967
- // This should return nullptr for the promise stack (and alternative means
1968
- // for that functionality be invented)
1969
- grpc_call_stack* call_stack() final { return nullptr; }
1970
-
1971
- virtual RefCountedPtr<CallSpineInterface> MakeCallSpine(CallArgs) {
1972
- Crash("Not implemented");
1973
- }
1974
-
1975
- protected:
1976
- class ScopedContext
1977
- : public ScopedActivity,
1978
- public promise_detail::Context<Arena>,
1979
- public promise_detail::Context<grpc_call_context_element>,
1980
- public promise_detail::Context<CallContext>,
1981
- public promise_detail::Context<CallFinalization> {
1982
- public:
1983
- explicit ScopedContext(BasicPromiseBasedCall* call)
1984
- : ScopedActivity(call),
1985
- promise_detail::Context<Arena>(call->arena()),
1986
- promise_detail::Context<grpc_call_context_element>(call->context_),
1987
- promise_detail::Context<CallContext>(&call->call_context_),
1988
- promise_detail::Context<CallFinalization>(&call->finalization_) {}
1989
- };
1990
-
1991
- grpc_call_context_element* context() { return context_; }
1992
-
1993
- grpc_completion_queue* cq() { return cq_; }
1994
-
1995
- // At the end of the call run any finalization actions.
1996
- void SetFinalizationStatus(grpc_status_code status, Slice status_details) {
1997
- final_message_ = std::move(status_details);
1998
- final_status_ = status;
1999
- }
2000
-
2001
- grpc_event_engine::experimental::EventEngine* event_engine() const override {
2002
- return channel()->event_engine();
2003
- }
2004
-
2005
- private:
2006
- void PartyOver() final {
2007
- {
2008
- ScopedContext ctx(this);
2009
- std::string message;
2010
- grpc_call_final_info final_info;
2011
- final_info.stats = final_stats_;
2012
- final_info.final_status = final_status_;
2013
- // TODO(ctiller): change type here so we don't need to copy this string.
2014
- final_info.error_string = nullptr;
2015
- if (!final_message_.empty()) {
2016
- message = std::string(final_message_.begin(), final_message_.end());
2017
- final_info.error_string = message.c_str();
2018
- }
2019
- final_info.stats.latency =
2020
- gpr_cycle_counter_sub(gpr_get_cycle_counter(), start_time());
2021
- finalization_.Run(&final_info);
2022
- CancelRemainingParticipants();
2023
- arena()->DestroyManagedNewObjects();
2024
- }
2025
- DeleteThis();
2026
- }
2027
-
2028
- // Double refcounted for now: party owns the internal refcount, we track the
2029
- // external refcount. Figure out a better scheme post-promise conversion.
2030
- std::atomic<size_t> external_refs_;
2031
- CallFinalization finalization_;
2032
- CallContext call_context_{this};
2033
- // Contexts for various subsystems (security, tracing, ...).
2034
- grpc_call_context_element context_[GRPC_CONTEXT_COUNT] = {};
2035
- grpc_call_stats final_stats_{};
2036
- Slice final_message_;
2037
- grpc_status_code final_status_ = GRPC_STATUS_UNKNOWN;
2038
- grpc_completion_queue* cq_;
2039
- };
2040
-
2041
- class PromiseBasedCall : public BasicPromiseBasedCall {
2042
- public:
2043
- PromiseBasedCall(Arena* arena, uint32_t initial_external_refs,
2044
- const grpc_call_create_args& args);
2045
-
2046
- bool Completed() final { return finished_.IsSet(); }
2047
-
2048
- bool failed_before_recv_message() const final {
2049
- return failed_before_recv_message_.load(std::memory_order_relaxed);
2050
- }
2051
-
2052
- using Call::arena;
2053
-
2054
- protected:
2055
- class ScopedContext : public BasicPromiseBasedCall::ScopedContext,
2056
- public BatchBuilder,
2057
- public promise_detail::Context<BatchBuilder> {
2058
- public:
2059
- explicit ScopedContext(PromiseBasedCall* call)
2060
- : BasicPromiseBasedCall::ScopedContext(call),
2061
- BatchBuilder(&call->batch_payload_),
2062
- promise_detail::Context<BatchBuilder>(this) {}
2063
- };
2064
-
2065
- class Completion {
2066
- public:
2067
- Completion() : index_(kNullIndex) {}
2068
- ~Completion() { CHECK(index_ == kNullIndex); }
2069
- explicit Completion(uint8_t index) : index_(index) {}
2070
- Completion(const Completion& other) = delete;
2071
- Completion& operator=(const Completion& other) = delete;
2072
- Completion(Completion&& other) noexcept : index_(other.index_) {
2073
- other.index_ = kNullIndex;
2074
- }
2075
- Completion& operator=(Completion&& other) noexcept {
2076
- CHECK(index_ == kNullIndex);
2077
- index_ = other.index_;
2078
- other.index_ = kNullIndex;
2079
- return *this;
2080
- }
2081
-
2082
- uint8_t index() const { return index_; }
2083
- uint8_t TakeIndex() { return std::exchange(index_, kNullIndex); }
2084
- bool has_value() const { return index_ != kNullIndex; }
2085
-
2086
- private:
2087
- enum : uint8_t { kNullIndex = 0xff };
2088
- uint8_t index_;
2089
- };
2090
-
2091
- // Enumerates why a Completion is still pending
2092
- enum class PendingOp {
2093
- // We're in the midst of starting a batch of operations
2094
- kStartingBatch = 0,
2095
- // The following correspond with the batch operations from above
2096
- kSendInitialMetadata,
2097
- kReceiveInitialMetadata,
2098
- kReceiveStatusOnClient,
2099
- kReceiveCloseOnServer = kReceiveStatusOnClient,
2100
- kSendMessage,
2101
- kReceiveMessage,
2102
- kSendStatusFromServer,
2103
- kSendCloseFromClient = kSendStatusFromServer,
2104
- };
2105
-
2106
- bool RunParty() override {
2107
- ScopedContext ctx(this);
2108
- return Party::RunParty();
2109
- }
2110
-
2111
- const char* PendingOpString(PendingOp reason) const {
2112
- switch (reason) {
2113
- case PendingOp::kStartingBatch:
2114
- return "StartingBatch";
2115
- case PendingOp::kSendInitialMetadata:
2116
- return "SendInitialMetadata";
2117
- case PendingOp::kReceiveInitialMetadata:
2118
- return "ReceiveInitialMetadata";
2119
- case PendingOp::kReceiveStatusOnClient:
2120
- return is_client() ? "ReceiveStatusOnClient" : "ReceiveCloseOnServer";
2121
- case PendingOp::kSendMessage:
2122
- return "SendMessage";
2123
- case PendingOp::kReceiveMessage:
2124
- return "ReceiveMessage";
2125
- case PendingOp::kSendStatusFromServer:
2126
- return is_client() ? "SendCloseFromClient" : "SendStatusFromServer";
2127
- }
2128
- return "Unknown";
2129
- }
2130
-
2131
- static constexpr uint32_t PendingOpBit(PendingOp reason) {
2132
- return 1 << static_cast<int>(reason);
2133
- }
2134
-
2135
- // Begin work on a completion, recording the tag/closure to notify.
2136
- // Use the op selected in \a ops to determine the index to allocate into.
2137
- // Starts the "StartingBatch" PendingOp immediately.
2138
- // Assumes at least one operation in \a ops.
2139
- Completion StartCompletion(void* tag, bool is_closure, const grpc_op* ops);
2140
- // Add one pending op to the completion, and return it.
2141
- Completion AddOpToCompletion(const Completion& completion, PendingOp reason);
2142
- // Stringify a completion
2143
- std::string CompletionString(const Completion& completion) const {
2144
- return completion.has_value()
2145
- ? completion_info_[completion.index()].pending.ToString(this)
2146
- : "no-completion";
2147
- }
2148
- // Finish one op on the completion. Must have been previously been added.
2149
- // The completion as a whole finishes when all pending ops finish.
2150
- void FinishOpOnCompletion(Completion* completion, PendingOp reason);
2151
- // Mark the completion as failed. Does not finish it.
2152
- void FailCompletion(const Completion& completion,
2153
- SourceLocation source_location = {});
2154
- // Mark the completion as infallible. Overrides FailCompletion to report
2155
- // success always.
2156
- void ForceCompletionSuccess(const Completion& completion);
2157
-
2158
- std::string PresentAndCompletionText(const char* caption, bool has,
2159
- const Completion& completion) const {
2160
- if (has) {
2161
- if (completion.has_value()) {
2162
- return absl::StrCat(caption, ":", CompletionString(completion), " ");
2163
- } else {
2164
- return absl::StrCat(caption,
2165
- ":!!BUG:operation is present, no completion!! ");
2166
- }
2167
- } else {
2168
- if (!completion.has_value()) {
2169
- return "";
2170
- } else {
2171
- return absl::StrCat(caption, ":no-op:", CompletionString(completion),
2172
- " ");
2173
- }
2174
- }
2175
- }
2176
-
2177
- // Spawn a job that will first do FirstPromise then receive a message
2178
- template <typename FirstPromise>
2179
- void StartRecvMessage(const grpc_op& op, const Completion& completion,
2180
- FirstPromise first,
2181
- PipeReceiver<MessageHandle>* receiver,
2182
- bool cancel_on_error, Party::BulkSpawner& spawner);
2183
- void StartSendMessage(const grpc_op& op, const Completion& completion,
2184
- PipeSender<MessageHandle>* sender,
2185
- Party::BulkSpawner& spawner);
2186
-
2187
- void set_completed() { finished_.Set(); }
2188
-
2189
- // Returns a promise that resolves to Empty whenever the call is completed.
2190
- auto finished() { return finished_.Wait(); }
2191
-
2192
- // Returns a promise that resolves to Empty whenever there is no outstanding
2193
- // send operation
2194
- auto WaitForSendingStarted() {
2195
- return [this]() -> Poll<Empty> {
2196
- int n = sends_queued_.load(std::memory_order_relaxed);
2197
- if (grpc_call_trace.enabled()) {
2198
- gpr_log(GPR_DEBUG, "%s[call] WaitForSendingStarted n=%d",
2199
- DebugTag().c_str(), n);
2200
- }
2201
- if (n != 0) return waiting_for_queued_sends_.pending();
2202
- return Empty{};
2203
- };
2204
- }
2205
-
2206
- // Mark that a send has been queued - blocks sending trailing metadata.
2207
- void QueueSend() {
2208
- if (grpc_call_trace.enabled()) {
2209
- gpr_log(GPR_DEBUG, "%s[call] QueueSend", DebugTag().c_str());
2210
- }
2211
- sends_queued_.fetch_add(1, std::memory_order_relaxed);
2212
- }
2213
- // Mark that a send has been dequeued - allows sending trailing metadata once
2214
- // zero sends are queued.
2215
- void EnactSend() {
2216
- if (grpc_call_trace.enabled()) {
2217
- gpr_log(GPR_DEBUG, "%s[call] EnactSend", DebugTag().c_str());
2218
- }
2219
- if (1 == sends_queued_.fetch_sub(1, std::memory_order_relaxed)) {
2220
- waiting_for_queued_sends_.Wake();
2221
- }
2222
- }
2223
-
2224
- void set_failed_before_recv_message() {
2225
- failed_before_recv_message_.store(true, std::memory_order_relaxed);
2226
- }
2227
-
2228
- private:
2229
- union CompletionInfo {
2230
- static constexpr uint32_t kOpFailed = 0x8000'0000u;
2231
- static constexpr uint32_t kOpForceSuccess = 0x4000'0000u;
2232
- CompletionInfo() {}
2233
- enum CompletionState {
2234
- kPending,
2235
- kSuccess,
2236
- kFailure,
2237
- };
2238
- struct Pending {
2239
- // Bitmask of PendingOps at the bottom, and kOpFailed, kOpForceSuccess at
2240
- // the top.
2241
- std::atomic<uint32_t> state;
2242
- bool is_closure;
2243
- // True if this completion was for a recv_message op.
2244
- // In that case if the completion as a whole fails we need to cleanup the
2245
- // returned message.
2246
- bool is_recv_message;
2247
- void* tag;
2248
-
2249
- void Start(bool is_closure, void* tag) {
2250
- this->is_closure = is_closure;
2251
- this->is_recv_message = false;
2252
- this->tag = tag;
2253
- state.store(PendingOpBit(PendingOp::kStartingBatch),
2254
- std::memory_order_release);
2255
- }
2256
-
2257
- void AddPendingBit(PendingOp reason) {
2258
- if (reason == PendingOp::kReceiveMessage) is_recv_message = true;
2259
- auto prev =
2260
- state.fetch_or(PendingOpBit(reason), std::memory_order_relaxed);
2261
- CHECK_EQ((prev & PendingOpBit(reason)), 0u);
2262
- }
2263
-
2264
- CompletionState RemovePendingBit(PendingOp reason) {
2265
- const uint32_t mask = ~PendingOpBit(reason);
2266
- auto prev = state.fetch_and(mask, std::memory_order_acq_rel);
2267
- CHECK_NE((prev & PendingOpBit(reason)), 0u);
2268
- switch (prev & mask) {
2269
- case kOpFailed:
2270
- return kFailure;
2271
- case kOpFailed | kOpForceSuccess:
2272
- case kOpForceSuccess:
2273
- case 0:
2274
- return kSuccess;
2275
- default:
2276
- return kPending;
2277
- }
2278
- }
2279
-
2280
- void MarkFailed() {
2281
- state.fetch_or(kOpFailed, std::memory_order_relaxed);
2282
- }
2283
-
2284
- void MarkForceSuccess() {
2285
- state.fetch_or(kOpForceSuccess, std::memory_order_relaxed);
2286
- }
2287
-
2288
- std::string ToString(const PromiseBasedCall* call) const {
2289
- auto state = this->state.load(std::memory_order_relaxed);
2290
- std::vector<absl::string_view> pending_ops;
2291
- for (size_t i = 0; i < 24; i++) {
2292
- if (state & (1u << i)) {
2293
- pending_ops.push_back(
2294
- call->PendingOpString(static_cast<PendingOp>(i)));
2295
- }
2296
- }
2297
- return absl::StrFormat("{%s}%s:tag=%p", absl::StrJoin(pending_ops, ","),
2298
- (state & kOpForceSuccess) ? ":force-success"
2299
- : (state & kOpFailed) ? ":failed"
2300
- : ":success",
2301
- tag);
2302
- }
2303
- } pending;
2304
- grpc_cq_completion completion;
2305
- };
2306
-
2307
- CompletionInfo completion_info_[6];
2308
- ExternallyObservableLatch<void> finished_;
2309
- // Non-zero with an outstanding GRPC_OP_SEND_INITIAL_METADATA or
2310
- // GRPC_OP_SEND_MESSAGE (one count each), and 0 once those payloads have been
2311
- // pushed onto the outgoing pipe.
2312
- std::atomic<uint8_t> sends_queued_{0};
2313
- std::atomic<bool> failed_before_recv_message_{false};
2314
- // Waiter for when sends_queued_ becomes 0.
2315
- IntraActivityWaiter waiting_for_queued_sends_;
2316
- grpc_byte_buffer** recv_message_ = nullptr;
2317
- grpc_transport_stream_op_batch_payload batch_payload_{context()};
2318
- };
2319
-
2320
- template <typename T>
2321
- grpc_error_handle MakePromiseBasedCall(grpc_call_create_args* args,
2322
- grpc_call** out_call) {
2323
- Channel* channel = args->channel.get();
2324
-
2325
- auto* arena = channel->CreateArena();
2326
- PromiseBasedCall* call = arena->New<T>(arena, args);
2327
- *out_call = call->c_ptr();
2328
- DCHECK(Call::FromC(*out_call) == call);
2329
- return absl::OkStatus();
2330
- }
2331
-
2332
- PromiseBasedCall::PromiseBasedCall(Arena* arena, uint32_t initial_external_refs,
2333
- const grpc_call_create_args& args)
2334
- : BasicPromiseBasedCall(arena, initial_external_refs,
2335
- initial_external_refs != 0 ? 1 : 0, args) {}
2336
-
2337
- static void CToMetadata(grpc_metadata* metadata, size_t count,
2338
- grpc_metadata_batch* b) {
2339
- for (size_t i = 0; i < count; i++) {
2340
- grpc_metadata* md = &metadata[i];
2341
- auto key = StringViewFromSlice(md->key);
2342
- // Filter "content-length metadata"
2343
- if (key == "content-length") continue;
2344
- b->Append(key, Slice(CSliceRef(md->value)),
2345
- [md](absl::string_view error, const Slice& value) {
2346
- gpr_log(GPR_DEBUG, "Append error: %s",
2347
- absl::StrCat("key=", StringViewFromSlice(md->key),
2348
- " error=", error,
2349
- " value=", value.as_string_view())
2350
- .c_str());
2351
- });
2352
- }
2353
- }
2354
-
2355
- PromiseBasedCall::Completion PromiseBasedCall::StartCompletion(
2356
- void* tag, bool is_closure, const grpc_op* ops) {
2357
- Completion c(BatchSlotForOp(ops[0].op));
2358
- if (!is_closure) {
2359
- grpc_cq_begin_op(cq(), tag);
2360
- }
2361
- completion_info_[c.index()].pending.Start(is_closure, tag);
2362
- if (grpc_call_trace.enabled()) {
2363
- gpr_log(GPR_INFO, "%s[call] StartCompletion %s", DebugTag().c_str(),
2364
- CompletionString(c).c_str());
2365
- }
2366
- return c;
2367
- }
2368
-
2369
- PromiseBasedCall::Completion PromiseBasedCall::AddOpToCompletion(
2370
- const Completion& completion, PendingOp reason) {
2371
- if (grpc_call_trace.enabled()) {
2372
- gpr_log(GPR_INFO, "%s[call] AddOpToCompletion %s %s", DebugTag().c_str(),
2373
- CompletionString(completion).c_str(), PendingOpString(reason));
2374
- }
2375
- CHECK(completion.has_value());
2376
- completion_info_[completion.index()].pending.AddPendingBit(reason);
2377
- return Completion(completion.index());
2378
- }
2379
-
2380
- void PromiseBasedCall::FailCompletion(const Completion& completion,
2381
- SourceLocation location) {
2382
- if (grpc_call_trace.enabled()) {
2383
- gpr_log(location.file(), location.line(), GPR_LOG_SEVERITY_ERROR,
2384
- "%s[call] FailCompletion %s", DebugTag().c_str(),
2385
- CompletionString(completion).c_str());
2386
- }
2387
- completion_info_[completion.index()].pending.MarkFailed();
2388
- }
2389
-
2390
- void PromiseBasedCall::ForceCompletionSuccess(const Completion& completion) {
2391
- completion_info_[completion.index()].pending.MarkForceSuccess();
2392
- }
2393
-
2394
- void PromiseBasedCall::FinishOpOnCompletion(Completion* completion,
2395
- PendingOp reason) {
2396
- if (grpc_call_trace.enabled()) {
2397
- gpr_log(GPR_INFO, "%s[call] FinishOpOnCompletion completion:%s finish:%s",
2398
- DebugTag().c_str(), CompletionString(*completion).c_str(),
2399
- PendingOpString(reason));
2400
- }
2401
- const uint8_t i = completion->TakeIndex();
2402
- CHECK(i < GPR_ARRAY_SIZE(completion_info_));
2403
- CompletionInfo::Pending& pending = completion_info_[i].pending;
2404
- bool success;
2405
- switch (pending.RemovePendingBit(reason)) {
2406
- case CompletionInfo::kPending:
2407
- return; // Early out
2408
- case CompletionInfo::kSuccess:
2409
- success = true;
2410
- break;
2411
- case CompletionInfo::kFailure:
2412
- success = false;
2413
- break;
2414
- }
2415
- if (pending.is_recv_message && !success && *recv_message_ != nullptr) {
2416
- grpc_byte_buffer_destroy(*recv_message_);
2417
- *recv_message_ = nullptr;
2418
- }
2419
- auto error = success ? absl::OkStatus() : absl::CancelledError();
2420
- if (pending.is_closure) {
2421
- ExecCtx::Run(DEBUG_LOCATION, static_cast<grpc_closure*>(pending.tag),
2422
- error);
2423
- } else {
2424
- InternalRef("cq_end_op");
2425
- grpc_cq_end_op(
2426
- cq(), pending.tag, error,
2427
- [](void* p, grpc_cq_completion*) {
2428
- static_cast<PromiseBasedCall*>(p)->InternalUnref("cq_end_op");
2429
- },
2430
- this, &completion_info_[i].completion);
2431
- }
2432
- }
2433
-
2434
- void PromiseBasedCall::StartSendMessage(const grpc_op& op,
2435
- const Completion& completion,
2436
- PipeSender<MessageHandle>* sender,
2437
- Party::BulkSpawner& spawner) {
2438
- QueueSend();
2439
- SliceBuffer send;
2440
- grpc_slice_buffer_swap(
2441
- &op.data.send_message.send_message->data.raw.slice_buffer,
2442
- send.c_slice_buffer());
2443
- auto msg = arena()->MakePooled<Message>(std::move(send), op.flags);
2444
- spawner.Spawn(
2445
- "call_send_message",
2446
- [this, sender, msg = std::move(msg)]() mutable {
2447
- EnactSend();
2448
- return sender->Push(std::move(msg));
2449
- },
2450
- [this, completion = AddOpToCompletion(
2451
- completion, PendingOp::kSendMessage)](bool result) mutable {
2452
- if (grpc_call_trace.enabled()) {
2453
- gpr_log(GPR_DEBUG, "%sSendMessage completes %s", DebugTag().c_str(),
2454
- result ? "successfully" : "with failure");
2455
- }
2456
- if (!result) FailCompletion(completion);
2457
- FinishOpOnCompletion(&completion, PendingOp::kSendMessage);
2458
- });
2459
- }
2460
-
2461
- template <typename FirstPromiseFactory>
2462
- void PromiseBasedCall::StartRecvMessage(
2463
- const grpc_op& op, const Completion& completion,
2464
- FirstPromiseFactory first_promise_factory,
2465
- PipeReceiver<MessageHandle>* receiver, bool cancel_on_error,
2466
- Party::BulkSpawner& spawner) {
2467
- if (grpc_call_trace.enabled()) {
2468
- gpr_log(GPR_INFO, "%s[call] Start RecvMessage: %s", DebugTag().c_str(),
2469
- CompletionString(completion).c_str());
2470
- }
2471
- recv_message_ = op.data.recv_message.recv_message;
2472
- spawner.Spawn(
2473
- "call_recv_message",
2474
- [first_promise_factory = std::move(first_promise_factory), receiver]() {
2475
- return Seq(first_promise_factory(), receiver->Next());
2476
- },
2477
- [this, cancel_on_error,
2478
- completion = AddOpToCompletion(completion, PendingOp::kReceiveMessage)](
2479
- NextResult<MessageHandle> result) mutable {
2480
- if (result.has_value()) {
2481
- MessageHandle& message = *result;
2482
- NoteLastMessageFlags(message->flags());
2483
- if ((message->flags() & GRPC_WRITE_INTERNAL_COMPRESS) &&
2484
- (incoming_compression_algorithm() != GRPC_COMPRESS_NONE)) {
2485
- *recv_message_ = grpc_raw_compressed_byte_buffer_create(
2486
- nullptr, 0, incoming_compression_algorithm());
2487
- } else {
2488
- *recv_message_ = grpc_raw_byte_buffer_create(nullptr, 0);
2489
- }
2490
- grpc_slice_buffer_move_into(message->payload()->c_slice_buffer(),
2491
- &(*recv_message_)->data.raw.slice_buffer);
2492
- if (grpc_call_trace.enabled()) {
2493
- gpr_log(GPR_INFO,
2494
- "%s[call] RecvMessage: outstanding_recv "
2495
- "finishes: received %" PRIdPTR " byte message",
2496
- DebugTag().c_str(),
2497
- (*recv_message_)->data.raw.slice_buffer.length);
2498
- }
2499
- } else if (result.cancelled()) {
2500
- if (grpc_call_trace.enabled()) {
2501
- gpr_log(GPR_INFO,
2502
- "%s[call] RecvMessage: outstanding_recv "
2503
- "finishes: received end-of-stream with error",
2504
- DebugTag().c_str());
2505
- }
2506
- set_failed_before_recv_message();
2507
- FailCompletion(completion);
2508
- if (cancel_on_error) CancelWithError(absl::CancelledError());
2509
- *recv_message_ = nullptr;
2510
- } else {
2511
- if (grpc_call_trace.enabled()) {
2512
- gpr_log(GPR_INFO,
2513
- "%s[call] RecvMessage: outstanding_recv "
2514
- "finishes: received end-of-stream",
2515
- DebugTag().c_str());
2516
- }
2517
- *recv_message_ = nullptr;
2518
- }
2519
- FinishOpOnCompletion(&completion, PendingOp::kReceiveMessage);
2520
- });
2521
- }
2522
-
2523
- ///////////////////////////////////////////////////////////////////////////////
2524
- // CallContext
2525
-
2526
- void CallContext::RunInContext(absl::AnyInvocable<void()> fn) {
2527
- call_->RunInContext(std::move(fn));
2528
- }
2529
-
2530
- void CallContext::IncrementRefCount(const char* reason) {
2531
- call_->InternalRef(reason);
2532
- }
2533
-
2534
- void CallContext::Unref(const char* reason) { call_->InternalUnref(reason); }
2535
-
2536
- ServerCallContext* CallContext::server_call_context() {
2537
- return call_->server_call_context();
2538
- }
2539
-
2540
- RefCountedPtr<CallSpineInterface> CallContext::MakeCallSpine(
2541
- CallArgs call_args) {
2542
- return call_->MakeCallSpine(std::move(call_args));
2543
- }
2544
-
2545
- grpc_call* CallContext::c_call() { return call_->c_ptr(); }
2546
-
2547
- ///////////////////////////////////////////////////////////////////////////////
2548
- // PublishMetadataArray
2549
-
2550
- namespace {
2551
- void PublishMetadataArray(grpc_metadata_batch* md, grpc_metadata_array* array,
2552
- bool is_client) {
2553
- const auto md_count = md->count();
2554
- if (md_count > array->capacity) {
2555
- array->capacity =
2556
- std::max(array->capacity + md->count(), array->capacity * 3 / 2);
2557
- array->metadata = static_cast<grpc_metadata*>(
2558
- gpr_realloc(array->metadata, sizeof(grpc_metadata) * array->capacity));
2559
- }
2560
- PublishToAppEncoder encoder(array, md, is_client);
2561
- md->Encode(&encoder);
2562
- }
2563
- } // namespace
2564
-
2565
- ///////////////////////////////////////////////////////////////////////////////
2566
- // ClientPromiseBasedCall
2567
-
2568
- #ifdef GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_CLIENT_CALL
2569
- class ClientPromiseBasedCall final : public PromiseBasedCall {
2570
- public:
2571
- ClientPromiseBasedCall(Arena* arena, grpc_call_create_args* args)
2572
- : PromiseBasedCall(arena, 1, *args),
2573
- polling_entity_(
2574
- args->cq != nullptr
2575
- ? grpc_polling_entity_create_from_pollset(
2576
- grpc_cq_pollset(args->cq))
2577
- : (args->pollset_set_alternative != nullptr
2578
- ? grpc_polling_entity_create_from_pollset_set(
2579
- args->pollset_set_alternative)
2580
- : grpc_polling_entity{})) {
2581
- global_stats().IncrementClientCallsCreated();
2582
- if (args->cq != nullptr) {
2583
- CHECK(args->pollset_set_alternative == nullptr)
2584
- << "Only one of 'cq' and 'pollset_set_alternative' should be "
2585
- "non-nullptr.";
2586
- }
2587
- ScopedContext context(this);
2588
- args->channel->channel_stack()->stats_plugin_group->AddClientCallTracers(
2589
- *args->path, args->registered_method, this->context());
2590
- send_initial_metadata_ = Arena::MakePooled<ClientMetadata>();
2591
- send_initial_metadata_->Set(HttpPathMetadata(), std::move(*args->path));
2592
- if (args->authority.has_value()) {
2593
- send_initial_metadata_->Set(HttpAuthorityMetadata(),
2594
- std::move(*args->authority));
2595
- }
2596
- send_initial_metadata_->Set(GrpcRegisteredMethod(),
2597
- reinterpret_cast<void*>(static_cast<uintptr_t>(
2598
- args->registered_method)));
2599
- if (auto* channelz_channel = channel()->channelz_node()) {
2600
- channelz_channel->RecordCallStarted();
2601
- }
2602
- if (args->send_deadline != Timestamp::InfFuture()) {
2603
- UpdateDeadline(args->send_deadline);
2604
- }
2605
- Call* parent = Call::FromC(args->parent);
2606
- if (parent != nullptr) {
2607
- auto parent_status = InitParent(parent, args->propagation_mask);
2608
- if (!parent_status.ok()) {
2609
- CancelWithError(std::move(parent_status));
2610
- }
2611
- PublishToParent(parent);
2612
- }
2613
- }
2614
-
2615
- void OrphanCall() override { MaybeUnpublishFromParent(); }
2616
-
2617
- ~ClientPromiseBasedCall() override {
2618
- ScopedContext context(this);
2619
- send_initial_metadata_.reset();
2620
- // Need to destroy the pipes under the ScopedContext above, so we
2621
- // move them out here and then allow the destructors to run at
2622
- // end of scope, but before context.
2623
- auto c2s = std::move(client_to_server_messages_);
2624
- auto s2c = std::move(server_to_client_messages_);
2625
- auto sim = std::move(server_initial_metadata_);
2626
- }
2627
-
2628
- void CancelWithError(absl::Status error) override {
2629
- if (cancel_with_error_called_.exchange(true, std::memory_order_relaxed)) {
2630
- return;
2631
- }
2632
- if (!started_.exchange(true, std::memory_order_relaxed)) {
2633
- // Initial metadata not sent yet, so we can just fail the call.
2634
- Spawn(
2635
- "cancel_before_initial_metadata",
2636
- [error = std::move(error), this]() {
2637
- server_to_client_messages_.sender.Close();
2638
- auto md = ServerMetadataFromStatus(error);
2639
- md->Set(GrpcCallWasCancelled(), true);
2640
- Finish(std::move(md));
2641
- return Empty{};
2642
- },
2643
- [](Empty) {});
2644
- } else {
2645
- Spawn(
2646
- "cancel_with_error",
2647
- [error = std::move(error), this]() {
2648
- if (!cancel_error_.is_set()) {
2649
- auto md = ServerMetadataFromStatus(error);
2650
- md->Set(GrpcCallWasCancelled(), true);
2651
- cancel_error_.Set(std::move(md));
2652
- }
2653
- return Empty{};
2654
- },
2655
- [](Empty) {});
2656
- }
2657
- }
2658
- absl::string_view GetServerAuthority() const override { abort(); }
2659
- bool is_trailers_only() const override { return is_trailers_only_; }
2660
-
2661
- grpc_call_error StartBatch(const grpc_op* ops, size_t nops, void* notify_tag,
2662
- bool is_notify_tag_closure) override;
2663
-
2664
- std::string DebugTag() const override {
2665
- return absl::StrFormat("CLIENT_CALL[%p]: ", this);
2666
- }
2667
-
2668
- RefCountedPtr<CallSpineInterface> MakeCallSpine(CallArgs call_args) final {
2669
- class WrappingCallSpine final : public PipeBasedCallSpine {
2670
- public:
2671
- WrappingCallSpine(ClientPromiseBasedCall* call,
2672
- ClientMetadataHandle metadata)
2673
- : call_(call) {
2674
- call_->InternalRef("call-spine");
2675
- SpawnInfallible(
2676
- "send_client_initial_metadata",
2677
- [self = Ref(), metadata = std::move(metadata)]() mutable {
2678
- return Map(self->client_initial_metadata_.sender.Push(
2679
- std::move(metadata)),
2680
- [self](bool) { return Empty{}; });
2681
- });
2682
- }
2683
-
2684
- ~WrappingCallSpine() override {
2685
- {
2686
- ScopedContext context(call_);
2687
- // Move these out and destroy before the internal unref.
2688
- auto client_initial_metadata = std::move(client_initial_metadata_);
2689
- auto server_trailing_metadata = std::move(server_trailing_metadata_);
2690
- }
2691
- call_->InternalUnref("call-spine");
2692
- }
2693
-
2694
- Pipe<ClientMetadataHandle>& client_initial_metadata() override {
2695
- return client_initial_metadata_;
2696
- }
2697
-
2698
- Pipe<MessageHandle>& client_to_server_messages() override {
2699
- return call_->client_to_server_messages_;
2700
- }
2701
-
2702
- Pipe<ServerMetadataHandle>& server_initial_metadata() override {
2703
- return call_->server_initial_metadata_;
2704
- }
2705
-
2706
- Pipe<MessageHandle>& server_to_client_messages() override {
2707
- return call_->server_to_client_messages_;
2708
- }
2709
-
2710
- Latch<ServerMetadataHandle>& cancel_latch() override {
2711
- return cancel_error_;
2712
- }
2713
-
2714
- Latch<bool>& was_cancelled_latch() override {
2715
- return was_cancelled_latch_;
2716
- }
2717
-
2718
- Party& party() override { return *call_; }
2719
- Arena* arena() override { return call_->arena(); }
2720
-
2721
- void IncrementRefCount() override { refs_.Ref(); }
2722
- void Unref() override {
2723
- if (refs_.Unref()) delete this;
2724
- }
2725
- RefCountedPtr<WrappingCallSpine> Ref() {
2726
- IncrementRefCount();
2727
- return RefCountedPtr<WrappingCallSpine>(this);
2728
- }
2729
-
2730
- ClientMetadata& UnprocessedClientInitialMetadata() override {
2731
- Crash("not for v2");
2732
- }
2733
-
2734
- void V2HackToStartCallWithoutACallFilterStack() override {}
2735
-
2736
- private:
2737
- RefCount refs_;
2738
- ClientPromiseBasedCall* const call_;
2739
- std::atomic<bool> sent_trailing_metadata_{false};
2740
- Pipe<ClientMetadataHandle> client_initial_metadata_{call_->arena()};
2741
- Pipe<ServerMetadataHandle> server_trailing_metadata_{call_->arena()};
2742
- Latch<ServerMetadataHandle> cancel_error_;
2743
- Latch<bool> was_cancelled_latch_;
2744
- };
2745
- CHECK(call_args.server_initial_metadata ==
2746
- &server_initial_metadata_.sender);
2747
- CHECK(call_args.client_to_server_messages ==
2748
- &client_to_server_messages_.receiver);
2749
- CHECK(call_args.server_to_client_messages ==
2750
- &server_to_client_messages_.sender);
2751
- call_args.client_initial_metadata_outstanding.Complete(true);
2752
- return MakeRefCounted<WrappingCallSpine>(
2753
- this, std::move(call_args.client_initial_metadata));
2754
- }
2755
-
2756
- private:
2757
- // Finish the call with the given status/trailing metadata.
2758
- void Finish(ServerMetadataHandle trailing_metadata);
2759
- // Validate that a set of ops is valid for a client call.
2760
- grpc_call_error ValidateBatch(const grpc_op* ops, size_t nops) const;
2761
- // Commit a valid batch of operations to be executed.
2762
- void CommitBatch(const grpc_op* ops, size_t nops,
2763
- const Completion& completion);
2764
- // Start the underlying promise.
2765
- void StartPromise(ClientMetadataHandle client_initial_metadata,
2766
- const Completion& completion, Party::BulkSpawner& spawner);
2767
- // Start receiving initial metadata
2768
- void StartRecvInitialMetadata(grpc_metadata_array* array,
2769
- const Completion& completion,
2770
- Party::BulkSpawner& spawner);
2771
- void StartRecvStatusOnClient(
2772
- const Completion& completion,
2773
- grpc_op::grpc_op_data::grpc_op_recv_status_on_client op_args,
2774
- Party::BulkSpawner& spawner);
2775
- // Publish status out to the application.
2776
- void PublishStatus(
2777
- grpc_op::grpc_op_data::grpc_op_recv_status_on_client op_args,
2778
- ServerMetadataHandle trailing_metadata);
2779
- // Publish server initial metadata out to the application.
2780
- void PublishInitialMetadata(ServerMetadata* metadata);
2781
-
2782
- ClientMetadataHandle send_initial_metadata_;
2783
- Pipe<ServerMetadataHandle> server_initial_metadata_{arena()};
2784
- Latch<ServerMetadataHandle> server_trailing_metadata_;
2785
- Latch<ServerMetadataHandle> cancel_error_;
2786
- Latch<grpc_polling_entity> polling_entity_;
2787
- Pipe<MessageHandle> client_to_server_messages_{arena()};
2788
- Pipe<MessageHandle> server_to_client_messages_{arena()};
2789
- bool is_trailers_only_ = false;
2790
- bool scheduled_receive_status_ = false;
2791
- bool scheduled_send_close_ = false;
2792
- // True once the promise for the call is started.
2793
- // This corresponds to sending initial metadata, or cancelling before doing
2794
- // so.
2795
- // In the latter case real world code sometimes does not sent the initial
2796
- // metadata, and so gating based upon that does not work out.
2797
- std::atomic<bool> started_{false};
2798
- // True after the first CancelWithError call - prevents spamming cancels from
2799
- // overflowing the party.
2800
- std::atomic<bool> cancel_with_error_called_{false};
2801
- // TODO(ctiller): delete when we remove the filter based API (may require some
2802
- // cleanup in wrapped languages: they depend on this to hold slice refs)
2803
- ServerMetadataHandle recv_initial_metadata_;
2804
- ServerMetadataHandle recv_trailing_metadata_;
2805
- };
2806
-
2807
- void ClientPromiseBasedCall::StartPromise(
2808
- ClientMetadataHandle client_initial_metadata, const Completion& completion,
2809
- Party::BulkSpawner& spawner) {
2810
- auto token = ClientInitialMetadataOutstandingToken::New(arena());
2811
- spawner.Spawn(
2812
- "call_send_initial_metadata", token.Wait(),
2813
- [this,
2814
- completion = AddOpToCompletion(
2815
- completion, PendingOp::kSendInitialMetadata)](bool result) mutable {
2816
- if (!result) FailCompletion(completion);
2817
- FinishOpOnCompletion(&completion, PendingOp::kSendInitialMetadata);
2818
- });
2819
- spawner.Spawn(
2820
- "client_promise",
2821
- [this, client_initial_metadata = std::move(client_initial_metadata),
2822
- token = std::move(token)]() mutable {
2823
- return Race(
2824
- cancel_error_.Wait(),
2825
- Map(channel()->channel_stack()->MakeClientCallPromise(CallArgs{
2826
- std::move(client_initial_metadata), std::move(token),
2827
- &polling_entity_, &server_initial_metadata_.sender,
2828
- &client_to_server_messages_.receiver,
2829
- &server_to_client_messages_.sender}),
2830
- [this](ServerMetadataHandle trailing_metadata) {
2831
- // If we're cancelled the transport doesn't get to return
2832
- // stats.
2833
- AcceptTransportStatsFromContext();
2834
- return trailing_metadata;
2835
- }));
2836
- },
2837
- [this](ServerMetadataHandle trailing_metadata) {
2838
- Finish(std::move(trailing_metadata));
2839
- });
2840
- }
2841
-
2842
- grpc_call_error ClientPromiseBasedCall::ValidateBatch(const grpc_op* ops,
2843
- size_t nops) const {
2844
- BitSet<8> got_ops;
2845
- for (size_t op_idx = 0; op_idx < nops; op_idx++) {
2846
- const grpc_op& op = ops[op_idx];
2847
- switch (op.op) {
2848
- case GRPC_OP_SEND_INITIAL_METADATA:
2849
- if (!AreInitialMetadataFlagsValid(op.flags)) {
2850
- return GRPC_CALL_ERROR_INVALID_FLAGS;
2851
- }
2852
- if (!ValidateMetadata(op.data.send_initial_metadata.count,
2853
- op.data.send_initial_metadata.metadata)) {
2854
- return GRPC_CALL_ERROR_INVALID_METADATA;
2855
- }
2856
- break;
2857
- case GRPC_OP_SEND_MESSAGE:
2858
- if (!AreWriteFlagsValid(op.flags)) {
2859
- return GRPC_CALL_ERROR_INVALID_FLAGS;
2860
- }
2861
- break;
2862
- case GRPC_OP_RECV_INITIAL_METADATA:
2863
- case GRPC_OP_RECV_MESSAGE:
2864
- if (op.flags != 0) return GRPC_CALL_ERROR_INVALID_FLAGS;
2865
- break;
2866
- case GRPC_OP_SEND_CLOSE_FROM_CLIENT:
2867
- if (scheduled_send_close_) return GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
2868
- if (op.flags != 0) return GRPC_CALL_ERROR_INVALID_FLAGS;
2869
- break;
2870
- case GRPC_OP_RECV_STATUS_ON_CLIENT:
2871
- if (op.flags != 0) return GRPC_CALL_ERROR_INVALID_FLAGS;
2872
- if (scheduled_receive_status_) {
2873
- return GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
2874
- }
2875
- break;
2876
- case GRPC_OP_RECV_CLOSE_ON_SERVER:
2877
- case GRPC_OP_SEND_STATUS_FROM_SERVER:
2878
- return GRPC_CALL_ERROR_NOT_ON_CLIENT;
2879
- }
2880
- if (got_ops.is_set(op.op)) {
2881
- return GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
2882
- }
2883
- got_ops.set(op.op);
2884
- }
2885
- return GRPC_CALL_OK;
2886
- }
2887
-
2888
- void ClientPromiseBasedCall::CommitBatch(const grpc_op* ops, size_t nops,
2889
- const Completion& completion) {
2890
- Party::BulkSpawner spawner(this);
2891
- for (size_t op_idx = 0; op_idx < nops; op_idx++) {
2892
- const grpc_op& op = ops[op_idx];
2893
- switch (op.op) {
2894
- case GRPC_OP_SEND_INITIAL_METADATA: {
2895
- if (started_.exchange(true, std::memory_order_relaxed)) break;
2896
- CToMetadata(op.data.send_initial_metadata.metadata,
2897
- op.data.send_initial_metadata.count,
2898
- send_initial_metadata_.get());
2899
- PrepareOutgoingInitialMetadata(op, *send_initial_metadata_);
2900
- if (send_deadline() != Timestamp::InfFuture()) {
2901
- send_initial_metadata_->Set(GrpcTimeoutMetadata(), send_deadline());
2902
- }
2903
- send_initial_metadata_->Set(
2904
- WaitForReady(),
2905
- WaitForReady::ValueType{
2906
- (op.flags & GRPC_INITIAL_METADATA_WAIT_FOR_READY) != 0,
2907
- (op.flags &
2908
- GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET) != 0});
2909
- StartPromise(std::move(send_initial_metadata_), completion, spawner);
2910
- } break;
2911
- case GRPC_OP_RECV_INITIAL_METADATA: {
2912
- StartRecvInitialMetadata(
2913
- op.data.recv_initial_metadata.recv_initial_metadata, completion,
2914
- spawner);
2915
- } break;
2916
- case GRPC_OP_RECV_STATUS_ON_CLIENT: {
2917
- scheduled_receive_status_ = true;
2918
- StartRecvStatusOnClient(completion, op.data.recv_status_on_client,
2919
- spawner);
2920
- } break;
2921
- case GRPC_OP_SEND_MESSAGE:
2922
- StartSendMessage(op, completion, &client_to_server_messages_.sender,
2923
- spawner);
2924
- break;
2925
- case GRPC_OP_RECV_MESSAGE:
2926
- StartRecvMessage(
2927
- op, completion,
2928
- [this]() {
2929
- return Race(server_initial_metadata_.receiver.AwaitClosed(),
2930
- server_to_client_messages_.receiver.AwaitClosed());
2931
- },
2932
- &server_to_client_messages_.receiver, false, spawner);
2933
- break;
2934
- case GRPC_OP_SEND_CLOSE_FROM_CLIENT:
2935
- scheduled_send_close_ = true;
2936
- spawner.Spawn(
2937
- "send_close_from_client",
2938
- [this]() {
2939
- client_to_server_messages_.sender.Close();
2940
- return Empty{};
2941
- },
2942
- [this,
2943
- completion = AddOpToCompletion(
2944
- completion, PendingOp::kSendCloseFromClient)](Empty) mutable {
2945
- FinishOpOnCompletion(&completion,
2946
- PendingOp::kSendCloseFromClient);
2947
- });
2948
- break;
2949
- case GRPC_OP_SEND_STATUS_FROM_SERVER:
2950
- case GRPC_OP_RECV_CLOSE_ON_SERVER:
2951
- abort(); // unreachable
2952
- }
2953
- }
2954
- }
2955
-
2956
- grpc_call_error ClientPromiseBasedCall::StartBatch(const grpc_op* ops,
2957
- size_t nops,
2958
- void* notify_tag,
2959
- bool is_notify_tag_closure) {
2960
- if (nops == 0) {
2961
- EndOpImmediately(cq(), notify_tag, is_notify_tag_closure);
2962
- return GRPC_CALL_OK;
2963
- }
2964
- const grpc_call_error validation_result = ValidateBatch(ops, nops);
2965
- if (validation_result != GRPC_CALL_OK) {
2966
- return validation_result;
2967
- }
2968
- Completion completion =
2969
- StartCompletion(notify_tag, is_notify_tag_closure, ops);
2970
- CommitBatch(ops, nops, completion);
2971
- FinishOpOnCompletion(&completion, PendingOp::kStartingBatch);
2972
- return GRPC_CALL_OK;
2973
- }
2974
-
2975
- void ClientPromiseBasedCall::StartRecvInitialMetadata(
2976
- grpc_metadata_array* array, const Completion& completion,
2977
- Party::BulkSpawner& spawner) {
2978
- spawner.Spawn(
2979
- "recv_initial_metadata",
2980
- [this]() {
2981
- return Race(server_initial_metadata_.receiver.Next(),
2982
- Map(finished(), [](Empty) {
2983
- return NextResult<ServerMetadataHandle>(true);
2984
- }));
2985
- },
2986
- [this, array,
2987
- completion =
2988
- AddOpToCompletion(completion, PendingOp::kReceiveInitialMetadata)](
2989
- NextResult<ServerMetadataHandle> next_metadata) mutable {
2990
- server_initial_metadata_.sender.Close();
2991
- ServerMetadataHandle metadata;
2992
- if (grpc_call_trace.enabled()) {
2993
- gpr_log(GPR_INFO, "%s[call] RecvTrailingMetadata: %s",
2994
- DebugTag().c_str(),
2995
- next_metadata.has_value()
2996
- ? next_metadata.value()->DebugString().c_str()
2997
- : "null");
2998
- }
2999
- if (next_metadata.has_value()) {
3000
- metadata = std::move(next_metadata.value());
3001
- is_trailers_only_ = metadata->get(GrpcTrailersOnly()).value_or(false);
3002
- } else {
3003
- is_trailers_only_ = true;
3004
- metadata = arena()->MakePooled<ServerMetadata>();
3005
- }
3006
- ProcessIncomingInitialMetadata(*metadata);
3007
- PublishMetadataArray(metadata.get(), array, true);
3008
- recv_initial_metadata_ = std::move(metadata);
3009
- FinishOpOnCompletion(&completion, PendingOp::kReceiveInitialMetadata);
3010
- });
3011
- }
3012
-
3013
- void ClientPromiseBasedCall::Finish(ServerMetadataHandle trailing_metadata) {
3014
- if (grpc_call_trace.enabled()) {
3015
- gpr_log(GPR_INFO, "%s[call] Finish: %s", DebugTag().c_str(),
3016
- trailing_metadata->DebugString().c_str());
3017
- }
3018
- ResetDeadline();
3019
- set_completed();
3020
- client_to_server_messages_.sender.CloseWithError();
3021
- client_to_server_messages_.receiver.CloseWithError();
3022
- if (trailing_metadata->get(GrpcCallWasCancelled()).value_or(false)) {
3023
- server_to_client_messages_.receiver.CloseWithError();
3024
- server_initial_metadata_.receiver.CloseWithError();
3025
- }
3026
- if (auto* channelz_channel = channel()->channelz_node()) {
3027
- if (trailing_metadata->get(GrpcStatusMetadata())
3028
- .value_or(GRPC_STATUS_UNKNOWN) == GRPC_STATUS_OK) {
3029
- channelz_channel->RecordCallSucceeded();
3030
- } else {
3031
- channelz_channel->RecordCallFailed();
3032
- }
3033
- }
3034
- server_trailing_metadata_.Set(std::move(trailing_metadata));
3035
- }
3036
-
3037
- namespace {
3038
- std::string MakeErrorString(const ServerMetadata* trailing_metadata) {
3039
- std::string out = absl::StrCat(
3040
- trailing_metadata->get(GrpcStatusFromWire()).value_or(false)
3041
- ? "Error received from peer"
3042
- : "Error generated by client",
3043
- "grpc_status: ",
3044
- grpc_status_code_to_string(trailing_metadata->get(GrpcStatusMetadata())
3045
- .value_or(GRPC_STATUS_UNKNOWN)));
3046
- if (const Slice* message =
3047
- trailing_metadata->get_pointer(GrpcMessageMetadata())) {
3048
- absl::StrAppend(&out, "\ngrpc_message: ", message->as_string_view());
3049
- }
3050
- if (auto annotations = trailing_metadata->get_pointer(GrpcStatusContext())) {
3051
- absl::StrAppend(&out, "\nStatus Context:");
3052
- for (const std::string& annotation : *annotations) {
3053
- absl::StrAppend(&out, "\n ", annotation);
3054
- }
3055
- }
3056
- return out;
3057
- }
3058
- } // namespace
3059
-
3060
- void ClientPromiseBasedCall::StartRecvStatusOnClient(
3061
- const Completion& completion,
3062
- grpc_op::grpc_op_data::grpc_op_recv_status_on_client op_args,
3063
- Party::BulkSpawner& spawner) {
3064
- ForceCompletionSuccess(completion);
3065
- spawner.Spawn(
3066
- "recv_status_on_client", server_trailing_metadata_.Wait(),
3067
- [this, op_args,
3068
- completion =
3069
- AddOpToCompletion(completion, PendingOp::kReceiveStatusOnClient)](
3070
- ServerMetadataHandle trailing_metadata) mutable {
3071
- const grpc_status_code status =
3072
- trailing_metadata->get(GrpcStatusMetadata())
3073
- .value_or(GRPC_STATUS_UNKNOWN);
3074
- *op_args.status = status;
3075
- Slice message_slice;
3076
- if (Slice* message =
3077
- trailing_metadata->get_pointer(GrpcMessageMetadata())) {
3078
- message_slice = message->Ref();
3079
- }
3080
- SetFinalizationStatus(status, message_slice.Ref());
3081
- *op_args.status_details = message_slice.TakeCSlice();
3082
- if (op_args.error_string != nullptr && status != GRPC_STATUS_OK) {
3083
- *op_args.error_string =
3084
- gpr_strdup(MakeErrorString(trailing_metadata.get()).c_str());
3085
- }
3086
- PublishMetadataArray(trailing_metadata.get(), op_args.trailing_metadata,
3087
- true);
3088
- recv_trailing_metadata_ = std::move(trailing_metadata);
3089
- FinishOpOnCompletion(&completion, PendingOp::kReceiveStatusOnClient);
3090
- });
3091
- }
3092
- #endif
3093
-
3094
- ///////////////////////////////////////////////////////////////////////////////
3095
- // ServerPromiseBasedCall
3096
-
3097
- #ifdef GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_SERVER_CALL
3098
-
3099
- class ServerPromiseBasedCall final : public PromiseBasedCall,
3100
- public ServerCallContext {
3101
- public:
3102
- ServerPromiseBasedCall(Arena* arena, grpc_call_create_args* args);
3103
-
3104
- void OrphanCall() override {}
3105
- void CancelWithError(grpc_error_handle) override;
3106
- grpc_call_error StartBatch(const grpc_op* ops, size_t nops, void* notify_tag,
3107
- bool is_notify_tag_closure) override;
3108
- bool is_trailers_only() const override {
3109
- Crash("is_trailers_only not implemented for server calls");
3110
- }
3111
- absl::string_view GetServerAuthority() const override {
3112
- const Slice* authority_metadata =
3113
- client_initial_metadata_->get_pointer(HttpAuthorityMetadata());
3114
- if (authority_metadata == nullptr) return "";
3115
- return authority_metadata->as_string_view();
3116
- }
3117
-
3118
- // Polling order for the server promise stack:
3119
- //
3120
- // │ ┌───────────────────────────────────────┐
3121
- // │ │ ServerPromiseBasedCall ├──► Lifetime management
3122
- // │ ├───────────────────────────────────────┤
3123
- // │ │ ConnectedChannel ├─┐
3124
- // │ ├───────────────────────────────────────┤ └► Interactions with the
3125
- // │ │ ... closest to transport filter │ transport - send/recv msgs
3126
- // │ ├───────────────────────────────────────┤ and metadata, call phase
3127
- // │ │ ... │ ordering
3128
- // │ ├───────────────────────────────────────┤
3129
- // │ │ ... closest to app filter │ ┌► Request matching, initial
3130
- // │ ├───────────────────────────────────────┤ │ setup, publishing call to
3131
- // │ │ Server::ChannelData::MakeCallPromise ├─┘ application
3132
- // │ ├───────────────────────────────────────┤
3133
- // │ │ MakeTopOfServerCallPromise ├──► Send trailing metadata
3134
- // ▼ └───────────────────────────────────────┘
3135
- // Polling &
3136
- // instantiation
3137
- // order
3138
-
3139
- std::string DebugTag() const override {
3140
- return absl::StrFormat("SERVER_CALL[%p]: ", this);
3141
- }
3142
-
3143
- ServerCallContext* server_call_context() override { return this; }
3144
-
3145
- const void* server_stream_data() override { return server_transport_data_; }
3146
- void PublishInitialMetadata(
3147
- ClientMetadataHandle metadata,
3148
- grpc_metadata_array* publish_initial_metadata) override;
3149
- ArenaPromise<ServerMetadataHandle> MakeTopOfServerCallPromise(
3150
- CallArgs call_args, grpc_completion_queue* cq,
3151
- absl::FunctionRef<void(grpc_call* call)> publish) override;
3152
-
3153
- private:
3154
- class RecvCloseOpCancelState {
3155
- public:
3156
- // Request that receiver be filled in per
3157
- // grpc_op_recv_close_on_server. Returns true if the request can
3158
- // be fulfilled immediately. Returns false if the request will be
3159
- // fulfilled later.
3160
- bool ReceiveCloseOnServerOpStarted(int* receiver) {
3161
- uintptr_t state = state_.load(std::memory_order_acquire);
3162
- uintptr_t new_state;
3163
- do {
3164
- switch (state) {
3165
- case kUnset:
3166
- new_state = reinterpret_cast<uintptr_t>(receiver);
3167
- break;
3168
- case kFinishedWithFailure:
3169
- *receiver = 1;
3170
- return true;
3171
- case kFinishedWithSuccess:
3172
- *receiver = 0;
3173
- return true;
3174
- default:
3175
- Crash("Two threads offered ReceiveCloseOnServerOpStarted");
3176
- }
3177
- } while (!state_.compare_exchange_weak(state, new_state,
3178
- std::memory_order_acq_rel,
3179
- std::memory_order_acquire));
3180
- return false;
3181
- }
3182
-
3183
- // Mark the call as having completed.
3184
- // Returns true if this finishes a previous
3185
- // RequestReceiveCloseOnServer.
3186
- bool CompleteCallWithCancelledSetTo(bool cancelled) {
3187
- uintptr_t state = state_.load(std::memory_order_acquire);
3188
- uintptr_t new_state;
3189
- bool r;
3190
- do {
3191
- switch (state) {
3192
- case kUnset:
3193
- new_state = cancelled ? kFinishedWithFailure : kFinishedWithSuccess;
3194
- r = false;
3195
- break;
3196
- case kFinishedWithFailure:
3197
- return false;
3198
- case kFinishedWithSuccess:
3199
- Crash("unreachable");
3200
- default:
3201
- new_state = cancelled ? kFinishedWithFailure : kFinishedWithSuccess;
3202
- r = true;
3203
- }
3204
- } while (!state_.compare_exchange_weak(state, new_state,
3205
- std::memory_order_acq_rel,
3206
- std::memory_order_acquire));
3207
- if (r) *reinterpret_cast<int*>(state) = cancelled ? 1 : 0;
3208
- return r;
3209
- }
3210
-
3211
- std::string ToString() const {
3212
- auto state = state_.load(std::memory_order_relaxed);
3213
- switch (state) {
3214
- case kUnset:
3215
- return "Unset";
3216
- case kFinishedWithFailure:
3217
- return "FinishedWithFailure";
3218
- case kFinishedWithSuccess:
3219
- return "FinishedWithSuccess";
3220
- default:
3221
- return absl::StrFormat("WaitingForReceiver(%p)",
3222
- reinterpret_cast<void*>(state));
3223
- }
3224
- }
3225
-
3226
- private:
3227
- static constexpr uintptr_t kUnset = 0;
3228
- static constexpr uintptr_t kFinishedWithFailure = 1;
3229
- static constexpr uintptr_t kFinishedWithSuccess = 2;
3230
- // Holds one of kUnset, kFinishedWithFailure, or
3231
- // kFinishedWithSuccess OR an int* that wants to receive the
3232
- // final status.
3233
- std::atomic<uintptr_t> state_{kUnset};
3234
- };
3235
-
3236
- void CommitBatch(const grpc_op* ops, size_t nops,
3237
- const Completion& completion);
3238
- void Finish(ServerMetadataHandle result);
3239
-
3240
- ServerInterface* const server_;
3241
- const void* const server_transport_data_;
3242
- PipeSender<ServerMetadataHandle>* server_initial_metadata_ = nullptr;
3243
- PipeSender<MessageHandle>* server_to_client_messages_ = nullptr;
3244
- PipeReceiver<MessageHandle>* client_to_server_messages_ = nullptr;
3245
- Latch<ServerMetadataHandle> send_trailing_metadata_;
3246
- RecvCloseOpCancelState recv_close_op_cancel_state_;
3247
- ClientMetadataHandle client_initial_metadata_;
3248
- Completion recv_close_completion_;
3249
- std::atomic<bool> cancelled_{false};
3250
- };
3251
-
3252
- ServerPromiseBasedCall::ServerPromiseBasedCall(Arena* arena,
3253
- grpc_call_create_args* args)
3254
- : PromiseBasedCall(arena, 0, *args),
3255
- server_(args->server),
3256
- server_transport_data_(args->server_transport_data) {
3257
- global_stats().IncrementServerCallsCreated();
3258
- channelz::ServerNode* channelz_node = server_->channelz_node();
3259
- if (channelz_node != nullptr) {
3260
- channelz_node->RecordCallStarted();
3261
- }
3262
- ScopedContext activity_context(this);
3263
- // TODO(yashykt): In the future, we want to also enable stats and trace
3264
- // collecting from when the call is created at the transport. The idea is that
3265
- // the transport would create the call tracer and pass it in as part of the
3266
- // metadata.
3267
- // TODO(yijiem): OpenCensus and internal Census is still using this way to
3268
- // set server call tracer. We need to refactor them to stats plugins
3269
- // (including removing the client channel filters).
3270
- if (args->server != nullptr &&
3271
- args->server->server_call_tracer_factory() != nullptr) {
3272
- auto* server_call_tracer =
3273
- args->server->server_call_tracer_factory()->CreateNewServerCallTracer(
3274
- arena, args->server->channel_args());
3275
- if (server_call_tracer != nullptr) {
3276
- // Note that we are setting both
3277
- // GRPC_CONTEXT_CALL_TRACER_ANNOTATION_INTERFACE and
3278
- // GRPC_CONTEXT_CALL_TRACER as a matter of convenience. In the future
3279
- // promise-based world, we would just a single tracer object for each
3280
- // stack (call, subchannel_call, server_call.)
3281
- ContextSet(GRPC_CONTEXT_CALL_TRACER_ANNOTATION_INTERFACE,
3282
- server_call_tracer, nullptr);
3283
- ContextSet(GRPC_CONTEXT_CALL_TRACER, server_call_tracer, nullptr);
3284
- }
3285
- }
3286
- args->channel->channel_stack()->stats_plugin_group->AddServerCallTracers(
3287
- context());
3288
- Spawn("server_promise",
3289
- channel()->channel_stack()->MakeServerCallPromise(
3290
- CallArgs{nullptr, ClientInitialMetadataOutstandingToken::Empty(),
3291
- nullptr, nullptr, nullptr, nullptr}),
3292
- [this](ServerMetadataHandle result) { Finish(std::move(result)); });
3293
- }
3294
-
3295
- void ServerPromiseBasedCall::Finish(ServerMetadataHandle result) {
3296
- if (grpc_call_trace.enabled()) {
3297
- gpr_log(GPR_INFO, "%s[call] Finish: recv_close_state:%s result:%s",
3298
- DebugTag().c_str(), recv_close_op_cancel_state_.ToString().c_str(),
3299
- result->DebugString().c_str());
3300
- }
3301
- const auto status =
3302
- result->get(GrpcStatusMetadata()).value_or(GRPC_STATUS_UNKNOWN);
3303
- channelz::ServerNode* channelz_node = server_->channelz_node();
3304
- if (channelz_node != nullptr) {
3305
- if (status == GRPC_STATUS_OK) {
3306
- channelz_node->RecordCallSucceeded();
3307
- } else {
3308
- channelz_node->RecordCallFailed();
3309
- }
3310
- }
3311
- bool was_cancelled = result->get(GrpcCallWasCancelled()).value_or(true);
3312
- if (recv_close_op_cancel_state_.CompleteCallWithCancelledSetTo(
3313
- was_cancelled)) {
3314
- FinishOpOnCompletion(&recv_close_completion_,
3315
- PendingOp::kReceiveCloseOnServer);
3316
- }
3317
- if (was_cancelled) set_failed_before_recv_message();
3318
- if (server_initial_metadata_ != nullptr) {
3319
- server_initial_metadata_->Close();
3320
- }
3321
- Slice message_slice;
3322
- if (Slice* message = result->get_pointer(GrpcMessageMetadata())) {
3323
- message_slice = message->Ref();
3324
- }
3325
- AcceptTransportStatsFromContext();
3326
- SetFinalizationStatus(status, std::move(message_slice));
3327
- set_completed();
3328
- ResetDeadline();
3329
- PropagateCancellationToChildren();
3330
- }
3331
-
3332
- grpc_call_error ValidateServerBatch(const grpc_op* ops, size_t nops) {
3333
- BitSet<8> got_ops;
3334
- for (size_t op_idx = 0; op_idx < nops; op_idx++) {
3335
- const grpc_op& op = ops[op_idx];
3336
- switch (op.op) {
3337
- case GRPC_OP_SEND_INITIAL_METADATA:
3338
- if (!AreInitialMetadataFlagsValid(op.flags)) {
3339
- return GRPC_CALL_ERROR_INVALID_FLAGS;
3340
- }
3341
- if (!ValidateMetadata(op.data.send_initial_metadata.count,
3342
- op.data.send_initial_metadata.metadata)) {
3343
- return GRPC_CALL_ERROR_INVALID_METADATA;
3344
- }
3345
- break;
3346
- case GRPC_OP_SEND_MESSAGE:
3347
- if (!AreWriteFlagsValid(op.flags)) {
3348
- return GRPC_CALL_ERROR_INVALID_FLAGS;
3349
- }
3350
- break;
3351
- case GRPC_OP_SEND_STATUS_FROM_SERVER:
3352
- if (op.flags != 0) return GRPC_CALL_ERROR_INVALID_FLAGS;
3353
- if (!ValidateMetadata(
3354
- op.data.send_status_from_server.trailing_metadata_count,
3355
- op.data.send_status_from_server.trailing_metadata)) {
3356
- return GRPC_CALL_ERROR_INVALID_METADATA;
3357
- }
3358
- break;
3359
- case GRPC_OP_RECV_MESSAGE:
3360
- case GRPC_OP_RECV_CLOSE_ON_SERVER:
3361
- if (op.flags != 0) return GRPC_CALL_ERROR_INVALID_FLAGS;
3362
- break;
3363
- case GRPC_OP_RECV_INITIAL_METADATA:
3364
- case GRPC_OP_SEND_CLOSE_FROM_CLIENT:
3365
- case GRPC_OP_RECV_STATUS_ON_CLIENT:
3366
- return GRPC_CALL_ERROR_NOT_ON_SERVER;
3367
- }
3368
- if (got_ops.is_set(op.op)) return GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
3369
- got_ops.set(op.op);
3370
- }
3371
- return GRPC_CALL_OK;
3372
- }
3373
-
3374
- void ServerPromiseBasedCall::CommitBatch(const grpc_op* ops, size_t nops,
3375
- const Completion& completion) {
3376
- Party::BulkSpawner spawner(this);
3377
- for (size_t op_idx = 0; op_idx < nops; op_idx++) {
3378
- const grpc_op& op = ops[op_idx];
3379
- switch (op.op) {
3380
- case GRPC_OP_SEND_INITIAL_METADATA: {
3381
- auto metadata = arena()->MakePooled<ServerMetadata>();
3382
- PrepareOutgoingInitialMetadata(op, *metadata);
3383
- CToMetadata(op.data.send_initial_metadata.metadata,
3384
- op.data.send_initial_metadata.count, metadata.get());
3385
- if (grpc_call_trace.enabled()) {
3386
- gpr_log(GPR_INFO, "%s[call] Send initial metadata",
3387
- DebugTag().c_str());
3388
- }
3389
- QueueSend();
3390
- spawner.Spawn(
3391
- "call_send_initial_metadata",
3392
- [this, metadata = std::move(metadata)]() mutable {
3393
- EnactSend();
3394
- return server_initial_metadata_->Push(std::move(metadata));
3395
- },
3396
- [this,
3397
- completion = AddOpToCompletion(
3398
- completion, PendingOp::kSendInitialMetadata)](bool r) mutable {
3399
- if (!r) {
3400
- set_failed_before_recv_message();
3401
- FailCompletion(completion);
3402
- }
3403
- FinishOpOnCompletion(&completion,
3404
- PendingOp::kSendInitialMetadata);
3405
- });
3406
- } break;
3407
- case GRPC_OP_SEND_MESSAGE:
3408
- StartSendMessage(op, completion, server_to_client_messages_, spawner);
3409
- break;
3410
- case GRPC_OP_RECV_MESSAGE:
3411
- if (cancelled_.load(std::memory_order_relaxed)) {
3412
- set_failed_before_recv_message();
3413
- FailCompletion(completion);
3414
- break;
3415
- }
3416
- StartRecvMessage(
3417
- op, completion, []() { return []() { return Empty{}; }; },
3418
- client_to_server_messages_, true, spawner);
3419
- break;
3420
- case GRPC_OP_SEND_STATUS_FROM_SERVER: {
3421
- auto metadata = arena()->MakePooled<ServerMetadata>();
3422
- CToMetadata(op.data.send_status_from_server.trailing_metadata,
3423
- op.data.send_status_from_server.trailing_metadata_count,
3424
- metadata.get());
3425
- metadata->Set(GrpcStatusMetadata(),
3426
- op.data.send_status_from_server.status);
3427
- if (auto* details = op.data.send_status_from_server.status_details) {
3428
- // TODO(ctiller): this should not be a copy, but we have callers that
3429
- // allocate and pass in a slice created with
3430
- // grpc_slice_from_static_string and then delete the string after
3431
- // passing it in, which shouldn't be a supported API.
3432
- metadata->Set(GrpcMessageMetadata(),
3433
- Slice(grpc_slice_copy(*details)));
3434
- }
3435
- spawner.Spawn(
3436
- "call_send_status_from_server",
3437
- [this, metadata = std::move(metadata)]() mutable {
3438
- bool r = true;
3439
- if (send_trailing_metadata_.is_set()) {
3440
- r = false;
3441
- } else {
3442
- send_trailing_metadata_.Set(std::move(metadata));
3443
- }
3444
- return Map(WaitForSendingStarted(), [this, r](Empty) {
3445
- server_initial_metadata_->Close();
3446
- server_to_client_messages_->Close();
3447
- return r;
3448
- });
3449
- },
3450
- [this, completion = AddOpToCompletion(
3451
- completion, PendingOp::kSendStatusFromServer)](
3452
- bool ok) mutable {
3453
- if (!ok) {
3454
- set_failed_before_recv_message();
3455
- FailCompletion(completion);
3456
- }
3457
- FinishOpOnCompletion(&completion,
3458
- PendingOp::kSendStatusFromServer);
3459
- });
3460
- } break;
3461
- case GRPC_OP_RECV_CLOSE_ON_SERVER:
3462
- if (grpc_call_trace.enabled()) {
3463
- gpr_log(GPR_INFO, "%s[call] StartBatch: RecvClose %s",
3464
- DebugTag().c_str(),
3465
- recv_close_op_cancel_state_.ToString().c_str());
3466
- }
3467
- ForceCompletionSuccess(completion);
3468
- recv_close_completion_ =
3469
- AddOpToCompletion(completion, PendingOp::kReceiveCloseOnServer);
3470
- if (recv_close_op_cancel_state_.ReceiveCloseOnServerOpStarted(
3471
- op.data.recv_close_on_server.cancelled)) {
3472
- FinishOpOnCompletion(&recv_close_completion_,
3473
- PendingOp::kReceiveCloseOnServer);
3474
- }
3475
- break;
3476
- case GRPC_OP_RECV_STATUS_ON_CLIENT:
3477
- case GRPC_OP_SEND_CLOSE_FROM_CLIENT:
3478
- case GRPC_OP_RECV_INITIAL_METADATA:
3479
- abort(); // unreachable
3480
- }
3481
- }
3482
- }
3483
-
3484
- grpc_call_error ServerPromiseBasedCall::StartBatch(const grpc_op* ops,
3485
- size_t nops,
3486
- void* notify_tag,
3487
- bool is_notify_tag_closure) {
3488
- if (nops == 0) {
3489
- EndOpImmediately(cq(), notify_tag, is_notify_tag_closure);
3490
- return GRPC_CALL_OK;
3491
- }
3492
- const grpc_call_error validation_result = ValidateServerBatch(ops, nops);
3493
- if (validation_result != GRPC_CALL_OK) {
3494
- return validation_result;
3495
- }
3496
- Completion completion =
3497
- StartCompletion(notify_tag, is_notify_tag_closure, ops);
3498
- CommitBatch(ops, nops, completion);
3499
- FinishOpOnCompletion(&completion, PendingOp::kStartingBatch);
3500
- return GRPC_CALL_OK;
3501
- }
3502
-
3503
- void ServerPromiseBasedCall::CancelWithError(absl::Status error) {
3504
- cancelled_.store(true, std::memory_order_relaxed);
3505
- Spawn(
3506
- "cancel_with_error",
3507
- [this, error = std::move(error)]() {
3508
- if (!send_trailing_metadata_.is_set()) {
3509
- auto md = ServerMetadataFromStatus(error);
3510
- md->Set(GrpcCallWasCancelled(), true);
3511
- send_trailing_metadata_.Set(std::move(md));
3512
- }
3513
- if (server_to_client_messages_ != nullptr) {
3514
- server_to_client_messages_->Close();
3515
- }
3516
- if (server_initial_metadata_ != nullptr) {
3517
- server_initial_metadata_->Close();
3518
- }
3519
- return Empty{};
3520
- },
3521
- [](Empty) {});
3522
- }
3523
- #endif
3524
-
3525
- #ifdef GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_SERVER_CALL
3526
- void ServerPromiseBasedCall::PublishInitialMetadata(
3527
- ClientMetadataHandle metadata,
3528
- grpc_metadata_array* publish_initial_metadata) {
3529
- if (grpc_call_trace.enabled()) {
3530
- gpr_log(GPR_INFO, "%s[call] PublishInitialMetadata: %s", DebugTag().c_str(),
3531
- metadata->DebugString().c_str());
3532
- }
3533
- PublishMetadataArray(metadata.get(), publish_initial_metadata, false);
3534
- client_initial_metadata_ = std::move(metadata);
3535
- }
3536
-
3537
- ArenaPromise<ServerMetadataHandle>
3538
- ServerPromiseBasedCall::MakeTopOfServerCallPromise(
3539
- CallArgs call_args, grpc_completion_queue* cq,
3540
- absl::FunctionRef<void(grpc_call* call)> publish) {
3541
- SetCompletionQueue(cq);
3542
- call_args.polling_entity->Set(
3543
- grpc_polling_entity_create_from_pollset(grpc_cq_pollset(cq)));
3544
- server_to_client_messages_ = call_args.server_to_client_messages;
3545
- client_to_server_messages_ = call_args.client_to_server_messages;
3546
- server_initial_metadata_ = call_args.server_initial_metadata;
3547
- absl::optional<Timestamp> deadline =
3548
- client_initial_metadata_->get(GrpcTimeoutMetadata());
3549
- if (deadline.has_value()) {
3550
- set_send_deadline(*deadline);
3551
- UpdateDeadline(*deadline);
3552
- }
3553
- ProcessIncomingInitialMetadata(*client_initial_metadata_);
3554
- ExternalRef();
3555
- publish(c_ptr());
3556
- return Seq(server_to_client_messages_->AwaitClosed(),
3557
- send_trailing_metadata_.Wait());
3558
- }
3559
-
3560
- ///////////////////////////////////////////////////////////////////////////////
3561
- // CallSpine based Server Call
3562
-
3563
- class ServerCallSpine final : public PipeBasedCallSpine,
3564
- public ServerCallContext,
3565
- public BasicPromiseBasedCall {
3566
- public:
3567
- ServerCallSpine(ClientMetadataHandle client_initial_metadata,
3568
- ServerInterface* server, Channel* channel, Arena* arena);
3569
-
3570
- // CallSpineInterface
3571
- Pipe<ClientMetadataHandle>& client_initial_metadata() override {
3572
- return client_initial_metadata_;
3573
- }
3574
- Pipe<ServerMetadataHandle>& server_initial_metadata() override {
3575
- return server_initial_metadata_;
3576
- }
3577
- Pipe<MessageHandle>& client_to_server_messages() override {
3578
- return client_to_server_messages_;
3579
- }
3580
- Pipe<MessageHandle>& server_to_client_messages() override {
3581
- return server_to_client_messages_;
3582
- }
3583
- Latch<ServerMetadataHandle>& cancel_latch() override { return cancel_latch_; }
3584
- Latch<bool>& was_cancelled_latch() override { return was_cancelled_latch_; }
3585
- Party& party() override { return *this; }
3586
- Arena* arena() override { return BasicPromiseBasedCall::arena(); }
3587
- void IncrementRefCount() override { InternalRef("CallSpine"); }
3588
- void Unref() override { InternalUnref("CallSpine"); }
3589
-
3590
- // PromiseBasedCall
3591
- void OrphanCall() override {
3592
- ResetDeadline();
3593
- CancelWithError(absl::CancelledError());
3594
- }
3595
- void CancelWithError(grpc_error_handle error) override {
3596
- SpawnInfallible("CancelWithError", [this, error = std::move(error)] {
3597
- auto status = ServerMetadataFromStatus(error);
3598
- status->Set(GrpcCallWasCancelled(), true);
3599
- PushServerTrailingMetadata(std::move(status));
3600
- return Empty{};
3601
- });
3602
- }
3603
- bool is_trailers_only() const override {
3604
- Crash("is_trailers_only not implemented for server calls");
3605
- }
3606
- absl::string_view GetServerAuthority() const override {
3607
- Crash("unimplemented");
3608
- }
3609
- grpc_call_error StartBatch(const grpc_op* ops, size_t nops, void* notify_tag,
3610
- bool is_notify_tag_closure) override;
3611
-
3612
- bool Completed() final { Crash("unimplemented"); }
3613
- bool failed_before_recv_message() const final { Crash("unimplemented"); }
3614
-
3615
- ServerCallContext* server_call_context() override { return this; }
3616
- const void* server_stream_data() override { Crash("unimplemented"); }
3617
- void PublishInitialMetadata(
3618
- ClientMetadataHandle metadata,
3619
- grpc_metadata_array* publish_initial_metadata) override;
3620
- ArenaPromise<ServerMetadataHandle> MakeTopOfServerCallPromise(
3621
- CallArgs, grpc_completion_queue*,
3622
- absl::FunctionRef<void(grpc_call* call)>) override {
3623
- Crash("unimplemented");
3624
- }
3625
-
3626
- void V2HackToStartCallWithoutACallFilterStack() override {}
3627
-
3628
- ClientMetadata& UnprocessedClientInitialMetadata() override {
3629
- Crash("not for v2");
3630
- }
3631
-
3632
- bool RunParty() override {
3633
- ScopedContext ctx(this);
3634
- return Party::RunParty();
3635
- }
3636
-
3637
- private:
3638
- void CommitBatch(const grpc_op* ops, size_t nops, void* notify_tag,
3639
- bool is_notify_tag_closure);
3640
- StatusFlag FinishRecvMessage(NextResult<MessageHandle> result);
3641
-
3642
- std::string DebugTag() const override {
3643
- return absl::StrFormat("SERVER_CALL_SPINE[%p]: ", this);
3644
- }
3645
-
3646
- // Initial metadata from client to server
3647
- Pipe<ClientMetadataHandle> client_initial_metadata_;
3648
- // Initial metadata from server to client
3649
- Pipe<ServerMetadataHandle> server_initial_metadata_;
3650
- // Messages travelling from the application to the transport.
3651
- Pipe<MessageHandle> client_to_server_messages_;
3652
- // Messages travelling from the transport to the application.
3653
- Pipe<MessageHandle> server_to_client_messages_;
3654
- // Latch that can be set to terminate the call
3655
- Latch<ServerMetadataHandle> cancel_latch_;
3656
- Latch<bool> was_cancelled_latch_;
3657
- grpc_byte_buffer** recv_message_ = nullptr;
3658
- ClientMetadataHandle client_initial_metadata_stored_;
3659
- };
3660
-
3661
- ServerCallSpine::ServerCallSpine(ClientMetadataHandle client_initial_metadata,
3662
- ServerInterface* server, Channel* channel,
3663
- Arena* arena)
3664
- : BasicPromiseBasedCall(arena, 0, 1,
3665
- [channel, server]() -> grpc_call_create_args {
3666
- grpc_call_create_args args;
3667
- args.channel = channel->Ref();
3668
- args.server = server;
3669
- args.parent = nullptr;
3670
- args.propagation_mask = 0;
3671
- args.cq = nullptr;
3672
- args.pollset_set_alternative = nullptr;
3673
- args.server_transport_data =
3674
- &args; // Arbitrary non-null pointer
3675
- args.send_deadline = Timestamp::InfFuture();
3676
- return args;
3677
- }()),
3678
- client_initial_metadata_(arena),
3679
- server_initial_metadata_(arena),
3680
- client_to_server_messages_(arena),
3681
- server_to_client_messages_(arena) {
3682
- global_stats().IncrementServerCallsCreated();
3683
- ScopedContext ctx(this);
3684
- channel->channel_stack()->InitServerCallSpine(this);
3685
- SpawnGuarded("push_client_initial_metadata",
3686
- [this, md = std::move(client_initial_metadata)]() mutable {
3687
- return Map(client_initial_metadata_.sender.Push(std::move(md)),
3688
- [](bool r) { return StatusFlag(r); });
3689
- });
3690
- }
3691
-
3692
- void ServerCallSpine::PublishInitialMetadata(
3693
- ClientMetadataHandle metadata,
3694
- grpc_metadata_array* publish_initial_metadata) {
3695
- if (grpc_call_trace.enabled()) {
3696
- gpr_log(GPR_INFO, "%s[call] PublishInitialMetadata: %s", DebugTag().c_str(),
3697
- metadata->DebugString().c_str());
3698
- }
3699
- PublishMetadataArray(metadata.get(), publish_initial_metadata, false);
3700
- client_initial_metadata_stored_ = std::move(metadata);
3701
- }
3702
-
3703
- grpc_call_error ServerCallSpine::StartBatch(const grpc_op* ops, size_t nops,
3704
- void* notify_tag,
3705
- bool is_notify_tag_closure) {
3706
- if (nops == 0) {
3707
- EndOpImmediately(cq(), notify_tag, is_notify_tag_closure);
3708
- return GRPC_CALL_OK;
3709
- }
3710
- const grpc_call_error validation_result = ValidateServerBatch(ops, nops);
3711
- if (validation_result != GRPC_CALL_OK) {
3712
- return validation_result;
3713
- }
3714
- CommitBatch(ops, nops, notify_tag, is_notify_tag_closure);
3715
- return GRPC_CALL_OK;
3716
- }
3717
-
3718
- namespace {
3719
- template <typename SetupFn>
3720
- class MaybeOpImpl {
3721
- public:
3722
- using SetupResult = decltype(std::declval<SetupFn>()(grpc_op()));
3723
- using PromiseFactory = promise_detail::OncePromiseFactory<void, SetupResult>;
3724
- using Promise = typename PromiseFactory::Promise;
3725
- struct Dismissed {};
3726
- using State = absl::variant<Dismissed, PromiseFactory, Promise>;
3727
-
3728
- // op_ is garbage but shouldn't be uninitialized
3729
- MaybeOpImpl() : state_(Dismissed{}), op_(GRPC_OP_RECV_STATUS_ON_CLIENT) {}
3730
- MaybeOpImpl(SetupResult result, grpc_op_type op)
3731
- : state_(PromiseFactory(std::move(result))), op_(op) {}
3732
-
3733
- MaybeOpImpl(const MaybeOpImpl&) = delete;
3734
- MaybeOpImpl& operator=(const MaybeOpImpl&) = delete;
3735
- MaybeOpImpl(MaybeOpImpl&& other) noexcept
3736
- : state_(MoveState(other.state_)), op_(other.op_) {}
3737
- MaybeOpImpl& operator=(MaybeOpImpl&& other) noexcept {
3738
- op_ = other.op_;
3739
- if (absl::holds_alternative<Dismissed>(state_)) {
3740
- state_.template emplace<Dismissed>();
3741
- return *this;
3742
- }
3743
- // Can't move after first poll => Promise is not an option
3744
- state_.template emplace<PromiseFactory>(
3745
- std::move(absl::get<PromiseFactory>(other.state_)));
3746
- return *this;
3747
- }
3748
-
3749
- Poll<StatusFlag> operator()() {
3750
- if (absl::holds_alternative<Dismissed>(state_)) return Success{};
3751
- if (absl::holds_alternative<PromiseFactory>(state_)) {
3752
- auto& factory = absl::get<PromiseFactory>(state_);
3753
- auto promise = factory.Make();
3754
- state_.template emplace<Promise>(std::move(promise));
3755
- }
3756
- if (grpc_call_trace.enabled()) {
3757
- gpr_log(GPR_INFO, "%sBeginPoll %s",
3758
- Activity::current()->DebugTag().c_str(), OpName(op_).c_str());
3759
- }
3760
- auto& promise = absl::get<Promise>(state_);
3761
- auto r = poll_cast<StatusFlag>(promise());
3762
- if (grpc_call_trace.enabled()) {
3763
- gpr_log(GPR_INFO, "%sEndPoll %s --> %s",
3764
- Activity::current()->DebugTag().c_str(), OpName(op_).c_str(),
3765
- r.pending() ? "PENDING" : (r.value().ok() ? "OK" : "FAILURE"));
3766
- }
3767
- return r;
3768
- }
3769
-
3770
- private:
3771
- GPR_NO_UNIQUE_ADDRESS State state_;
3772
- GPR_NO_UNIQUE_ADDRESS grpc_op_type op_;
3773
-
3774
- static std::string OpName(grpc_op_type op) {
3775
- switch (op) {
3776
- case GRPC_OP_SEND_INITIAL_METADATA:
3777
- return "SendInitialMetadata";
3778
- case GRPC_OP_SEND_MESSAGE:
3779
- return "SendMessage";
3780
- case GRPC_OP_SEND_STATUS_FROM_SERVER:
3781
- return "SendStatusFromServer";
3782
- case GRPC_OP_SEND_CLOSE_FROM_CLIENT:
3783
- return "SendCloseFromClient";
3784
- case GRPC_OP_RECV_MESSAGE:
3785
- return "RecvMessage";
3786
- case GRPC_OP_RECV_CLOSE_ON_SERVER:
3787
- return "RecvCloseOnServer";
3788
- case GRPC_OP_RECV_INITIAL_METADATA:
3789
- return "RecvInitialMetadata";
3790
- case GRPC_OP_RECV_STATUS_ON_CLIENT:
3791
- return "RecvStatusOnClient";
3792
- }
3793
- return absl::StrCat("UnknownOp(", op, ")");
3794
- }
3795
-
3796
- static State MoveState(State& state) {
3797
- if (absl::holds_alternative<Dismissed>(state)) return Dismissed{};
3798
- // Can't move after first poll => Promise is not an option
3799
- return std::move(absl::get<PromiseFactory>(state));
3800
- }
3801
- };
3802
-
3803
- // MaybeOp captures a fairly complicated dance we need to do for the batch API.
3804
- // We first check if an op is included or not, and if it is, we run the setup
3805
- // function in the context of the API call (NOT in the call party).
3806
- // This setup function returns a promise factory which we'll then run *in* the
3807
- // party to do initial setup, and have it return the promise that we'll
3808
- // ultimately poll on til completion.
3809
- // Once we express our surface API in terms of core internal types this whole
3810
- // dance will go away.
3811
- template <typename SetupFn>
3812
- auto MaybeOp(const grpc_op* ops, uint8_t idx, SetupFn setup) {
3813
- if (idx == 255) {
3814
- return MaybeOpImpl<SetupFn>();
3815
- } else {
3816
- return MaybeOpImpl<SetupFn>(setup(ops[idx]), ops[idx].op);
3817
- }
3818
- }
3819
-
3820
- template <typename F>
3821
- class PollBatchLogger {
3822
- public:
3823
- PollBatchLogger(void* tag, F f) : tag_(tag), f_(std::move(f)) {}
3824
-
3825
- auto operator()() {
3826
- if (grpc_call_trace.enabled()) {
3827
- gpr_log(GPR_INFO, "Poll batch %p", tag_);
3828
- }
3829
- auto r = f_();
3830
- if (grpc_call_trace.enabled()) {
3831
- gpr_log(GPR_INFO, "Poll batch %p --> %s", tag_, ResultString(r).c_str());
3832
- }
3833
- return r;
3834
- }
3835
-
3836
- private:
3837
- template <typename T>
3838
- static std::string ResultString(Poll<T> r) {
3839
- if (r.pending()) return "PENDING";
3840
- return ResultString(r.value());
3841
- }
3842
- static std::string ResultString(Empty) { return "DONE"; }
3843
-
3844
- void* tag_;
3845
- F f_;
3846
- };
3847
-
3848
- template <typename F>
3849
- PollBatchLogger<F> LogPollBatch(void* tag, F f) {
3850
- return PollBatchLogger<F>(tag, std::move(f));
3851
- }
3852
- } // namespace
3853
-
3854
- StatusFlag ServerCallSpine::FinishRecvMessage(
3855
- NextResult<MessageHandle> result) {
3856
- if (result.has_value()) {
3857
- MessageHandle& message = *result;
3858
- NoteLastMessageFlags(message->flags());
3859
- if ((message->flags() & GRPC_WRITE_INTERNAL_COMPRESS) &&
3860
- (incoming_compression_algorithm() != GRPC_COMPRESS_NONE)) {
3861
- *recv_message_ = grpc_raw_compressed_byte_buffer_create(
3862
- nullptr, 0, incoming_compression_algorithm());
3863
- } else {
3864
- *recv_message_ = grpc_raw_byte_buffer_create(nullptr, 0);
3865
- }
3866
- grpc_slice_buffer_move_into(message->payload()->c_slice_buffer(),
3867
- &(*recv_message_)->data.raw.slice_buffer);
3868
- if (grpc_call_trace.enabled()) {
3869
- gpr_log(GPR_INFO,
3870
- "%s[call] RecvMessage: outstanding_recv "
3871
- "finishes: received %" PRIdPTR " byte message",
3872
- DebugTag().c_str(),
3873
- (*recv_message_)->data.raw.slice_buffer.length);
3874
- }
3875
- recv_message_ = nullptr;
3876
- return Success{};
3877
- }
3878
- if (result.cancelled()) {
3879
- if (grpc_call_trace.enabled()) {
3880
- gpr_log(GPR_INFO,
3881
- "%s[call] RecvMessage: outstanding_recv "
3882
- "finishes: received end-of-stream with error",
3883
- DebugTag().c_str());
3884
- }
3885
- *recv_message_ = nullptr;
3886
- recv_message_ = nullptr;
3887
- return Failure{};
3888
- }
3889
- if (grpc_call_trace.enabled()) {
3890
- gpr_log(GPR_INFO,
3891
- "%s[call] RecvMessage: outstanding_recv "
3892
- "finishes: received end-of-stream",
3893
- DebugTag().c_str());
3894
- }
3895
- *recv_message_ = nullptr;
3896
- recv_message_ = nullptr;
3897
- return Success{};
3898
- }
3899
-
3900
- void ServerCallSpine::CommitBatch(const grpc_op* ops, size_t nops,
3901
- void* notify_tag,
3902
- bool is_notify_tag_closure) {
3903
- std::array<uint8_t, 8> got_ops{255, 255, 255, 255, 255, 255, 255, 255};
3904
- for (size_t op_idx = 0; op_idx < nops; op_idx++) {
3905
- const grpc_op& op = ops[op_idx];
3906
- got_ops[op.op] = op_idx;
3907
- }
3908
- if (!is_notify_tag_closure) grpc_cq_begin_op(cq(), notify_tag);
3909
- auto send_initial_metadata = MaybeOp(
3910
- ops, got_ops[GRPC_OP_SEND_INITIAL_METADATA], [this](const grpc_op& op) {
3911
- auto metadata = arena()->MakePooled<ServerMetadata>();
3912
- PrepareOutgoingInitialMetadata(op, *metadata);
3913
- CToMetadata(op.data.send_initial_metadata.metadata,
3914
- op.data.send_initial_metadata.count, metadata.get());
3915
- if (grpc_call_trace.enabled()) {
3916
- gpr_log(GPR_INFO, "%s[call] Send initial metadata",
3917
- DebugTag().c_str());
3918
- }
3919
- return [this, metadata = std::move(metadata)]() mutable {
3920
- return Map(server_initial_metadata_.sender.Push(std::move(metadata)),
3921
- [this](bool r) {
3922
- server_initial_metadata_.sender.Close();
3923
- return StatusFlag(r);
3924
- });
3925
- };
3926
- });
3927
- auto send_message =
3928
- MaybeOp(ops, got_ops[GRPC_OP_SEND_MESSAGE], [this](const grpc_op& op) {
3929
- SliceBuffer send;
3930
- grpc_slice_buffer_swap(
3931
- &op.data.send_message.send_message->data.raw.slice_buffer,
3932
- send.c_slice_buffer());
3933
- auto msg = arena()->MakePooled<Message>(std::move(send), op.flags);
3934
- return [this, msg = std::move(msg)]() mutable {
3935
- return Map(server_to_client_messages_.sender.Push(std::move(msg)),
3936
- [](bool r) { return StatusFlag(r); });
3937
- };
3938
- });
3939
- auto send_trailing_metadata = MaybeOp(
3940
- ops, got_ops[GRPC_OP_SEND_STATUS_FROM_SERVER], [this](const grpc_op& op) {
3941
- auto metadata = arena()->MakePooled<ServerMetadata>();
3942
- CToMetadata(op.data.send_status_from_server.trailing_metadata,
3943
- op.data.send_status_from_server.trailing_metadata_count,
3944
- metadata.get());
3945
- metadata->Set(GrpcStatusMetadata(),
3946
- op.data.send_status_from_server.status);
3947
- if (auto* details = op.data.send_status_from_server.status_details) {
3948
- // TODO(ctiller): this should not be a copy, but we have
3949
- // callers that allocate and pass in a slice created with
3950
- // grpc_slice_from_static_string and then delete the string
3951
- // after passing it in, which shouldn't be a supported API.
3952
- metadata->Set(GrpcMessageMetadata(),
3953
- Slice(grpc_slice_copy(*details)));
3954
- }
3955
- CHECK(metadata != nullptr);
3956
- return [this, metadata = std::move(metadata)]() mutable {
3957
- CHECK(metadata != nullptr);
3958
- return [this,
3959
- metadata = std::move(metadata)]() mutable -> Poll<Success> {
3960
- CHECK(metadata != nullptr);
3961
- PushServerTrailingMetadata(std::move(metadata));
3962
- return Success{};
3963
- };
3964
- };
3965
- });
3966
- auto recv_message =
3967
- MaybeOp(ops, got_ops[GRPC_OP_RECV_MESSAGE], [this](const grpc_op& op) {
3968
- CHECK_EQ(recv_message_, nullptr);
3969
- recv_message_ = op.data.recv_message.recv_message;
3970
- return [this]() mutable {
3971
- return Map(client_to_server_messages_.receiver.Next(),
3972
- [this](NextResult<MessageHandle> msg) {
3973
- return FinishRecvMessage(std::move(msg));
3974
- });
3975
- };
3976
- });
3977
- auto primary_ops = AllOk<StatusFlag>(
3978
- TrySeq(AllOk<StatusFlag>(std::move(send_initial_metadata),
3979
- std::move(send_message)),
3980
- std::move(send_trailing_metadata)),
3981
- std::move(recv_message));
3982
- if (got_ops[GRPC_OP_RECV_CLOSE_ON_SERVER] != 255) {
3983
- auto recv_trailing_metadata = MaybeOp(
3984
- ops, got_ops[GRPC_OP_RECV_CLOSE_ON_SERVER], [this](const grpc_op& op) {
3985
- return [this, cancelled = op.data.recv_close_on_server.cancelled]() {
3986
- return Map(WasCancelled(),
3987
- [cancelled, this](bool result) -> Success {
3988
- ResetDeadline();
3989
- *cancelled = result ? 1 : 0;
3990
- return Success{};
3991
- });
3992
- };
3993
- });
3994
- SpawnInfallible(
3995
- "final-batch",
3996
- [primary_ops = std::move(primary_ops),
3997
- recv_trailing_metadata = std::move(recv_trailing_metadata),
3998
- is_notify_tag_closure, notify_tag, this]() mutable {
3999
- return LogPollBatch(
4000
- notify_tag,
4001
- Seq(std::move(primary_ops), std::move(recv_trailing_metadata),
4002
- [is_notify_tag_closure, notify_tag, this](StatusFlag) {
4003
- return WaitForCqEndOp(is_notify_tag_closure, notify_tag,
4004
- absl::OkStatus(), cq());
4005
- }));
4006
- });
4007
- } else {
4008
- SpawnInfallible("batch", [primary_ops = std::move(primary_ops),
4009
- is_notify_tag_closure, notify_tag,
4010
- this]() mutable {
4011
- return LogPollBatch(
4012
- notify_tag,
4013
- Seq(std::move(primary_ops),
4014
- [is_notify_tag_closure, notify_tag, this](StatusFlag r) {
4015
- return WaitForCqEndOp(is_notify_tag_closure, notify_tag,
4016
- StatusCast<grpc_error_handle>(r), cq());
4017
- }));
4018
- });
4019
- }
4020
- }
4021
-
4022
- RefCountedPtr<CallSpineInterface> MakeServerCall(
4023
- ClientMetadataHandle client_initial_metadata, ServerInterface* server,
4024
- Channel* channel, Arena* arena) {
4025
- return RefCountedPtr<ServerCallSpine>(arena->New<ServerCallSpine>(
4026
- std::move(client_initial_metadata), server, channel, arena));
4027
- }
4028
- #else
4029
- RefCountedPtr<CallSpineInterface> MakeServerCall(ClientMetadataHandle,
4030
- ServerInterface*, Channel*,
4031
- Arena*) {
4032
- Crash("not implemented");
4033
- }
4034
- #endif
4035
-
4036
- } // namespace grpc_core
4037
-
4038
- ///////////////////////////////////////////////////////////////////////////////
4039
- // C-based API
4040
-
4041
- void* grpc_call_arena_alloc(grpc_call* call, size_t size) {
4042
- grpc_core::ExecCtx exec_ctx;
4043
- return grpc_core::Call::FromC(call)->arena()->Alloc(size);
4044
- }
4045
-
4046
- size_t grpc_call_get_initial_size_estimate() {
4047
- return grpc_core::FilterStackCall::InitialSizeEstimate();
4048
- }
4049
-
4050
- grpc_error_handle grpc_call_create(grpc_call_create_args* args,
4051
- grpc_call** out_call) {
4052
- #ifdef GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_CLIENT_CALL
4053
- if (grpc_core::IsPromiseBasedClientCallEnabled() &&
4054
- args->server_transport_data == nullptr && args->channel->is_promising()) {
4055
- return grpc_core::MakePromiseBasedCall<grpc_core::ClientPromiseBasedCall>(
4056
- args, out_call);
4057
- }
4058
- #endif
4059
- #ifdef GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_SERVER_CALL
4060
- if (grpc_core::IsPromiseBasedServerCallEnabled() &&
4061
- args->server_transport_data != nullptr && args->channel->is_promising()) {
4062
- return grpc_core::MakePromiseBasedCall<grpc_core::ServerPromiseBasedCall>(
4063
- args, out_call);
4064
- }
4065
- #endif
4066
- return grpc_core::FilterStackCall::Create(args, out_call);
4067
- }
4068
-
4069
- void grpc_call_set_completion_queue(grpc_call* call,
4070
- grpc_completion_queue* cq) {
4071
- grpc_core::Call::FromC(call)->SetCompletionQueue(cq);
4072
- }
4073
-
4074
- void grpc_call_ref(grpc_call* c) { grpc_core::Call::FromC(c)->ExternalRef(); }
4075
-
4076
- void grpc_call_unref(grpc_call* c) {
4077
- grpc_core::ExecCtx exec_ctx;
4078
- grpc_core::Call::FromC(c)->ExternalUnref();
4079
- }
4080
-
4081
- char* grpc_call_get_peer(grpc_call* call) {
4082
- return grpc_core::Call::FromC(call)->GetPeer();
4083
- }
4084
-
4085
- grpc_call* grpc_call_from_top_element(grpc_call_element* surface_element) {
4086
- return grpc_core::FilterStackCall::FromTopElem(surface_element)->c_ptr();
4087
- }
4088
-
4089
- grpc_call_error grpc_call_cancel(grpc_call* call, void* reserved) {
4090
- GRPC_API_TRACE("grpc_call_cancel(call=%p, reserved=%p)", 2, (call, reserved));
4091
- CHECK_EQ(reserved, nullptr);
4092
- if (call == nullptr) {
4093
- return GRPC_CALL_ERROR;
4094
- }
4095
- grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
4096
- grpc_core::ExecCtx exec_ctx;
4097
- grpc_core::Call::FromC(call)->CancelWithError(absl::CancelledError());
4098
- return GRPC_CALL_OK;
4099
- }
4100
-
4101
- grpc_call_error grpc_call_cancel_with_status(grpc_call* c,
4102
- grpc_status_code status,
4103
- const char* description,
4104
- void* reserved) {
4105
- GRPC_API_TRACE(
4106
- "grpc_call_cancel_with_status("
4107
- "c=%p, status=%d, description=%s, reserved=%p)",
4108
- 4, (c, (int)status, description, reserved));
4109
- CHECK_EQ(reserved, nullptr);
4110
- if (c == nullptr) {
4111
- return GRPC_CALL_ERROR;
4112
- }
4113
- grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
4114
- grpc_core::ExecCtx exec_ctx;
4115
- grpc_core::Call::FromC(c)->CancelWithStatus(status, description);
4116
- return GRPC_CALL_OK;
4117
- }
4118
-
4119
- void grpc_call_cancel_internal(grpc_call* call) {
4120
- grpc_core::Call::FromC(call)->CancelWithError(absl::CancelledError());
4121
- }
4122
-
4123
- grpc_compression_algorithm grpc_call_test_only_get_compression_algorithm(
4124
- grpc_call* call) {
4125
- return grpc_core::Call::FromC(call)->test_only_compression_algorithm();
4126
- }
4127
-
4128
- uint32_t grpc_call_test_only_get_message_flags(grpc_call* call) {
4129
- return grpc_core::Call::FromC(call)->test_only_message_flags();
4130
- }
4131
-
4132
- uint32_t grpc_call_test_only_get_encodings_accepted_by_peer(grpc_call* call) {
4133
- return grpc_core::Call::FromC(call)
4134
- ->encodings_accepted_by_peer()
4135
- .ToLegacyBitmask();
4136
- }
4137
-
4138
- grpc_core::Arena* grpc_call_get_arena(grpc_call* call) {
4139
- return grpc_core::Call::FromC(call)->arena();
4140
- }
4141
-
4142
- grpc_call_stack* grpc_call_get_call_stack(grpc_call* call) {
4143
- return grpc_core::Call::FromC(call)->call_stack();
4144
- }
4145
-
4146
- grpc_call_error grpc_call_start_batch(grpc_call* call, const grpc_op* ops,
4147
- size_t nops, void* tag, void* reserved) {
4148
- GRPC_API_TRACE(
4149
- "grpc_call_start_batch(call=%p, ops=%p, nops=%lu, tag=%p, "
4150
- "reserved=%p)",
4151
- 5, (call, ops, (unsigned long)nops, tag, reserved));
4152
-
4153
- if (reserved != nullptr || call == nullptr) {
4154
- return GRPC_CALL_ERROR;
4155
- } else {
4156
- grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
4157
- grpc_core::ExecCtx exec_ctx;
4158
- return grpc_core::Call::FromC(call)->StartBatch(ops, nops, tag, false);
4159
- }
4160
- }
4161
-
4162
- grpc_call_error grpc_call_start_batch_and_execute(grpc_call* call,
4163
- const grpc_op* ops,
4164
- size_t nops,
4165
- grpc_closure* closure) {
4166
- return grpc_core::Call::FromC(call)->StartBatch(ops, nops, closure, true);
490
+ void grpc_call_tracer_set(grpc_call* call,
491
+ grpc_core::ClientCallTracer* tracer) {
492
+ grpc_core::Arena* arena = grpc_call_get_arena(call);
493
+ return arena->SetContext<grpc_core::CallTracerAnnotationInterface>(tracer);
4167
494
  }
4168
495
 
4169
- void grpc_call_context_set(grpc_call* call, grpc_context_index elem,
4170
- void* value, void (*destroy)(void* value)) {
4171
- return grpc_core::Call::FromC(call)->ContextSet(elem, value, destroy);
496
+ void grpc_call_tracer_set_and_manage(grpc_call* call,
497
+ grpc_core::ClientCallTracer* tracer) {
498
+ grpc_core::Arena* arena = grpc_call_get_arena(call);
499
+ arena->ManagedNew<ClientCallTracerWrapper>(tracer);
500
+ return arena->SetContext<grpc_core::CallTracerAnnotationInterface>(tracer);
4172
501
  }
4173
502
 
4174
- void* grpc_call_context_get(grpc_call* call, grpc_context_index elem) {
4175
- return grpc_core::Call::FromC(call)->ContextGet(elem);
503
+ void* grpc_call_tracer_get(grpc_call* call) {
504
+ grpc_core::Arena* arena = grpc_call_get_arena(call);
505
+ auto* call_tracer =
506
+ arena->GetContext<grpc_core::CallTracerAnnotationInterface>();
507
+ return call_tracer;
4176
508
  }
4177
509
 
4178
510
  uint8_t grpc_call_is_client(grpc_call* call) {
@@ -4238,5 +570,8 @@ const char* grpc_call_error_to_string(grpc_call_error error) {
4238
570
 
4239
571
  void grpc_call_run_in_event_engine(const grpc_call* call,
4240
572
  absl::AnyInvocable<void()> cb) {
4241
- grpc_core::Call::FromC(call)->event_engine()->Run(std::move(cb));
573
+ grpc_core::Call::FromC(call)
574
+ ->arena()
575
+ ->GetContext<grpc_event_engine::experimental::EventEngine>()
576
+ ->Run(std::move(cb));
4242
577
  }