grpc 1.50.0 → 1.56.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (2554) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +453 -176
  3. data/include/grpc/byte_buffer.h +76 -1
  4. data/include/grpc/byte_buffer_reader.h +19 -1
  5. data/include/grpc/compression.h +2 -2
  6. data/include/grpc/event_engine/event_engine.h +83 -23
  7. data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -1
  8. data/include/grpc/event_engine/internal/slice_cast.h +67 -0
  9. data/include/grpc/event_engine/memory_allocator.h +1 -1
  10. data/include/grpc/event_engine/slice.h +24 -4
  11. data/include/grpc/event_engine/slice_buffer.h +44 -3
  12. data/include/grpc/fork.h +25 -1
  13. data/include/grpc/grpc.h +3 -13
  14. data/include/grpc/grpc_audit_logging.h +96 -0
  15. data/include/grpc/grpc_posix.h +1 -1
  16. data/include/grpc/grpc_security.h +4 -0
  17. data/include/grpc/impl/codegen/atm.h +3 -71
  18. data/include/grpc/impl/codegen/atm_gcc_atomic.h +3 -58
  19. data/include/grpc/impl/codegen/atm_gcc_sync.h +3 -59
  20. data/include/grpc/impl/codegen/atm_windows.h +3 -106
  21. data/include/grpc/impl/codegen/byte_buffer.h +4 -78
  22. data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -19
  23. data/include/grpc/impl/codegen/compression_types.h +3 -82
  24. data/include/grpc/impl/codegen/connectivity_state.h +3 -20
  25. data/include/grpc/impl/codegen/fork.h +4 -25
  26. data/include/grpc/impl/codegen/gpr_types.h +2 -34
  27. data/include/grpc/impl/codegen/grpc_types.h +3 -791
  28. data/include/grpc/impl/codegen/log.h +3 -86
  29. data/include/grpc/impl/codegen/port_platform.h +3 -758
  30. data/include/grpc/impl/codegen/propagation_bits.h +3 -28
  31. data/include/grpc/impl/codegen/slice.h +3 -106
  32. data/include/grpc/impl/codegen/status.h +4 -131
  33. data/include/grpc/impl/codegen/sync.h +3 -42
  34. data/include/grpc/impl/codegen/sync_abseil.h +3 -12
  35. data/include/grpc/impl/codegen/sync_custom.h +3 -14
  36. data/include/grpc/impl/codegen/sync_generic.h +3 -25
  37. data/include/grpc/impl/codegen/sync_posix.h +3 -28
  38. data/include/grpc/impl/codegen/sync_windows.h +3 -16
  39. data/include/grpc/impl/compression_types.h +109 -0
  40. data/include/grpc/impl/connectivity_state.h +47 -0
  41. data/include/grpc/impl/grpc_types.h +838 -0
  42. data/include/grpc/impl/propagation_bits.h +54 -0
  43. data/include/grpc/impl/slice_type.h +112 -0
  44. data/include/grpc/load_reporting.h +1 -1
  45. data/include/grpc/module.modulemap +7 -1
  46. data/include/grpc/slice.h +1 -1
  47. data/include/grpc/status.h +131 -1
  48. data/include/grpc/support/atm.h +70 -1
  49. data/include/grpc/support/atm_gcc_atomic.h +59 -1
  50. data/include/grpc/support/atm_gcc_sync.h +58 -1
  51. data/include/grpc/support/atm_windows.h +105 -1
  52. data/include/grpc/support/json.h +218 -0
  53. data/include/grpc/support/log.h +87 -1
  54. data/include/grpc/support/log_windows.h +1 -1
  55. data/include/grpc/support/port_platform.h +767 -1
  56. data/include/grpc/support/string_util.h +1 -1
  57. data/include/grpc/support/sync.h +35 -2
  58. data/include/grpc/support/sync_abseil.h +11 -1
  59. data/include/grpc/support/sync_custom.h +13 -1
  60. data/include/grpc/support/sync_generic.h +24 -1
  61. data/include/grpc/support/sync_posix.h +27 -1
  62. data/include/grpc/support/sync_windows.h +15 -1
  63. data/include/grpc/support/time.h +31 -6
  64. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +164 -0
  65. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +52 -0
  66. data/src/core/ext/filters/backend_metrics/backend_metric_provider.h +29 -0
  67. data/src/core/ext/filters/census/grpc_context.cc +17 -18
  68. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +28 -22
  69. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +5 -4
  70. data/src/core/ext/filters/channel_idle/idle_filter_state.h +4 -4
  71. data/src/core/ext/filters/client_channel/backend_metric.cc +12 -1
  72. data/src/core/ext/filters/client_channel/backend_metric.h +3 -3
  73. data/src/core/ext/filters/client_channel/backup_poller.cc +26 -35
  74. data/src/core/ext/filters/client_channel/backup_poller.h +24 -27
  75. data/src/core/ext/filters/client_channel/channel_connectivity.cc +51 -28
  76. data/src/core/ext/filters/client_channel/client_channel.cc +1014 -1016
  77. data/src/core/ext/filters/client_channel/client_channel.h +155 -187
  78. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +36 -37
  79. data/src/core/ext/filters/client_channel/client_channel_channelz.h +22 -22
  80. data/src/core/ext/filters/client_channel/client_channel_factory.cc +17 -17
  81. data/src/core/ext/filters/client_channel/client_channel_factory.h +3 -3
  82. data/src/core/ext/filters/client_channel/client_channel_internal.h +77 -0
  83. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +18 -18
  84. data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
  85. data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +26 -23
  86. data/src/core/ext/filters/client_channel/config_selector.h +25 -55
  87. data/src/core/ext/filters/client_channel/connector.h +9 -5
  88. data/src/core/ext/filters/client_channel/dynamic_filters.cc +28 -55
  89. data/src/core/ext/filters/client_channel/dynamic_filters.h +10 -11
  90. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +21 -21
  91. data/src/core/ext/filters/client_channel/http_proxy.cc +74 -42
  92. data/src/core/ext/filters/client_channel/http_proxy.h +21 -21
  93. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +3 -4
  94. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +3 -3
  95. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +29 -21
  96. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +7 -2
  97. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +3 -4
  98. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +66 -130
  99. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +40 -24
  100. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +156 -178
  101. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +26 -27
  102. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -1
  103. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +4 -6
  104. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +18 -20
  105. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +21 -22
  106. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +19 -20
  107. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +22 -23
  108. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +455 -0
  109. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.h +54 -0
  110. data/src/core/ext/filters/client_channel/lb_policy/health_check_client_internal.h +186 -0
  111. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +11 -94
  112. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +4 -4
  113. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric_internal.h +117 -0
  114. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +263 -242
  115. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +28 -7
  116. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +28 -26
  117. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +76 -112
  118. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +159 -168
  119. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +22 -5
  120. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +173 -171
  121. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +31 -25
  122. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +68 -31
  123. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +198 -0
  124. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.h +71 -0
  125. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +1002 -0
  126. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +76 -70
  127. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +103 -105
  128. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
  129. data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +15 -17
  130. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +3 -3
  131. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +34 -41
  132. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +76 -113
  133. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +111 -185
  134. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +814 -0
  135. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +67 -0
  136. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +363 -0
  137. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +21 -21
  138. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +9 -10
  139. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +59 -175
  140. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.h +30 -0
  141. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +42 -43
  142. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +22 -23
  143. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +92 -87
  144. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +153 -153
  145. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +54 -55
  146. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +18 -18
  147. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +18 -18
  148. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_plugin.cc +60 -0
  149. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_plugin.h +27 -0
  150. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +549 -0
  151. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.h +35 -0
  152. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.cc +97 -0
  153. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.h +32 -0
  154. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +20 -39
  155. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.h +24 -0
  156. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -3
  157. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +4 -4
  158. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +85 -223
  159. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +45 -36
  160. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +12 -15
  161. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -7
  162. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +280 -189
  163. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +19 -4
  164. data/src/core/ext/filters/client_channel/retry_filter.cc +200 -264
  165. data/src/core/ext/filters/client_channel/retry_filter.h +3 -3
  166. data/src/core/ext/filters/client_channel/retry_service_config.cc +195 -236
  167. data/src/core/ext/filters/client_channel/retry_service_config.h +23 -26
  168. data/src/core/ext/filters/client_channel/retry_throttle.cc +27 -29
  169. data/src/core/ext/filters/client_channel/retry_throttle.h +29 -28
  170. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +17 -47
  171. data/src/core/ext/filters/client_channel/subchannel.cc +133 -337
  172. data/src/core/ext/filters/client_channel/subchannel.h +23 -86
  173. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +3 -3
  174. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +21 -21
  175. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +36 -38
  176. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +11 -8
  177. data/src/core/ext/filters/deadline/deadline_filter.cc +73 -64
  178. data/src/core/ext/filters/deadline/deadline_filter.h +6 -10
  179. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +3 -2
  180. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +3 -7
  181. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
  182. data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +20 -12
  183. data/src/core/ext/filters/http/client/http_client_filter.cc +47 -43
  184. data/src/core/ext/filters/http/client/http_client_filter.h +20 -20
  185. data/src/core/ext/filters/http/client_authority_filter.cc +19 -19
  186. data/src/core/ext/filters/http/client_authority_filter.h +21 -21
  187. data/src/core/ext/filters/http/http_filters_plugin.cc +30 -57
  188. data/src/core/ext/filters/http/message_compress/compression_filter.cc +323 -0
  189. data/src/core/ext/filters/http/message_compress/compression_filter.h +139 -0
  190. data/src/core/ext/filters/http/server/http_server_filter.cc +54 -52
  191. data/src/core/ext/filters/http/server/http_server_filter.h +21 -21
  192. data/src/core/ext/filters/message_size/message_size_filter.cc +184 -297
  193. data/src/core/ext/filters/message_size/message_size_filter.h +72 -20
  194. data/src/core/ext/filters/rbac/rbac_filter.cc +16 -15
  195. data/src/core/ext/filters/rbac/rbac_filter.h +3 -3
  196. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +829 -538
  197. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +7 -6
  198. data/src/core/ext/filters/server_config_selector/server_config_selector.h +9 -11
  199. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +12 -16
  200. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +3 -3
  201. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +220 -0
  202. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +81 -0
  203. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +82 -0
  204. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +93 -0
  205. data/src/core/ext/gcp/metadata_query.cc +137 -0
  206. data/src/core/ext/gcp/metadata_query.h +87 -0
  207. data/src/core/ext/transport/chttp2/alpn/alpn.cc +18 -18
  208. data/src/core/ext/transport/chttp2/alpn/alpn.h +24 -24
  209. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +68 -67
  210. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +30 -24
  211. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +149 -149
  212. data/src/core/ext/transport/chttp2/server/chttp2_server.h +21 -21
  213. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +22 -22
  214. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +33 -33
  215. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +41 -37
  216. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +35 -31
  217. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +673 -455
  218. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +42 -22
  219. data/src/core/ext/transport/chttp2/transport/context_list_entry.h +70 -0
  220. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +0 -36
  221. data/src/core/ext/transport/chttp2/transport/decode_huff.h +38 -85
  222. data/src/core/ext/transport/chttp2/transport/flow_control.cc +130 -107
  223. data/src/core/ext/transport/chttp2/transport/flow_control.h +66 -39
  224. data/src/core/ext/transport/chttp2/transport/frame.h +21 -21
  225. data/src/core/ext/transport/chttp2/transport/frame_data.cc +35 -32
  226. data/src/core/ext/transport/chttp2/transport/frame_data.h +27 -27
  227. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +38 -36
  228. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +20 -20
  229. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +27 -31
  230. data/src/core/ext/transport/chttp2/transport/frame_ping.h +21 -24
  231. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +30 -25
  232. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +21 -21
  233. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +39 -37
  234. data/src/core/ext/transport/chttp2/transport/frame_settings.h +22 -22
  235. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +24 -21
  236. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +21 -21
  237. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +3 -3
  238. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +201 -353
  239. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +328 -164
  240. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +4 -1
  241. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +5 -3
  242. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +498 -744
  243. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +30 -26
  244. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +41 -37
  245. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +30 -22
  246. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +21 -19
  247. data/src/core/ext/transport/chttp2/transport/http2_settings.h +39 -37
  248. data/src/core/ext/transport/chttp2/transport/http_trace.cc +19 -0
  249. data/src/core/ext/transport/chttp2/transport/http_trace.h +24 -0
  250. data/src/core/ext/transport/chttp2/transport/huffsyms.cc +20 -20
  251. data/src/core/ext/transport/chttp2/transport/huffsyms.h +21 -21
  252. data/src/core/ext/transport/chttp2/transport/internal.h +220 -192
  253. data/src/core/ext/transport/chttp2/transport/parsing.cc +263 -109
  254. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +19 -19
  255. data/src/core/ext/transport/chttp2/transport/stream_map.cc +23 -23
  256. data/src/core/ext/transport/chttp2/transport/stream_map.h +33 -33
  257. data/src/core/ext/transport/chttp2/transport/varint.cc +19 -20
  258. data/src/core/ext/transport/chttp2/transport/varint.h +37 -34
  259. data/src/core/ext/transport/chttp2/transport/writing.cc +93 -72
  260. data/src/core/ext/transport/inproc/inproc_plugin.cc +17 -17
  261. data/src/core/ext/transport/inproc/inproc_transport.cc +143 -155
  262. data/src/core/ext/transport/inproc/inproc_transport.h +21 -21
  263. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +87 -52
  264. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +414 -181
  265. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +121 -59
  266. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +485 -219
  267. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +90 -55
  268. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +415 -188
  269. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +377 -194
  270. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1694 -666
  271. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +30 -17
  272. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +144 -47
  273. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +34 -21
  274. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +160 -62
  275. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +27 -14
  276. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +78 -38
  277. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +20 -11
  278. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +48 -26
  279. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +20 -11
  280. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +48 -26
  281. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +109 -62
  282. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +566 -244
  283. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +21 -12
  284. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +45 -30
  285. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +22 -19
  286. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +82 -29
  287. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +23 -16
  288. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +45 -30
  289. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +230 -143
  290. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +733 -404
  291. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +417 -258
  292. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1873 -867
  293. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -41
  294. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +286 -148
  295. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +537 -349
  296. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +2038 -1178
  297. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +21 -12
  298. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +45 -30
  299. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +89 -52
  300. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +347 -232
  301. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +264 -165
  302. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +888 -476
  303. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +154 -72
  304. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +603 -213
  305. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +22 -13
  306. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +50 -36
  307. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +380 -221
  308. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1168 -611
  309. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +166 -94
  310. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +666 -292
  311. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +18 -11
  312. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +37 -26
  313. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +21 -12
  314. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +45 -30
  315. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +30 -17
  316. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +144 -47
  317. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +274 -167
  318. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +789 -440
  319. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +222 -128
  320. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +1116 -485
  321. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +22 -13
  322. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +60 -37
  323. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +350 -208
  324. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +1088 -625
  325. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +44 -11
  326. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +175 -18
  327. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +34 -19
  328. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +118 -56
  329. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +48 -16
  330. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +189 -44
  331. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +31 -18
  332. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +143 -65
  333. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +22 -13
  334. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +51 -37
  335. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +78 -43
  336. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +265 -127
  337. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +147 -84
  338. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +454 -226
  339. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +115 -62
  340. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +559 -227
  341. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +18 -11
  342. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +35 -26
  343. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +187 -107
  344. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +969 -410
  345. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +172 -95
  346. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +864 -374
  347. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +49 -23
  348. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +182 -89
  349. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +39 -18
  350. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +74 -56
  351. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +28 -15
  352. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +71 -45
  353. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +131 -74
  354. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +489 -249
  355. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +135 -80
  356. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +505 -245
  357. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +257 -127
  358. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +1010 -387
  359. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +91 -41
  360. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +648 -183
  361. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +1301 -751
  362. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +5583 -2425
  363. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +49 -28
  364. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +164 -84
  365. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +228 -141
  366. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +738 -399
  367. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +20 -10
  368. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +53 -22
  369. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +21 -12
  370. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +45 -30
  371. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +32 -19
  372. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +70 -49
  373. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +27 -14
  374. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +110 -43
  375. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +46 -25
  376. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +259 -100
  377. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +21 -12
  378. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +49 -25
  379. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +18 -11
  380. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +35 -26
  381. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +42 -23
  382. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +108 -70
  383. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +7 -4
  384. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +21 -16
  385. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +43 -24
  386. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +110 -75
  387. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +30 -16
  388. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +100 -46
  389. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +16 -9
  390. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +73 -23
  391. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +60 -37
  392. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +150 -108
  393. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +74 -43
  394. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +357 -167
  395. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +44 -25
  396. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +114 -80
  397. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +42 -18
  398. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +253 -67
  399. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c +75 -0
  400. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +201 -0
  401. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +474 -289
  402. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +2156 -1037
  403. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c +53 -0
  404. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +107 -0
  405. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +69 -0
  406. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +246 -0
  407. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.c +138 -0
  408. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +499 -0
  409. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +36 -17
  410. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +144 -55
  411. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +18 -11
  412. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +35 -26
  413. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +7 -4
  414. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +15 -10
  415. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +184 -96
  416. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +907 -360
  417. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +56 -33
  418. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +150 -101
  419. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +188 -109
  420. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +827 -408
  421. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +32 -19
  422. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +109 -53
  423. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +10 -7
  424. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +18 -14
  425. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +300 -175
  426. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +1297 -511
  427. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +42 -23
  428. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +188 -75
  429. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +130 -83
  430. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +510 -238
  431. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +22 -13
  432. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +55 -34
  433. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +39 -26
  434. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +124 -68
  435. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.c +56 -0
  436. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.h +130 -0
  437. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +60 -26
  438. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +130 -51
  439. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +37 -20
  440. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +133 -63
  441. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +22 -13
  442. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +91 -40
  443. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +21 -12
  444. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +50 -32
  445. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +18 -11
  446. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +37 -26
  447. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +46 -27
  448. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +101 -70
  449. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.c +46 -0
  450. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.h +117 -0
  451. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +40 -23
  452. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +161 -75
  453. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +31 -18
  454. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +114 -56
  455. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +46 -29
  456. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +139 -91
  457. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +65 -42
  458. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +200 -121
  459. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +80 -45
  460. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +208 -131
  461. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +34 -21
  462. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +74 -53
  463. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +7 -4
  464. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +13 -8
  465. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +16 -9
  466. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +28 -18
  467. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +28 -15
  468. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +55 -34
  469. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +43 -22
  470. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +91 -53
  471. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +35 -20
  472. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +92 -57
  473. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.c +7 -4
  474. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +16 -9
  475. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +20 -11
  476. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +48 -26
  477. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +23 -14
  478. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +61 -41
  479. data/src/core/ext/upb-generated/google/api/annotations.upb.c +14 -11
  480. data/src/core/ext/upb-generated/google/api/annotations.upb.h +30 -20
  481. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +255 -154
  482. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +934 -450
  483. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +299 -180
  484. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +946 -483
  485. data/src/core/ext/upb-generated/google/api/http.upb.c +68 -35
  486. data/src/core/ext/upb-generated/google/api/http.upb.h +284 -120
  487. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +22 -13
  488. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +95 -37
  489. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +19 -10
  490. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +38 -22
  491. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +1018 -424
  492. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +3851 -1412
  493. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +19 -10
  494. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +38 -22
  495. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +10 -7
  496. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +18 -14
  497. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +62 -39
  498. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +207 -102
  499. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +19 -10
  500. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +38 -22
  501. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +90 -51
  502. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +157 -107
  503. data/src/core/ext/upb-generated/google/rpc/status.upb.c +22 -13
  504. data/src/core/ext/upb-generated/google/rpc/status.upb.h +95 -37
  505. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +59 -34
  506. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +154 -92
  507. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +43 -24
  508. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +118 -60
  509. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +250 -145
  510. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +919 -415
  511. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +34 -19
  512. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +76 -51
  513. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +25 -14
  514. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +45 -30
  515. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +144 -81
  516. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +405 -217
  517. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +51 -26
  518. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +153 -61
  519. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +173 -102
  520. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +855 -298
  521. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +68 -49
  522. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +155 -104
  523. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +26 -17
  524. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +55 -34
  525. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +12 -9
  526. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +31 -14
  527. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +26 -17
  528. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +55 -34
  529. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +23 -16
  530. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +45 -30
  531. data/src/core/ext/upb-generated/validate/validate.upb.c +845 -455
  532. data/src/core/ext/upb-generated/validate/validate.upb.h +4347 -1908
  533. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +68 -49
  534. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +155 -104
  535. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +26 -17
  536. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +55 -34
  537. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +12 -9
  538. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +31 -14
  539. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +65 -44
  540. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +137 -91
  541. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +23 -16
  542. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +45 -30
  543. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +16 -9
  544. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +28 -18
  545. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.c +56 -0
  546. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.h +122 -0
  547. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +37 -22
  548. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +96 -63
  549. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +26 -17
  550. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +52 -29
  551. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +21 -12
  552. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +45 -30
  553. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +23 -14
  554. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +62 -42
  555. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +44 -25
  556. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +169 -79
  557. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +27 -14
  558. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +65 -38
  559. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +86 -30
  560. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +223 -54
  561. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +21 -13
  562. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +89 -34
  563. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.c +53 -0
  564. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.h +107 -0
  565. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.c +75 -0
  566. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.h +270 -0
  567. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.c +39 -0
  568. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.h +78 -0
  569. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.c +78 -0
  570. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.h +289 -0
  571. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +162 -101
  572. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +501 -293
  573. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.c +160 -0
  574. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.h +740 -0
  575. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +24 -15
  576. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +53 -37
  577. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +40 -23
  578. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +161 -75
  579. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.c +82 -0
  580. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.h +240 -0
  581. data/src/core/ext/upb-generated/xds/type/v3/range.upb.c +85 -0
  582. data/src/core/ext/upb-generated/xds/type/v3/range.upb.h +246 -0
  583. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +21 -13
  584. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +45 -30
  585. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.c +1 -1
  586. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.h +6 -5
  587. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +55 -54
  588. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.h +6 -5
  589. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +1 -1
  590. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +6 -5
  591. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +35 -14
  592. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +16 -5
  593. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.c +1 -1
  594. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.h +6 -5
  595. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +1 -1
  596. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.h +6 -5
  597. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.c +1 -1
  598. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.h +6 -5
  599. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.c +1 -1
  600. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.h +6 -5
  601. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.c +1 -1
  602. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.h +6 -5
  603. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.c +1 -1
  604. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.h +6 -5
  605. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.c +1 -1
  606. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.h +6 -5
  607. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +1 -1
  608. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +6 -5
  609. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +1 -1
  610. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +6 -5
  611. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +1 -1
  612. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +6 -5
  613. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +252 -241
  614. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +6 -5
  615. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +1 -1
  616. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +6 -5
  617. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +233 -225
  618. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +6 -10
  619. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +1 -1
  620. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +6 -5
  621. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +1 -1
  622. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +6 -5
  623. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.c +1 -1
  624. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.h +6 -5
  625. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +96 -76
  626. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +11 -5
  627. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +1 -1
  628. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +6 -5
  629. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +95 -94
  630. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +6 -5
  631. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +13 -12
  632. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +11 -5
  633. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +1 -1
  634. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +6 -5
  635. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +1 -1
  636. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +6 -5
  637. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.c +1 -1
  638. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.h +6 -5
  639. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +1 -1
  640. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +6 -5
  641. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +82 -76
  642. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +6 -5
  643. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +1 -1
  644. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +6 -5
  645. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +193 -188
  646. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +6 -5
  647. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +32 -16
  648. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +11 -5
  649. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +1 -1
  650. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +6 -5
  651. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +8 -4
  652. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +11 -5
  653. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +1 -1
  654. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +6 -5
  655. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +1 -1
  656. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +6 -5
  657. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +1 -1
  658. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +6 -5
  659. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +72 -67
  660. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +6 -5
  661. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +1 -1
  662. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +6 -5
  663. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +1 -1
  664. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +6 -5
  665. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +141 -134
  666. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +21 -5
  667. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +1 -1
  668. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +6 -5
  669. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +55 -42
  670. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +6 -5
  671. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +1 -1
  672. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +6 -5
  673. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +1 -1
  674. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.h +6 -5
  675. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +1 -1
  676. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +6 -5
  677. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +1 -1
  678. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +6 -5
  679. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +167 -138
  680. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +16 -5
  681. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +82 -71
  682. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +11 -5
  683. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +772 -739
  684. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +16 -5
  685. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +1 -1
  686. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +6 -5
  687. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +1 -1
  688. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +6 -5
  689. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +17 -15
  690. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.h +6 -5
  691. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.c +1 -1
  692. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.h +6 -5
  693. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +1 -1
  694. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +6 -5
  695. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.c +1 -1
  696. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.h +6 -5
  697. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.c +1 -1
  698. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.h +6 -5
  699. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +7 -9
  700. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +6 -5
  701. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.c +1 -1
  702. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.h +6 -5
  703. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.c +1 -1
  704. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.h +6 -5
  705. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +1 -1
  706. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.h +6 -5
  707. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.c +1 -1
  708. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.h +6 -5
  709. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +21 -19
  710. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.h +6 -5
  711. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +1 -1
  712. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +6 -5
  713. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +1 -1
  714. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +6 -5
  715. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +1 -1
  716. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +6 -5
  717. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +1 -1
  718. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +6 -5
  719. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +54 -43
  720. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +6 -5
  721. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +60 -0
  722. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +41 -0
  723. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +382 -364
  724. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +6 -5
  725. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +50 -0
  726. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +36 -0
  727. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +1 -1
  728. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +6 -5
  729. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +138 -136
  730. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +6 -5
  731. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +1 -1
  732. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +6 -5
  733. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +151 -147
  734. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +6 -5
  735. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +1 -1
  736. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +6 -5
  737. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +6 -6
  738. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +6 -5
  739. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +17 -14
  740. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +6 -5
  741. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +6 -6
  742. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +6 -5
  743. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +12 -13
  744. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +6 -5
  745. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.c +1 -1
  746. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.h +6 -5
  747. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +1 -1
  748. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +6 -5
  749. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.c +48 -0
  750. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.h +36 -0
  751. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +13 -10
  752. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +11 -5
  753. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +1 -1
  754. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +6 -5
  755. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +1 -1
  756. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +6 -5
  757. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +1 -1
  758. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +6 -5
  759. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +1 -1
  760. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +6 -5
  761. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +15 -15
  762. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +6 -5
  763. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.c +40 -0
  764. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.h +41 -0
  765. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +1 -1
  766. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +6 -5
  767. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +1 -1
  768. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +6 -5
  769. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +1 -1
  770. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +6 -5
  771. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +1 -1
  772. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +6 -5
  773. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +1 -1
  774. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +6 -5
  775. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.c +1 -1
  776. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.h +6 -5
  777. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +1 -1
  778. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +6 -5
  779. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.c +1 -1
  780. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.h +6 -5
  781. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +1 -1
  782. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +6 -5
  783. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +1 -1
  784. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +6 -5
  785. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +1 -1
  786. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +6 -5
  787. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +11 -10
  788. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.h +6 -5
  789. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +1 -1
  790. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +6 -5
  791. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.c +1 -1
  792. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.h +6 -5
  793. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +1 -1
  794. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +6 -5
  795. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +1 -1
  796. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +6 -5
  797. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +1 -1
  798. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +6 -5
  799. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +1 -1
  800. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +6 -5
  801. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.c +1 -1
  802. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.h +6 -5
  803. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +1 -1
  804. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +6 -5
  805. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +329 -273
  806. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +11 -5
  807. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +1 -1
  808. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +6 -5
  809. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +1 -1
  810. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +6 -5
  811. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +1 -1
  812. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +6 -5
  813. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +1 -1
  814. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +6 -5
  815. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +1 -1
  816. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +6 -5
  817. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +1 -1
  818. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +6 -5
  819. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.c +1 -1
  820. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.h +6 -5
  821. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +1 -1
  822. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +6 -5
  823. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +1 -1
  824. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +6 -5
  825. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +1 -1
  826. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +6 -5
  827. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +1 -1
  828. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +6 -5
  829. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +1 -1
  830. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +6 -5
  831. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +1 -1
  832. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +6 -5
  833. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +1 -1
  834. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +6 -5
  835. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.c +1 -1
  836. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.h +6 -5
  837. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.c +1 -1
  838. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.h +6 -5
  839. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.c +1 -1
  840. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.h +6 -5
  841. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +1 -1
  842. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +6 -5
  843. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.c +1 -1
  844. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.h +6 -5
  845. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +1 -1
  846. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +6 -5
  847. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.c +45 -0
  848. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.h +36 -0
  849. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +1 -1
  850. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +6 -5
  851. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +1 -1
  852. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +6 -5
  853. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.c +1 -1
  854. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.h +6 -5
  855. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +1 -1
  856. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +6 -5
  857. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +1 -1
  858. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +6 -5
  859. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +1 -1
  860. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +6 -5
  861. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.c +43 -0
  862. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.h +36 -0
  863. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.c +51 -0
  864. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.h +41 -0
  865. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.c +36 -0
  866. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.h +36 -0
  867. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.c +55 -0
  868. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.h +41 -0
  869. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +10 -10
  870. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.h +6 -5
  871. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.c +71 -0
  872. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.h +61 -0
  873. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.c +1 -1
  874. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.h +6 -5
  875. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.c +1 -1
  876. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.h +6 -5
  877. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.c +60 -0
  878. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.h +41 -0
  879. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.c +36 -0
  880. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.h +46 -0
  881. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +5 -8
  882. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +6 -5
  883. data/src/core/ext/xds/certificate_provider_store.cc +8 -13
  884. data/src/core/ext/xds/certificate_provider_store.h +4 -4
  885. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +32 -46
  886. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +17 -12
  887. data/src/core/ext/xds/upb_utils.h +4 -4
  888. data/src/core/ext/xds/xds_api.cc +61 -113
  889. data/src/core/ext/xds/xds_api.h +13 -15
  890. data/src/core/ext/xds/xds_audit_logger_registry.cc +122 -0
  891. data/src/core/ext/xds/xds_audit_logger_registry.h +68 -0
  892. data/src/core/ext/xds/xds_bootstrap.cc +3 -3
  893. data/src/core/ext/xds/xds_bootstrap.h +3 -4
  894. data/src/core/ext/xds/xds_bootstrap_grpc.cc +37 -33
  895. data/src/core/ext/xds/xds_bootstrap_grpc.h +24 -4
  896. data/src/core/ext/xds/xds_certificate_provider.cc +22 -25
  897. data/src/core/ext/xds/xds_certificate_provider.h +4 -4
  898. data/src/core/ext/xds/xds_channel_args.h +3 -3
  899. data/src/core/ext/xds/xds_channel_stack_modifier.cc +1 -3
  900. data/src/core/ext/xds/xds_channel_stack_modifier.h +4 -4
  901. data/src/core/ext/xds/xds_client.cc +171 -104
  902. data/src/core/ext/xds/xds_client.h +17 -9
  903. data/src/core/ext/xds/xds_client_grpc.cc +30 -24
  904. data/src/core/ext/xds/xds_client_grpc.h +4 -4
  905. data/src/core/ext/xds/xds_client_stats.cc +46 -32
  906. data/src/core/ext/xds/xds_client_stats.h +46 -41
  907. data/src/core/ext/xds/xds_cluster.cc +358 -205
  908. data/src/core/ext/xds/xds_cluster.h +55 -39
  909. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +61 -74
  910. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +50 -26
  911. data/src/core/ext/xds/xds_common_types.cc +213 -141
  912. data/src/core/ext/xds/xds_common_types.h +22 -16
  913. data/src/core/ext/xds/xds_endpoint.cc +229 -132
  914. data/src/core/ext/xds/xds_endpoint.h +17 -12
  915. data/src/core/ext/xds/xds_health_status.cc +80 -0
  916. data/src/core/ext/xds/xds_health_status.h +109 -0
  917. data/src/core/ext/xds/xds_http_fault_filter.cc +68 -51
  918. data/src/core/ext/xds/xds_http_fault_filter.h +19 -26
  919. data/src/core/ext/xds/xds_http_filters.cc +65 -73
  920. data/src/core/ext/xds/xds_http_filters.h +76 -25
  921. data/src/core/ext/xds/xds_http_rbac_filter.cc +303 -272
  922. data/src/core/ext/xds/xds_http_rbac_filter.h +19 -21
  923. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +222 -0
  924. data/src/core/ext/xds/xds_http_stateful_session_filter.h +59 -0
  925. data/src/core/ext/xds/xds_lb_policy_registry.cc +211 -166
  926. data/src/core/ext/xds/xds_lb_policy_registry.h +13 -14
  927. data/src/core/ext/xds/xds_listener.cc +456 -420
  928. data/src/core/ext/xds/xds_listener.h +49 -51
  929. data/src/core/ext/xds/xds_resource_type.h +8 -16
  930. data/src/core/ext/xds/xds_resource_type_impl.h +13 -16
  931. data/src/core/ext/xds/xds_route_config.cc +566 -534
  932. data/src/core/ext/xds/xds_route_config.h +43 -32
  933. data/src/core/ext/xds/xds_routing.cc +4 -3
  934. data/src/core/ext/xds/xds_routing.h +5 -3
  935. data/src/core/ext/xds/xds_server_config_fetcher.cc +109 -106
  936. data/src/core/ext/xds/xds_transport.h +3 -3
  937. data/src/core/ext/xds/xds_transport_grpc.cc +10 -9
  938. data/src/core/ext/xds/xds_transport_grpc.h +4 -4
  939. data/src/core/lib/address_utils/parse_address.cc +30 -29
  940. data/src/core/lib/address_utils/parse_address.h +35 -35
  941. data/src/core/lib/address_utils/sockaddr_utils.cc +30 -28
  942. data/src/core/lib/address_utils/sockaddr_utils.h +36 -36
  943. data/src/core/lib/avl/avl.h +12 -7
  944. data/src/core/lib/backoff/backoff.cc +17 -17
  945. data/src/core/lib/backoff/backoff.h +20 -20
  946. data/src/core/lib/backoff/random_early_detection.cc +31 -0
  947. data/src/core/lib/backoff/random_early_detection.h +59 -0
  948. data/src/core/lib/channel/call_finalization.h +4 -4
  949. data/src/core/lib/channel/call_tracer.cc +51 -0
  950. data/src/core/lib/channel/call_tracer.h +106 -34
  951. data/src/core/lib/channel/channel_args.cc +100 -42
  952. data/src/core/lib/channel/channel_args.h +104 -49
  953. data/src/core/lib/channel/channel_args_preconditioning.h +4 -4
  954. data/src/core/lib/channel/channel_fwd.h +3 -3
  955. data/src/core/lib/channel/channel_stack.cc +60 -57
  956. data/src/core/lib/channel/channel_stack.h +148 -135
  957. data/src/core/lib/channel/channel_stack_builder.cc +21 -24
  958. data/src/core/lib/channel/channel_stack_builder.h +17 -9
  959. data/src/core/lib/channel/channel_stack_builder_impl.cc +56 -25
  960. data/src/core/lib/channel/channel_stack_builder_impl.h +5 -3
  961. data/src/core/lib/channel/channel_trace.cc +37 -34
  962. data/src/core/lib/channel/channel_trace.h +22 -22
  963. data/src/core/lib/channel/channelz.cc +181 -154
  964. data/src/core/lib/channel/channelz.h +71 -64
  965. data/src/core/lib/channel/channelz_registry.cc +41 -37
  966. data/src/core/lib/channel/channelz_registry.h +21 -21
  967. data/src/core/lib/channel/connected_channel.cc +764 -67
  968. data/src/core/lib/channel/connected_channel.h +20 -24
  969. data/src/core/lib/channel/context.h +33 -22
  970. data/src/core/lib/channel/promise_based_filter.cc +1591 -278
  971. data/src/core/lib/channel/promise_based_filter.h +486 -104
  972. data/src/core/lib/channel/server_call_tracer_filter.cc +110 -0
  973. data/src/core/lib/channel/status_util.cc +35 -17
  974. data/src/core/lib/channel/status_util.h +29 -22
  975. data/src/core/lib/compression/compression.cc +19 -19
  976. data/src/core/lib/compression/compression_internal.cc +38 -48
  977. data/src/core/lib/compression/compression_internal.h +25 -25
  978. data/src/core/lib/compression/message_compress.cc +26 -26
  979. data/src/core/lib/compression/message_compress.h +27 -27
  980. data/src/core/lib/config/config_vars.cc +153 -0
  981. data/src/core/lib/config/config_vars.h +127 -0
  982. data/src/core/lib/config/config_vars_non_generated.cc +51 -0
  983. data/src/core/lib/config/core_configuration.h +3 -3
  984. data/src/core/lib/config/load_config.cc +79 -0
  985. data/src/core/lib/config/load_config.h +55 -0
  986. data/src/core/lib/debug/event_log.cc +88 -0
  987. data/src/core/lib/debug/event_log.h +81 -0
  988. data/src/core/lib/debug/histogram_view.cc +69 -0
  989. data/src/core/lib/debug/histogram_view.h +37 -0
  990. data/src/core/lib/debug/stats.cc +39 -136
  991. data/src/core/lib/debug/stats.h +49 -55
  992. data/src/core/lib/debug/stats_data.cc +240 -88
  993. data/src/core/lib/debug/stats_data.h +295 -145
  994. data/src/core/lib/debug/trace.cc +56 -79
  995. data/src/core/lib/debug/trace.h +37 -54
  996. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +211 -0
  997. data/src/core/lib/event_engine/cf_engine/cf_engine.h +86 -0
  998. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +354 -0
  999. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +146 -0
  1000. data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +79 -0
  1001. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +5 -0
  1002. data/src/core/lib/event_engine/channel_args_endpoint_config.h +3 -3
  1003. data/src/core/lib/event_engine/common_closures.h +71 -0
  1004. data/src/core/lib/event_engine/default_event_engine.cc +56 -16
  1005. data/src/core/lib/event_engine/default_event_engine.h +44 -8
  1006. data/src/core/lib/event_engine/default_event_engine_factory.cc +16 -6
  1007. data/src/core/lib/event_engine/default_event_engine_factory.h +3 -3
  1008. data/src/core/lib/event_engine/event_engine.cc +60 -0
  1009. data/src/core/lib/event_engine/forkable.cc +11 -6
  1010. data/src/core/lib/event_engine/forkable.h +3 -3
  1011. data/src/core/lib/event_engine/handle_containers.h +12 -20
  1012. data/src/core/lib/event_engine/memory_allocator.cc +1 -1
  1013. data/src/core/lib/event_engine/memory_allocator_factory.h +47 -0
  1014. data/src/core/lib/event_engine/poller.h +13 -7
  1015. data/src/core/lib/event_engine/posix.h +162 -0
  1016. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +642 -0
  1017. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +139 -0
  1018. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +895 -0
  1019. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
  1020. data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
  1021. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +68 -0
  1022. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +33 -0
  1023. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
  1024. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
  1025. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +254 -0
  1026. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
  1027. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1338 -0
  1028. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +726 -0
  1029. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +523 -28
  1030. data/src/core/lib/event_engine/posix_engine/posix_engine.h +165 -27
  1031. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
  1032. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +292 -0
  1033. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +278 -0
  1034. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +379 -0
  1035. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +91 -0
  1036. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +867 -0
  1037. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +316 -0
  1038. data/src/core/lib/event_engine/posix_engine/timer.cc +49 -49
  1039. data/src/core/lib/event_engine/posix_engine/timer.h +90 -89
  1040. data/src/core/lib/event_engine/posix_engine/timer_heap.cc +27 -27
  1041. data/src/core/lib/event_engine/posix_engine/timer_heap.h +24 -24
  1042. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +76 -214
  1043. data/src/core/lib/event_engine/posix_engine/timer_manager.h +44 -72
  1044. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +332 -0
  1045. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +185 -0
  1046. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +127 -0
  1047. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
  1048. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +150 -0
  1049. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +45 -0
  1050. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
  1051. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
  1052. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
  1053. data/src/core/lib/event_engine/resolved_address.cc +21 -1
  1054. data/src/core/lib/event_engine/{executor/executor.h → resolved_address_internal.h} +11 -15
  1055. data/src/core/lib/event_engine/shim.cc +64 -0
  1056. data/src/core/lib/event_engine/{executor/threaded_executor.cc → shim.h} +10 -13
  1057. data/src/core/lib/event_engine/slice.cc +8 -7
  1058. data/src/core/lib/event_engine/slice_buffer.cc +2 -2
  1059. data/src/core/lib/event_engine/tcp_socket_utils.cc +389 -0
  1060. data/src/core/lib/event_engine/tcp_socket_utils.h +90 -0
  1061. data/src/core/lib/event_engine/thread_local.cc +29 -0
  1062. data/src/core/lib/event_engine/thread_local.h +32 -0
  1063. data/src/core/lib/event_engine/thread_pool/original_thread_pool.cc +256 -0
  1064. data/src/core/lib/event_engine/thread_pool/original_thread_pool.h +137 -0
  1065. data/src/core/lib/event_engine/thread_pool/thread_pool.h +50 -0
  1066. data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +40 -0
  1067. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +489 -0
  1068. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +249 -0
  1069. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +166 -0
  1070. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +108 -0
  1071. data/src/core/lib/event_engine/time_util.h +3 -3
  1072. data/src/core/lib/event_engine/trace.cc +7 -0
  1073. data/src/core/lib/event_engine/trace.h +22 -3
  1074. data/src/core/lib/event_engine/utils.cc +2 -2
  1075. data/src/core/lib/event_engine/utils.h +12 -4
  1076. data/src/core/lib/event_engine/windows/iocp.cc +39 -53
  1077. data/src/core/lib/event_engine/windows/iocp.h +7 -7
  1078. data/src/core/lib/event_engine/windows/win_socket.cc +69 -47
  1079. data/src/core/lib/event_engine/windows/win_socket.h +38 -29
  1080. data/src/core/lib/event_engine/windows/windows_endpoint.cc +379 -0
  1081. data/src/core/lib/event_engine/windows/windows_endpoint.h +120 -0
  1082. data/src/core/lib/event_engine/windows/windows_engine.cc +285 -33
  1083. data/src/core/lib/event_engine/windows/windows_engine.h +70 -26
  1084. data/src/core/lib/event_engine/windows/windows_listener.cc +370 -0
  1085. data/src/core/lib/event_engine/windows/windows_listener.h +156 -0
  1086. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +63 -0
  1087. data/src/core/lib/event_engine/work_queue/basic_work_queue.h +71 -0
  1088. data/src/core/lib/event_engine/work_queue/work_queue.h +62 -0
  1089. data/src/core/lib/experiments/config.cc +56 -17
  1090. data/src/core/lib/experiments/config.h +29 -3
  1091. data/src/core/lib/experiments/experiments.cc +92 -29
  1092. data/src/core/lib/experiments/experiments.h +101 -23
  1093. data/src/core/lib/gpr/alloc.cc +19 -17
  1094. data/src/core/lib/gpr/alloc.h +20 -20
  1095. data/src/core/lib/gpr/{log_android.cc → android/log.cc} +22 -20
  1096. data/src/core/lib/gpr/atm.cc +17 -17
  1097. data/src/core/lib/gpr/iphone/cpu.cc +44 -0
  1098. data/src/core/lib/gpr/{cpu_linux.cc → linux/cpu.cc} +28 -23
  1099. data/src/core/lib/gpr/{log_linux.cc → linux/log.cc} +24 -24
  1100. data/src/core/lib/gpr/log.cc +42 -47
  1101. data/src/core/lib/gpr/log_internal.h +55 -0
  1102. data/src/core/lib/gpr/{tmpfile_msys.cc → msys/tmpfile.cc} +21 -20
  1103. data/src/core/lib/gpr/{cpu_posix.cc → posix/cpu.cc} +23 -22
  1104. data/src/core/lib/gpr/{log_posix.cc → posix/log.cc} +20 -19
  1105. data/src/core/lib/gpr/{string_posix.cc → posix/string.cc} +24 -24
  1106. data/src/core/lib/gpr/{sync_posix.cc → posix/sync.cc} +23 -21
  1107. data/src/core/lib/gpr/{time_posix.cc → posix/time.cc} +40 -30
  1108. data/src/core/lib/gpr/{tmpfile_posix.cc → posix/tmpfile.cc} +22 -20
  1109. data/src/core/lib/gpr/spinlock.h +20 -20
  1110. data/src/core/lib/gpr/string.cc +25 -24
  1111. data/src/core/lib/gpr/string.h +61 -61
  1112. data/src/core/lib/gpr/sync.cc +25 -25
  1113. data/src/core/lib/gpr/sync_abseil.cc +37 -27
  1114. data/src/core/lib/gpr/time.cc +23 -21
  1115. data/src/core/lib/gpr/time_precise.cc +22 -22
  1116. data/src/core/lib/gpr/time_precise.h +20 -21
  1117. data/src/core/lib/gpr/tmpfile.h +24 -24
  1118. data/src/core/lib/gpr/useful.h +43 -30
  1119. data/src/core/{ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc → lib/gpr/windows/cpu.cc} +16 -11
  1120. data/src/core/lib/gpr/{log_windows.cc → windows/log.cc} +25 -24
  1121. data/src/core/lib/gpr/windows/string.cc +69 -0
  1122. data/src/core/lib/gpr/{string_util_windows.cc → windows/string_util.cc} +22 -22
  1123. data/src/core/lib/gpr/{sync_windows.cc → windows/sync.cc} +29 -27
  1124. data/src/core/lib/gpr/{time_windows.cc → windows/time.cc} +25 -22
  1125. data/src/core/lib/gpr/{tmpfile_windows.cc → windows/tmpfile.cc} +23 -22
  1126. data/src/core/lib/gpr/wrap_memcpy.cc +23 -23
  1127. data/src/core/lib/gprpp/atomic_utils.h +20 -20
  1128. data/src/core/lib/gprpp/bitset.h +27 -3
  1129. data/src/core/lib/gprpp/chunked_vector.h +3 -3
  1130. data/src/core/lib/gprpp/construct_destruct.h +3 -3
  1131. data/src/core/lib/gprpp/cpp_impl_of.h +3 -3
  1132. data/src/core/lib/gprpp/crash.cc +43 -0
  1133. data/src/core/lib/gprpp/crash.h +37 -0
  1134. data/src/core/lib/gprpp/debug_location.h +20 -23
  1135. data/src/core/lib/gprpp/dual_ref_counted.h +3 -3
  1136. data/src/core/lib/gprpp/env.h +23 -23
  1137. data/src/core/lib/gprpp/examine_stack.cc +17 -17
  1138. data/src/core/lib/gprpp/examine_stack.h +21 -21
  1139. data/src/core/lib/gprpp/fork.cc +49 -39
  1140. data/src/core/lib/gprpp/fork.h +29 -27
  1141. data/src/core/lib/gprpp/host_port.cc +28 -26
  1142. data/src/core/lib/gprpp/host_port.h +32 -31
  1143. data/src/core/lib/gprpp/{env_linux.cc → linux/env.cc} +21 -21
  1144. data/src/core/lib/gprpp/load_file.cc +75 -0
  1145. data/src/core/lib/gprpp/load_file.h +33 -0
  1146. data/src/core/lib/gprpp/manual_constructor.h +22 -21
  1147. data/src/core/lib/gprpp/match.h +3 -3
  1148. data/src/core/lib/gprpp/memory.h +21 -21
  1149. data/src/core/lib/gprpp/mpscq.cc +17 -17
  1150. data/src/core/lib/gprpp/mpscq.h +21 -21
  1151. data/src/core/lib/gprpp/no_destruct.h +4 -3
  1152. data/src/core/lib/gprpp/notification.h +3 -3
  1153. data/src/core/lib/gprpp/orphanable.h +25 -24
  1154. data/src/core/lib/gprpp/overload.h +3 -3
  1155. data/src/core/lib/gprpp/packed_table.h +3 -3
  1156. data/src/core/lib/gprpp/per_cpu.cc +33 -0
  1157. data/src/core/lib/gprpp/per_cpu.h +75 -0
  1158. data/src/core/lib/gprpp/posix/env.cc +47 -0
  1159. data/src/core/lib/gprpp/{stat_posix.cc → posix/stat.cc} +5 -4
  1160. data/src/core/lib/gprpp/{thd_posix.cc → posix/thd.cc} +75 -64
  1161. data/src/core/lib/gprpp/ref_counted.h +54 -55
  1162. data/src/core/lib/gprpp/ref_counted_ptr.h +22 -21
  1163. data/src/core/lib/gprpp/single_set_ptr.h +3 -3
  1164. data/src/core/lib/gprpp/sorted_pack.h +3 -3
  1165. data/src/core/lib/gprpp/stat.h +3 -3
  1166. data/src/core/lib/gprpp/status_helper.cc +6 -5
  1167. data/src/core/lib/gprpp/status_helper.h +4 -6
  1168. data/src/core/lib/gprpp/strerror.cc +43 -0
  1169. data/src/core/lib/gprpp/strerror.h +29 -0
  1170. data/src/core/lib/gprpp/sync.h +23 -23
  1171. data/src/core/lib/gprpp/table.h +4 -3
  1172. data/src/core/lib/gprpp/tchar.h +3 -3
  1173. data/src/core/lib/gprpp/thd.h +39 -23
  1174. data/src/core/lib/gprpp/time.cc +18 -10
  1175. data/src/core/lib/gprpp/time.h +16 -6
  1176. data/src/core/lib/gprpp/time_averaged_stats.cc +20 -20
  1177. data/src/core/lib/gprpp/time_averaged_stats.h +50 -50
  1178. data/src/core/lib/gprpp/time_util.h +4 -4
  1179. data/src/core/lib/gprpp/unique_type_name.h +21 -21
  1180. data/src/core/lib/gprpp/validation_errors.cc +8 -3
  1181. data/src/core/lib/gprpp/validation_errors.h +37 -13
  1182. data/src/core/lib/gprpp/{env_windows.cc → windows/env.cc} +18 -18
  1183. data/src/core/lib/gprpp/{stat_windows.cc → windows/stat.cc} +4 -2
  1184. data/src/core/lib/gprpp/{thd_windows.cc → windows/thd.cc} +28 -28
  1185. data/src/core/lib/gprpp/work_serializer.h +3 -3
  1186. data/src/core/lib/handshaker/proxy_mapper.h +21 -21
  1187. data/src/core/lib/handshaker/proxy_mapper_registry.cc +17 -17
  1188. data/src/core/lib/handshaker/proxy_mapper_registry.h +21 -21
  1189. data/src/core/lib/http/format_request.cc +19 -18
  1190. data/src/core/lib/http/format_request.h +20 -20
  1191. data/src/core/lib/http/httpcli.cc +58 -61
  1192. data/src/core/lib/http/httpcli.h +29 -29
  1193. data/src/core/lib/http/httpcli_security_connector.cc +22 -25
  1194. data/src/core/lib/http/httpcli_ssl_credentials.h +3 -3
  1195. data/src/core/lib/http/parser.cc +76 -87
  1196. data/src/core/lib/http/parser.h +35 -35
  1197. data/src/core/lib/iomgr/block_annotate.h +23 -23
  1198. data/src/core/lib/iomgr/buffer_list.cc +156 -136
  1199. data/src/core/lib/iomgr/buffer_list.h +122 -101
  1200. data/src/core/lib/iomgr/call_combiner.cc +32 -30
  1201. data/src/core/lib/iomgr/call_combiner.h +26 -27
  1202. data/src/core/lib/iomgr/cfstream_handle.cc +34 -37
  1203. data/src/core/lib/iomgr/cfstream_handle.h +25 -25
  1204. data/src/core/lib/iomgr/closure.cc +27 -0
  1205. data/src/core/lib/iomgr/closure.h +95 -48
  1206. data/src/core/lib/iomgr/combiner.cc +20 -19
  1207. data/src/core/lib/iomgr/combiner.h +20 -20
  1208. data/src/core/lib/iomgr/dualstack_socket_posix.cc +21 -21
  1209. data/src/core/lib/iomgr/dynamic_annotations.h +22 -22
  1210. data/src/core/lib/iomgr/endpoint.cc +17 -17
  1211. data/src/core/lib/iomgr/endpoint.h +49 -49
  1212. data/src/core/lib/iomgr/endpoint_cfstream.cc +58 -53
  1213. data/src/core/lib/iomgr/endpoint_cfstream.h +32 -32
  1214. data/src/core/lib/iomgr/endpoint_pair.h +22 -22
  1215. data/src/core/lib/iomgr/endpoint_pair_posix.cc +22 -21
  1216. data/src/core/lib/iomgr/endpoint_pair_windows.cc +29 -20
  1217. data/src/core/lib/iomgr/error.cc +49 -61
  1218. data/src/core/lib/iomgr/error.h +45 -176
  1219. data/src/core/lib/iomgr/error_cfstream.cc +18 -18
  1220. data/src/core/lib/iomgr/error_cfstream.h +21 -21
  1221. data/src/core/lib/iomgr/ev_apple.cc +33 -33
  1222. data/src/core/lib/iomgr/ev_apple.h +21 -21
  1223. data/src/core/lib/iomgr/ev_epoll1_linux.cc +218 -198
  1224. data/src/core/lib/iomgr/ev_epoll1_linux.h +20 -20
  1225. data/src/core/lib/iomgr/ev_poll_posix.cc +212 -205
  1226. data/src/core/lib/iomgr/ev_poll_posix.h +20 -20
  1227. data/src/core/lib/iomgr/ev_posix.cc +47 -79
  1228. data/src/core/lib/iomgr/ev_posix.h +88 -87
  1229. data/src/core/lib/iomgr/ev_windows.cc +18 -18
  1230. data/src/core/lib/iomgr/event_engine_shims/closure.cc +62 -0
  1231. data/src/core/lib/{event_engine/executor/threaded_executor.h → iomgr/event_engine_shims/closure.h} +11 -16
  1232. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +471 -0
  1233. data/src/core/lib/iomgr/event_engine_shims/endpoint.h +43 -0
  1234. data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +91 -0
  1235. data/src/core/lib/iomgr/event_engine_shims/tcp_client.h +44 -0
  1236. data/src/core/lib/iomgr/exec_ctx.cc +34 -34
  1237. data/src/core/lib/iomgr/exec_ctx.h +144 -144
  1238. data/src/core/lib/iomgr/executor.cc +21 -21
  1239. data/src/core/lib/iomgr/executor.h +27 -27
  1240. data/src/core/lib/iomgr/fork_posix.cc +29 -26
  1241. data/src/core/lib/iomgr/fork_windows.cc +21 -21
  1242. data/src/core/lib/iomgr/gethostname.h +20 -20
  1243. data/src/core/lib/iomgr/gethostname_fallback.cc +17 -17
  1244. data/src/core/lib/iomgr/gethostname_host_name_max.cc +17 -17
  1245. data/src/core/lib/iomgr/gethostname_sysconf.cc +17 -17
  1246. data/src/core/lib/iomgr/grpc_if_nametoindex.h +22 -22
  1247. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +20 -19
  1248. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +20 -19
  1249. data/src/core/lib/iomgr/internal_errqueue.cc +4 -2
  1250. data/src/core/lib/iomgr/internal_errqueue.h +83 -83
  1251. data/src/core/lib/iomgr/iocp_windows.cc +46 -24
  1252. data/src/core/lib/iomgr/iocp_windows.h +32 -21
  1253. data/src/core/lib/iomgr/iomgr.cc +23 -26
  1254. data/src/core/lib/iomgr/iomgr.h +35 -35
  1255. data/src/core/lib/iomgr/iomgr_fwd.h +3 -3
  1256. data/src/core/lib/iomgr/iomgr_internal.cc +17 -17
  1257. data/src/core/lib/iomgr/iomgr_internal.h +28 -28
  1258. data/src/core/lib/iomgr/iomgr_posix.cc +20 -20
  1259. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +21 -20
  1260. data/src/core/lib/iomgr/iomgr_windows.cc +32 -24
  1261. data/src/core/lib/iomgr/load_file.cc +24 -27
  1262. data/src/core/lib/iomgr/load_file.h +22 -22
  1263. data/src/core/lib/iomgr/lockfree_event.cc +114 -114
  1264. data/src/core/lib/iomgr/lockfree_event.h +23 -23
  1265. data/src/core/lib/iomgr/nameser.h +86 -86
  1266. data/src/core/lib/iomgr/polling_entity.cc +25 -21
  1267. data/src/core/lib/iomgr/polling_entity.h +29 -29
  1268. data/src/core/lib/iomgr/pollset.cc +17 -17
  1269. data/src/core/lib/iomgr/pollset.h +54 -54
  1270. data/src/core/lib/iomgr/pollset_set.cc +17 -17
  1271. data/src/core/lib/iomgr/pollset_set.h +25 -25
  1272. data/src/core/lib/iomgr/pollset_set_windows.cc +27 -27
  1273. data/src/core/lib/iomgr/pollset_set_windows.h +20 -20
  1274. data/src/core/lib/iomgr/pollset_windows.cc +33 -32
  1275. data/src/core/lib/iomgr/pollset_windows.h +24 -24
  1276. data/src/core/lib/iomgr/port.h +31 -31
  1277. data/src/core/lib/iomgr/python_util.h +24 -24
  1278. data/src/core/lib/iomgr/resolve_address.cc +26 -20
  1279. data/src/core/lib/iomgr/resolve_address.h +24 -25
  1280. data/src/core/lib/iomgr/resolve_address_impl.h +4 -4
  1281. data/src/core/lib/iomgr/resolve_address_posix.cc +35 -45
  1282. data/src/core/lib/iomgr/resolve_address_posix.h +4 -5
  1283. data/src/core/lib/iomgr/resolve_address_windows.cc +18 -20
  1284. data/src/core/lib/iomgr/resolve_address_windows.h +4 -5
  1285. data/src/core/lib/iomgr/resolved_address.h +3 -3
  1286. data/src/core/lib/iomgr/sockaddr.h +23 -23
  1287. data/src/core/lib/iomgr/sockaddr_posix.h +21 -21
  1288. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +18 -17
  1289. data/src/core/lib/iomgr/sockaddr_windows.h +21 -21
  1290. data/src/core/lib/iomgr/socket_factory_posix.cc +18 -18
  1291. data/src/core/lib/iomgr/socket_factory_posix.h +32 -32
  1292. data/src/core/lib/iomgr/socket_mutator.cc +19 -18
  1293. data/src/core/lib/iomgr/socket_mutator.h +39 -39
  1294. data/src/core/lib/iomgr/socket_utils.h +27 -27
  1295. data/src/core/lib/iomgr/socket_utils_common_posix.cc +87 -70
  1296. data/src/core/lib/iomgr/socket_utils_linux.cc +18 -17
  1297. data/src/core/lib/iomgr/socket_utils_posix.cc +25 -20
  1298. data/src/core/lib/iomgr/socket_utils_posix.h +84 -81
  1299. data/src/core/lib/iomgr/socket_utils_windows.cc +20 -19
  1300. data/src/core/lib/iomgr/socket_windows.cc +97 -42
  1301. data/src/core/lib/iomgr/socket_windows.h +68 -61
  1302. data/src/core/lib/iomgr/systemd_utils.cc +116 -0
  1303. data/src/core/lib/iomgr/systemd_utils.h +33 -0
  1304. data/src/core/lib/iomgr/tcp_client.cc +17 -17
  1305. data/src/core/lib/iomgr/tcp_client.h +28 -28
  1306. data/src/core/lib/iomgr/tcp_client_cfstream.cc +39 -31
  1307. data/src/core/lib/iomgr/tcp_client_posix.cc +86 -73
  1308. data/src/core/lib/iomgr/tcp_client_posix.h +45 -45
  1309. data/src/core/lib/iomgr/tcp_client_windows.cc +51 -42
  1310. data/src/core/lib/iomgr/tcp_posix.cc +270 -301
  1311. data/src/core/lib/iomgr/tcp_posix.h +29 -29
  1312. data/src/core/lib/iomgr/tcp_server.cc +30 -22
  1313. data/src/core/lib/iomgr/tcp_server.h +71 -65
  1314. data/src/core/lib/iomgr/tcp_server_posix.cc +373 -98
  1315. data/src/core/lib/iomgr/tcp_server_utils_posix.h +67 -54
  1316. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +90 -55
  1317. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +40 -40
  1318. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +19 -19
  1319. data/src/core/lib/iomgr/tcp_server_windows.cc +277 -119
  1320. data/src/core/lib/iomgr/tcp_windows.cc +121 -101
  1321. data/src/core/lib/iomgr/tcp_windows.h +34 -34
  1322. data/src/core/lib/iomgr/timer.cc +17 -17
  1323. data/src/core/lib/iomgr/timer.h +68 -68
  1324. data/src/core/lib/iomgr/timer_generic.cc +132 -138
  1325. data/src/core/lib/iomgr/timer_generic.h +21 -21
  1326. data/src/core/lib/iomgr/timer_heap.cc +25 -25
  1327. data/src/core/lib/iomgr/timer_heap.h +22 -22
  1328. data/src/core/lib/iomgr/timer_manager.cc +30 -29
  1329. data/src/core/lib/iomgr/timer_manager.h +27 -27
  1330. data/src/core/lib/iomgr/unix_sockets_posix.cc +20 -21
  1331. data/src/core/lib/iomgr/unix_sockets_posix.h +21 -21
  1332. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +19 -17
  1333. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +23 -21
  1334. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +23 -23
  1335. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +29 -26
  1336. data/src/core/lib/iomgr/wakeup_fd_pipe.h +20 -20
  1337. data/src/core/lib/iomgr/wakeup_fd_posix.cc +18 -18
  1338. data/src/core/lib/iomgr/wakeup_fd_posix.h +52 -52
  1339. data/src/core/lib/json/json.h +5 -221
  1340. data/src/core/lib/json/json_args.h +3 -3
  1341. data/src/core/lib/json/json_channel_args.h +42 -0
  1342. data/src/core/lib/json/json_object_loader.cc +39 -25
  1343. data/src/core/lib/json/json_object_loader.h +69 -21
  1344. data/src/core/lib/json/json_reader.cc +98 -70
  1345. data/src/core/lib/json/json_reader.h +34 -0
  1346. data/src/core/lib/json/json_util.cc +14 -19
  1347. data/src/core/lib/json/json_util.h +12 -11
  1348. data/src/core/lib/json/json_writer.cc +80 -81
  1349. data/src/core/{ext/xds/xds_resource_type.cc → lib/json/json_writer.h} +11 -11
  1350. data/src/core/lib/load_balancing/lb_policy.cc +36 -31
  1351. data/src/core/lib/load_balancing/lb_policy.h +32 -10
  1352. data/src/core/lib/load_balancing/lb_policy_factory.h +3 -3
  1353. data/src/core/lib/load_balancing/lb_policy_registry.cc +10 -8
  1354. data/src/core/lib/load_balancing/lb_policy_registry.h +3 -3
  1355. data/src/core/lib/load_balancing/subchannel_interface.h +9 -14
  1356. data/src/core/lib/matchers/matchers.cc +10 -9
  1357. data/src/core/lib/matchers/matchers.h +5 -4
  1358. data/src/core/lib/promise/activity.cc +43 -6
  1359. data/src/core/lib/promise/activity.h +143 -79
  1360. data/src/core/lib/promise/arena_promise.h +84 -54
  1361. data/src/core/lib/promise/cancel_callback.h +77 -0
  1362. data/src/core/lib/promise/context.h +17 -9
  1363. data/src/core/lib/promise/detail/basic_join.h +197 -0
  1364. data/src/core/lib/promise/detail/basic_seq.h +20 -45
  1365. data/src/core/lib/promise/detail/promise_factory.h +67 -14
  1366. data/src/core/lib/promise/detail/promise_like.h +3 -3
  1367. data/src/core/lib/promise/detail/status.h +31 -3
  1368. data/src/core/lib/promise/detail/switch.h +1455 -0
  1369. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +23 -15
  1370. data/src/core/lib/promise/for_each.h +176 -0
  1371. data/src/core/lib/promise/if.h +204 -0
  1372. data/src/core/lib/promise/interceptor_list.h +329 -0
  1373. data/src/core/lib/promise/latch.h +197 -23
  1374. data/src/core/lib/promise/loop.h +22 -16
  1375. data/src/core/lib/promise/map.h +12 -6
  1376. data/src/core/lib/promise/party.cc +304 -0
  1377. data/src/core/lib/promise/party.h +508 -0
  1378. data/src/core/lib/promise/pipe.h +762 -0
  1379. data/src/core/lib/promise/poll.h +177 -11
  1380. data/src/core/lib/promise/prioritized_race.h +95 -0
  1381. data/src/core/lib/promise/promise.h +6 -7
  1382. data/src/core/lib/promise/race.h +6 -9
  1383. data/src/core/lib/promise/seq.h +7 -8
  1384. data/src/core/lib/promise/sleep.cc +7 -5
  1385. data/src/core/lib/promise/sleep.h +4 -5
  1386. data/src/core/lib/promise/trace.cc +20 -0
  1387. data/src/core/lib/promise/trace.h +24 -0
  1388. data/src/core/lib/promise/try_join.h +82 -0
  1389. data/src/core/lib/promise/try_seq.h +14 -16
  1390. data/src/core/lib/resolver/resolver.cc +17 -17
  1391. data/src/core/lib/resolver/resolver.h +3 -3
  1392. data/src/core/lib/resolver/resolver_factory.h +4 -4
  1393. data/src/core/lib/resolver/resolver_registry.cc +15 -0
  1394. data/src/core/lib/resolver/resolver_registry.h +3 -3
  1395. data/src/core/lib/resolver/server_address.cc +19 -25
  1396. data/src/core/lib/resolver/server_address.h +22 -30
  1397. data/src/core/lib/resource_quota/api.cc +0 -1
  1398. data/src/core/lib/resource_quota/api.h +4 -4
  1399. data/src/core/lib/resource_quota/arena.cc +82 -20
  1400. data/src/core/lib/resource_quota/arena.h +287 -22
  1401. data/src/core/lib/resource_quota/memory_quota.cc +141 -44
  1402. data/src/core/lib/resource_quota/memory_quota.h +87 -26
  1403. data/src/core/lib/resource_quota/periodic_update.h +3 -3
  1404. data/src/core/lib/resource_quota/resource_quota.h +4 -4
  1405. data/src/core/lib/resource_quota/thread_quota.h +3 -3
  1406. data/src/core/lib/resource_quota/trace.h +3 -3
  1407. data/src/core/lib/security/authorization/audit_logging.cc +98 -0
  1408. data/src/core/lib/security/authorization/audit_logging.h +73 -0
  1409. data/src/core/lib/security/authorization/authorization_engine.h +3 -3
  1410. data/src/core/lib/security/authorization/authorization_policy_provider.h +4 -4
  1411. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +0 -1
  1412. data/src/core/lib/security/authorization/evaluate_args.h +3 -3
  1413. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +47 -4
  1414. data/src/core/lib/security/authorization/grpc_authorization_engine.h +21 -4
  1415. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +4 -2
  1416. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +3 -3
  1417. data/src/core/lib/security/authorization/matchers.cc +25 -22
  1418. data/src/core/lib/security/authorization/matchers.h +3 -3
  1419. data/src/core/lib/security/authorization/rbac_policy.cc +39 -7
  1420. data/src/core/lib/security/authorization/rbac_policy.h +22 -5
  1421. data/src/core/lib/security/authorization/stdout_logger.cc +75 -0
  1422. data/src/core/lib/security/authorization/stdout_logger.h +61 -0
  1423. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +11 -7
  1424. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +8 -18
  1425. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +17 -11
  1426. data/src/core/lib/security/context/security_context.cc +22 -23
  1427. data/src/core/lib/security/context/security_context.h +43 -33
  1428. data/src/core/lib/security/credentials/alts/alts_credentials.cc +17 -17
  1429. data/src/core/lib/security/credentials/alts/alts_credentials.h +53 -53
  1430. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +19 -19
  1431. data/src/core/lib/security/credentials/alts/check_gcp_environment.h +43 -43
  1432. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +17 -17
  1433. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +18 -17
  1434. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +18 -17
  1435. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +19 -19
  1436. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +18 -18
  1437. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +38 -39
  1438. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +18 -18
  1439. data/src/core/lib/security/credentials/call_creds_util.h +3 -3
  1440. data/src/core/lib/security/credentials/channel_creds_registry.h +3 -3
  1441. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +3 -4
  1442. data/src/core/lib/security/credentials/composite/composite_credentials.cc +22 -22
  1443. data/src/core/lib/security/credentials/composite/composite_credentials.h +23 -24
  1444. data/src/core/lib/security/credentials/credentials.cc +19 -18
  1445. data/src/core/lib/security/credentials/credentials.h +37 -36
  1446. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +113 -108
  1447. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +4 -3
  1448. data/src/core/lib/security/credentials/external/aws_request_signer.cc +5 -3
  1449. data/src/core/lib/security/credentials/external/aws_request_signer.h +3 -3
  1450. data/src/core/lib/security/credentials/external/external_account_credentials.cc +105 -115
  1451. data/src/core/lib/security/credentials/external/external_account_credentials.h +3 -3
  1452. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +39 -41
  1453. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +3 -3
  1454. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +51 -52
  1455. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +3 -3
  1456. data/src/core/lib/security/credentials/fake/fake_credentials.cc +20 -19
  1457. data/src/core/lib/security/credentials/fake/fake_credentials.h +37 -38
  1458. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +17 -17
  1459. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +72 -126
  1460. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +21 -22
  1461. data/src/core/lib/security/credentials/iam/iam_credentials.cc +19 -17
  1462. data/src/core/lib/security/credentials/iam/iam_credentials.h +20 -20
  1463. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +3 -3
  1464. data/src/core/lib/security/credentials/jwt/json_token.cc +43 -41
  1465. data/src/core/lib/security/credentials/jwt/json_token.h +35 -35
  1466. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +27 -22
  1467. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +22 -22
  1468. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +115 -113
  1469. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +46 -46
  1470. data/src/core/lib/security/credentials/local/local_credentials.cc +17 -17
  1471. data/src/core/lib/security/credentials/local/local_credentials.h +23 -23
  1472. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +80 -80
  1473. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +24 -23
  1474. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +24 -23
  1475. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +25 -25
  1476. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +19 -20
  1477. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +20 -20
  1478. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +20 -28
  1479. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +7 -14
  1480. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +44 -44
  1481. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +5 -3
  1482. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +1 -1
  1483. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +3 -3
  1484. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +18 -18
  1485. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +3 -3
  1486. data/src/core/lib/security/credentials/tls/tls_credentials.cc +18 -19
  1487. data/src/core/lib/security/credentials/tls/tls_credentials.h +21 -21
  1488. data/src/core/lib/security/credentials/tls/tls_utils.h +3 -3
  1489. data/src/core/lib/security/credentials/xds/xds_credentials.cc +1 -2
  1490. data/src/core/lib/security/credentials/xds/xds_credentials.h +3 -3
  1491. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +33 -43
  1492. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +43 -44
  1493. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +33 -41
  1494. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +22 -23
  1495. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  1496. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +5 -10
  1497. data/src/core/lib/security/security_connector/load_system_roots.h +20 -20
  1498. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +18 -18
  1499. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +24 -31
  1500. data/src/core/lib/security/security_connector/load_system_roots_supported.h +22 -23
  1501. data/src/core/lib/security/security_connector/local/local_security_connector.cc +30 -34
  1502. data/src/core/lib/security/security_connector/local/local_security_connector.h +42 -43
  1503. data/src/core/lib/security/security_connector/security_connector.cc +17 -17
  1504. data/src/core/lib/security/security_connector/security_connector.h +35 -36
  1505. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +35 -39
  1506. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +40 -41
  1507. data/src/core/lib/security/security_connector/ssl_utils.cc +48 -64
  1508. data/src/core/lib/security/security_connector/ssl_utils.h +35 -35
  1509. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +54 -48
  1510. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +21 -21
  1511. data/src/core/lib/security/transport/auth_filters.h +45 -23
  1512. data/src/core/lib/security/transport/client_auth_filter.cc +21 -21
  1513. data/src/core/lib/security/transport/secure_endpoint.cc +58 -58
  1514. data/src/core/lib/security/transport/secure_endpoint.h +25 -25
  1515. data/src/core/lib/security/transport/security_handshaker.cc +79 -70
  1516. data/src/core/lib/security/transport/security_handshaker.h +22 -22
  1517. data/src/core/lib/security/transport/server_auth_filter.cc +160 -274
  1518. data/src/core/lib/security/transport/tsi_error.cc +23 -20
  1519. data/src/core/lib/security/transport/tsi_error.h +20 -20
  1520. data/src/core/lib/security/util/json_util.cc +27 -27
  1521. data/src/core/lib/security/util/json_util.h +20 -20
  1522. data/src/core/lib/service_config/service_config.h +4 -4
  1523. data/src/core/lib/service_config/service_config_call_data.h +54 -19
  1524. data/src/core/lib/service_config/service_config_impl.cc +118 -158
  1525. data/src/core/lib/service_config/service_config_impl.h +16 -19
  1526. data/src/core/lib/service_config/service_config_parser.cc +14 -31
  1527. data/src/core/lib/service_config/service_config_parser.h +16 -12
  1528. data/src/core/lib/slice/b64.cc +26 -26
  1529. data/src/core/lib/slice/b64.h +32 -32
  1530. data/src/core/lib/slice/percent_encoding.cc +17 -17
  1531. data/src/core/lib/slice/percent_encoding.h +28 -28
  1532. data/src/core/lib/slice/slice.cc +48 -42
  1533. data/src/core/lib/slice/slice.h +59 -18
  1534. data/src/core/lib/slice/slice_buffer.cc +63 -59
  1535. data/src/core/lib/slice/slice_buffer.h +35 -4
  1536. data/src/core/lib/slice/slice_internal.h +34 -42
  1537. data/src/core/lib/slice/slice_refcount.cc +3 -18
  1538. data/src/core/lib/slice/slice_refcount.h +53 -18
  1539. data/src/core/lib/slice/slice_string_helpers.cc +17 -17
  1540. data/src/core/lib/slice/slice_string_helpers.h +21 -21
  1541. data/src/core/lib/surface/api_trace.cc +17 -17
  1542. data/src/core/lib/surface/api_trace.h +25 -25
  1543. data/src/core/lib/surface/builtins.cc +2 -0
  1544. data/src/core/lib/surface/builtins.h +3 -3
  1545. data/src/core/lib/surface/byte_buffer.cc +22 -23
  1546. data/src/core/lib/surface/byte_buffer_reader.cc +23 -23
  1547. data/src/core/lib/surface/call.cc +2297 -535
  1548. data/src/core/lib/surface/call.h +123 -42
  1549. data/src/core/lib/surface/call_details.cc +20 -21
  1550. data/src/core/lib/surface/call_log_batch.cc +19 -18
  1551. data/src/core/lib/surface/call_test_only.h +33 -33
  1552. data/src/core/lib/surface/call_trace.cc +123 -0
  1553. data/src/core/{ext/filters/http/message_compress/message_decompress_filter.h → lib/surface/call_trace.h} +10 -12
  1554. data/src/core/lib/surface/channel.cc +62 -67
  1555. data/src/core/lib/surface/channel.h +43 -35
  1556. data/src/core/lib/surface/channel_init.cc +17 -17
  1557. data/src/core/lib/surface/channel_init.h +20 -20
  1558. data/src/core/lib/surface/channel_ping.cc +19 -19
  1559. data/src/core/lib/surface/channel_stack_type.cc +21 -17
  1560. data/src/core/lib/surface/channel_stack_type.h +22 -20
  1561. data/src/core/lib/surface/completion_queue.cc +182 -194
  1562. data/src/core/lib/surface/completion_queue.h +36 -36
  1563. data/src/core/lib/surface/completion_queue_factory.cc +28 -28
  1564. data/src/core/lib/surface/completion_queue_factory.h +22 -22
  1565. data/src/core/lib/surface/event_string.cc +18 -17
  1566. data/src/core/lib/surface/event_string.h +22 -22
  1567. data/src/core/lib/surface/init.cc +30 -59
  1568. data/src/core/lib/surface/init.h +20 -20
  1569. data/src/core/lib/surface/init_internally.cc +1 -0
  1570. data/src/core/lib/surface/init_internally.h +12 -3
  1571. data/src/core/lib/surface/lame_client.cc +31 -26
  1572. data/src/core/lib/surface/lame_client.h +21 -21
  1573. data/src/core/lib/surface/metadata_array.cc +17 -18
  1574. data/src/core/lib/surface/server.cc +363 -111
  1575. data/src/core/lib/surface/server.h +10 -9
  1576. data/src/core/lib/surface/validate_metadata.cc +60 -60
  1577. data/src/core/lib/surface/validate_metadata.h +30 -21
  1578. data/src/core/lib/surface/version.cc +21 -21
  1579. data/src/core/lib/transport/batch_builder.cc +182 -0
  1580. data/src/core/lib/transport/batch_builder.h +480 -0
  1581. data/src/core/lib/transport/bdp_estimator.cc +24 -24
  1582. data/src/core/lib/transport/bdp_estimator.h +31 -28
  1583. data/src/core/lib/transport/connectivity_state.cc +19 -19
  1584. data/src/core/lib/transport/connectivity_state.h +22 -22
  1585. data/src/core/lib/transport/custom_metadata.h +30 -0
  1586. data/src/core/lib/transport/error_utils.cc +51 -45
  1587. data/src/core/lib/transport/error_utils.h +24 -24
  1588. data/src/core/lib/transport/handshaker.cc +60 -46
  1589. data/src/core/lib/transport/handshaker.h +47 -42
  1590. data/src/core/lib/transport/handshaker_factory.h +47 -21
  1591. data/src/core/lib/transport/handshaker_registry.cc +25 -19
  1592. data/src/core/lib/transport/handshaker_registry.h +23 -24
  1593. data/src/core/lib/transport/http2_errors.h +22 -22
  1594. data/src/core/lib/transport/http_connect_handshaker.cc +40 -41
  1595. data/src/core/lib/transport/http_connect_handshaker.h +21 -21
  1596. data/src/core/lib/transport/metadata_batch.cc +24 -7
  1597. data/src/core/lib/transport/metadata_batch.h +193 -53
  1598. data/src/core/lib/transport/metadata_compression_traits.h +67 -0
  1599. data/src/core/lib/transport/parsed_metadata.cc +2 -6
  1600. data/src/core/lib/transport/parsed_metadata.h +23 -12
  1601. data/src/core/lib/transport/pid_controller.cc +20 -20
  1602. data/src/core/lib/transport/pid_controller.h +27 -27
  1603. data/src/core/lib/transport/simple_slice_based_metadata.h +48 -0
  1604. data/src/core/lib/transport/status_conversion.cc +22 -22
  1605. data/src/core/lib/transport/status_conversion.h +22 -22
  1606. data/src/core/lib/transport/tcp_connect_handshaker.cc +15 -21
  1607. data/src/core/lib/transport/tcp_connect_handshaker.h +3 -3
  1608. data/src/core/lib/transport/timeout_encoding.cc +28 -23
  1609. data/src/core/lib/transport/timeout_encoding.h +20 -20
  1610. data/src/core/lib/transport/transport.cc +113 -43
  1611. data/src/core/lib/transport/transport.h +275 -210
  1612. data/src/core/lib/transport/transport_fwd.h +3 -3
  1613. data/src/core/lib/transport/transport_impl.h +53 -46
  1614. data/src/core/lib/transport/transport_op_string.cc +75 -63
  1615. data/src/core/lib/uri/uri_parser.cc +1 -1
  1616. data/src/core/lib/uri/uri_parser.h +3 -3
  1617. data/src/core/plugin_registry/grpc_plugin_registry.cc +34 -35
  1618. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +9 -14
  1619. data/src/core/tsi/alts/crypt/aes_gcm.cc +20 -20
  1620. data/src/core/tsi/alts/crypt/gsec.cc +26 -26
  1621. data/src/core/tsi/alts/crypt/gsec.h +336 -336
  1622. data/src/core/tsi/alts/frame_protector/alts_counter.cc +23 -23
  1623. data/src/core/tsi/alts/frame_protector/alts_counter.h +68 -68
  1624. data/src/core/tsi/alts/frame_protector/alts_crypter.cc +19 -19
  1625. data/src/core/tsi/alts/frame_protector/alts_crypter.h +209 -209
  1626. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +73 -71
  1627. data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +40 -40
  1628. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +18 -18
  1629. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +82 -83
  1630. data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +22 -22
  1631. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +22 -22
  1632. data/src/core/tsi/alts/frame_protector/frame_handler.cc +26 -25
  1633. data/src/core/tsi/alts/frame_protector/frame_handler.h +169 -169
  1634. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +98 -80
  1635. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +107 -102
  1636. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +18 -17
  1637. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +43 -44
  1638. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +38 -37
  1639. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +60 -60
  1640. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +23 -23
  1641. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +21 -20
  1642. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +38 -38
  1643. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +19 -19
  1644. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +105 -104
  1645. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +45 -44
  1646. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +40 -41
  1647. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +38 -36
  1648. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +35 -36
  1649. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +67 -68
  1650. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +32 -31
  1651. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +55 -56
  1652. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +54 -53
  1653. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +141 -142
  1654. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +58 -57
  1655. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +43 -44
  1656. data/src/core/tsi/fake_transport_security.cc +80 -79
  1657. data/src/core/tsi/fake_transport_security.h +33 -33
  1658. data/src/core/tsi/local_transport_security.cc +34 -33
  1659. data/src/core/tsi/local_transport_security.h +33 -33
  1660. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +9 -4
  1661. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +3 -3
  1662. data/src/core/tsi/ssl/session_cache/ssl_session.h +21 -21
  1663. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +19 -19
  1664. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +18 -17
  1665. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +22 -22
  1666. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +25 -20
  1667. data/src/core/tsi/ssl_transport_security.cc +256 -349
  1668. data/src/core/tsi/ssl_transport_security.h +206 -203
  1669. data/src/core/tsi/ssl_transport_security_utils.cc +250 -0
  1670. data/src/core/tsi/ssl_transport_security_utils.h +147 -0
  1671. data/src/core/tsi/ssl_types.h +27 -27
  1672. data/src/core/tsi/transport_security.cc +26 -26
  1673. data/src/core/tsi/transport_security.h +47 -47
  1674. data/src/core/tsi/transport_security_grpc.cc +20 -20
  1675. data/src/core/tsi/transport_security_grpc.h +41 -41
  1676. data/src/core/tsi/transport_security_interface.h +333 -333
  1677. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.clang +2 -0
  1678. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.gcc +7 -0
  1679. data/src/ruby/ext/grpc/ext-export.clang +0 -1
  1680. data/src/ruby/ext/grpc/ext-export.gcc +1 -2
  1681. data/src/ruby/ext/grpc/extconf.rb +55 -11
  1682. data/src/ruby/ext/grpc/rb_call.c +1 -0
  1683. data/src/ruby/ext/grpc/rb_channel.c +1 -0
  1684. data/src/ruby/ext/grpc/rb_channel_args.c +1 -0
  1685. data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
  1686. data/src/ruby/ext/grpc/rb_grpc.c +1 -0
  1687. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +38 -38
  1688. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +59 -59
  1689. data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
  1690. data/src/ruby/lib/grpc/version.rb +1 -1
  1691. data/src/ruby/pb/generate_proto_ruby.sh +0 -6
  1692. data/src/ruby/spec/channel_spec.rb +0 -43
  1693. data/src/ruby/spec/client_server_spec.rb +20 -8
  1694. data/src/ruby/spec/generic/active_call_spec.rb +12 -3
  1695. data/third_party/abseil-cpp/absl/algorithm/container.h +56 -57
  1696. data/third_party/abseil-cpp/absl/base/attributes.h +39 -19
  1697. data/third_party/abseil-cpp/absl/base/config.h +45 -4
  1698. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +3 -18
  1699. data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +55 -0
  1700. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +2 -1
  1701. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +3 -3
  1702. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +2 -2
  1703. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +1 -1
  1704. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +10 -6
  1705. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +23 -24
  1706. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -3
  1707. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +2 -6
  1708. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +4 -1
  1709. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +4 -4
  1710. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +14 -10
  1711. data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +9 -0
  1712. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -0
  1713. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -40
  1714. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +62 -0
  1715. data/third_party/abseil-cpp/absl/base/macros.h +4 -21
  1716. data/third_party/abseil-cpp/absl/base/optimization.h +58 -6
  1717. data/third_party/abseil-cpp/absl/base/options.h +1 -7
  1718. data/third_party/abseil-cpp/absl/base/policy_checks.h +15 -13
  1719. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  1720. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  1721. data/third_party/abseil-cpp/absl/container/fixed_array.h +7 -5
  1722. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +0 -7
  1723. data/third_party/abseil-cpp/absl/container/inlined_vector.h +66 -18
  1724. data/third_party/abseil-cpp/absl/container/internal/common.h +3 -3
  1725. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +132 -0
  1726. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +13 -1
  1727. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +4 -55
  1728. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +50 -5
  1729. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +14 -46
  1730. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +110 -32
  1731. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +155 -4
  1732. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +661 -341
  1733. data/third_party/abseil-cpp/absl/crc/crc32c.cc +99 -0
  1734. data/third_party/abseil-cpp/absl/crc/crc32c.h +183 -0
  1735. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +256 -0
  1736. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +57 -0
  1737. data/third_party/abseil-cpp/absl/crc/internal/crc.cc +468 -0
  1738. data/third_party/abseil-cpp/absl/crc/internal/crc.h +91 -0
  1739. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +269 -0
  1740. data/third_party/abseil-cpp/absl/crc/internal/crc32c.h +39 -0
  1741. data/third_party/abseil-cpp/absl/crc/internal/crc32c_inline.h +72 -0
  1742. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.cc +130 -0
  1743. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.h +159 -0
  1744. data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +179 -0
  1745. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy.h +119 -0
  1746. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_fallback.cc +75 -0
  1747. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_64.cc +434 -0
  1748. data/third_party/abseil-cpp/absl/crc/internal/crc_non_temporal_memcpy.cc +93 -0
  1749. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +725 -0
  1750. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +79 -0
  1751. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +180 -0
  1752. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +1 -1
  1753. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +67 -38
  1754. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +1 -1
  1755. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +12 -13
  1756. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +11 -9
  1757. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +1 -1
  1758. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +40 -85
  1759. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +5 -4
  1760. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +33 -8
  1761. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +3 -2
  1762. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +3 -2
  1763. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +118 -94
  1764. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +7 -6
  1765. data/third_party/abseil-cpp/absl/flags/commandlineflag.cc +34 -0
  1766. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +200 -0
  1767. data/third_party/abseil-cpp/absl/flags/config.h +68 -0
  1768. data/third_party/abseil-cpp/absl/flags/declare.h +73 -0
  1769. data/third_party/abseil-cpp/absl/flags/flag.cc +38 -0
  1770. data/third_party/abseil-cpp/absl/flags/flag.h +310 -0
  1771. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.cc +26 -0
  1772. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +68 -0
  1773. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +615 -0
  1774. data/third_party/abseil-cpp/absl/flags/internal/flag.h +800 -0
  1775. data/third_party/abseil-cpp/absl/flags/internal/flag_msvc.inc +116 -0
  1776. data/third_party/abseil-cpp/absl/flags/internal/path_util.h +62 -0
  1777. data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.cc +65 -0
  1778. data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.h +61 -0
  1779. data/third_party/abseil-cpp/absl/flags/internal/program_name.cc +60 -0
  1780. data/third_party/abseil-cpp/absl/flags/internal/program_name.h +50 -0
  1781. data/third_party/abseil-cpp/absl/flags/internal/registry.h +97 -0
  1782. data/third_party/abseil-cpp/absl/flags/internal/sequence_lock.h +187 -0
  1783. data/third_party/abseil-cpp/absl/flags/marshalling.cc +241 -0
  1784. data/third_party/abseil-cpp/absl/flags/marshalling.h +356 -0
  1785. data/third_party/abseil-cpp/absl/flags/reflection.cc +354 -0
  1786. data/third_party/abseil-cpp/absl/flags/reflection.h +90 -0
  1787. data/third_party/abseil-cpp/absl/flags/usage_config.cc +165 -0
  1788. data/third_party/abseil-cpp/absl/flags/usage_config.h +135 -0
  1789. data/third_party/abseil-cpp/absl/functional/any_invocable.h +5 -2
  1790. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +47 -26
  1791. data/third_party/abseil-cpp/absl/hash/internal/city.cc +10 -10
  1792. data/third_party/abseil-cpp/absl/hash/internal/hash.h +18 -4
  1793. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +3 -14
  1794. data/third_party/abseil-cpp/absl/memory/memory.h +26 -447
  1795. data/third_party/abseil-cpp/absl/meta/type_traits.h +104 -12
  1796. data/third_party/abseil-cpp/absl/numeric/bits.h +2 -3
  1797. data/third_party/abseil-cpp/absl/numeric/int128.cc +10 -8
  1798. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +14 -6
  1799. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
  1800. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +1 -1
  1801. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +2 -23
  1802. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +9 -9
  1803. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +2 -2
  1804. data/third_party/abseil-cpp/absl/random/random.h +6 -6
  1805. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +1 -0
  1806. data/third_party/abseil-cpp/absl/status/status.cc +19 -12
  1807. data/third_party/abseil-cpp/absl/status/status.h +2 -2
  1808. data/third_party/abseil-cpp/absl/strings/ascii.cc +5 -5
  1809. data/third_party/abseil-cpp/absl/strings/charconv.cc +534 -96
  1810. data/third_party/abseil-cpp/absl/strings/cord.cc +92 -40
  1811. data/third_party/abseil-cpp/absl/strings/cord.h +71 -80
  1812. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +8 -5
  1813. data/third_party/abseil-cpp/absl/strings/escaping.cc +73 -62
  1814. data/third_party/abseil-cpp/absl/strings/escaping.h +24 -19
  1815. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +14 -12
  1816. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +4 -4
  1817. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
  1818. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +330 -70
  1819. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +8 -4
  1820. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +26 -14
  1821. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +5 -5
  1822. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +9 -7
  1823. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +5 -4
  1824. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +7 -15
  1825. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +3 -3
  1826. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +8 -5
  1827. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +7 -7
  1828. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +4 -4
  1829. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +93 -0
  1830. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +34 -0
  1831. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +12 -10
  1832. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +7 -9
  1833. data/third_party/abseil-cpp/absl/strings/internal/has_absl_stringify.h +55 -0
  1834. data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +9 -6
  1835. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +14 -7
  1836. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +35 -10
  1837. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +113 -46
  1838. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +126 -29
  1839. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -2
  1840. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +4 -3
  1841. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +49 -287
  1842. data/third_party/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +351 -0
  1843. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +2 -1
  1844. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +4 -2
  1845. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +215 -181
  1846. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +10 -209
  1847. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +10 -101
  1848. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -1
  1849. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.cc +28 -0
  1850. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +57 -0
  1851. data/third_party/abseil-cpp/absl/strings/numbers.cc +34 -31
  1852. data/third_party/abseil-cpp/absl/strings/str_cat.cc +9 -6
  1853. data/third_party/abseil-cpp/absl/strings/str_cat.h +50 -3
  1854. data/third_party/abseil-cpp/absl/strings/str_format.h +71 -9
  1855. data/third_party/abseil-cpp/absl/strings/string_view.cc +6 -6
  1856. data/third_party/abseil-cpp/absl/strings/string_view.h +3 -10
  1857. data/third_party/abseil-cpp/absl/strings/substitute.cc +8 -6
  1858. data/third_party/abseil-cpp/absl/strings/substitute.h +46 -20
  1859. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +20 -17
  1860. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +37 -31
  1861. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +22 -8
  1862. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +104 -55
  1863. data/third_party/abseil-cpp/absl/synchronization/mutex.h +85 -46
  1864. data/third_party/abseil-cpp/absl/synchronization/notification.cc +0 -1
  1865. data/third_party/abseil-cpp/absl/synchronization/notification.h +0 -1
  1866. data/third_party/abseil-cpp/absl/time/civil_time.cc +26 -0
  1867. data/third_party/abseil-cpp/absl/time/civil_time.h +25 -0
  1868. data/third_party/abseil-cpp/absl/time/clock.cc +17 -11
  1869. data/third_party/abseil-cpp/absl/time/duration.cc +7 -7
  1870. data/third_party/abseil-cpp/absl/time/format.cc +2 -1
  1871. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1 -1
  1872. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +26 -5
  1873. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +7 -6
  1874. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +36 -35
  1875. data/third_party/abseil-cpp/absl/time/time.cc +2 -2
  1876. data/third_party/abseil-cpp/absl/time/time.h +253 -158
  1877. data/third_party/abseil-cpp/absl/types/internal/span.h +30 -19
  1878. data/third_party/abseil-cpp/absl/types/internal/variant.h +28 -40
  1879. data/third_party/abseil-cpp/absl/types/span.h +29 -7
  1880. data/third_party/boringssl-with-bazel/err_data.c +728 -712
  1881. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +177 -177
  1882. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +28 -55
  1883. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +21 -23
  1884. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c +20 -23
  1885. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +66 -185
  1886. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c +18 -21
  1887. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +356 -311
  1888. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +177 -196
  1889. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +146 -210
  1890. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +6 -9
  1891. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strex.c +346 -526
  1892. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +110 -131
  1893. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +130 -116
  1894. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +93 -60
  1895. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +93 -181
  1896. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +242 -305
  1897. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +41 -18
  1898. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +30 -33
  1899. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +36 -33
  1900. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +29 -26
  1901. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +135 -90
  1902. data/third_party/boringssl-with-bazel/src/crypto/asn1/posix_time.c +230 -0
  1903. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +797 -793
  1904. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +529 -526
  1905. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +114 -135
  1906. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +201 -207
  1907. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +21 -26
  1908. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +55 -68
  1909. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +2 -4
  1910. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +17 -11
  1911. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +37 -51
  1912. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +15 -9
  1913. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +13 -9
  1914. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +22 -19
  1915. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +5 -5
  1916. data/third_party/boringssl-with-bazel/src/crypto/bio/printf.c +0 -13
  1917. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -6
  1918. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +2 -0
  1919. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +40 -27
  1920. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c +10 -23
  1921. data/third_party/boringssl-with-bazel/src/crypto/buf/buf.c +2 -6
  1922. data/third_party/boringssl-with-bazel/src/crypto/bytestring/asn1_compat.c +2 -1
  1923. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +29 -28
  1924. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +161 -201
  1925. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +254 -39
  1926. data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +2 -2
  1927. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +0 -2
  1928. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +4 -4
  1929. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c +9 -8
  1930. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c +37 -75
  1931. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +8 -10
  1932. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/cipher → cipher_extra}/e_des.c +100 -78
  1933. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_null.c +1 -0
  1934. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc2.c +1 -0
  1935. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc4.c +2 -0
  1936. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +34 -37
  1937. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +22 -11
  1938. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +189 -13
  1939. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +6 -10
  1940. data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +0 -1
  1941. data/third_party/boringssl-with-bazel/src/crypto/conf/internal.h +12 -0
  1942. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_apple.c +74 -0
  1943. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_freebsd.c +62 -0
  1944. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-fuchsia.c → cpu_aarch64_fuchsia.c} +8 -7
  1945. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-linux.c → cpu_aarch64_linux.c} +6 -4
  1946. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.c +62 -0
  1947. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-win.c → cpu_aarch64_win.c} +4 -4
  1948. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm.c → cpu_arm.c} +1 -1
  1949. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_freebsd.c +55 -0
  1950. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm-linux.c → cpu_arm_linux.c} +11 -90
  1951. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm-linux.h → cpu_arm_linux.h} +0 -38
  1952. data/third_party/boringssl-with-bazel/src/crypto/{cpu-ppc64le.c → cpu_arm_openbsd.c} +10 -17
  1953. data/third_party/boringssl-with-bazel/src/crypto/{cpu-intel.c → cpu_intel.c} +1 -2
  1954. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +25 -20
  1955. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +22 -31
  1956. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +795 -795
  1957. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -5
  1958. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +17 -32
  1959. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/des → des}/des.c +232 -232
  1960. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/des → des}/internal.h +1 -1
  1961. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/dh_asn1.c +1 -0
  1962. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/params.c +232 -29
  1963. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +0 -3
  1964. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +43 -16
  1965. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +37 -7
  1966. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +3 -3
  1967. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +11 -36
  1968. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +229 -102
  1969. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +31 -7
  1970. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +1 -1
  1971. data/third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c +2 -4
  1972. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +83 -60
  1973. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +46 -12
  1974. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +3 -3
  1975. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c +25 -23
  1976. data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +43 -9
  1977. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +75 -44
  1978. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +19 -25
  1979. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +96 -45
  1980. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c +7 -8
  1981. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c +26 -23
  1982. data/third_party/boringssl-with-bazel/src/crypto/evp/p_hkdf.c +233 -0
  1983. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +6 -6
  1984. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c +42 -25
  1985. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c +4 -5
  1986. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c +35 -47
  1987. data/third_party/boringssl-with-bazel/src/crypto/evp/print.c +135 -244
  1988. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +2 -4
  1989. data/third_party/boringssl-with-bazel/src/crypto/evp/sign.c +15 -10
  1990. data/third_party/boringssl-with-bazel/src/crypto/ex_data.c +29 -15
  1991. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c +0 -2
  1992. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +13 -14
  1993. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +3 -13
  1994. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.c +13 -7
  1995. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +9 -7
  1996. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +36 -27
  1997. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +16 -26
  1998. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bytes.c +88 -60
  1999. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/cmp.c +4 -3
  2000. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/ctx.c +0 -2
  2001. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +1 -1
  2002. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div_extra.c +1 -1
  2003. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +99 -113
  2004. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +0 -1
  2005. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +5 -3
  2006. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/generic.c +112 -168
  2007. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +86 -31
  2008. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +11 -6
  2009. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +4 -5
  2010. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +4 -5
  2011. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +13 -0
  2012. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.c +13 -5
  2013. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c +19 -108
  2014. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h +19 -15
  2015. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.c +15 -16
  2016. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +22 -21
  2017. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/aead.c +3 -0
  2018. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +79 -19
  2019. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +102 -99
  2020. data/third_party/boringssl-with-bazel/src/crypto/{cipher_extra → fipsmodule/cipher}/e_aesccm.c +52 -46
  2021. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +39 -0
  2022. data/third_party/boringssl-with-bazel/src/crypto/{cmac → fipsmodule/cmac}/cmac.c +55 -11
  2023. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/check.c +2 -3
  2024. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +24 -6
  2025. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/internal.h +56 -0
  2026. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +5 -3
  2027. data/third_party/boringssl-with-bazel/src/crypto/{evp → fipsmodule/digestsign}/digestsign.c +51 -15
  2028. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +49 -49
  2029. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +92 -18
  2030. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +12 -12
  2031. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +108 -86
  2032. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +55 -25
  2033. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +55 -71
  2034. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64-table.h → p256-nistz-table.h} +1 -1
  2035. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64.c → p256-nistz.c} +72 -65
  2036. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64.h → p256-nistz.h} +5 -13
  2037. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +62 -51
  2038. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +1 -1
  2039. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +2 -8
  2040. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +12 -17
  2041. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +25 -26
  2042. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +13 -14
  2043. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +9 -1
  2044. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +44 -16
  2045. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +6 -0
  2046. data/third_party/boringssl-with-bazel/src/crypto/{hkdf → fipsmodule/hkdf}/hkdf.c +1 -1
  2047. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/hmac/hmac.c +52 -24
  2048. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +9 -23
  2049. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +1 -4
  2050. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +3 -8
  2051. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +170 -160
  2052. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +12 -14
  2053. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +69 -61
  2054. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -12
  2055. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +27 -28
  2056. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/ctrdrbg.c +31 -13
  2057. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +16 -8
  2058. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +3 -2
  2059. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +2 -2
  2060. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +9 -38
  2061. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +73 -59
  2062. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +22 -68
  2063. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +0 -1
  2064. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +43 -16
  2065. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +42 -314
  2066. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +244 -139
  2067. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +144 -205
  2068. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +41 -0
  2069. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +593 -421
  2070. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/internal.h +89 -0
  2071. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/service_indicator.c +334 -0
  2072. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +3 -12
  2073. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +2 -0
  2074. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +12 -8
  2075. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +14 -12
  2076. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +8 -0
  2077. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +52 -6
  2078. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +192 -18
  2079. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +65 -29
  2080. data/third_party/boringssl-with-bazel/src/crypto/internal.h +391 -18
  2081. data/third_party/boringssl-with-bazel/src/crypto/kyber/internal.h +91 -0
  2082. data/third_party/boringssl-with-bazel/src/crypto/kyber/keccak.c +204 -0
  2083. data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +833 -0
  2084. data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +13 -1
  2085. data/third_party/boringssl-with-bazel/src/crypto/mem.c +220 -13
  2086. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +19 -7
  2087. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +9 -4
  2088. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +81 -90
  2089. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +150 -245
  2090. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +633 -613
  2091. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c +17 -17
  2092. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +142 -149
  2093. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +99 -131
  2094. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_x509.c +0 -1
  2095. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_xaux.c +0 -1
  2096. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +0 -1
  2097. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +0 -3
  2098. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -66
  2099. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +31 -38
  2100. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +2 -1
  2101. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +18 -31
  2102. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +1 -0
  2103. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +8 -1
  2104. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +129 -5
  2105. data/third_party/boringssl-with-bazel/src/crypto/refcount_c11.c +0 -2
  2106. data/third_party/boringssl-with-bazel/src/crypto/{refcount_lock.c → refcount_no_threads.c} +6 -17
  2107. data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +89 -0
  2108. data/third_party/boringssl-with-bazel/src/crypto/{asn1/a_print.c → rsa_extra/internal.h} +15 -21
  2109. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_crypt.c +568 -0
  2110. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +8 -11
  2111. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +61 -27
  2112. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +10 -13
  2113. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +10 -13
  2114. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +128 -34
  2115. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +418 -133
  2116. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +116 -284
  2117. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +701 -87
  2118. data/third_party/boringssl-with-bazel/src/crypto/x509/a_digest.c +22 -24
  2119. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +63 -55
  2120. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +32 -34
  2121. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +32 -16
  2122. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +465 -704
  2123. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +285 -331
  2124. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +183 -178
  2125. data/third_party/boringssl-with-bazel/src/crypto/x509/i2d_pr.c +11 -15
  2126. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +68 -50
  2127. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +132 -151
  2128. data/third_party/boringssl-with-bazel/src/crypto/x509/policy.c +790 -0
  2129. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +95 -102
  2130. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +72 -57
  2131. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +12 -10
  2132. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +220 -254
  2133. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +52 -47
  2134. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +3 -4
  2135. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +136 -270
  2136. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +161 -327
  2137. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c +37 -33
  2138. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c +14 -31
  2139. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +55 -85
  2140. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +528 -616
  2141. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +129 -122
  2142. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +164 -181
  2143. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +132 -132
  2144. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +186 -203
  2145. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +64 -79
  2146. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +175 -160
  2147. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1864 -2050
  2148. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +380 -480
  2149. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +156 -163
  2150. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +266 -265
  2151. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +40 -15
  2152. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +59 -63
  2153. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +63 -67
  2154. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +114 -144
  2155. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +25 -26
  2156. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +329 -416
  2157. data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c +8 -7
  2158. data/third_party/boringssl-with-bazel/src/crypto/x509/x_info.c +30 -28
  2159. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +354 -370
  2160. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +37 -32
  2161. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +116 -119
  2162. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +36 -26
  2163. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +3 -4
  2164. data/third_party/boringssl-with-bazel/src/crypto/x509/x_spki.c +10 -13
  2165. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +3 -4
  2166. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +419 -261
  2167. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +113 -105
  2168. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +11 -15
  2169. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +79 -171
  2170. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +126 -131
  2171. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akeya.c +3 -4
  2172. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +465 -469
  2173. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bcons.c +56 -54
  2174. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +46 -49
  2175. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +294 -344
  2176. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +342 -365
  2177. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +429 -393
  2178. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +29 -24
  2179. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_extku.c +65 -59
  2180. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +125 -121
  2181. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +43 -42
  2182. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +120 -125
  2183. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_int.c +50 -20
  2184. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +228 -265
  2185. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +386 -389
  2186. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c +45 -32
  2187. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcons.c +57 -54
  2188. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pmaps.c +63 -67
  2189. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +130 -135
  2190. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +652 -691
  2191. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +90 -75
  2192. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1063 -1145
  2193. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +13 -11
  2194. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +28 -48
  2195. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +217 -191
  2196. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +26 -78
  2197. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +50 -14
  2198. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +29 -14
  2199. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -4
  2200. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +49 -17
  2201. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +99 -29
  2202. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +49 -60
  2203. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +2 -15
  2204. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +16 -200
  2205. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +34 -0
  2206. data/third_party/boringssl-with-bazel/src/include/openssl/ctrdrbg.h +82 -0
  2207. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +32 -30
  2208. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +7 -0
  2209. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +4 -0
  2210. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +48 -5
  2211. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +37 -8
  2212. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +1 -0
  2213. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +33 -5
  2214. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +25 -33
  2215. data/third_party/boringssl-with-bazel/src/include/openssl/ex_data.h +1 -1
  2216. data/third_party/boringssl-with-bazel/src/include/openssl/hmac.h +7 -0
  2217. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +69 -16
  2218. data/third_party/boringssl-with-bazel/src/include/openssl/kdf.h +91 -0
  2219. data/third_party/boringssl-with-bazel/src/include/openssl/kyber.h +128 -0
  2220. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +74 -8
  2221. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +7 -3
  2222. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +8 -1
  2223. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +1 -0
  2224. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +11 -18
  2225. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +8 -0
  2226. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +12 -1
  2227. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +98 -5
  2228. data/third_party/boringssl-with-bazel/src/include/openssl/service_indicator.h +96 -0
  2229. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +18 -21
  2230. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +285 -92
  2231. data/third_party/boringssl-with-bazel/src/include/openssl/ssl3.h +1 -6
  2232. data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +381 -287
  2233. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +9 -6
  2234. data/third_party/boringssl-with-bazel/src/include/openssl/time.h +41 -0
  2235. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +22 -7
  2236. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +57 -23
  2237. data/third_party/boringssl-with-bazel/src/include/openssl/type_check.h +0 -11
  2238. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +2075 -1407
  2239. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +242 -214
  2240. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +2 -2
  2241. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +6 -13
  2242. data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +17 -18
  2243. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +4 -5
  2244. data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +25 -33
  2245. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +45 -26
  2246. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +64 -35
  2247. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +198 -54
  2248. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +5 -5
  2249. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +53 -34
  2250. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +76 -44
  2251. data/third_party/boringssl-with-bazel/src/ssl/internal.h +200 -121
  2252. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +47 -12
  2253. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  2254. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +91 -75
  2255. data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +8 -10
  2256. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +47 -69
  2257. data/third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc +1 -0
  2258. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +5 -9
  2259. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +217 -226
  2260. data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +78 -101
  2261. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +106 -142
  2262. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +244 -35
  2263. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +167 -64
  2264. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +41 -32
  2265. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +27 -19
  2266. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +22 -6
  2267. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +15 -13
  2268. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +7 -44
  2269. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +7 -4
  2270. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +7 -23
  2271. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +25 -34
  2272. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +2 -2
  2273. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +16 -98
  2274. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +1241 -657
  2275. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +751 -398
  2276. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_msvc.h +1281 -0
  2277. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +3551 -1938
  2278. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +1272 -487
  2279. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64_msvc.h +2002 -0
  2280. data/third_party/cares/cares/include/ares.h +23 -1
  2281. data/third_party/cares/cares/{src/lib → include}/ares_nameser.h +9 -7
  2282. data/third_party/cares/cares/include/ares_rules.h +2 -2
  2283. data/third_party/cares/cares/include/ares_version.h +3 -3
  2284. data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +266 -0
  2285. data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +240 -0
  2286. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +49 -80
  2287. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +37 -43
  2288. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +12 -4
  2289. data/third_party/cares/cares/src/lib/ares_data.c +16 -0
  2290. data/third_party/cares/cares/src/lib/ares_data.h +7 -0
  2291. data/third_party/cares/cares/src/lib/ares_destroy.c +8 -0
  2292. data/third_party/cares/cares/src/lib/ares_expand_name.c +17 -6
  2293. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +1 -0
  2294. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +156 -78
  2295. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +130 -326
  2296. data/third_party/cares/cares/src/lib/ares_init.c +97 -485
  2297. data/third_party/cares/cares/src/lib/ares_library_init.c +2 -89
  2298. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +23 -142
  2299. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +22 -142
  2300. data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +184 -0
  2301. data/third_party/cares/cares/src/lib/ares_private.h +30 -16
  2302. data/third_party/cares/cares/src/lib/ares_process.c +55 -16
  2303. data/third_party/cares/cares/src/lib/ares_query.c +1 -35
  2304. data/third_party/cares/cares/src/lib/ares_rand.c +279 -0
  2305. data/third_party/cares/cares/src/lib/ares_send.c +5 -7
  2306. data/third_party/cares/cares/src/lib/ares_strdup.c +12 -19
  2307. data/third_party/cares/cares/src/lib/ares_strsplit.c +44 -128
  2308. data/third_party/cares/cares/src/lib/ares_strsplit.h +9 -10
  2309. data/third_party/cares/cares/src/lib/inet_net_pton.c +78 -116
  2310. data/third_party/cares/cares/src/tools/ares_getopt.h +53 -0
  2311. data/third_party/re2/re2/bitstate.cc +3 -3
  2312. data/third_party/re2/re2/dfa.cc +13 -13
  2313. data/third_party/re2/re2/nfa.cc +4 -4
  2314. data/third_party/re2/re2/onepass.cc +2 -2
  2315. data/third_party/re2/re2/prefilter_tree.cc +27 -59
  2316. data/third_party/re2/re2/prefilter_tree.h +3 -2
  2317. data/third_party/re2/re2/prog.cc +11 -2
  2318. data/third_party/re2/re2/prog.h +17 -5
  2319. data/third_party/re2/re2/re2.cc +6 -11
  2320. data/third_party/re2/re2/re2.h +1 -1
  2321. data/third_party/re2/re2/regexp.cc +1 -2
  2322. data/third_party/re2/re2/stringpiece.h +10 -7
  2323. data/third_party/re2/re2/unicode_casefold.cc +25 -11
  2324. data/third_party/re2/re2/unicode_groups.cc +319 -151
  2325. data/third_party/re2/re2/walker-inl.h +3 -2
  2326. data/third_party/re2/util/mutex.h +4 -4
  2327. data/third_party/upb/upb/{table_internal.h → alloc.h} +6 -6
  2328. data/third_party/upb/upb/arena.h +4 -193
  2329. data/third_party/upb/upb/array.h +4 -51
  2330. data/third_party/upb/upb/base/descriptor_constants.h +104 -0
  2331. data/third_party/upb/upb/base/log2.h +57 -0
  2332. data/third_party/upb/upb/{status.c → base/status.c} +2 -7
  2333. data/third_party/upb/upb/base/status.h +66 -0
  2334. data/third_party/upb/upb/base/string_view.h +75 -0
  2335. data/third_party/upb/upb/{array.c → collections/array.c} +67 -36
  2336. data/third_party/upb/upb/collections/array.h +85 -0
  2337. data/third_party/upb/upb/collections/array_internal.h +135 -0
  2338. data/third_party/upb/upb/{map.c → collections/map.c} +53 -26
  2339. data/third_party/upb/upb/collections/map.h +135 -0
  2340. data/third_party/upb/upb/collections/map_gencode_util.h +78 -0
  2341. data/third_party/upb/upb/collections/map_internal.h +170 -0
  2342. data/third_party/upb/upb/collections/map_sorter.c +166 -0
  2343. data/third_party/upb/upb/collections/map_sorter_internal.h +109 -0
  2344. data/third_party/upb/upb/{message_value.h → collections/message_value.h} +12 -13
  2345. data/third_party/upb/upb/decode.h +3 -62
  2346. data/third_party/upb/upb/def.h +4 -384
  2347. data/third_party/upb/upb/def.hpp +3 -411
  2348. data/third_party/upb/upb/encode.h +3 -48
  2349. data/third_party/upb/upb/extension_registry.h +3 -52
  2350. data/third_party/upb/upb/{table.c → hash/common.c} +52 -110
  2351. data/third_party/upb/upb/hash/common.h +199 -0
  2352. data/third_party/upb/upb/hash/int_table.h +102 -0
  2353. data/third_party/upb/upb/hash/str_table.h +161 -0
  2354. data/third_party/upb/upb/{json_decode.c → json/decode.c} +63 -98
  2355. data/third_party/upb/upb/json/decode.h +52 -0
  2356. data/third_party/upb/upb/{json_encode.c → json/encode.c} +69 -45
  2357. data/third_party/upb/upb/json/encode.h +70 -0
  2358. data/third_party/upb/upb/json_decode.h +4 -15
  2359. data/third_party/upb/upb/json_encode.h +4 -33
  2360. data/third_party/upb/upb/lex/atoi.c +68 -0
  2361. data/third_party/upb/upb/lex/atoi.h +53 -0
  2362. data/third_party/upb/upb/{upb.c → lex/round_trip.c} +2 -11
  2363. data/third_party/upb/upb/{internal/upb.h → lex/round_trip.h} +17 -30
  2364. data/third_party/upb/upb/lex/strtod.c +97 -0
  2365. data/third_party/upb/upb/lex/strtod.h +46 -0
  2366. data/third_party/upb/upb/lex/unicode.c +57 -0
  2367. data/third_party/upb/upb/lex/unicode.h +77 -0
  2368. data/third_party/upb/upb/map.h +4 -85
  2369. data/third_party/upb/upb/mem/alloc.c +47 -0
  2370. data/third_party/upb/upb/mem/alloc.h +98 -0
  2371. data/third_party/upb/upb/mem/arena.c +367 -0
  2372. data/third_party/upb/upb/mem/arena.h +160 -0
  2373. data/third_party/upb/upb/mem/arena_internal.h +114 -0
  2374. data/third_party/upb/upb/message/accessors.c +68 -0
  2375. data/third_party/upb/upb/message/accessors.h +379 -0
  2376. data/third_party/upb/upb/message/accessors_internal.h +325 -0
  2377. data/third_party/upb/upb/message/extension_internal.h +83 -0
  2378. data/third_party/upb/upb/message/internal.h +135 -0
  2379. data/third_party/upb/upb/message/message.c +180 -0
  2380. data/third_party/upb/upb/message/message.h +69 -0
  2381. data/third_party/upb/upb/mini_table/common.c +128 -0
  2382. data/third_party/upb/upb/mini_table/common.h +170 -0
  2383. data/third_party/upb/upb/mini_table/common_internal.h +111 -0
  2384. data/third_party/upb/upb/{mini_table.c → mini_table/decode.c} +513 -533
  2385. data/third_party/upb/upb/mini_table/decode.h +179 -0
  2386. data/third_party/upb/upb/mini_table/encode.c +300 -0
  2387. data/third_party/upb/upb/mini_table/encode_internal.h +111 -0
  2388. data/third_party/upb/upb/{mini_table.hpp → mini_table/encode_internal.hpp} +32 -8
  2389. data/third_party/upb/upb/mini_table/enum_internal.h +88 -0
  2390. data/third_party/upb/upb/mini_table/extension_internal.h +47 -0
  2391. data/third_party/upb/upb/{extension_registry.c → mini_table/extension_registry.c} +27 -24
  2392. data/third_party/upb/upb/mini_table/extension_registry.h +104 -0
  2393. data/third_party/upb/upb/mini_table/field_internal.h +192 -0
  2394. data/third_party/upb/upb/mini_table/file_internal.h +47 -0
  2395. data/third_party/upb/upb/mini_table/message_internal.h +136 -0
  2396. data/third_party/upb/upb/mini_table/sub_internal.h +38 -0
  2397. data/third_party/upb/upb/mini_table/types.h +40 -0
  2398. data/third_party/upb/upb/mini_table.h +4 -157
  2399. data/third_party/upb/upb/msg.h +3 -38
  2400. data/third_party/upb/upb/port/atomic.h +101 -0
  2401. data/third_party/upb/upb/{port_def.inc → port/def.inc} +94 -27
  2402. data/third_party/upb/upb/{port_undef.inc → port/undef.inc} +13 -3
  2403. data/third_party/upb/upb/{internal → port}/vsnprintf_compat.h +5 -7
  2404. data/third_party/upb/upb/reflection/common.h +67 -0
  2405. data/third_party/upb/upb/reflection/def.h +42 -0
  2406. data/third_party/upb/upb/reflection/def.hpp +610 -0
  2407. data/third_party/upb/upb/reflection/def_builder.c +357 -0
  2408. data/third_party/upb/upb/reflection/def_builder_internal.h +157 -0
  2409. data/third_party/upb/upb/reflection/def_pool.c +462 -0
  2410. data/third_party/upb/upb/reflection/def_pool.h +108 -0
  2411. data/third_party/upb/upb/reflection/def_pool_internal.h +77 -0
  2412. data/third_party/upb/upb/reflection/def_type.c +50 -0
  2413. data/third_party/upb/upb/reflection/def_type.h +81 -0
  2414. data/third_party/upb/upb/reflection/desc_state.c +53 -0
  2415. data/third_party/upb/upb/reflection/desc_state_internal.h +64 -0
  2416. data/third_party/upb/upb/reflection/enum_def.c +310 -0
  2417. data/third_party/upb/upb/reflection/enum_def.h +80 -0
  2418. data/third_party/upb/upb/reflection/enum_def_internal.h +56 -0
  2419. data/third_party/upb/upb/reflection/enum_reserved_range.c +84 -0
  2420. data/third_party/upb/upb/reflection/enum_reserved_range.h +51 -0
  2421. data/third_party/upb/upb/reflection/enum_reserved_range_internal.h +55 -0
  2422. data/third_party/upb/upb/reflection/enum_value_def.c +144 -0
  2423. data/third_party/upb/upb/reflection/enum_value_def.h +57 -0
  2424. data/third_party/upb/upb/reflection/enum_value_def_internal.h +57 -0
  2425. data/third_party/upb/upb/reflection/extension_range.c +93 -0
  2426. data/third_party/upb/upb/reflection/extension_range.h +55 -0
  2427. data/third_party/upb/upb/reflection/extension_range_internal.h +54 -0
  2428. data/third_party/upb/upb/reflection/field_def.c +930 -0
  2429. data/third_party/upb/upb/reflection/field_def.h +91 -0
  2430. data/third_party/upb/upb/reflection/field_def_internal.h +76 -0
  2431. data/third_party/upb/upb/reflection/file_def.c +370 -0
  2432. data/third_party/upb/upb/reflection/file_def.h +77 -0
  2433. data/third_party/upb/upb/reflection/file_def_internal.h +57 -0
  2434. data/third_party/upb/upb/reflection/message.c +233 -0
  2435. data/third_party/upb/upb/reflection/message.h +102 -0
  2436. data/third_party/upb/upb/reflection/message.hpp +37 -0
  2437. data/third_party/upb/upb/reflection/message_def.c +718 -0
  2438. data/third_party/upb/upb/reflection/message_def.h +174 -0
  2439. data/third_party/upb/upb/reflection/message_def_internal.h +63 -0
  2440. data/third_party/upb/upb/reflection/message_reserved_range.c +81 -0
  2441. data/third_party/upb/upb/reflection/message_reserved_range.h +51 -0
  2442. data/third_party/upb/upb/reflection/message_reserved_range_internal.h +55 -0
  2443. data/third_party/upb/upb/reflection/method_def.c +124 -0
  2444. data/third_party/upb/upb/reflection/method_def.h +59 -0
  2445. data/third_party/upb/upb/reflection/method_def_internal.h +53 -0
  2446. data/third_party/upb/upb/reflection/oneof_def.c +226 -0
  2447. data/third_party/upb/upb/reflection/oneof_def.h +66 -0
  2448. data/third_party/upb/upb/reflection/oneof_def_internal.h +57 -0
  2449. data/third_party/upb/upb/reflection/service_def.c +128 -0
  2450. data/third_party/upb/upb/reflection/service_def.h +60 -0
  2451. data/third_party/upb/upb/reflection/service_def_internal.h +53 -0
  2452. data/third_party/upb/upb/reflection.h +4 -78
  2453. data/third_party/upb/upb/reflection.hpp +3 -7
  2454. data/third_party/upb/upb/status.h +4 -34
  2455. data/third_party/upb/upb/{collections.h → string_view.h} +7 -7
  2456. data/third_party/upb/upb/{text_encode.c → text/encode.c} +74 -70
  2457. data/third_party/upb/upb/text/encode.h +69 -0
  2458. data/third_party/upb/upb/text_encode.h +4 -32
  2459. data/third_party/upb/upb/upb.h +6 -151
  2460. data/third_party/upb/upb/upb.hpp +10 -18
  2461. data/third_party/upb/upb/wire/common.h +44 -0
  2462. data/third_party/upb/upb/wire/common_internal.h +50 -0
  2463. data/third_party/upb/upb/wire/decode.c +1343 -0
  2464. data/third_party/upb/upb/wire/decode.h +108 -0
  2465. data/third_party/upb/upb/{decode_fast.c → wire/decode_fast.c} +184 -225
  2466. data/third_party/upb/upb/{decode_fast.h → wire/decode_fast.h} +21 -7
  2467. data/third_party/upb/upb/{internal/decode.h → wire/decode_internal.h} +44 -92
  2468. data/third_party/upb/upb/{encode.c → wire/encode.c} +114 -95
  2469. data/third_party/upb/upb/wire/encode.h +92 -0
  2470. data/third_party/upb/upb/wire/eps_copy_input_stream.c +39 -0
  2471. data/third_party/upb/upb/wire/eps_copy_input_stream.h +425 -0
  2472. data/third_party/upb/upb/wire/reader.c +67 -0
  2473. data/third_party/upb/upb/wire/reader.h +227 -0
  2474. data/third_party/upb/upb/wire/swap_internal.h +63 -0
  2475. data/third_party/upb/upb/wire/types.h +41 -0
  2476. data/third_party/{upb/third_party/utf8_range → utf8_range}/range2-neon.c +1 -1
  2477. data/third_party/{upb/third_party/utf8_range → utf8_range}/utf8_range.h +12 -0
  2478. data/third_party/zlib/compress.c +3 -3
  2479. data/third_party/zlib/crc32.c +21 -12
  2480. data/third_party/zlib/deflate.c +112 -106
  2481. data/third_party/zlib/deflate.h +2 -2
  2482. data/third_party/zlib/gzlib.c +1 -1
  2483. data/third_party/zlib/gzread.c +3 -5
  2484. data/third_party/zlib/gzwrite.c +1 -1
  2485. data/third_party/zlib/infback.c +10 -7
  2486. data/third_party/zlib/inflate.c +5 -2
  2487. data/third_party/zlib/inftrees.c +2 -2
  2488. data/third_party/zlib/inftrees.h +1 -1
  2489. data/third_party/zlib/trees.c +61 -62
  2490. data/third_party/zlib/uncompr.c +2 -2
  2491. data/third_party/zlib/zconf.h +16 -3
  2492. data/third_party/zlib/zlib.h +10 -10
  2493. data/third_party/zlib/zutil.c +9 -7
  2494. data/third_party/zlib/zutil.h +1 -0
  2495. metadata +509 -152
  2496. data/include/grpc/impl/codegen/gpr_slice.h +0 -71
  2497. data/src/core/ext/filters/client_channel/health/health_check_client.cc +0 -176
  2498. data/src/core/ext/filters/client_channel/health/health_check_client.h +0 -43
  2499. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +0 -30
  2500. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -188
  2501. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -187
  2502. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +0 -332
  2503. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -52
  2504. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -322
  2505. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +0 -62
  2506. data/src/core/ext/transport/chttp2/transport/context_list.cc +0 -71
  2507. data/src/core/ext/transport/chttp2/transport/context_list.h +0 -54
  2508. data/src/core/lib/event_engine/socket_notifier.h +0 -55
  2509. data/src/core/lib/event_engine/thread_pool.cc +0 -195
  2510. data/src/core/lib/event_engine/thread_pool.h +0 -114
  2511. data/src/core/lib/gpr/cpu_iphone.cc +0 -44
  2512. data/src/core/lib/gpr/cpu_windows.cc +0 -33
  2513. data/src/core/lib/gpr/murmur_hash.cc +0 -82
  2514. data/src/core/lib/gpr/murmur_hash.h +0 -29
  2515. data/src/core/lib/gpr/string_windows.cc +0 -69
  2516. data/src/core/lib/gpr/tls.h +0 -156
  2517. data/src/core/lib/gprpp/env_posix.cc +0 -47
  2518. data/src/core/lib/gprpp/global_config.h +0 -93
  2519. data/src/core/lib/gprpp/global_config_custom.h +0 -29
  2520. data/src/core/lib/gprpp/global_config_env.cc +0 -139
  2521. data/src/core/lib/gprpp/global_config_env.h +0 -133
  2522. data/src/core/lib/gprpp/global_config_generic.h +0 -40
  2523. data/src/core/lib/promise/call_push_pull.h +0 -148
  2524. data/src/core/lib/promise/intra_activity_waiter.h +0 -49
  2525. data/src/core/lib/security/security_connector/ssl_utils_config.cc +0 -32
  2526. data/src/core/lib/security/security_connector/ssl_utils_config.h +0 -30
  2527. data/src/core/lib/slice/slice_api.cc +0 -39
  2528. data/src/core/lib/slice/slice_buffer_api.cc +0 -35
  2529. data/src/core/lib/slice/slice_refcount_base.h +0 -60
  2530. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +0 -195
  2531. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c +0 -236
  2532. data/third_party/boringssl-with-bazel/src/crypto/asn1/charmap.h +0 -15
  2533. data/third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c +0 -206
  2534. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1-altivec.c +0 -361
  2535. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +0 -287
  2536. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +0 -132
  2537. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +0 -155
  2538. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +0 -131
  2539. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +0 -189
  2540. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +0 -843
  2541. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +0 -289
  2542. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcia.c +0 -57
  2543. data/third_party/cares/cares/src/lib/ares_library_init.h +0 -43
  2544. data/third_party/upb/upb/arena.c +0 -277
  2545. data/third_party/upb/upb/decode.c +0 -1221
  2546. data/third_party/upb/upb/def.c +0 -3269
  2547. data/third_party/upb/upb/internal/table.h +0 -385
  2548. data/third_party/upb/upb/msg.c +0 -368
  2549. data/third_party/upb/upb/msg_internal.h +0 -837
  2550. data/third_party/upb/upb/reflection.c +0 -323
  2551. /data/src/ruby/ext/grpc/{ext-export-truffleruby.clang → ext-export-truffleruby-with-ruby-abi-version.clang} +0 -0
  2552. /data/src/ruby/ext/grpc/{ext-export-truffleruby.gcc → ext-export-truffleruby-with-ruby-abi-version.gcc} +0 -0
  2553. /data/third_party/{upb/third_party/utf8_range → utf8_range}/naive.c +0 -0
  2554. /data/third_party/{upb/third_party/utf8_range → utf8_range}/range2-sse.c +0 -0
@@ -1,46 +1,53 @@
1
- /*
2
- *
3
- * Copyright 2015 gRPC authors.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- *
17
- */
1
+ //
2
+ //
3
+ // Copyright 2015 gRPC authors.
4
+ //
5
+ // Licensed under the Apache License, Version 2.0 (the "License");
6
+ // you may not use this file except in compliance with the License.
7
+ // You may obtain a copy of the License at
8
+ //
9
+ // http://www.apache.org/licenses/LICENSE-2.0
10
+ //
11
+ // Unless required by applicable law or agreed to in writing, software
12
+ // distributed under the License is distributed on an "AS IS" BASIS,
13
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ // See the License for the specific language governing permissions and
15
+ // limitations under the License.
16
+ //
17
+ //
18
18
 
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
21
  #include "src/core/lib/surface/call.h"
22
22
 
23
+ #include <inttypes.h>
23
24
  #include <limits.h>
24
25
  #include <stdlib.h>
26
+ #include <string.h>
25
27
 
26
28
  #include <algorithm>
27
29
  #include <atomic>
30
+ #include <initializer_list>
31
+ #include <memory>
28
32
  #include <new>
29
33
  #include <string>
34
+ #include <type_traits>
30
35
  #include <utility>
36
+ #include <vector>
31
37
 
32
38
  #include "absl/base/thread_annotations.h"
33
39
  #include "absl/meta/type_traits.h"
34
40
  #include "absl/status/status.h"
35
41
  #include "absl/strings/str_cat.h"
36
42
  #include "absl/strings/str_format.h"
43
+ #include "absl/strings/str_join.h"
37
44
  #include "absl/strings/string_view.h"
38
45
 
39
46
  #include <grpc/byte_buffer.h>
40
47
  #include <grpc/compression.h>
48
+ #include <grpc/event_engine/event_engine.h>
41
49
  #include <grpc/grpc.h>
42
- #include <grpc/impl/codegen/gpr_types.h>
43
- #include <grpc/impl/codegen/propagation_bits.h>
50
+ #include <grpc/impl/propagation_bits.h>
44
51
  #include <grpc/slice.h>
45
52
  #include <grpc/slice_buffer.h>
46
53
  #include <grpc/status.h>
@@ -48,40 +55,68 @@
48
55
  #include <grpc/support/atm.h>
49
56
  #include <grpc/support/log.h>
50
57
  #include <grpc/support/string_util.h>
58
+ #include <grpc/support/time.h>
51
59
 
60
+ #include "src/core/lib/channel/call_finalization.h"
61
+ #include "src/core/lib/channel/call_tracer.h"
62
+ #include "src/core/lib/channel/channel_args.h"
52
63
  #include "src/core/lib/channel/channel_stack.h"
53
64
  #include "src/core/lib/channel/channelz.h"
54
65
  #include "src/core/lib/channel/context.h"
66
+ #include "src/core/lib/channel/status_util.h"
55
67
  #include "src/core/lib/compression/compression_internal.h"
56
68
  #include "src/core/lib/debug/stats.h"
69
+ #include "src/core/lib/debug/stats_data.h"
70
+ #include "src/core/lib/experiments/experiments.h"
57
71
  #include "src/core/lib/gpr/alloc.h"
58
72
  #include "src/core/lib/gpr/time_precise.h"
73
+ #include "src/core/lib/gpr/useful.h"
74
+ #include "src/core/lib/gprpp/bitset.h"
59
75
  #include "src/core/lib/gprpp/cpp_impl_of.h"
76
+ #include "src/core/lib/gprpp/crash.h"
60
77
  #include "src/core/lib/gprpp/debug_location.h"
61
78
  #include "src/core/lib/gprpp/ref_counted.h"
79
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
80
+ #include "src/core/lib/gprpp/status_helper.h"
62
81
  #include "src/core/lib/gprpp/sync.h"
63
82
  #include "src/core/lib/iomgr/call_combiner.h"
64
83
  #include "src/core/lib/iomgr/exec_ctx.h"
65
84
  #include "src/core/lib/iomgr/polling_entity.h"
85
+ #include "src/core/lib/promise/activity.h"
86
+ #include "src/core/lib/promise/arena_promise.h"
87
+ #include "src/core/lib/promise/context.h"
88
+ #include "src/core/lib/promise/detail/basic_seq.h"
89
+ #include "src/core/lib/promise/latch.h"
90
+ #include "src/core/lib/promise/map.h"
91
+ #include "src/core/lib/promise/party.h"
92
+ #include "src/core/lib/promise/pipe.h"
93
+ #include "src/core/lib/promise/poll.h"
94
+ #include "src/core/lib/promise/race.h"
95
+ #include "src/core/lib/promise/seq.h"
66
96
  #include "src/core/lib/resource_quota/arena.h"
67
97
  #include "src/core/lib/slice/slice_buffer.h"
68
98
  #include "src/core/lib/slice/slice_internal.h"
69
- #include "src/core/lib/slice/slice_refcount.h"
70
99
  #include "src/core/lib/surface/api_trace.h"
71
100
  #include "src/core/lib/surface/call_test_only.h"
72
101
  #include "src/core/lib/surface/channel.h"
73
102
  #include "src/core/lib/surface/completion_queue.h"
74
103
  #include "src/core/lib/surface/server.h"
75
104
  #include "src/core/lib/surface/validate_metadata.h"
105
+ #include "src/core/lib/transport/batch_builder.h"
76
106
  #include "src/core/lib/transport/error_utils.h"
77
107
  #include "src/core/lib/transport/metadata_batch.h"
78
108
  #include "src/core/lib/transport/transport.h"
79
109
 
80
110
  grpc_core::TraceFlag grpc_call_error_trace(false, "call_error");
81
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");
82
114
 
83
115
  namespace grpc_core {
84
116
 
117
+ ///////////////////////////////////////////////////////////////////////////////
118
+ // Call
119
+
85
120
  class Call : public CppImplOf<Call, grpc_call> {
86
121
  public:
87
122
  Arena* arena() { return arena_; }
@@ -94,7 +129,7 @@ class Call : public CppImplOf<Call, grpc_call> {
94
129
  void CancelWithStatus(grpc_status_code status, const char* description);
95
130
  virtual void CancelWithError(grpc_error_handle error) = 0;
96
131
  virtual void SetCompletionQueue(grpc_completion_queue* cq) = 0;
97
- virtual char* GetPeer() = 0;
132
+ char* GetPeer();
98
133
  virtual grpc_call_error StartBatch(const grpc_op* ops, size_t nops,
99
134
  void* notify_tag,
100
135
  bool is_notify_tag_closure) = 0;
@@ -106,22 +141,29 @@ class Call : public CppImplOf<Call, grpc_call> {
106
141
  virtual void InternalRef(const char* reason) = 0;
107
142
  virtual void InternalUnref(const char* reason) = 0;
108
143
 
109
- virtual grpc_compression_algorithm test_only_compression_algorithm() = 0;
110
- virtual uint32_t test_only_message_flags() = 0;
111
- virtual uint32_t test_only_encodings_accepted_by_peer() = 0;
112
- virtual grpc_compression_algorithm compression_for_level(
113
- grpc_compression_level level) = 0;
144
+ grpc_compression_algorithm test_only_compression_algorithm() {
145
+ return incoming_compression_algorithm_;
146
+ }
147
+ uint32_t test_only_message_flags() { return test_only_last_message_flags_; }
148
+ CompressionAlgorithmSet encodings_accepted_by_peer() {
149
+ return encodings_accepted_by_peer_;
150
+ }
114
151
 
115
152
  // This should return nullptr for the promise stack (and alternative means
116
153
  // for that functionality be invented)
117
154
  virtual grpc_call_stack* call_stack() = 0;
118
155
 
119
156
  protected:
120
- Call(Arena* arena, bool is_client, Timestamp send_deadline)
121
- : arena_(arena), send_deadline_(send_deadline), is_client_(is_client) {
122
- GPR_DEBUG_ASSERT(arena_ != nullptr);
123
- }
124
- ~Call() = default;
157
+ // The maximum number of concurrent batches possible.
158
+ // Based upon the maximum number of individually queueable ops in the batch
159
+ // api:
160
+ // - initial metadata send
161
+ // - message send
162
+ // - status/close send (depending on client/server)
163
+ // - initial metadata recv
164
+ // - message recv
165
+ // - status/close recv (depending on client/server)
166
+ static constexpr size_t kMaxConcurrentBatches = 6;
125
167
 
126
168
  struct ParentCall {
127
169
  Mutex child_list_mu;
@@ -131,15 +173,32 @@ class Call : public CppImplOf<Call, grpc_call> {
131
173
  struct ChildCall {
132
174
  explicit ChildCall(Call* parent) : parent(parent) {}
133
175
  Call* parent;
134
- /** siblings: children of the same parent form a list, and this list is
135
- protected under
136
- parent->mu */
176
+ /// siblings: children of the same parent form a list, and this list is
177
+ /// protected under
178
+ /// parent->mu
137
179
  Call* sibling_next = nullptr;
138
180
  Call* sibling_prev = nullptr;
139
181
  };
140
182
 
183
+ Call(Arena* arena, bool is_client, Timestamp send_deadline,
184
+ RefCountedPtr<Channel> channel)
185
+ : channel_(std::move(channel)),
186
+ arena_(arena),
187
+ send_deadline_(send_deadline),
188
+ is_client_(is_client) {
189
+ GPR_DEBUG_ASSERT(arena_ != nullptr);
190
+ GPR_DEBUG_ASSERT(channel_ != nullptr);
191
+ }
192
+ virtual ~Call() = default;
193
+
194
+ void DeleteThis();
195
+
141
196
  ParentCall* GetOrCreateParentCall();
142
197
  ParentCall* parent_call();
198
+ Channel* channel() const {
199
+ GPR_DEBUG_ASSERT(channel_ != nullptr);
200
+ return channel_.get();
201
+ }
143
202
 
144
203
  absl::Status InitParent(Call* parent, uint32_t propagation_mask);
145
204
  void PublishToParent(Call* parent);
@@ -151,7 +210,42 @@ class Call : public CppImplOf<Call, grpc_call> {
151
210
  send_deadline_ = send_deadline;
152
211
  }
153
212
 
213
+ Slice GetPeerString() const {
214
+ MutexLock lock(&peer_mu_);
215
+ return peer_string_.Ref();
216
+ }
217
+
218
+ void SetPeerString(Slice peer_string) {
219
+ MutexLock lock(&peer_mu_);
220
+ peer_string_ = std::move(peer_string);
221
+ }
222
+
223
+ void ClearPeerString() { SetPeerString(Slice(grpc_empty_slice())); }
224
+
225
+ // TODO(ctiller): cancel_func is for cancellation of the call - filter stack
226
+ // holds no mutexes here, promise stack does, and so locking is different.
227
+ // Remove this and cancel directly once promise conversion is done.
228
+ void ProcessIncomingInitialMetadata(grpc_metadata_batch& md);
229
+ // Fixup outgoing metadata before sending - adds compression, protects
230
+ // internal headers against external modification.
231
+ void PrepareOutgoingInitialMetadata(const grpc_op& op,
232
+ grpc_metadata_batch& md);
233
+ void NoteLastMessageFlags(uint32_t flags) {
234
+ test_only_last_message_flags_ = flags;
235
+ }
236
+ grpc_compression_algorithm incoming_compression_algorithm() const {
237
+ return incoming_compression_algorithm_;
238
+ }
239
+
240
+ void HandleCompressionAlgorithmDisabled(
241
+ grpc_compression_algorithm compression_algorithm) GPR_ATTRIBUTE_NOINLINE;
242
+ void HandleCompressionAlgorithmNotAccepted(
243
+ grpc_compression_algorithm compression_algorithm) GPR_ATTRIBUTE_NOINLINE;
244
+
245
+ gpr_cycle_counter start_time() const { return start_time_; }
246
+
154
247
  private:
248
+ RefCountedPtr<Channel> channel_;
155
249
  Arena* const arena_;
156
250
  std::atomic<ParentCall*> parent_call_{nullptr};
157
251
  ChildCall* child_ = nullptr;
@@ -159,11 +253,261 @@ class Call : public CppImplOf<Call, grpc_call> {
159
253
  const bool is_client_;
160
254
  // flag indicating that cancellation is inherited
161
255
  bool cancellation_is_inherited_ = false;
256
+ // Compression algorithm for *incoming* data
257
+ grpc_compression_algorithm incoming_compression_algorithm_ =
258
+ GRPC_COMPRESS_NONE;
259
+ // Supported encodings (compression algorithms), a bitset.
260
+ // Always support no compression.
261
+ CompressionAlgorithmSet encodings_accepted_by_peer_{GRPC_COMPRESS_NONE};
262
+ uint32_t test_only_last_message_flags_ = 0;
263
+ // Peer name is protected by a mutex because it can be accessed by the
264
+ // application at the same moment as it is being set by the completion
265
+ // of the recv_initial_metadata op. The mutex should be mostly uncontended.
266
+ mutable Mutex peer_mu_;
267
+ Slice peer_string_;
268
+ gpr_cycle_counter start_time_ = gpr_get_cycle_counter();
162
269
  };
163
270
 
271
+ Call::ParentCall* Call::GetOrCreateParentCall() {
272
+ ParentCall* p = parent_call_.load(std::memory_order_acquire);
273
+ if (p == nullptr) {
274
+ p = arena_->New<ParentCall>();
275
+ ParentCall* expected = nullptr;
276
+ if (!parent_call_.compare_exchange_strong(expected, p,
277
+ std::memory_order_release,
278
+ std::memory_order_relaxed)) {
279
+ p->~ParentCall();
280
+ p = expected;
281
+ }
282
+ }
283
+ return p;
284
+ }
285
+
286
+ Call::ParentCall* Call::parent_call() {
287
+ return parent_call_.load(std::memory_order_acquire);
288
+ }
289
+
290
+ absl::Status Call::InitParent(Call* parent, uint32_t propagation_mask) {
291
+ child_ = arena()->New<ChildCall>(parent);
292
+
293
+ parent->InternalRef("child");
294
+ GPR_ASSERT(is_client_);
295
+ GPR_ASSERT(!parent->is_client_);
296
+
297
+ if (propagation_mask & GRPC_PROPAGATE_DEADLINE) {
298
+ send_deadline_ = std::min(send_deadline_, parent->send_deadline_);
299
+ }
300
+ // for now GRPC_PROPAGATE_TRACING_CONTEXT *MUST* be passed with
301
+ // GRPC_PROPAGATE_STATS_CONTEXT
302
+ // TODO(ctiller): This should change to use the appropriate census start_op
303
+ // call.
304
+ if (propagation_mask & GRPC_PROPAGATE_CENSUS_TRACING_CONTEXT) {
305
+ if (0 == (propagation_mask & GRPC_PROPAGATE_CENSUS_STATS_CONTEXT)) {
306
+ return absl::UnknownError(
307
+ "Census tracing propagation requested without Census context "
308
+ "propagation");
309
+ }
310
+ ContextSet(GRPC_CONTEXT_TRACING, parent->ContextGet(GRPC_CONTEXT_TRACING),
311
+ nullptr);
312
+ } else if (propagation_mask & GRPC_PROPAGATE_CENSUS_STATS_CONTEXT) {
313
+ return absl::UnknownError(
314
+ "Census context propagation requested without Census tracing "
315
+ "propagation");
316
+ }
317
+ if (propagation_mask & GRPC_PROPAGATE_CANCELLATION) {
318
+ cancellation_is_inherited_ = true;
319
+ }
320
+ return absl::OkStatus();
321
+ }
322
+
323
+ void Call::PublishToParent(Call* parent) {
324
+ ChildCall* cc = child_;
325
+ ParentCall* pc = parent->GetOrCreateParentCall();
326
+ MutexLock lock(&pc->child_list_mu);
327
+ if (pc->first_child == nullptr) {
328
+ pc->first_child = this;
329
+ cc->sibling_next = cc->sibling_prev = this;
330
+ } else {
331
+ cc->sibling_next = pc->first_child;
332
+ cc->sibling_prev = pc->first_child->child_->sibling_prev;
333
+ cc->sibling_next->child_->sibling_prev =
334
+ cc->sibling_prev->child_->sibling_next = this;
335
+ }
336
+ if (parent->Completed()) {
337
+ CancelWithError(absl::CancelledError());
338
+ }
339
+ }
340
+
341
+ void Call::MaybeUnpublishFromParent() {
342
+ ChildCall* cc = child_;
343
+ if (cc == nullptr) return;
344
+
345
+ ParentCall* pc = cc->parent->parent_call();
346
+ {
347
+ MutexLock lock(&pc->child_list_mu);
348
+ if (this == pc->first_child) {
349
+ pc->first_child = cc->sibling_next;
350
+ if (this == pc->first_child) {
351
+ pc->first_child = nullptr;
352
+ }
353
+ }
354
+ cc->sibling_prev->child_->sibling_next = cc->sibling_next;
355
+ cc->sibling_next->child_->sibling_prev = cc->sibling_prev;
356
+ }
357
+ cc->parent->InternalUnref("child");
358
+ }
359
+
360
+ void Call::CancelWithStatus(grpc_status_code status, const char* description) {
361
+ // copying 'description' is needed to ensure the grpc_call_cancel_with_status
362
+ // guarantee that can be short-lived.
363
+ // TODO(ctiller): change to
364
+ // absl::Status(static_cast<absl::StatusCode>(status), description)
365
+ // (ie remove the set_int, set_str).
366
+ CancelWithError(grpc_error_set_int(
367
+ grpc_error_set_str(
368
+ absl::Status(static_cast<absl::StatusCode>(status), description),
369
+ StatusStrProperty::kGrpcMessage, description),
370
+ StatusIntProperty::kRpcStatus, status));
371
+ }
372
+
373
+ void Call::PropagateCancellationToChildren() {
374
+ ParentCall* pc = parent_call();
375
+ if (pc != nullptr) {
376
+ Call* child;
377
+ MutexLock lock(&pc->child_list_mu);
378
+ child = pc->first_child;
379
+ if (child != nullptr) {
380
+ do {
381
+ Call* next_child_call = child->child_->sibling_next;
382
+ if (child->cancellation_is_inherited_) {
383
+ child->InternalRef("propagate_cancel");
384
+ child->CancelWithError(absl::CancelledError());
385
+ child->InternalUnref("propagate_cancel");
386
+ }
387
+ child = next_child_call;
388
+ } while (child != pc->first_child);
389
+ }
390
+ }
391
+ }
392
+
393
+ char* Call::GetPeer() {
394
+ Slice peer_slice = GetPeerString();
395
+ if (!peer_slice.empty()) {
396
+ absl::string_view peer_string_view = peer_slice.as_string_view();
397
+ char* peer_string =
398
+ static_cast<char*>(gpr_malloc(peer_string_view.size() + 1));
399
+ memcpy(peer_string, peer_string_view.data(), peer_string_view.size());
400
+ peer_string[peer_string_view.size()] = '\0';
401
+ return peer_string;
402
+ }
403
+ char* peer_string = grpc_channel_get_target(channel_->c_ptr());
404
+ if (peer_string != nullptr) return peer_string;
405
+ return gpr_strdup("unknown");
406
+ }
407
+
408
+ void Call::DeleteThis() {
409
+ RefCountedPtr<Channel> channel = std::move(channel_);
410
+ Arena* arena = arena_;
411
+ this->~Call();
412
+ channel->UpdateCallSizeEstimate(arena->TotalUsedBytes());
413
+ arena->Destroy();
414
+ }
415
+
416
+ void Call::PrepareOutgoingInitialMetadata(const grpc_op& op,
417
+ grpc_metadata_batch& md) {
418
+ // TODO(juanlishen): If the user has already specified a compression
419
+ // algorithm by setting the initial metadata with key of
420
+ // GRPC_COMPRESSION_REQUEST_ALGORITHM_MD_KEY, we shouldn't override that
421
+ // with the compression algorithm mapped from compression level.
422
+ // process compression level
423
+ grpc_compression_level effective_compression_level = GRPC_COMPRESS_LEVEL_NONE;
424
+ bool level_set = false;
425
+ if (op.data.send_initial_metadata.maybe_compression_level.is_set) {
426
+ effective_compression_level =
427
+ op.data.send_initial_metadata.maybe_compression_level.level;
428
+ level_set = true;
429
+ } else {
430
+ const grpc_compression_options copts = channel()->compression_options();
431
+ if (copts.default_level.is_set) {
432
+ level_set = true;
433
+ effective_compression_level = copts.default_level.level;
434
+ }
435
+ }
436
+ // Currently, only server side supports compression level setting.
437
+ if (level_set && !is_client()) {
438
+ const grpc_compression_algorithm calgo =
439
+ encodings_accepted_by_peer().CompressionAlgorithmForLevel(
440
+ effective_compression_level);
441
+ // The following metadata will be checked and removed by the message
442
+ // compression filter. It will be used as the call's compression
443
+ // algorithm.
444
+ md.Set(GrpcInternalEncodingRequest(), calgo);
445
+ }
446
+ // Ignore any te metadata key value pairs specified.
447
+ md.Remove(TeMetadata());
448
+ // Should never come from applications
449
+ md.Remove(GrpcLbClientStatsMetadata());
450
+ }
451
+
452
+ void Call::ProcessIncomingInitialMetadata(grpc_metadata_batch& md) {
453
+ Slice* peer_string = md.get_pointer(PeerString());
454
+ if (peer_string != nullptr) SetPeerString(peer_string->Ref());
455
+
456
+ incoming_compression_algorithm_ =
457
+ md.Take(GrpcEncodingMetadata()).value_or(GRPC_COMPRESS_NONE);
458
+ encodings_accepted_by_peer_ =
459
+ md.Take(GrpcAcceptEncodingMetadata())
460
+ .value_or(CompressionAlgorithmSet{GRPC_COMPRESS_NONE});
461
+
462
+ const grpc_compression_options compression_options =
463
+ channel_->compression_options();
464
+ const grpc_compression_algorithm compression_algorithm =
465
+ incoming_compression_algorithm_;
466
+ if (GPR_UNLIKELY(!CompressionAlgorithmSet::FromUint32(
467
+ compression_options.enabled_algorithms_bitset)
468
+ .IsSet(compression_algorithm))) {
469
+ // check if algorithm is supported by current channel config
470
+ HandleCompressionAlgorithmDisabled(compression_algorithm);
471
+ }
472
+ // GRPC_COMPRESS_NONE is always set.
473
+ GPR_DEBUG_ASSERT(encodings_accepted_by_peer_.IsSet(GRPC_COMPRESS_NONE));
474
+ if (GPR_UNLIKELY(!encodings_accepted_by_peer_.IsSet(compression_algorithm))) {
475
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_compression_trace)) {
476
+ HandleCompressionAlgorithmNotAccepted(compression_algorithm);
477
+ }
478
+ }
479
+ }
480
+
481
+ void Call::HandleCompressionAlgorithmNotAccepted(
482
+ grpc_compression_algorithm compression_algorithm) {
483
+ const char* algo_name = nullptr;
484
+ grpc_compression_algorithm_name(compression_algorithm, &algo_name);
485
+ gpr_log(GPR_ERROR,
486
+ "Compression algorithm ('%s') not present in the "
487
+ "accepted encodings (%s)",
488
+ algo_name,
489
+ std::string(encodings_accepted_by_peer_.ToString()).c_str());
490
+ }
491
+
492
+ void Call::HandleCompressionAlgorithmDisabled(
493
+ grpc_compression_algorithm compression_algorithm) {
494
+ const char* algo_name = nullptr;
495
+ grpc_compression_algorithm_name(compression_algorithm, &algo_name);
496
+ std::string error_msg =
497
+ absl::StrFormat("Compression algorithm '%s' is disabled.", algo_name);
498
+ gpr_log(GPR_ERROR, "%s", error_msg.c_str());
499
+ CancelWithError(grpc_error_set_int(absl::UnimplementedError(error_msg),
500
+ StatusIntProperty::kRpcStatus,
501
+ GRPC_STATUS_UNIMPLEMENTED));
502
+ }
503
+
504
+ ///////////////////////////////////////////////////////////////////////////////
505
+ // FilterStackCall
506
+ // To be removed once promise conversion is complete
507
+
164
508
  class FilterStackCall final : public Call {
165
509
  public:
166
- ~FilterStackCall() {
510
+ ~FilterStackCall() override {
167
511
  for (int i = 0; i < GRPC_CONTEXT_COUNT; ++i) {
168
512
  if (context_[i].destroy) {
169
513
  context_[i].destroy(context_[i].value);
@@ -198,7 +542,6 @@ class FilterStackCall final : public Call {
198
542
 
199
543
  void CancelWithError(grpc_error_handle error) override;
200
544
  void SetCompletionQueue(grpc_completion_queue* cq) override;
201
- char* GetPeer() override;
202
545
  grpc_call_error StartBatch(const grpc_op* ops, size_t nops, void* notify_tag,
203
546
  bool is_notify_tag_closure) override;
204
547
  void ExternalRef() override { ext_ref_.Ref(); }
@@ -216,11 +559,6 @@ class FilterStackCall final : public Call {
216
559
  return context_[elem].value;
217
560
  }
218
561
 
219
- grpc_compression_algorithm compression_for_level(
220
- grpc_compression_level level) override {
221
- return encodings_accepted_by_peer_.CompressionAlgorithmForLevel(level);
222
- }
223
-
224
562
  bool is_trailers_only() const override {
225
563
  bool result = is_trailers_only_;
226
564
  GPR_DEBUG_ASSERT(!result || recv_initial_metadata_.TransportSize() == 0);
@@ -238,85 +576,115 @@ class FilterStackCall final : public Call {
238
576
  return authority_metadata->as_string_view();
239
577
  }
240
578
 
241
- grpc_compression_algorithm test_only_compression_algorithm() override {
242
- return incoming_compression_algorithm_;
243
- }
244
-
245
- uint32_t test_only_message_flags() override {
246
- return test_only_last_message_flags_;
247
- }
248
-
249
- uint32_t test_only_encodings_accepted_by_peer() override {
250
- return encodings_accepted_by_peer_.ToLegacyBitmask();
251
- }
252
-
253
579
  static size_t InitialSizeEstimate() {
254
580
  return sizeof(FilterStackCall) +
255
581
  sizeof(BatchControl) * kMaxConcurrentBatches;
256
582
  }
257
583
 
258
584
  private:
259
- // The maximum number of concurrent batches possible.
260
- // Based upon the maximum number of individually queueable ops in the batch
261
- // api:
262
- // - initial metadata send
263
- // - message send
264
- // - status/close send (depending on client/server)
265
- // - initial metadata recv
266
- // - message recv
267
- // - status/close recv (depending on client/server)
268
- static constexpr size_t kMaxConcurrentBatches = 6;
269
-
270
585
  static constexpr gpr_atm kRecvNone = 0;
271
586
  static constexpr gpr_atm kRecvInitialMetadataFirst = 1;
272
587
 
588
+ enum class PendingOp {
589
+ kRecvMessage,
590
+ kRecvInitialMetadata,
591
+ kRecvTrailingMetadata,
592
+ kSends
593
+ };
594
+ static intptr_t PendingOpMask(PendingOp op) {
595
+ return static_cast<intptr_t>(1) << static_cast<intptr_t>(op);
596
+ }
597
+ static std::string PendingOpString(intptr_t pending_ops) {
598
+ std::vector<absl::string_view> pending_op_strings;
599
+ if (pending_ops & PendingOpMask(PendingOp::kRecvMessage)) {
600
+ pending_op_strings.push_back("kRecvMessage");
601
+ }
602
+ if (pending_ops & PendingOpMask(PendingOp::kRecvInitialMetadata)) {
603
+ pending_op_strings.push_back("kRecvInitialMetadata");
604
+ }
605
+ if (pending_ops & PendingOpMask(PendingOp::kRecvTrailingMetadata)) {
606
+ pending_op_strings.push_back("kRecvTrailingMetadata");
607
+ }
608
+ if (pending_ops & PendingOpMask(PendingOp::kSends)) {
609
+ pending_op_strings.push_back("kSends");
610
+ }
611
+ return absl::StrCat("{", absl::StrJoin(pending_op_strings, ","), "}");
612
+ }
273
613
  struct BatchControl {
274
614
  FilterStackCall* call_ = nullptr;
615
+ CallTracerAnnotationInterface* call_tracer_ = nullptr;
275
616
  grpc_transport_stream_op_batch op_;
276
- /* Share memory for cq_completion and notify_tag as they are never needed
277
- simultaneously. Each byte used in this data structure count as six bytes
278
- per call, so any savings we can make are worthwhile,
617
+ // Share memory for cq_completion and notify_tag as they are never needed
618
+ // simultaneously. Each byte used in this data structure count as six bytes
619
+ // per call, so any savings we can make are worthwhile,
279
620
 
280
- We use notify_tag to determine whether or not to send notification to the
281
- completion queue. Once we've made that determination, we can reuse the
282
- memory for cq_completion. */
621
+ // We use notify_tag to determine whether or not to send notification to the
622
+ // completion queue. Once we've made that determination, we can reuse the
623
+ // memory for cq_completion.
283
624
  union {
284
625
  grpc_cq_completion cq_completion;
285
626
  struct {
286
- /* Any given op indicates completion by either (a) calling a closure or
287
- (b) sending a notification on the call's completion queue. If
288
- \a is_closure is true, \a tag indicates a closure to be invoked;
289
- otherwise, \a tag indicates the tag to be used in the notification to
290
- be sent to the completion queue. */
627
+ // Any given op indicates completion by either (a) calling a closure or
628
+ // (b) sending a notification on the call's completion queue. If
629
+ // \a is_closure is true, \a tag indicates a closure to be invoked;
630
+ // otherwise, \a tag indicates the tag to be used in the notification to
631
+ // be sent to the completion queue.
291
632
  void* tag;
292
633
  bool is_closure;
293
634
  } notify_tag;
294
635
  } completion_data_;
295
636
  grpc_closure start_batch_;
296
637
  grpc_closure finish_batch_;
297
- std::atomic<intptr_t> steps_to_complete_{0};
638
+ std::atomic<intptr_t> ops_pending_{0};
298
639
  AtomicError batch_error_;
299
- void set_num_steps_to_complete(uintptr_t steps) {
300
- steps_to_complete_.store(steps, std::memory_order_release);
640
+ void set_pending_ops(uintptr_t ops) {
641
+ ops_pending_.store(ops, std::memory_order_release);
301
642
  }
302
- bool completed_batch_step() {
303
- return steps_to_complete_.fetch_sub(1, std::memory_order_acq_rel) == 1;
643
+ bool completed_batch_step(PendingOp op) {
644
+ auto mask = PendingOpMask(op);
645
+ // Acquire call tracer before ops_pending_.fetch_sub to avoid races with
646
+ // call_ being set to nullptr in PostCompletion method. Store the
647
+ // call_tracer_ and call_ variables locally as well because they could be
648
+ // modified by another thread after the fetch_sub operation.
649
+ CallTracerAnnotationInterface* call_tracer = call_tracer_;
650
+ FilterStackCall* call = call_;
651
+ bool is_call_trace_enabled = grpc_call_trace.enabled();
652
+ bool is_call_ops_annotate_enabled =
653
+ (IsTraceRecordCallopsEnabled() && call_tracer != nullptr);
654
+ if (is_call_ops_annotate_enabled) {
655
+ call->InternalRef("Call ops annotate");
656
+ }
657
+ auto r = ops_pending_.fetch_sub(mask, std::memory_order_acq_rel);
658
+ if (is_call_trace_enabled || is_call_ops_annotate_enabled) {
659
+ std::string trace_string = absl::StrFormat(
660
+ "BATCH:%p COMPLETE:%s REMAINING:%s (tag:%p)", this,
661
+ PendingOpString(mask).c_str(), PendingOpString(r & ~mask).c_str(),
662
+ completion_data_.notify_tag.tag);
663
+ if (is_call_trace_enabled) {
664
+ gpr_log(GPR_DEBUG, "%s", trace_string.c_str());
665
+ }
666
+ if (is_call_ops_annotate_enabled) {
667
+ call_tracer->RecordAnnotation(trace_string);
668
+ call->InternalUnref("Call ops annotate");
669
+ }
670
+ }
671
+ GPR_ASSERT((r & mask) != 0);
672
+ return r == mask;
304
673
  }
305
674
 
306
675
  void PostCompletion();
307
- void FinishStep();
676
+ void FinishStep(PendingOp op);
308
677
  void ProcessDataAfterMetadata();
309
678
  void ReceivingStreamReady(grpc_error_handle error);
310
- void ValidateFilteredMetadata();
311
679
  void ReceivingInitialMetadataReady(grpc_error_handle error);
312
680
  void ReceivingTrailingMetadataReady(grpc_error_handle error);
313
681
  void FinishBatch(grpc_error_handle error);
314
682
  };
315
683
 
316
684
  FilterStackCall(Arena* arena, const grpc_call_create_args& args)
317
- : Call(arena, args.server_transport_data == nullptr, args.send_deadline),
685
+ : Call(arena, args.server_transport_data == nullptr, args.send_deadline,
686
+ args.channel->Ref()),
318
687
  cq_(args.cq),
319
- channel_(args.channel->Ref()),
320
688
  stream_op_payload_(context_) {}
321
689
 
322
690
  static void ReleaseCall(void* call, grpc_error_handle);
@@ -332,10 +700,6 @@ class FilterStackCall final : public Call {
332
700
  grpc_closure* start_batch_closure);
333
701
  void SetFinalStatus(grpc_error_handle error);
334
702
  BatchControl* ReuseOrAllocateBatchControl(const grpc_op* ops);
335
- void HandleCompressionAlgorithmDisabled(
336
- grpc_compression_algorithm compression_algorithm) GPR_ATTRIBUTE_NOINLINE;
337
- void HandleCompressionAlgorithmNotAccepted(
338
- grpc_compression_algorithm compression_algorithm) GPR_ATTRIBUTE_NOINLINE;
339
703
  bool PrepareApplicationMetadata(size_t count, grpc_metadata* metadata,
340
704
  bool is_trailing);
341
705
  void PublishAppMetadata(grpc_metadata_batch* b, bool is_trailing);
@@ -347,14 +711,12 @@ class FilterStackCall final : public Call {
347
711
  CallCombiner call_combiner_;
348
712
  grpc_completion_queue* cq_;
349
713
  grpc_polling_entity pollent_;
350
- RefCountedPtr<Channel> channel_;
351
- gpr_cycle_counter start_time_ = gpr_get_cycle_counter();
352
714
 
353
- /** has grpc_call_unref been called */
715
+ /// has grpc_call_unref been called
354
716
  bool destroy_called_ = false;
355
717
  // Trailers-only response status
356
718
  bool is_trailers_only_ = false;
357
- /** which ops are in-flight */
719
+ /// which ops are in-flight
358
720
  bool sent_initial_metadata_ = false;
359
721
  bool sending_message_ = false;
360
722
  bool sent_final_op_ = false;
@@ -366,31 +728,21 @@ class FilterStackCall final : public Call {
366
728
  BatchControl* active_batches_[kMaxConcurrentBatches] = {};
367
729
  grpc_transport_stream_op_batch_payload stream_op_payload_;
368
730
 
369
- /* first idx: is_receiving, second idx: is_trailing */
731
+ // first idx: is_receiving, second idx: is_trailing
370
732
  grpc_metadata_batch send_initial_metadata_{arena()};
371
733
  grpc_metadata_batch send_trailing_metadata_{arena()};
372
734
  grpc_metadata_batch recv_initial_metadata_{arena()};
373
735
  grpc_metadata_batch recv_trailing_metadata_{arena()};
374
736
 
375
- /* Buffered read metadata waiting to be returned to the application.
376
- Element 0 is initial metadata, element 1 is trailing metadata. */
737
+ // Buffered read metadata waiting to be returned to the application.
738
+ // Element 0 is initial metadata, element 1 is trailing metadata.
377
739
  grpc_metadata_array* buffered_metadata_[2] = {};
378
740
 
379
- // A char* indicating the peer name.
380
- gpr_atm peer_string_ = 0;
381
-
382
- /* Call data useful used for reporting. Only valid after the call has
383
- * completed */
741
+ // Call data useful used for reporting. Only valid after the call has
742
+ // completed
384
743
  grpc_call_final_info final_info_;
385
744
 
386
- /* Compression algorithm for *incoming* data */
387
- grpc_compression_algorithm incoming_compression_algorithm_ =
388
- GRPC_COMPRESS_NONE;
389
- /* Supported encodings (compression algorithms), a bitset.
390
- * Always support no compression. */
391
- CompressionAlgorithmSet encodings_accepted_by_peer_{GRPC_COMPRESS_NONE};
392
-
393
- /* Contexts for various subsystems (security, tracing, ...). */
745
+ // Contexts for various subsystems (security, tracing, ...).
394
746
  grpc_call_context_element context_[GRPC_CONTEXT_COUNT] = {};
395
747
 
396
748
  SliceBuffer send_slice_buffer_;
@@ -403,7 +755,6 @@ class FilterStackCall final : public Call {
403
755
  grpc_closure receiving_stream_ready_;
404
756
  grpc_closure receiving_initial_metadata_ready_;
405
757
  grpc_closure receiving_trailing_metadata_ready_;
406
- uint32_t test_only_last_message_flags_ = 0;
407
758
  // Status about operation of call
408
759
  bool sent_server_trailing_metadata_ = false;
409
760
  gpr_atm cancelled_with_error_ = 0;
@@ -424,114 +775,44 @@ class FilterStackCall final : public Call {
424
775
  } final_op_;
425
776
  AtomicError status_error_;
426
777
 
427
- /* recv_state can contain one of the following values:
428
- RECV_NONE : : no initial metadata and messages received
429
- RECV_INITIAL_METADATA_FIRST : received initial metadata first
430
- a batch_control* : received messages first
431
-
432
- +------1------RECV_NONE------3-----+
433
- | |
434
- | |
435
- v v
436
- RECV_INITIAL_METADATA_FIRST receiving_stream_ready_bctlp
437
- | ^ | ^
438
- | | | |
439
- +-----2-----+ +-----4-----+
440
-
441
- For 1, 4: See receiving_initial_metadata_ready() function
442
- For 2, 3: See receiving_stream_ready() function */
778
+ // recv_state can contain one of the following values:
779
+ // RECV_NONE : : no initial metadata and messages received
780
+ // RECV_INITIAL_METADATA_FIRST : received initial metadata first
781
+ // a batch_control* : received messages first
782
+
783
+ // +------1------RECV_NONE------3-----+
784
+ // | |
785
+ // | |
786
+ // v v
787
+ // RECV_INITIAL_METADATA_FIRST receiving_stream_ready_bctlp
788
+ // | ^ | ^
789
+ // | | | |
790
+ // +-----2-----+ +-----4-----+
791
+
792
+ // For 1, 4: See receiving_initial_metadata_ready() function
793
+ // For 2, 3: See receiving_stream_ready() function
443
794
  gpr_atm recv_state_ = 0;
444
795
  };
445
796
 
446
- Call::ParentCall* Call::GetOrCreateParentCall() {
447
- ParentCall* p = parent_call_.load(std::memory_order_acquire);
448
- if (p == nullptr) {
449
- p = arena_->New<ParentCall>();
450
- ParentCall* expected = nullptr;
451
- if (!parent_call_.compare_exchange_strong(expected, p,
452
- std::memory_order_release,
453
- std::memory_order_relaxed)) {
454
- p->~ParentCall();
455
- p = expected;
456
- }
457
- }
458
- return p;
459
- }
460
-
461
- Call::ParentCall* Call::parent_call() {
462
- return parent_call_.load(std::memory_order_acquire);
463
- }
464
-
465
- absl::Status Call::InitParent(Call* parent, uint32_t propagation_mask) {
466
- child_ = arena()->New<ChildCall>(parent);
467
-
468
- parent->InternalRef("child");
469
- GPR_ASSERT(is_client_);
470
- GPR_ASSERT(!parent->is_client_);
471
-
472
- if (propagation_mask & GRPC_PROPAGATE_DEADLINE) {
473
- send_deadline_ = std::min(send_deadline_, parent->send_deadline_);
474
- }
475
- /* for now GRPC_PROPAGATE_TRACING_CONTEXT *MUST* be passed with
476
- * GRPC_PROPAGATE_STATS_CONTEXT */
477
- /* TODO(ctiller): This should change to use the appropriate census start_op
478
- * call. */
479
- if (propagation_mask & GRPC_PROPAGATE_CENSUS_TRACING_CONTEXT) {
480
- if (0 == (propagation_mask & GRPC_PROPAGATE_CENSUS_STATS_CONTEXT)) {
481
- return absl::UnknownError(
482
- "Census tracing propagation requested without Census context "
483
- "propagation");
484
- }
485
- ContextSet(GRPC_CONTEXT_TRACING, parent->ContextGet(GRPC_CONTEXT_TRACING),
486
- nullptr);
487
- } else if (propagation_mask & GRPC_PROPAGATE_CENSUS_STATS_CONTEXT) {
488
- return absl::UnknownError(
489
- "Census context propagation requested without Census tracing "
490
- "propagation");
491
- }
492
- if (propagation_mask & GRPC_PROPAGATE_CANCELLATION) {
493
- cancellation_is_inherited_ = true;
494
- }
495
- return absl::OkStatus();
496
- }
497
-
498
- void Call::PublishToParent(Call* parent) {
499
- ChildCall* cc = child_;
500
- ParentCall* pc = parent->GetOrCreateParentCall();
501
- MutexLock lock(&pc->child_list_mu);
502
- if (pc->first_child == nullptr) {
503
- pc->first_child = this;
504
- cc->sibling_next = cc->sibling_prev = this;
505
- } else {
506
- cc->sibling_next = pc->first_child;
507
- cc->sibling_prev = pc->first_child->child_->sibling_prev;
508
- cc->sibling_next->child_->sibling_prev =
509
- cc->sibling_prev->child_->sibling_next = this;
510
- }
511
- if (parent->Completed()) {
512
- CancelWithError(GRPC_ERROR_CANCELLED);
513
- }
514
- }
515
-
516
- grpc_error_handle FilterStackCall::Create(grpc_call_create_args* args,
517
- grpc_call** out_call) {
518
- Channel* channel = args->channel.get();
519
-
520
- auto add_init_error = [](grpc_error_handle* composite,
521
- grpc_error_handle new_err) {
522
- if (GRPC_ERROR_IS_NONE(new_err)) return;
523
- if (GRPC_ERROR_IS_NONE(*composite)) {
524
- *composite = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Call creation failed");
797
+ grpc_error_handle FilterStackCall::Create(grpc_call_create_args* args,
798
+ grpc_call** out_call) {
799
+ Channel* channel = args->channel.get();
800
+
801
+ auto add_init_error = [](grpc_error_handle* composite,
802
+ grpc_error_handle new_err) {
803
+ if (new_err.ok()) return;
804
+ if (composite->ok()) {
805
+ *composite = GRPC_ERROR_CREATE("Call creation failed");
525
806
  }
526
807
  *composite = grpc_error_add_child(*composite, new_err);
527
808
  };
528
809
 
529
810
  Arena* arena;
530
811
  FilterStackCall* call;
531
- grpc_error_handle error = GRPC_ERROR_NONE;
812
+ grpc_error_handle error;
532
813
  grpc_channel_stack* channel_stack = channel->channel_stack();
533
814
  size_t initial_size = channel->CallSizeEstimate();
534
- GRPC_STATS_INC_CALL_INITIAL_SIZE(initial_size);
815
+ global_stats().IncrementCallInitialSize(initial_size);
535
816
  size_t call_alloc_size =
536
817
  GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(FilterStackCall)) +
537
818
  channel_stack->call_stack_size;
@@ -548,8 +829,8 @@ grpc_error_handle FilterStackCall::Create(grpc_call_create_args* args,
548
829
  call->final_op_.client.status_details = nullptr;
549
830
  call->final_op_.client.status = nullptr;
550
831
  call->final_op_.client.error_string = nullptr;
551
- GRPC_STATS_INC_CLIENT_CALLS_CREATED();
552
- path = grpc_slice_ref_internal(args->path->c_slice());
832
+ global_stats().IncrementClientCallsCreated();
833
+ path = CSliceRef(args->path->c_slice());
553
834
  call->send_initial_metadata_.Set(HttpPathMetadata(),
554
835
  std::move(*args->path));
555
836
  if (args->authority.has_value()) {
@@ -557,9 +838,29 @@ grpc_error_handle FilterStackCall::Create(grpc_call_create_args* args,
557
838
  std::move(*args->authority));
558
839
  }
559
840
  } else {
560
- GRPC_STATS_INC_SERVER_CALLS_CREATED();
841
+ global_stats().IncrementServerCallsCreated();
561
842
  call->final_op_.server.cancelled = nullptr;
562
843
  call->final_op_.server.core_server = args->server;
844
+ // TODO(yashykt): In the future, we want to also enable stats and trace
845
+ // collecting from when the call is created at the transport. The idea is
846
+ // that the transport would create the call tracer and pass it in as part of
847
+ // the metadata.
848
+ auto* server_call_tracer_factory = ServerCallTracerFactory::Get(
849
+ args->server != nullptr ? args->server->channel_args() : ChannelArgs());
850
+ if (server_call_tracer_factory != nullptr) {
851
+ auto* server_call_tracer =
852
+ server_call_tracer_factory->CreateNewServerCallTracer(arena);
853
+ if (server_call_tracer != nullptr) {
854
+ // Note that we are setting both
855
+ // GRPC_CONTEXT_CALL_TRACER_ANNOTATION_INTERFACE and
856
+ // GRPC_CONTEXT_CALL_TRACER as a matter of convenience. In the future
857
+ // promise-based world, we would just a single tracer object for each
858
+ // stack (call, subchannel_call, server_call.)
859
+ call->ContextSet(GRPC_CONTEXT_CALL_TRACER_ANNOTATION_INTERFACE,
860
+ server_call_tracer, nullptr);
861
+ call->ContextSet(GRPC_CONTEXT_CALL_TRACER, server_call_tracer, nullptr);
862
+ }
863
+ }
563
864
  }
564
865
 
565
866
  Call* parent = Call::FromC(args->parent);
@@ -567,11 +868,11 @@ grpc_error_handle FilterStackCall::Create(grpc_call_create_args* args,
567
868
  add_init_error(&error, absl_status_to_grpc_error(call->InitParent(
568
869
  parent, args->propagation_mask)));
569
870
  }
570
- /* initial refcount dropped by grpc_call_unref */
871
+ // initial refcount dropped by grpc_call_unref
571
872
  grpc_call_element_args call_args = {
572
873
  call->call_stack(), args->server_transport_data,
573
874
  call->context_, path,
574
- call->start_time_, call->send_deadline(),
875
+ call->start_time(), call->send_deadline(),
575
876
  call->arena(), &call->call_combiner_};
576
877
  add_init_error(&error, grpc_call_stack_init(channel_stack, 1, DestroyCall,
577
878
  call, &call_args));
@@ -580,8 +881,8 @@ grpc_error_handle FilterStackCall::Create(grpc_call_create_args* args,
580
881
  call->PublishToParent(parent);
581
882
  }
582
883
 
583
- if (!GRPC_ERROR_IS_NONE(error)) {
584
- call->CancelWithError(GRPC_ERROR_REF(error));
884
+ if (!error.ok()) {
885
+ call->CancelWithError(error);
585
886
  }
586
887
  if (args->cq != nullptr) {
587
888
  GPR_ASSERT(args->pollset_set_alternative == nullptr &&
@@ -613,7 +914,7 @@ grpc_error_handle FilterStackCall::Create(grpc_call_create_args* args,
613
914
  }
614
915
  }
615
916
 
616
- grpc_slice_unref_internal(path);
917
+ CSliceUnref(path);
617
918
 
618
919
  return error;
619
920
  }
@@ -622,8 +923,7 @@ void FilterStackCall::SetCompletionQueue(grpc_completion_queue* cq) {
622
923
  GPR_ASSERT(cq);
623
924
 
624
925
  if (grpc_polling_entity_pollset_set(&pollent_) != nullptr) {
625
- gpr_log(GPR_ERROR, "A pollset_set is already registered for this call.");
626
- abort();
926
+ Crash("A pollset_set is already registered for this call.");
627
927
  }
628
928
  cq_ = cq;
629
929
  GRPC_CQ_INTERNAL_REF(cq, "bind");
@@ -632,11 +932,7 @@ void FilterStackCall::SetCompletionQueue(grpc_completion_queue* cq) {
632
932
  }
633
933
 
634
934
  void FilterStackCall::ReleaseCall(void* call, grpc_error_handle /*error*/) {
635
- auto* c = static_cast<FilterStackCall*>(call);
636
- RefCountedPtr<Channel> channel = std::move(c->channel_);
637
- Arena* arena = c->arena();
638
- c->~FilterStackCall();
639
- channel->UpdateCallSizeEstimate(arena->Destroy());
935
+ static_cast<FilterStackCall*>(call)->DeleteThis();
640
936
  }
641
937
 
642
938
  void FilterStackCall::DestroyCall(void* call, grpc_error_handle /*error*/) {
@@ -656,33 +952,14 @@ void FilterStackCall::DestroyCall(void* call, grpc_error_handle /*error*/) {
656
952
  grpc_error_get_status(status_error, c->send_deadline(),
657
953
  &c->final_info_.final_status, nullptr, nullptr,
658
954
  &(c->final_info_.error_string));
659
- c->status_error_.set(GRPC_ERROR_NONE);
955
+ c->status_error_.set(absl::OkStatus());
660
956
  c->final_info_.stats.latency =
661
- gpr_cycle_counter_sub(gpr_get_cycle_counter(), c->start_time_);
957
+ gpr_cycle_counter_sub(gpr_get_cycle_counter(), c->start_time());
662
958
  grpc_call_stack_destroy(c->call_stack(), &c->final_info_,
663
959
  GRPC_CLOSURE_INIT(&c->release_call_, ReleaseCall, c,
664
960
  grpc_schedule_on_exec_ctx));
665
961
  }
666
962
 
667
- void Call::MaybeUnpublishFromParent() {
668
- ChildCall* cc = child_;
669
- if (cc == nullptr) return;
670
-
671
- ParentCall* pc = cc->parent->parent_call();
672
- {
673
- MutexLock lock(&pc->child_list_mu);
674
- if (this == pc->first_child) {
675
- pc->first_child = cc->sibling_next;
676
- if (this == pc->first_child) {
677
- pc->first_child = nullptr;
678
- }
679
- }
680
- cc->sibling_prev->child_->sibling_next = cc->sibling_next;
681
- cc->sibling_next->child_->sibling_prev = cc->sibling_prev;
682
- }
683
- cc->parent->InternalUnref("child");
684
- }
685
-
686
963
  void FilterStackCall::ExternalUnref() {
687
964
  if (GPR_LIKELY(!ext_ref_.Unref())) return;
688
965
 
@@ -697,7 +974,7 @@ void FilterStackCall::ExternalUnref() {
697
974
  destroy_called_ = true;
698
975
  bool cancel = gpr_atm_acq_load(&received_final_op_atm_) == 0;
699
976
  if (cancel) {
700
- CancelWithError(GRPC_ERROR_CANCELLED);
977
+ CancelWithError(absl::CancelledError());
701
978
  } else {
702
979
  // Unset the call combiner cancellation closure. This has the
703
980
  // effect of scheduling the previously set cancellation closure, if
@@ -708,14 +985,6 @@ void FilterStackCall::ExternalUnref() {
708
985
  InternalUnref("destroy");
709
986
  }
710
987
 
711
- char* FilterStackCall::GetPeer() {
712
- char* peer_string = reinterpret_cast<char*>(gpr_atm_acq_load(&peer_string_));
713
- if (peer_string != nullptr) return gpr_strdup(peer_string);
714
- peer_string = grpc_channel_get_target(channel_->c_ptr());
715
- if (peer_string != nullptr) return peer_string;
716
- return gpr_strdup("unknown");
717
- }
718
-
719
988
  // start_batch_closure points to a caller-allocated closure to be used
720
989
  // for entering the call combiner.
721
990
  void FilterStackCall::ExecuteBatch(grpc_transport_stream_op_batch* batch,
@@ -735,7 +1004,7 @@ void FilterStackCall::ExecuteBatch(grpc_transport_stream_op_batch* batch,
735
1004
  GRPC_CLOSURE_INIT(start_batch_closure, execute_batch_in_call_combiner, batch,
736
1005
  grpc_schedule_on_exec_ctx);
737
1006
  GRPC_CALL_COMBINER_START(call_combiner(), start_batch_closure,
738
- GRPC_ERROR_NONE, "executing batch");
1007
+ absl::OkStatus(), "executing batch");
739
1008
  }
740
1009
 
741
1010
  namespace {
@@ -758,16 +1027,15 @@ static void done_termination(void* arg, grpc_error_handle /*error*/) {
758
1027
 
759
1028
  void FilterStackCall::CancelWithError(grpc_error_handle error) {
760
1029
  if (!gpr_atm_rel_cas(&cancelled_with_error_, 0, 1)) {
761
- GRPC_ERROR_UNREF(error);
762
1030
  return;
763
1031
  }
764
- gpr_atm_rel_store(&peer_string_, 0);
1032
+ ClearPeerString();
765
1033
  InternalRef("termination");
766
1034
  // Inform the call combiner of the cancellation, so that it can cancel
767
1035
  // any in-flight asynchronous actions that may be holding the call
768
1036
  // combiner. This ensures that the cancel_stream batch can be sent
769
1037
  // down the filter stack in a timely manner.
770
- call_combiner_.Cancel(GRPC_ERROR_REF(error));
1038
+ call_combiner_.Cancel(error);
771
1039
  CancelState* state = new CancelState;
772
1040
  state->call = this;
773
1041
  GRPC_CLOSURE_INIT(&state->finish_batch, done_termination, state,
@@ -779,19 +1047,10 @@ void FilterStackCall::CancelWithError(grpc_error_handle error) {
779
1047
  ExecuteBatch(op, &state->start_batch);
780
1048
  }
781
1049
 
782
- void Call::CancelWithStatus(grpc_status_code status, const char* description) {
783
- // copying 'description' is needed to ensure the grpc_call_cancel_with_status
784
- // guarantee that can be short-lived.
785
- CancelWithError(grpc_error_set_int(
786
- grpc_error_set_str(GRPC_ERROR_CREATE_FROM_COPIED_STRING(description),
787
- GRPC_ERROR_STR_GRPC_MESSAGE, description),
788
- GRPC_ERROR_INT_GRPC_STATUS, status));
789
- }
790
-
791
1050
  void FilterStackCall::SetFinalStatus(grpc_error_handle error) {
792
1051
  if (GRPC_TRACE_FLAG_ENABLED(grpc_call_error_trace)) {
793
- gpr_log(GPR_DEBUG, "set_final_status %s", is_client() ? "CLI" : "SVR");
794
- gpr_log(GPR_DEBUG, "%s", grpc_error_std_string(error).c_str());
1052
+ gpr_log(GPR_DEBUG, "set_final_status %s %s", is_client() ? "CLI" : "SVR",
1053
+ StatusToString(error).c_str());
795
1054
  }
796
1055
  if (is_client()) {
797
1056
  std::string status_details;
@@ -801,8 +1060,7 @@ void FilterStackCall::SetFinalStatus(grpc_error_handle error) {
801
1060
  *final_op_.client.status_details =
802
1061
  grpc_slice_from_cpp_string(std::move(status_details));
803
1062
  status_error_.set(error);
804
- GRPC_ERROR_UNREF(error);
805
- channelz::ChannelNode* channelz_channel = channel_->channelz_node();
1063
+ channelz::ChannelNode* channelz_channel = channel()->channelz_node();
806
1064
  if (channelz_channel != nullptr) {
807
1065
  if (*final_op_.client.status != GRPC_STATUS_OK) {
808
1066
  channelz_channel->RecordCallFailed();
@@ -812,7 +1070,7 @@ void FilterStackCall::SetFinalStatus(grpc_error_handle error) {
812
1070
  }
813
1071
  } else {
814
1072
  *final_op_.server.cancelled =
815
- !GRPC_ERROR_IS_NONE(error) || !sent_server_trailing_metadata_;
1073
+ !error.ok() || !sent_server_trailing_metadata_;
816
1074
  channelz::ServerNode* channelz_node =
817
1075
  final_op_.server.core_server->channelz_node();
818
1076
  if (channelz_node != nullptr) {
@@ -822,7 +1080,6 @@ void FilterStackCall::SetFinalStatus(grpc_error_handle error) {
822
1080
  channelz_node->RecordCallSucceeded();
823
1081
  }
824
1082
  }
825
- GRPC_ERROR_UNREF(error);
826
1083
  }
827
1084
  }
828
1085
 
@@ -848,8 +1105,7 @@ bool FilterStackCall::PrepareApplicationMetadata(size_t count,
848
1105
  // Filter "content-length metadata"
849
1106
  continue;
850
1107
  }
851
- batch->Append(StringViewFromSlice(md->key),
852
- Slice(grpc_slice_ref_internal(md->value)),
1108
+ batch->Append(StringViewFromSlice(md->key), Slice(CSliceRef(md->value)),
853
1109
  [md](absl::string_view error, const Slice& value) {
854
1110
  gpr_log(GPR_DEBUG, "Append error: %s",
855
1111
  absl::StrCat("key=", StringViewFromSlice(md->key),
@@ -935,49 +1191,43 @@ void FilterStackCall::PublishAppMetadata(grpc_metadata_batch* b,
935
1191
  }
936
1192
 
937
1193
  void FilterStackCall::RecvInitialFilter(grpc_metadata_batch* b) {
938
- incoming_compression_algorithm_ =
939
- b->Take(GrpcEncodingMetadata()).value_or(GRPC_COMPRESS_NONE);
940
- encodings_accepted_by_peer_ =
941
- b->Take(GrpcAcceptEncodingMetadata())
942
- .value_or(CompressionAlgorithmSet{GRPC_COMPRESS_NONE});
1194
+ ProcessIncomingInitialMetadata(*b);
943
1195
  PublishAppMetadata(b, false);
944
1196
  }
945
1197
 
946
1198
  void FilterStackCall::RecvTrailingFilter(grpc_metadata_batch* b,
947
1199
  grpc_error_handle batch_error) {
948
- if (!GRPC_ERROR_IS_NONE(batch_error)) {
1200
+ if (!batch_error.ok()) {
949
1201
  SetFinalStatus(batch_error);
950
1202
  } else {
951
1203
  absl::optional<grpc_status_code> grpc_status =
952
1204
  b->Take(GrpcStatusMetadata());
953
1205
  if (grpc_status.has_value()) {
954
1206
  grpc_status_code status_code = *grpc_status;
955
- grpc_error_handle error = GRPC_ERROR_NONE;
1207
+ grpc_error_handle error;
956
1208
  if (status_code != GRPC_STATUS_OK) {
957
- char* peer = GetPeer();
1209
+ Slice peer = GetPeerString();
958
1210
  error = grpc_error_set_int(
959
- GRPC_ERROR_CREATE_FROM_CPP_STRING(
960
- absl::StrCat("Error received from peer ", peer)),
961
- GRPC_ERROR_INT_GRPC_STATUS, static_cast<intptr_t>(status_code));
962
- gpr_free(peer);
1211
+ GRPC_ERROR_CREATE(absl::StrCat("Error received from peer ",
1212
+ peer.as_string_view())),
1213
+ StatusIntProperty::kRpcStatus, static_cast<intptr_t>(status_code));
963
1214
  }
964
1215
  auto grpc_message = b->Take(GrpcMessageMetadata());
965
1216
  if (grpc_message.has_value()) {
966
- error = grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE,
1217
+ error = grpc_error_set_str(error, StatusStrProperty::kGrpcMessage,
967
1218
  grpc_message->as_string_view());
968
- } else if (!GRPC_ERROR_IS_NONE(error)) {
969
- error = grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE, "");
1219
+ } else if (!error.ok()) {
1220
+ error = grpc_error_set_str(error, StatusStrProperty::kGrpcMessage, "");
970
1221
  }
971
- SetFinalStatus(GRPC_ERROR_REF(error));
972
- GRPC_ERROR_UNREF(error);
1222
+ SetFinalStatus(error);
973
1223
  } else if (!is_client()) {
974
- SetFinalStatus(GRPC_ERROR_NONE);
1224
+ SetFinalStatus(absl::OkStatus());
975
1225
  } else {
976
1226
  gpr_log(GPR_DEBUG,
977
1227
  "Received trailing metadata with no error and no status");
978
- SetFinalStatus(grpc_error_set_int(
979
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("No status received"),
980
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNKNOWN));
1228
+ SetFinalStatus(grpc_error_set_int(GRPC_ERROR_CREATE("No status received"),
1229
+ StatusIntProperty::kRpcStatus,
1230
+ GRPC_STATUS_UNKNOWN));
981
1231
  }
982
1232
  }
983
1233
  PublishAppMetadata(b, true);
@@ -985,7 +1235,7 @@ void FilterStackCall::RecvTrailingFilter(grpc_metadata_batch* b,
985
1235
 
986
1236
  namespace {
987
1237
  bool AreWriteFlagsValid(uint32_t flags) {
988
- /* check that only bits in GRPC_WRITE_(INTERNAL?)_USED_MASK are set */
1238
+ // check that only bits in GRPC_WRITE_(INTERNAL?)_USED_MASK are set
989
1239
  const uint32_t allowed_write_positions =
990
1240
  (GRPC_WRITE_USED_MASK | GRPC_WRITE_INTERNAL_USED_MASK);
991
1241
  const uint32_t invalid_positions = ~allowed_write_positions;
@@ -993,7 +1243,7 @@ bool AreWriteFlagsValid(uint32_t flags) {
993
1243
  }
994
1244
 
995
1245
  bool AreInitialMetadataFlagsValid(uint32_t flags) {
996
- /* check that only bits in GRPC_WRITE_(INTERNAL?)_USED_MASK are set */
1246
+ // check that only bits in GRPC_WRITE_(INTERNAL?)_USED_MASK are set
997
1247
  uint32_t invalid_positions = ~GRPC_INITIAL_METADATA_USED_MASK;
998
1248
  return !(flags & invalid_positions);
999
1249
  }
@@ -1037,42 +1287,28 @@ FilterStackCall::BatchControl* FilterStackCall::ReuseOrAllocateBatchControl(
1037
1287
  *pslot = bctl;
1038
1288
  }
1039
1289
  bctl->call_ = this;
1290
+ bctl->call_tracer_ = static_cast<CallTracerAnnotationInterface*>(
1291
+ ContextGet(GRPC_CONTEXT_CALL_TRACER_ANNOTATION_INTERFACE));
1040
1292
  bctl->op_.payload = &stream_op_payload_;
1041
1293
  return bctl;
1042
1294
  }
1043
1295
 
1044
- void Call::PropagateCancellationToChildren() {
1045
- ParentCall* pc = parent_call();
1046
- if (pc != nullptr) {
1047
- Call* child;
1048
- MutexLock lock(&pc->child_list_mu);
1049
- child = pc->first_child;
1050
- if (child != nullptr) {
1051
- do {
1052
- Call* next_child_call = child->child_->sibling_next;
1053
- if (child->cancellation_is_inherited_) {
1054
- child->InternalRef("propagate_cancel");
1055
- child->CancelWithError(GRPC_ERROR_CANCELLED);
1056
- child->InternalUnref("propagate_cancel");
1057
- }
1058
- child = next_child_call;
1059
- } while (child != pc->first_child);
1060
- }
1061
- }
1062
- }
1063
-
1064
1296
  void FilterStackCall::BatchControl::PostCompletion() {
1065
1297
  FilterStackCall* call = call_;
1066
- grpc_error_handle error = GRPC_ERROR_REF(batch_error_.get());
1298
+ grpc_error_handle error = batch_error_.get();
1299
+ if (grpc_call_trace.enabled()) {
1300
+ gpr_log(GPR_DEBUG, "tag:%p batch_error=%s op:%s",
1301
+ completion_data_.notify_tag.tag, error.ToString().c_str(),
1302
+ grpc_transport_stream_op_batch_string(&op_, false).c_str());
1303
+ }
1067
1304
 
1068
1305
  if (op_.send_initial_metadata) {
1069
1306
  call->send_initial_metadata_.Clear();
1070
1307
  }
1071
1308
  if (op_.send_message) {
1072
- if (op_.payload->send_message.stream_write_closed &&
1073
- GRPC_ERROR_IS_NONE(error)) {
1309
+ if (op_.payload->send_message.stream_write_closed && error.ok()) {
1074
1310
  error = grpc_error_add_child(
1075
- error, GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1311
+ error, GRPC_ERROR_CREATE(
1076
1312
  "Attempt to send message after stream was closed."));
1077
1313
  }
1078
1314
  call->sending_message_ = false;
@@ -1081,29 +1317,25 @@ void FilterStackCall::BatchControl::PostCompletion() {
1081
1317
  if (op_.send_trailing_metadata) {
1082
1318
  call->send_trailing_metadata_.Clear();
1083
1319
  }
1320
+ if (!error.ok() && op_.recv_message && *call->receiving_buffer_ != nullptr) {
1321
+ grpc_byte_buffer_destroy(*call->receiving_buffer_);
1322
+ *call->receiving_buffer_ = nullptr;
1323
+ }
1084
1324
  if (op_.recv_trailing_metadata) {
1085
- /* propagate cancellation to any interested children */
1325
+ // propagate cancellation to any interested children
1086
1326
  gpr_atm_rel_store(&call->received_final_op_atm_, 1);
1087
1327
  call->PropagateCancellationToChildren();
1088
- GRPC_ERROR_UNREF(error);
1089
- error = GRPC_ERROR_NONE;
1090
- }
1091
- if (!GRPC_ERROR_IS_NONE(error) && op_.recv_message &&
1092
- *call->receiving_buffer_ != nullptr) {
1093
- grpc_byte_buffer_destroy(*call->receiving_buffer_);
1094
- *call->receiving_buffer_ = nullptr;
1328
+ error = absl::OkStatus();
1095
1329
  }
1096
- batch_error_.set(GRPC_ERROR_NONE);
1330
+ batch_error_.set(absl::OkStatus());
1097
1331
 
1098
1332
  if (completion_data_.notify_tag.is_closure) {
1099
- /* unrefs error */
1100
1333
  call_ = nullptr;
1101
1334
  Closure::Run(DEBUG_LOCATION,
1102
1335
  static_cast<grpc_closure*>(completion_data_.notify_tag.tag),
1103
1336
  error);
1104
1337
  call->InternalUnref("completion");
1105
1338
  } else {
1106
- /* unrefs error */
1107
1339
  grpc_cq_end_op(
1108
1340
  call->cq_, completion_data_.notify_tag.tag, error,
1109
1341
  [](void* user_data, grpc_cq_completion* /*storage*/) {
@@ -1116,8 +1348,8 @@ void FilterStackCall::BatchControl::PostCompletion() {
1116
1348
  }
1117
1349
  }
1118
1350
 
1119
- void FilterStackCall::BatchControl::FinishStep() {
1120
- if (GPR_UNLIKELY(completed_batch_step())) {
1351
+ void FilterStackCall::BatchControl::FinishStep(PendingOp op) {
1352
+ if (GPR_UNLIKELY(completed_batch_step(op))) {
1121
1353
  PostCompletion();
1122
1354
  }
1123
1355
  }
@@ -1127,13 +1359,13 @@ void FilterStackCall::BatchControl::ProcessDataAfterMetadata() {
1127
1359
  if (!call->receiving_slice_buffer_.has_value()) {
1128
1360
  *call->receiving_buffer_ = nullptr;
1129
1361
  call->receiving_message_ = false;
1130
- FinishStep();
1362
+ FinishStep(PendingOp::kRecvMessage);
1131
1363
  } else {
1132
- call->test_only_last_message_flags_ = call->receiving_stream_flags_;
1364
+ call->NoteLastMessageFlags(call->receiving_stream_flags_);
1133
1365
  if ((call->receiving_stream_flags_ & GRPC_WRITE_INTERNAL_COMPRESS) &&
1134
- (call->incoming_compression_algorithm_ != GRPC_COMPRESS_NONE)) {
1366
+ (call->incoming_compression_algorithm() != GRPC_COMPRESS_NONE)) {
1135
1367
  *call->receiving_buffer_ = grpc_raw_compressed_byte_buffer_create(
1136
- nullptr, 0, call->incoming_compression_algorithm_);
1368
+ nullptr, 0, call->incoming_compression_algorithm());
1137
1369
  } else {
1138
1370
  *call->receiving_buffer_ = grpc_raw_byte_buffer_create(nullptr, 0);
1139
1371
  }
@@ -1142,88 +1374,48 @@ void FilterStackCall::BatchControl::ProcessDataAfterMetadata() {
1142
1374
  &(*call->receiving_buffer_)->data.raw.slice_buffer);
1143
1375
  call->receiving_message_ = false;
1144
1376
  call->receiving_slice_buffer_.reset();
1145
- FinishStep();
1377
+ FinishStep(PendingOp::kRecvMessage);
1146
1378
  }
1147
1379
  }
1148
1380
 
1149
1381
  void FilterStackCall::BatchControl::ReceivingStreamReady(
1150
1382
  grpc_error_handle error) {
1383
+ if (grpc_call_trace.enabled()) {
1384
+ gpr_log(GPR_DEBUG,
1385
+ "tag:%p ReceivingStreamReady error=%s "
1386
+ "receiving_slice_buffer.has_value=%d recv_state=%" PRIdPTR,
1387
+ completion_data_.notify_tag.tag, error.ToString().c_str(),
1388
+ call_->receiving_slice_buffer_.has_value(),
1389
+ gpr_atm_no_barrier_load(&call_->recv_state_));
1390
+ }
1151
1391
  FilterStackCall* call = call_;
1152
- if (!GRPC_ERROR_IS_NONE(error)) {
1392
+ if (!error.ok()) {
1153
1393
  call->receiving_slice_buffer_.reset();
1154
1394
  if (batch_error_.ok()) {
1155
1395
  batch_error_.set(error);
1156
1396
  }
1157
- call->CancelWithError(GRPC_ERROR_REF(error));
1397
+ call->CancelWithError(error);
1158
1398
  }
1159
- /* If recv_state is kRecvNone, we will save the batch_control
1160
- * object with rel_cas, and will not use it after the cas. Its corresponding
1161
- * acq_load is in receiving_initial_metadata_ready() */
1162
- if (!GRPC_ERROR_IS_NONE(error) ||
1163
- !call->receiving_slice_buffer_.has_value() ||
1399
+ // If recv_state is kRecvNone, we will save the batch_control
1400
+ // object with rel_cas, and will not use it after the cas. Its corresponding
1401
+ // acq_load is in receiving_initial_metadata_ready()
1402
+ if (!error.ok() || !call->receiving_slice_buffer_.has_value() ||
1164
1403
  !gpr_atm_rel_cas(&call->recv_state_, kRecvNone,
1165
1404
  reinterpret_cast<gpr_atm>(this))) {
1166
1405
  ProcessDataAfterMetadata();
1167
1406
  }
1168
1407
  }
1169
1408
 
1170
- void FilterStackCall::HandleCompressionAlgorithmDisabled(
1171
- grpc_compression_algorithm compression_algorithm) {
1172
- const char* algo_name = nullptr;
1173
- grpc_compression_algorithm_name(compression_algorithm, &algo_name);
1174
- std::string error_msg =
1175
- absl::StrFormat("Compression algorithm '%s' is disabled.", algo_name);
1176
- gpr_log(GPR_ERROR, "%s", error_msg.c_str());
1177
- CancelWithStatus(GRPC_STATUS_UNIMPLEMENTED, error_msg.c_str());
1178
- }
1179
-
1180
- void FilterStackCall::HandleCompressionAlgorithmNotAccepted(
1181
- grpc_compression_algorithm compression_algorithm) {
1182
- const char* algo_name = nullptr;
1183
- grpc_compression_algorithm_name(compression_algorithm, &algo_name);
1184
- gpr_log(GPR_ERROR,
1185
- "Compression algorithm ('%s') not present in the "
1186
- "accepted encodings (%s)",
1187
- algo_name,
1188
- std::string(encodings_accepted_by_peer_.ToString()).c_str());
1189
- }
1190
-
1191
- void FilterStackCall::BatchControl::ValidateFilteredMetadata() {
1192
- FilterStackCall* call = call_;
1193
-
1194
- const grpc_compression_options compression_options =
1195
- call->channel_->compression_options();
1196
- const grpc_compression_algorithm compression_algorithm =
1197
- call->incoming_compression_algorithm_;
1198
- if (GPR_UNLIKELY(!CompressionAlgorithmSet::FromUint32(
1199
- compression_options.enabled_algorithms_bitset)
1200
- .IsSet(compression_algorithm))) {
1201
- /* check if algorithm is supported by current channel config */
1202
- call->HandleCompressionAlgorithmDisabled(compression_algorithm);
1203
- }
1204
- /* GRPC_COMPRESS_NONE is always set. */
1205
- GPR_DEBUG_ASSERT(call->encodings_accepted_by_peer_.IsSet(GRPC_COMPRESS_NONE));
1206
- if (GPR_UNLIKELY(
1207
- !call->encodings_accepted_by_peer_.IsSet(compression_algorithm))) {
1208
- if (GRPC_TRACE_FLAG_ENABLED(grpc_compression_trace)) {
1209
- call->HandleCompressionAlgorithmNotAccepted(compression_algorithm);
1210
- }
1211
- }
1212
- }
1213
-
1214
1409
  void FilterStackCall::BatchControl::ReceivingInitialMetadataReady(
1215
1410
  grpc_error_handle error) {
1216
1411
  FilterStackCall* call = call_;
1217
1412
 
1218
1413
  GRPC_CALL_COMBINER_STOP(call->call_combiner(), "recv_initial_metadata_ready");
1219
1414
 
1220
- if (GRPC_ERROR_IS_NONE(error)) {
1415
+ if (error.ok()) {
1221
1416
  grpc_metadata_batch* md = &call->recv_initial_metadata_;
1222
1417
  call->RecvInitialFilter(md);
1223
1418
 
1224
- /* TODO(ctiller): this could be moved into recv_initial_filter now */
1225
- ValidateFilteredMetadata();
1226
-
1227
1419
  absl::optional<Timestamp> deadline = md->get(GrpcTimeoutMetadata());
1228
1420
  if (deadline.has_value() && !call->is_client()) {
1229
1421
  call_->set_send_deadline(*deadline);
@@ -1232,41 +1424,41 @@ void FilterStackCall::BatchControl::ReceivingInitialMetadataReady(
1232
1424
  if (batch_error_.ok()) {
1233
1425
  batch_error_.set(error);
1234
1426
  }
1235
- call->CancelWithError(GRPC_ERROR_REF(error));
1427
+ call->CancelWithError(error);
1236
1428
  }
1237
1429
 
1238
1430
  grpc_closure* saved_rsr_closure = nullptr;
1239
1431
  while (true) {
1240
1432
  gpr_atm rsr_bctlp = gpr_atm_acq_load(&call->recv_state_);
1241
- /* Should only receive initial metadata once */
1433
+ // Should only receive initial metadata once
1242
1434
  GPR_ASSERT(rsr_bctlp != 1);
1243
1435
  if (rsr_bctlp == 0) {
1244
- /* We haven't seen initial metadata and messages before, thus initial
1245
- * metadata is received first.
1246
- * no_barrier_cas is used, as this function won't access the batch_control
1247
- * object saved by receiving_stream_ready() if the initial metadata is
1248
- * received first. */
1436
+ // We haven't seen initial metadata and messages before, thus initial
1437
+ // metadata is received first.
1438
+ // no_barrier_cas is used, as this function won't access the batch_control
1439
+ // object saved by receiving_stream_ready() if the initial metadata is
1440
+ // received first.
1249
1441
  if (gpr_atm_no_barrier_cas(&call->recv_state_, kRecvNone,
1250
1442
  kRecvInitialMetadataFirst)) {
1251
1443
  break;
1252
1444
  }
1253
1445
  } else {
1254
- /* Already received messages */
1446
+ // Already received messages
1255
1447
  saved_rsr_closure = GRPC_CLOSURE_CREATE(
1256
1448
  [](void* bctl, grpc_error_handle error) {
1257
1449
  static_cast<BatchControl*>(bctl)->ReceivingStreamReady(error);
1258
1450
  },
1259
1451
  reinterpret_cast<BatchControl*>(rsr_bctlp),
1260
1452
  grpc_schedule_on_exec_ctx);
1261
- /* No need to modify recv_state */
1453
+ // No need to modify recv_state
1262
1454
  break;
1263
1455
  }
1264
1456
  }
1265
1457
  if (saved_rsr_closure != nullptr) {
1266
- Closure::Run(DEBUG_LOCATION, saved_rsr_closure, GRPC_ERROR_REF(error));
1458
+ Closure::Run(DEBUG_LOCATION, saved_rsr_closure, error);
1267
1459
  }
1268
1460
 
1269
- FinishStep();
1461
+ FinishStep(PendingOp::kRecvInitialMetadata);
1270
1462
  }
1271
1463
 
1272
1464
  void FilterStackCall::BatchControl::ReceivingTrailingMetadataReady(
@@ -1274,8 +1466,8 @@ void FilterStackCall::BatchControl::ReceivingTrailingMetadataReady(
1274
1466
  GRPC_CALL_COMBINER_STOP(call_->call_combiner(),
1275
1467
  "recv_trailing_metadata_ready");
1276
1468
  grpc_metadata_batch* md = &call_->recv_trailing_metadata_;
1277
- call_->RecvTrailingFilter(md, GRPC_ERROR_REF(error));
1278
- FinishStep();
1469
+ call_->RecvTrailingFilter(md, error);
1470
+ FinishStep(PendingOp::kRecvTrailingMetadata);
1279
1471
  }
1280
1472
 
1281
1473
  void FilterStackCall::BatchControl::FinishBatch(grpc_error_handle error) {
@@ -1283,11 +1475,29 @@ void FilterStackCall::BatchControl::FinishBatch(grpc_error_handle error) {
1283
1475
  if (batch_error_.ok()) {
1284
1476
  batch_error_.set(error);
1285
1477
  }
1286
- if (!GRPC_ERROR_IS_NONE(error)) {
1287
- call_->CancelWithError(GRPC_ERROR_REF(error));
1478
+ if (!error.ok()) {
1479
+ call_->CancelWithError(error);
1480
+ }
1481
+ FinishStep(PendingOp::kSends);
1482
+ }
1483
+
1484
+ namespace {
1485
+ void EndOpImmediately(grpc_completion_queue* cq, void* notify_tag,
1486
+ bool is_notify_tag_closure) {
1487
+ if (!is_notify_tag_closure) {
1488
+ GPR_ASSERT(grpc_cq_begin_op(cq, notify_tag));
1489
+ grpc_cq_end_op(
1490
+ cq, notify_tag, absl::OkStatus(),
1491
+ [](void*, grpc_cq_completion* completion) { gpr_free(completion); },
1492
+ nullptr,
1493
+ static_cast<grpc_cq_completion*>(
1494
+ gpr_malloc(sizeof(grpc_cq_completion))));
1495
+ } else {
1496
+ Closure::Run(DEBUG_LOCATION, static_cast<grpc_closure*>(notify_tag),
1497
+ absl::OkStatus());
1288
1498
  }
1289
- FinishStep();
1290
1499
  }
1500
+ } // namespace
1291
1501
 
1292
1502
  grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1293
1503
  void* notify_tag,
@@ -1295,12 +1505,12 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1295
1505
  size_t i;
1296
1506
  const grpc_op* op;
1297
1507
  BatchControl* bctl;
1298
- bool has_send_ops = false;
1299
- int num_recv_ops = 0;
1300
1508
  grpc_call_error error = GRPC_CALL_OK;
1301
1509
  grpc_transport_stream_op_batch* stream_op;
1302
1510
  grpc_transport_stream_op_batch_payload* stream_op_payload;
1303
1511
  uint32_t seen_ops = 0;
1512
+ intptr_t pending_ops = 0;
1513
+ CallTracerAnnotationInterface* call_tracer = nullptr;
1304
1514
 
1305
1515
  for (i = 0; i < nops; i++) {
1306
1516
  if (seen_ops & (1u << ops[i].op)) {
@@ -1309,21 +1519,19 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1309
1519
  seen_ops |= (1u << ops[i].op);
1310
1520
  }
1311
1521
 
1522
+ if (!is_client() &&
1523
+ (seen_ops & (1u << GRPC_OP_SEND_STATUS_FROM_SERVER)) != 0 &&
1524
+ (seen_ops & (1u << GRPC_OP_RECV_MESSAGE)) != 0) {
1525
+ gpr_log(GPR_ERROR,
1526
+ "******************* SEND_STATUS WITH RECV_MESSAGE "
1527
+ "*******************");
1528
+ return GRPC_CALL_ERROR;
1529
+ }
1530
+
1312
1531
  GRPC_CALL_LOG_BATCH(GPR_INFO, ops, nops);
1313
1532
 
1314
1533
  if (nops == 0) {
1315
- if (!is_notify_tag_closure) {
1316
- GPR_ASSERT(grpc_cq_begin_op(cq_, notify_tag));
1317
- grpc_cq_end_op(
1318
- cq_, notify_tag, GRPC_ERROR_NONE,
1319
- [](void*, grpc_cq_completion* completion) { gpr_free(completion); },
1320
- nullptr,
1321
- static_cast<grpc_cq_completion*>(
1322
- gpr_malloc(sizeof(grpc_cq_completion))));
1323
- } else {
1324
- Closure::Run(DEBUG_LOCATION, static_cast<grpc_closure*>(notify_tag),
1325
- GRPC_ERROR_NONE);
1326
- }
1534
+ EndOpImmediately(cq_, notify_tag, is_notify_tag_closure);
1327
1535
  error = GRPC_CALL_OK;
1328
1536
  goto done;
1329
1537
  }
@@ -1339,7 +1547,7 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1339
1547
  stream_op = &bctl->op_;
1340
1548
  stream_op_payload = &stream_op_payload_;
1341
1549
 
1342
- /* rewrite batch ops into a transport op */
1550
+ // rewrite batch ops into a transport op
1343
1551
  for (i = 0; i < nops; i++) {
1344
1552
  op = &ops[i];
1345
1553
  if (op->reserved != nullptr) {
@@ -1348,7 +1556,7 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1348
1556
  }
1349
1557
  switch (op->op) {
1350
1558
  case GRPC_OP_SEND_INITIAL_METADATA: {
1351
- /* Flag validation: currently allow no flags */
1559
+ // Flag validation: currently allow no flags
1352
1560
  if (!AreInitialMetadataFlagsValid(op->flags)) {
1353
1561
  error = GRPC_CALL_ERROR_INVALID_FLAGS;
1354
1562
  goto done_with_error;
@@ -1357,36 +1565,6 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1357
1565
  error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1358
1566
  goto done_with_error;
1359
1567
  }
1360
- // TODO(juanlishen): If the user has already specified a compression
1361
- // algorithm by setting the initial metadata with key of
1362
- // GRPC_COMPRESSION_REQUEST_ALGORITHM_MD_KEY, we shouldn't override that
1363
- // with the compression algorithm mapped from compression level.
1364
- /* process compression level */
1365
- grpc_compression_level effective_compression_level =
1366
- GRPC_COMPRESS_LEVEL_NONE;
1367
- bool level_set = false;
1368
- if (op->data.send_initial_metadata.maybe_compression_level.is_set) {
1369
- effective_compression_level =
1370
- op->data.send_initial_metadata.maybe_compression_level.level;
1371
- level_set = true;
1372
- } else {
1373
- const grpc_compression_options copts =
1374
- channel_->compression_options();
1375
- if (copts.default_level.is_set) {
1376
- level_set = true;
1377
- effective_compression_level = copts.default_level.level;
1378
- }
1379
- }
1380
- // Currently, only server side supports compression level setting.
1381
- if (level_set && !is_client()) {
1382
- const grpc_compression_algorithm calgo =
1383
- encodings_accepted_by_peer_.CompressionAlgorithmForLevel(
1384
- effective_compression_level);
1385
- // The following metadata will be checked and removed by the message
1386
- // compression filter. It will be used as the call's compression
1387
- // algorithm.
1388
- send_initial_metadata_.Set(GrpcInternalEncodingRequest(), calgo);
1389
- }
1390
1568
  if (op->data.send_initial_metadata.count > INT_MAX) {
1391
1569
  error = GRPC_CALL_ERROR_INVALID_METADATA;
1392
1570
  goto done_with_error;
@@ -1399,9 +1577,8 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1399
1577
  error = GRPC_CALL_ERROR_INVALID_METADATA;
1400
1578
  goto done_with_error;
1401
1579
  }
1402
- // Ignore any te metadata key value pairs specified.
1403
- send_initial_metadata_.Remove(TeMetadata());
1404
- /* TODO(ctiller): just make these the same variable? */
1580
+ PrepareOutgoingInitialMetadata(*op, send_initial_metadata_);
1581
+ // TODO(ctiller): just make these the same variable?
1405
1582
  if (is_client() && send_deadline() != Timestamp::InfFuture()) {
1406
1583
  send_initial_metadata_.Set(GrpcTimeoutMetadata(), send_deadline());
1407
1584
  }
@@ -1415,10 +1592,7 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1415
1592
  }
1416
1593
  stream_op_payload->send_initial_metadata.send_initial_metadata =
1417
1594
  &send_initial_metadata_;
1418
- if (is_client()) {
1419
- stream_op_payload->send_initial_metadata.peer_string = &peer_string_;
1420
- }
1421
- has_send_ops = true;
1595
+ pending_ops |= PendingOpMask(PendingOp::kSends);
1422
1596
  break;
1423
1597
  }
1424
1598
  case GRPC_OP_SEND_MESSAGE: {
@@ -1435,9 +1609,9 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1435
1609
  goto done_with_error;
1436
1610
  }
1437
1611
  uint32_t flags = op->flags;
1438
- /* If the outgoing buffer is already compressed, mark it as so in the
1439
- flags. These will be picked up by the compression filter and further
1440
- (wasteful) attempts at compression skipped. */
1612
+ // If the outgoing buffer is already compressed, mark it as so in the
1613
+ // flags. These will be picked up by the compression filter and further
1614
+ // (wasteful) attempts at compression skipped.
1441
1615
  if (op->data.send_message.send_message->data.raw.compression >
1442
1616
  GRPC_COMPRESS_NONE) {
1443
1617
  flags |= GRPC_WRITE_INTERNAL_COMPRESS;
@@ -1450,11 +1624,11 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1450
1624
  send_slice_buffer_.c_slice_buffer());
1451
1625
  stream_op_payload->send_message.flags = flags;
1452
1626
  stream_op_payload->send_message.send_message = &send_slice_buffer_;
1453
- has_send_ops = true;
1627
+ pending_ops |= PendingOpMask(PendingOp::kSends);
1454
1628
  break;
1455
1629
  }
1456
1630
  case GRPC_OP_SEND_CLOSE_FROM_CLIENT: {
1457
- /* Flag validation: currently allow no flags */
1631
+ // Flag validation: currently allow no flags
1458
1632
  if (op->flags != 0) {
1459
1633
  error = GRPC_CALL_ERROR_INVALID_FLAGS;
1460
1634
  goto done_with_error;
@@ -1471,11 +1645,11 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1471
1645
  sent_final_op_ = true;
1472
1646
  stream_op_payload->send_trailing_metadata.send_trailing_metadata =
1473
1647
  &send_trailing_metadata_;
1474
- has_send_ops = true;
1648
+ pending_ops |= PendingOpMask(PendingOp::kSends);
1475
1649
  break;
1476
1650
  }
1477
1651
  case GRPC_OP_SEND_STATUS_FROM_SERVER: {
1478
- /* Flag validation: currently allow no flags */
1652
+ // Flag validation: currently allow no flags
1479
1653
  if (op->flags != 0) {
1480
1654
  error = GRPC_CALL_ERROR_INVALID_FLAGS;
1481
1655
  goto done_with_error;
@@ -1505,11 +1679,10 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1505
1679
 
1506
1680
  grpc_error_handle status_error =
1507
1681
  op->data.send_status_from_server.status == GRPC_STATUS_OK
1508
- ? GRPC_ERROR_NONE
1682
+ ? absl::OkStatus()
1509
1683
  : grpc_error_set_int(
1510
- GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1511
- "Server returned error"),
1512
- GRPC_ERROR_INT_GRPC_STATUS,
1684
+ GRPC_ERROR_CREATE("Server returned error"),
1685
+ StatusIntProperty::kRpcStatus,
1513
1686
  static_cast<intptr_t>(
1514
1687
  op->data.send_status_from_server.status));
1515
1688
  if (op->data.send_status_from_server.status_details != nullptr) {
@@ -1517,16 +1690,15 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1517
1690
  GrpcMessageMetadata(),
1518
1691
  Slice(grpc_slice_copy(
1519
1692
  *op->data.send_status_from_server.status_details)));
1520
- if (!GRPC_ERROR_IS_NONE(status_error)) {
1693
+ if (!status_error.ok()) {
1521
1694
  status_error = grpc_error_set_str(
1522
- status_error, GRPC_ERROR_STR_GRPC_MESSAGE,
1695
+ status_error, StatusStrProperty::kGrpcMessage,
1523
1696
  StringViewFromSlice(
1524
1697
  *op->data.send_status_from_server.status_details));
1525
1698
  }
1526
1699
  }
1527
1700
 
1528
1701
  status_error_.set(status_error);
1529
- GRPC_ERROR_UNREF(status_error);
1530
1702
 
1531
1703
  send_trailing_metadata_.Set(GrpcStatusMetadata(),
1532
1704
  op->data.send_status_from_server.status);
@@ -1537,11 +1709,11 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1537
1709
  &send_trailing_metadata_;
1538
1710
  stream_op_payload->send_trailing_metadata.sent =
1539
1711
  &sent_server_trailing_metadata_;
1540
- has_send_ops = true;
1712
+ pending_ops |= PendingOpMask(PendingOp::kSends);
1541
1713
  break;
1542
1714
  }
1543
1715
  case GRPC_OP_RECV_INITIAL_METADATA: {
1544
- /* Flag validation: currently allow no flags */
1716
+ // Flag validation: currently allow no flags
1545
1717
  if (op->flags != 0) {
1546
1718
  error = GRPC_CALL_ERROR_INVALID_FLAGS;
1547
1719
  goto done_with_error;
@@ -1568,14 +1740,12 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1568
1740
  if (is_client()) {
1569
1741
  stream_op_payload->recv_initial_metadata.trailing_metadata_available =
1570
1742
  &is_trailers_only_;
1571
- } else {
1572
- stream_op_payload->recv_initial_metadata.peer_string = &peer_string_;
1573
1743
  }
1574
- ++num_recv_ops;
1744
+ pending_ops |= PendingOpMask(PendingOp::kRecvInitialMetadata);
1575
1745
  break;
1576
1746
  }
1577
1747
  case GRPC_OP_RECV_MESSAGE: {
1578
- /* Flag validation: currently allow no flags */
1748
+ // Flag validation: currently allow no flags
1579
1749
  if (op->flags != 0) {
1580
1750
  error = GRPC_CALL_ERROR_INVALID_FLAGS;
1581
1751
  goto done_with_error;
@@ -1607,11 +1777,11 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1607
1777
  bctl, grpc_schedule_on_exec_ctx);
1608
1778
  stream_op_payload->recv_message.recv_message_ready =
1609
1779
  &receiving_stream_ready_;
1610
- ++num_recv_ops;
1780
+ pending_ops |= PendingOpMask(PendingOp::kRecvMessage);
1611
1781
  break;
1612
1782
  }
1613
1783
  case GRPC_OP_RECV_STATUS_ON_CLIENT: {
1614
- /* Flag validation: currently allow no flags */
1784
+ // Flag validation: currently allow no flags
1615
1785
  if (op->flags != 0) {
1616
1786
  error = GRPC_CALL_ERROR_INVALID_FLAGS;
1617
1787
  goto done_with_error;
@@ -1646,11 +1816,11 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1646
1816
  bctl, grpc_schedule_on_exec_ctx);
1647
1817
  stream_op_payload->recv_trailing_metadata.recv_trailing_metadata_ready =
1648
1818
  &receiving_trailing_metadata_ready_;
1649
- ++num_recv_ops;
1819
+ pending_ops |= PendingOpMask(PendingOp::kRecvTrailingMetadata);
1650
1820
  break;
1651
1821
  }
1652
1822
  case GRPC_OP_RECV_CLOSE_ON_SERVER: {
1653
- /* Flag validation: currently allow no flags */
1823
+ // Flag validation: currently allow no flags
1654
1824
  if (op->flags != 0) {
1655
1825
  error = GRPC_CALL_ERROR_INVALID_FLAGS;
1656
1826
  goto done_with_error;
@@ -1679,7 +1849,7 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1679
1849
  bctl, grpc_schedule_on_exec_ctx);
1680
1850
  stream_op_payload->recv_trailing_metadata.recv_trailing_metadata_ready =
1681
1851
  &receiving_trailing_metadata_ready_;
1682
- ++num_recv_ops;
1852
+ pending_ops |= PendingOpMask(PendingOp::kRecvTrailingMetadata);
1683
1853
  break;
1684
1854
  }
1685
1855
  }
@@ -1689,9 +1859,9 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1689
1859
  if (!is_notify_tag_closure) {
1690
1860
  GPR_ASSERT(grpc_cq_begin_op(cq_, notify_tag));
1691
1861
  }
1692
- bctl->set_num_steps_to_complete((has_send_ops ? 1 : 0) + num_recv_ops);
1862
+ bctl->set_pending_ops(pending_ops);
1693
1863
 
1694
- if (has_send_ops) {
1864
+ if (pending_ops & PendingOpMask(PendingOp::kSends)) {
1695
1865
  GRPC_CLOSURE_INIT(
1696
1866
  &bctl->finish_batch_,
1697
1867
  [](void* bctl, grpc_error_handle error) {
@@ -1701,13 +1871,28 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1701
1871
  stream_op->on_complete = &bctl->finish_batch_;
1702
1872
  }
1703
1873
 
1874
+ call_tracer = static_cast<CallTracerAnnotationInterface*>(
1875
+ ContextGet(GRPC_CONTEXT_CALL_TRACER_ANNOTATION_INTERFACE));
1876
+ if ((IsTraceRecordCallopsEnabled() && call_tracer != nullptr)) {
1877
+ call_tracer->RecordAnnotation(absl::StrFormat(
1878
+ "BATCH:%p START:%s BATCH:%s (tag:%p)", bctl,
1879
+ PendingOpString(pending_ops).c_str(),
1880
+ grpc_transport_stream_op_batch_string(stream_op, true).c_str(),
1881
+ bctl->completion_data_.notify_tag.tag));
1882
+ }
1883
+ if (grpc_call_trace.enabled()) {
1884
+ gpr_log(GPR_DEBUG, "BATCH:%p START:%s BATCH:%s (tag:%p)", bctl,
1885
+ PendingOpString(pending_ops).c_str(),
1886
+ grpc_transport_stream_op_batch_string(stream_op, false).c_str(),
1887
+ bctl->completion_data_.notify_tag.tag);
1888
+ }
1704
1889
  ExecuteBatch(stream_op, &bctl->start_batch_);
1705
1890
 
1706
1891
  done:
1707
1892
  return error;
1708
1893
 
1709
1894
  done_with_error:
1710
- /* reverse any mutations that occurred */
1895
+ // reverse any mutations that occurred
1711
1896
  if (stream_op->send_initial_metadata) {
1712
1897
  sent_initial_metadata_ = false;
1713
1898
  send_initial_metadata_.Clear();
@@ -1740,59 +1925,1632 @@ void FilterStackCall::ContextSet(grpc_context_index elem, void* value,
1740
1925
  context_[elem].destroy = destroy;
1741
1926
  }
1742
1927
 
1743
- } // namespace grpc_core
1928
+ ///////////////////////////////////////////////////////////////////////////////
1929
+ // Metadata validation helpers
1744
1930
 
1745
- void* grpc_call_arena_alloc(grpc_call* call, size_t size) {
1746
- grpc_core::ExecCtx exec_ctx;
1747
- return grpc_core::Call::FromC(call)->arena()->Alloc(size);
1931
+ namespace {
1932
+ bool ValidateMetadata(size_t count, grpc_metadata* metadata) {
1933
+ for (size_t i = 0; i < count; i++) {
1934
+ grpc_metadata* md = &metadata[i];
1935
+ if (!GRPC_LOG_IF_ERROR("validate_metadata",
1936
+ grpc_validate_header_key_is_legal(md->key))) {
1937
+ return false;
1938
+ } else if (!grpc_is_binary_header_internal(md->key) &&
1939
+ !GRPC_LOG_IF_ERROR(
1940
+ "validate_metadata",
1941
+ grpc_validate_header_nonbin_value_is_legal(md->value))) {
1942
+ return false;
1943
+ } else if (GRPC_SLICE_LENGTH(md->value) >= UINT32_MAX) {
1944
+ // HTTP2 hpack encoding has a maximum limit.
1945
+ return false;
1946
+ }
1947
+ }
1948
+ return true;
1748
1949
  }
1950
+ } // namespace
1749
1951
 
1750
- size_t grpc_call_get_initial_size_estimate() {
1751
- return grpc_core::FilterStackCall::InitialSizeEstimate();
1752
- }
1952
+ ///////////////////////////////////////////////////////////////////////////////
1953
+ // PromiseBasedCall
1954
+ // Will be folded into Call once the promise conversion is done
1753
1955
 
1754
- grpc_error_handle grpc_call_create(grpc_call_create_args* args,
1755
- grpc_call** out_call) {
1756
- return grpc_core::FilterStackCall::Create(args, out_call);
1757
- }
1956
+ class PromiseBasedCall : public Call,
1957
+ public Party,
1958
+ public grpc_event_engine::experimental::EventEngine::
1959
+ Closure /* for deadlines */ {
1960
+ public:
1961
+ PromiseBasedCall(Arena* arena, uint32_t initial_external_refs,
1962
+ const grpc_call_create_args& args);
1758
1963
 
1759
- void grpc_call_set_completion_queue(grpc_call* call,
1760
- grpc_completion_queue* cq) {
1761
- grpc_core::Call::FromC(call)->SetCompletionQueue(cq);
1762
- }
1964
+ void ContextSet(grpc_context_index elem, void* value,
1965
+ void (*destroy)(void* value)) override;
1966
+ void* ContextGet(grpc_context_index elem) const override;
1967
+ void SetCompletionQueue(grpc_completion_queue* cq) override;
1968
+ bool Completed() final { return finished_.IsSet(); }
1969
+
1970
+ // Implementation of call refcounting: move this to DualRefCounted once we
1971
+ // don't need to maintain FilterStackCall compatibility
1972
+ void ExternalRef() final { InternalRef("external"); }
1973
+ void ExternalUnref() final { InternalUnref("external"); }
1974
+ void InternalRef(const char* reason) final {
1975
+ if (grpc_call_refcount_trace.enabled()) {
1976
+ gpr_log(GPR_DEBUG, "INTERNAL_REF:%p:%s", this, reason);
1977
+ }
1978
+ Party::IncrementRefCount();
1979
+ }
1980
+ void InternalUnref(const char* reason) final {
1981
+ if (grpc_call_refcount_trace.enabled()) {
1982
+ gpr_log(GPR_DEBUG, "INTERNAL_UNREF:%p:%s", this, reason);
1983
+ }
1984
+ Party::Unref();
1985
+ }
1763
1986
 
1764
- void grpc_call_ref(grpc_call* c) { grpc_core::Call::FromC(c)->ExternalRef(); }
1987
+ void RunInContext(absl::AnyInvocable<void()> fn) {
1988
+ Spawn(
1989
+ "run_in_context",
1990
+ [fn = std::move(fn)]() mutable {
1991
+ fn();
1992
+ return Empty{};
1993
+ },
1994
+ [](Empty) {});
1995
+ }
1765
1996
 
1766
- void grpc_call_unref(grpc_call* c) {
1767
- grpc_core::Call::FromC(c)->ExternalUnref();
1768
- }
1997
+ // This should return nullptr for the promise stack (and alternative means
1998
+ // for that functionality be invented)
1999
+ grpc_call_stack* call_stack() override { return nullptr; }
1769
2000
 
1770
- char* grpc_call_get_peer(grpc_call* call) {
1771
- return grpc_core::Call::FromC(call)->GetPeer();
1772
- }
2001
+ void UpdateDeadline(Timestamp deadline) ABSL_LOCKS_EXCLUDED(deadline_mu_);
2002
+ void ResetDeadline() ABSL_LOCKS_EXCLUDED(deadline_mu_);
2003
+ Timestamp deadline() {
2004
+ MutexLock lock(&deadline_mu_);
2005
+ return deadline_;
2006
+ }
1773
2007
 
1774
- grpc_call* grpc_call_from_top_element(grpc_call_element* surface_element) {
1775
- return grpc_core::FilterStackCall::FromTopElem(surface_element)->c_ptr();
1776
- }
2008
+ // Implementation of EventEngine::Closure, called when deadline expires
2009
+ void Run() override;
1777
2010
 
1778
- grpc_call_error grpc_call_cancel(grpc_call* call, void* reserved) {
1779
- GRPC_API_TRACE("grpc_call_cancel(call=%p, reserved=%p)", 2, (call, reserved));
1780
- GPR_ASSERT(reserved == nullptr);
1781
- grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
1782
- grpc_core::ExecCtx exec_ctx;
1783
- grpc_core::Call::FromC(call)->CancelWithError(GRPC_ERROR_CANCELLED);
1784
- return GRPC_CALL_OK;
1785
- }
2011
+ virtual ServerCallContext* server_call_context() { return nullptr; }
2012
+ bool failed_before_recv_message() const final {
2013
+ return failed_before_recv_message_.load(std::memory_order_relaxed);
2014
+ }
1786
2015
 
1787
- grpc_call_error grpc_call_cancel_with_status(grpc_call* c,
1788
- grpc_status_code status,
1789
- const char* description,
1790
- void* reserved) {
1791
- GRPC_API_TRACE(
1792
- "grpc_call_cancel_with_status("
1793
- "c=%p, status=%d, description=%s, reserved=%p)",
1794
- 4, (c, (int)status, description, reserved));
1795
- GPR_ASSERT(reserved == nullptr);
2016
+ grpc_event_engine::experimental::EventEngine* event_engine() const final {
2017
+ return channel()->event_engine();
2018
+ }
2019
+
2020
+ using Call::arena;
2021
+
2022
+ protected:
2023
+ class ScopedContext
2024
+ : public ScopedActivity,
2025
+ public BatchBuilder,
2026
+ public promise_detail::Context<BatchBuilder>,
2027
+ public promise_detail::Context<Arena>,
2028
+ public promise_detail::Context<grpc_call_context_element>,
2029
+ public promise_detail::Context<CallContext>,
2030
+ public promise_detail::Context<CallFinalization> {
2031
+ public:
2032
+ explicit ScopedContext(PromiseBasedCall* call)
2033
+ : ScopedActivity(call),
2034
+ BatchBuilder(&call->batch_payload_),
2035
+ promise_detail::Context<BatchBuilder>(this),
2036
+ promise_detail::Context<Arena>(call->arena()),
2037
+ promise_detail::Context<grpc_call_context_element>(call->context_),
2038
+ promise_detail::Context<CallContext>(&call->call_context_),
2039
+ promise_detail::Context<CallFinalization>(&call->finalization_) {}
2040
+ };
2041
+
2042
+ class Completion {
2043
+ public:
2044
+ Completion() : index_(kNullIndex) {}
2045
+ ~Completion() { GPR_ASSERT(index_ == kNullIndex); }
2046
+ explicit Completion(uint8_t index) : index_(index) {}
2047
+ Completion(const Completion& other) = delete;
2048
+ Completion& operator=(const Completion& other) = delete;
2049
+ Completion(Completion&& other) noexcept : index_(other.index_) {
2050
+ other.index_ = kNullIndex;
2051
+ }
2052
+ Completion& operator=(Completion&& other) noexcept {
2053
+ GPR_ASSERT(index_ == kNullIndex);
2054
+ index_ = other.index_;
2055
+ other.index_ = kNullIndex;
2056
+ return *this;
2057
+ }
2058
+
2059
+ uint8_t index() const { return index_; }
2060
+ uint8_t TakeIndex() { return std::exchange(index_, kNullIndex); }
2061
+ bool has_value() const { return index_ != kNullIndex; }
2062
+
2063
+ private:
2064
+ enum : uint8_t { kNullIndex = 0xff };
2065
+ uint8_t index_;
2066
+ };
2067
+
2068
+ ~PromiseBasedCall() override {
2069
+ if (cq_) GRPC_CQ_INTERNAL_UNREF(cq_, "bind");
2070
+ for (int i = 0; i < GRPC_CONTEXT_COUNT; i++) {
2071
+ if (context_[i].destroy) {
2072
+ context_[i].destroy(context_[i].value);
2073
+ }
2074
+ }
2075
+ }
2076
+
2077
+ // Enumerates why a Completion is still pending
2078
+ enum class PendingOp {
2079
+ // We're in the midst of starting a batch of operations
2080
+ kStartingBatch = 0,
2081
+ // The following correspond with the batch operations from above
2082
+ kSendInitialMetadata,
2083
+ kReceiveInitialMetadata,
2084
+ kReceiveStatusOnClient,
2085
+ kReceiveCloseOnServer = kReceiveStatusOnClient,
2086
+ kSendMessage,
2087
+ kReceiveMessage,
2088
+ kSendStatusFromServer,
2089
+ kSendCloseFromClient = kSendStatusFromServer,
2090
+ };
2091
+
2092
+ bool RunParty() override {
2093
+ ScopedContext ctx(this);
2094
+ return Party::RunParty();
2095
+ }
2096
+
2097
+ const char* PendingOpString(PendingOp reason) const {
2098
+ switch (reason) {
2099
+ case PendingOp::kStartingBatch:
2100
+ return "StartingBatch";
2101
+ case PendingOp::kSendInitialMetadata:
2102
+ return "SendInitialMetadata";
2103
+ case PendingOp::kReceiveInitialMetadata:
2104
+ return "ReceiveInitialMetadata";
2105
+ case PendingOp::kReceiveStatusOnClient:
2106
+ return is_client() ? "ReceiveStatusOnClient" : "ReceiveCloseOnServer";
2107
+ case PendingOp::kSendMessage:
2108
+ return "SendMessage";
2109
+ case PendingOp::kReceiveMessage:
2110
+ return "ReceiveMessage";
2111
+ case PendingOp::kSendStatusFromServer:
2112
+ return is_client() ? "SendCloseFromClient" : "SendStatusFromServer";
2113
+ }
2114
+ return "Unknown";
2115
+ }
2116
+
2117
+ static constexpr uint32_t PendingOpBit(PendingOp reason) {
2118
+ return 1 << static_cast<int>(reason);
2119
+ }
2120
+
2121
+ // Begin work on a completion, recording the tag/closure to notify.
2122
+ // Use the op selected in \a ops to determine the index to allocate into.
2123
+ // Starts the "StartingBatch" PendingOp immediately.
2124
+ // Assumes at least one operation in \a ops.
2125
+ Completion StartCompletion(void* tag, bool is_closure, const grpc_op* ops);
2126
+ // Add one pending op to the completion, and return it.
2127
+ Completion AddOpToCompletion(const Completion& completion, PendingOp reason);
2128
+ // Stringify a completion
2129
+ std::string CompletionString(const Completion& completion) const {
2130
+ return completion.has_value()
2131
+ ? completion_info_[completion.index()].pending.ToString(this)
2132
+ : "no-completion";
2133
+ }
2134
+ // Finish one op on the completion. Must have been previously been added.
2135
+ // The completion as a whole finishes when all pending ops finish.
2136
+ void FinishOpOnCompletion(Completion* completion, PendingOp reason);
2137
+ // Mark the completion as failed. Does not finish it.
2138
+ void FailCompletion(const Completion& completion,
2139
+ SourceLocation source_location = {});
2140
+ // Mark the completion as infallible. Overrides FailCompletion to report
2141
+ // success always.
2142
+ void ForceCompletionSuccess(const Completion& completion);
2143
+ // Accept the stats from the context (call once we have proof the transport is
2144
+ // done with them).
2145
+ // Right now this means that promise based calls do not record correct stats
2146
+ // with census if they are cancelled.
2147
+ // TODO(ctiller): this should be remedied before promise based calls are
2148
+ // dexperimentalized.
2149
+ void AcceptTransportStatsFromContext() {
2150
+ final_stats_ = *call_context_.call_stats();
2151
+ }
2152
+
2153
+ grpc_completion_queue* cq() { return cq_; }
2154
+
2155
+ void CToMetadata(grpc_metadata* metadata, size_t count,
2156
+ grpc_metadata_batch* batch);
2157
+
2158
+ // At the end of the call run any finalization actions.
2159
+ void RunFinalization(grpc_status_code status, const char* status_details) {
2160
+ grpc_call_final_info final_info;
2161
+ final_info.stats = final_stats_;
2162
+ final_info.final_status = status;
2163
+ final_info.error_string = status_details;
2164
+ final_info.stats.latency =
2165
+ gpr_cycle_counter_sub(gpr_get_cycle_counter(), start_time());
2166
+ finalization_.Run(&final_info);
2167
+ }
2168
+
2169
+ std::string PresentAndCompletionText(const char* caption, bool has,
2170
+ const Completion& completion) const {
2171
+ if (has) {
2172
+ if (completion.has_value()) {
2173
+ return absl::StrCat(caption, ":", CompletionString(completion), " ");
2174
+ } else {
2175
+ return absl::StrCat(caption,
2176
+ ":!!BUG:operation is present, no completion!! ");
2177
+ }
2178
+ } else {
2179
+ if (!completion.has_value()) {
2180
+ return "";
2181
+ } else {
2182
+ return absl::StrCat(caption, ":no-op:", CompletionString(completion),
2183
+ " ");
2184
+ }
2185
+ }
2186
+ }
2187
+
2188
+ // Spawn a job that will first do FirstPromise then receive a message
2189
+ template <typename FirstPromise>
2190
+ void StartRecvMessage(const grpc_op& op, const Completion& completion,
2191
+ FirstPromise first,
2192
+ PipeReceiver<MessageHandle>* receiver,
2193
+ bool cancel_on_error, Party::BulkSpawner& spawner);
2194
+ void StartSendMessage(const grpc_op& op, const Completion& completion,
2195
+ PipeSender<MessageHandle>* sender,
2196
+ Party::BulkSpawner& spawner);
2197
+
2198
+ void set_completed() { finished_.Set(); }
2199
+
2200
+ // Returns a promise that resolves to Empty whenever the call is completed.
2201
+ auto finished() { return finished_.Wait(); }
2202
+
2203
+ // Returns a promise that resolves to Empty whenever there is no outstanding
2204
+ // send operation
2205
+ auto WaitForSendingStarted() {
2206
+ return [this]() -> Poll<Empty> {
2207
+ int n = sends_queued_.load(std::memory_order_relaxed);
2208
+ if (grpc_call_trace.enabled()) {
2209
+ gpr_log(GPR_DEBUG, "%s[call] WaitForSendingStarted n=%d",
2210
+ DebugTag().c_str(), n);
2211
+ }
2212
+ if (n != 0) return waiting_for_queued_sends_.pending();
2213
+ return Empty{};
2214
+ };
2215
+ }
2216
+
2217
+ // Mark that a send has been queued - blocks sending trailing metadata.
2218
+ void QueueSend() {
2219
+ if (grpc_call_trace.enabled()) {
2220
+ gpr_log(GPR_DEBUG, "%s[call] QueueSend", DebugTag().c_str());
2221
+ }
2222
+ sends_queued_.fetch_add(1, std::memory_order_relaxed);
2223
+ }
2224
+ // Mark that a send has been dequeued - allows sending trailing metadata once
2225
+ // zero sends are queued.
2226
+ void EnactSend() {
2227
+ if (grpc_call_trace.enabled()) {
2228
+ gpr_log(GPR_DEBUG, "%s[call] EnactSend", DebugTag().c_str());
2229
+ }
2230
+ if (1 == sends_queued_.fetch_sub(1, std::memory_order_relaxed)) {
2231
+ waiting_for_queued_sends_.Wake();
2232
+ }
2233
+ }
2234
+
2235
+ private:
2236
+ union CompletionInfo {
2237
+ static constexpr uint32_t kOpFailed = 0x8000'0000u;
2238
+ static constexpr uint32_t kOpForceSuccess = 0x4000'0000u;
2239
+ CompletionInfo() {}
2240
+ enum CompletionState {
2241
+ kPending,
2242
+ kSuccess,
2243
+ kFailure,
2244
+ };
2245
+ struct Pending {
2246
+ // Bitmask of PendingOps at the bottom, and kOpFailed, kOpForceSuccess at
2247
+ // the top.
2248
+ std::atomic<uint32_t> state;
2249
+ bool is_closure;
2250
+ // True if this completion was for a recv_message op.
2251
+ // In that case if the completion as a whole fails we need to cleanup the
2252
+ // returned message.
2253
+ bool is_recv_message;
2254
+ void* tag;
2255
+
2256
+ void Start(bool is_closure, void* tag) {
2257
+ this->is_closure = is_closure;
2258
+ this->is_recv_message = false;
2259
+ this->tag = tag;
2260
+ state.store(PendingOpBit(PendingOp::kStartingBatch),
2261
+ std::memory_order_release);
2262
+ }
2263
+
2264
+ void AddPendingBit(PendingOp reason) {
2265
+ if (reason == PendingOp::kReceiveMessage) is_recv_message = true;
2266
+ auto prev =
2267
+ state.fetch_or(PendingOpBit(reason), std::memory_order_relaxed);
2268
+ GPR_ASSERT((prev & PendingOpBit(reason)) == 0);
2269
+ }
2270
+
2271
+ CompletionState RemovePendingBit(PendingOp reason) {
2272
+ const uint32_t mask = ~PendingOpBit(reason);
2273
+ auto prev = state.fetch_and(mask, std::memory_order_acq_rel);
2274
+ GPR_ASSERT((prev & PendingOpBit(reason)) != 0);
2275
+ switch (prev & mask) {
2276
+ case kOpFailed:
2277
+ return kFailure;
2278
+ case kOpFailed | kOpForceSuccess:
2279
+ case kOpForceSuccess:
2280
+ case 0:
2281
+ return kSuccess;
2282
+ default:
2283
+ return kPending;
2284
+ }
2285
+ }
2286
+
2287
+ void MarkFailed() {
2288
+ state.fetch_or(kOpFailed, std::memory_order_relaxed);
2289
+ }
2290
+
2291
+ void MarkForceSuccess() {
2292
+ state.fetch_or(kOpForceSuccess, std::memory_order_relaxed);
2293
+ }
2294
+
2295
+ std::string ToString(const PromiseBasedCall* call) const {
2296
+ auto state = this->state.load(std::memory_order_relaxed);
2297
+ std::vector<absl::string_view> pending_ops;
2298
+ for (size_t i = 0; i < 24; i++) {
2299
+ if (state & (1u << i)) {
2300
+ pending_ops.push_back(
2301
+ call->PendingOpString(static_cast<PendingOp>(i)));
2302
+ }
2303
+ }
2304
+ return absl::StrFormat("{%s}%s:tag=%p", absl::StrJoin(pending_ops, ","),
2305
+ (state & kOpForceSuccess) ? ":force-success"
2306
+ : (state & kOpFailed) ? ":failed"
2307
+ : ":success",
2308
+ tag);
2309
+ }
2310
+ } pending;
2311
+ grpc_cq_completion completion;
2312
+ };
2313
+
2314
+ void PartyOver() override {
2315
+ {
2316
+ ScopedContext ctx(this);
2317
+ CancelRemainingParticipants();
2318
+ arena()->DestroyManagedNewObjects();
2319
+ }
2320
+ DeleteThis();
2321
+ }
2322
+
2323
+ CallContext call_context_{this};
2324
+
2325
+ // Contexts for various subsystems (security, tracing, ...).
2326
+ grpc_call_context_element context_[GRPC_CONTEXT_COUNT] = {};
2327
+ grpc_completion_queue* cq_;
2328
+ CompletionInfo completion_info_[6];
2329
+ grpc_call_stats final_stats_{};
2330
+ CallFinalization finalization_;
2331
+ // Current deadline.
2332
+ Mutex deadline_mu_;
2333
+ Timestamp deadline_ ABSL_GUARDED_BY(deadline_mu_) = Timestamp::InfFuture();
2334
+ grpc_event_engine::experimental::EventEngine::TaskHandle ABSL_GUARDED_BY(
2335
+ deadline_mu_) deadline_task_;
2336
+ ExternallyObservableLatch<void> finished_;
2337
+ // Non-zero with an outstanding GRPC_OP_SEND_INITIAL_METADATA or
2338
+ // GRPC_OP_SEND_MESSAGE (one count each), and 0 once those payloads have been
2339
+ // pushed onto the outgoing pipe.
2340
+ std::atomic<uint8_t> sends_queued_{0};
2341
+ std::atomic<bool> failed_before_recv_message_{false};
2342
+ // Waiter for when sends_queued_ becomes 0.
2343
+ IntraActivityWaiter waiting_for_queued_sends_;
2344
+ grpc_byte_buffer** recv_message_ = nullptr;
2345
+ grpc_transport_stream_op_batch_payload batch_payload_{context_};
2346
+ };
2347
+
2348
+ template <typename T>
2349
+ grpc_error_handle MakePromiseBasedCall(grpc_call_create_args* args,
2350
+ grpc_call** out_call) {
2351
+ Channel* channel = args->channel.get();
2352
+
2353
+ auto alloc = Arena::CreateWithAlloc(channel->CallSizeEstimate(), sizeof(T),
2354
+ channel->allocator());
2355
+ PromiseBasedCall* call = new (alloc.second) T(alloc.first, args);
2356
+ *out_call = call->c_ptr();
2357
+ GPR_DEBUG_ASSERT(Call::FromC(*out_call) == call);
2358
+ return absl::OkStatus();
2359
+ }
2360
+
2361
+ PromiseBasedCall::PromiseBasedCall(Arena* arena, uint32_t initial_external_refs,
2362
+ const grpc_call_create_args& args)
2363
+ : Call(arena, args.server_transport_data == nullptr, args.send_deadline,
2364
+ args.channel->Ref()),
2365
+ Party(arena, initial_external_refs),
2366
+ cq_(args.cq) {
2367
+ if (args.cq != nullptr) {
2368
+ GRPC_CQ_INTERNAL_REF(args.cq, "bind");
2369
+ }
2370
+ }
2371
+
2372
+ void PromiseBasedCall::CToMetadata(grpc_metadata* metadata, size_t count,
2373
+ grpc_metadata_batch* b) {
2374
+ for (size_t i = 0; i < count; i++) {
2375
+ grpc_metadata* md = &metadata[i];
2376
+ auto key = StringViewFromSlice(md->key);
2377
+ // Filter "content-length metadata"
2378
+ if (key == "content-length") continue;
2379
+ b->Append(key, Slice(CSliceRef(md->value)),
2380
+ [md](absl::string_view error, const Slice& value) {
2381
+ gpr_log(GPR_DEBUG, "Append error: %s",
2382
+ absl::StrCat("key=", StringViewFromSlice(md->key),
2383
+ " error=", error,
2384
+ " value=", value.as_string_view())
2385
+ .c_str());
2386
+ });
2387
+ }
2388
+ }
2389
+
2390
+ void PromiseBasedCall::ContextSet(grpc_context_index elem, void* value,
2391
+ void (*destroy)(void*)) {
2392
+ if (context_[elem].destroy != nullptr) {
2393
+ context_[elem].destroy(context_[elem].value);
2394
+ }
2395
+ context_[elem].value = value;
2396
+ context_[elem].destroy = destroy;
2397
+ }
2398
+
2399
+ void* PromiseBasedCall::ContextGet(grpc_context_index elem) const {
2400
+ return context_[elem].value;
2401
+ }
2402
+
2403
+ PromiseBasedCall::Completion PromiseBasedCall::StartCompletion(
2404
+ void* tag, bool is_closure, const grpc_op* ops) {
2405
+ Completion c(BatchSlotForOp(ops[0].op));
2406
+ if (!is_closure) {
2407
+ grpc_cq_begin_op(cq(), tag);
2408
+ }
2409
+ completion_info_[c.index()].pending.Start(is_closure, tag);
2410
+ if (grpc_call_trace.enabled()) {
2411
+ gpr_log(GPR_INFO, "%s[call] StartCompletion %s", DebugTag().c_str(),
2412
+ CompletionString(c).c_str());
2413
+ }
2414
+ return c;
2415
+ }
2416
+
2417
+ PromiseBasedCall::Completion PromiseBasedCall::AddOpToCompletion(
2418
+ const Completion& completion, PendingOp reason) {
2419
+ if (grpc_call_trace.enabled()) {
2420
+ gpr_log(GPR_INFO, "%s[call] AddOpToCompletion %s %s", DebugTag().c_str(),
2421
+ CompletionString(completion).c_str(), PendingOpString(reason));
2422
+ }
2423
+ GPR_ASSERT(completion.has_value());
2424
+ completion_info_[completion.index()].pending.AddPendingBit(reason);
2425
+ return Completion(completion.index());
2426
+ }
2427
+
2428
+ void PromiseBasedCall::FailCompletion(const Completion& completion,
2429
+ SourceLocation location) {
2430
+ if (grpc_call_trace.enabled()) {
2431
+ gpr_log(location.file(), location.line(), GPR_LOG_SEVERITY_ERROR,
2432
+ "%s[call] FailCompletion %s", DebugTag().c_str(),
2433
+ CompletionString(completion).c_str());
2434
+ }
2435
+ completion_info_[completion.index()].pending.MarkFailed();
2436
+ }
2437
+
2438
+ void PromiseBasedCall::ForceCompletionSuccess(const Completion& completion) {
2439
+ completion_info_[completion.index()].pending.MarkForceSuccess();
2440
+ }
2441
+
2442
+ void PromiseBasedCall::FinishOpOnCompletion(Completion* completion,
2443
+ PendingOp reason) {
2444
+ if (grpc_call_trace.enabled()) {
2445
+ gpr_log(GPR_INFO, "%s[call] FinishOpOnCompletion completion:%s finish:%s",
2446
+ DebugTag().c_str(), CompletionString(*completion).c_str(),
2447
+ PendingOpString(reason));
2448
+ }
2449
+ const uint8_t i = completion->TakeIndex();
2450
+ GPR_ASSERT(i < GPR_ARRAY_SIZE(completion_info_));
2451
+ CompletionInfo::Pending& pending = completion_info_[i].pending;
2452
+ bool success;
2453
+ switch (pending.RemovePendingBit(reason)) {
2454
+ case CompletionInfo::kPending:
2455
+ return; // Early out
2456
+ case CompletionInfo::kSuccess:
2457
+ success = true;
2458
+ break;
2459
+ case CompletionInfo::kFailure:
2460
+ success = false;
2461
+ break;
2462
+ }
2463
+ if (pending.is_recv_message && !success && *recv_message_ != nullptr) {
2464
+ grpc_byte_buffer_destroy(*recv_message_);
2465
+ *recv_message_ = nullptr;
2466
+ }
2467
+ auto error = success ? absl::OkStatus() : absl::CancelledError();
2468
+ if (pending.is_closure) {
2469
+ ExecCtx::Run(DEBUG_LOCATION, static_cast<grpc_closure*>(pending.tag),
2470
+ error);
2471
+ } else {
2472
+ grpc_cq_end_op(
2473
+ cq(), pending.tag, error, [](void*, grpc_cq_completion*) {}, nullptr,
2474
+ &completion_info_[i].completion);
2475
+ }
2476
+ }
2477
+
2478
+ void PromiseBasedCall::SetCompletionQueue(grpc_completion_queue* cq) {
2479
+ cq_ = cq;
2480
+ GRPC_CQ_INTERNAL_REF(cq, "bind");
2481
+ }
2482
+
2483
+ void PromiseBasedCall::UpdateDeadline(Timestamp deadline) {
2484
+ MutexLock lock(&deadline_mu_);
2485
+ if (grpc_call_trace.enabled()) {
2486
+ gpr_log(GPR_DEBUG, "%s[call] UpdateDeadline from=%s to=%s",
2487
+ DebugTag().c_str(), deadline_.ToString().c_str(),
2488
+ deadline.ToString().c_str());
2489
+ }
2490
+ if (deadline >= deadline_) return;
2491
+ auto* const event_engine = channel()->event_engine();
2492
+ if (deadline_ != Timestamp::InfFuture()) {
2493
+ if (!event_engine->Cancel(deadline_task_)) return;
2494
+ } else {
2495
+ InternalRef("deadline");
2496
+ }
2497
+ deadline_ = deadline;
2498
+ deadline_task_ = event_engine->RunAfter(deadline - Timestamp::Now(), this);
2499
+ }
2500
+
2501
+ void PromiseBasedCall::ResetDeadline() {
2502
+ MutexLock lock(&deadline_mu_);
2503
+ if (deadline_ == Timestamp::InfFuture()) return;
2504
+ auto* const event_engine = channel()->event_engine();
2505
+ if (!event_engine->Cancel(deadline_task_)) return;
2506
+ deadline_ = Timestamp::InfFuture();
2507
+ InternalUnref("deadline");
2508
+ }
2509
+
2510
+ void PromiseBasedCall::Run() {
2511
+ ApplicationCallbackExecCtx callback_exec_ctx;
2512
+ ExecCtx exec_ctx;
2513
+ CancelWithError(absl::DeadlineExceededError("Deadline exceeded"));
2514
+ InternalUnref("deadline");
2515
+ }
2516
+
2517
+ void PromiseBasedCall::StartSendMessage(const grpc_op& op,
2518
+ const Completion& completion,
2519
+ PipeSender<MessageHandle>* sender,
2520
+ Party::BulkSpawner& spawner) {
2521
+ QueueSend();
2522
+ SliceBuffer send;
2523
+ grpc_slice_buffer_swap(
2524
+ &op.data.send_message.send_message->data.raw.slice_buffer,
2525
+ send.c_slice_buffer());
2526
+ auto msg = arena()->MakePooled<Message>(std::move(send), op.flags);
2527
+ spawner.Spawn(
2528
+ "call_send_message",
2529
+ [this, sender, msg = std::move(msg)]() mutable {
2530
+ EnactSend();
2531
+ return sender->Push(std::move(msg));
2532
+ },
2533
+ [this, completion = AddOpToCompletion(
2534
+ completion, PendingOp::kSendMessage)](bool result) mutable {
2535
+ if (grpc_call_trace.enabled()) {
2536
+ gpr_log(GPR_DEBUG, "%sSendMessage completes %s", DebugTag().c_str(),
2537
+ result ? "successfully" : "with failure");
2538
+ }
2539
+ if (!result) FailCompletion(completion);
2540
+ FinishOpOnCompletion(&completion, PendingOp::kSendMessage);
2541
+ });
2542
+ }
2543
+
2544
+ template <typename FirstPromiseFactory>
2545
+ void PromiseBasedCall::StartRecvMessage(
2546
+ const grpc_op& op, const Completion& completion,
2547
+ FirstPromiseFactory first_promise_factory,
2548
+ PipeReceiver<MessageHandle>* receiver, bool cancel_on_error,
2549
+ Party::BulkSpawner& spawner) {
2550
+ if (grpc_call_trace.enabled()) {
2551
+ gpr_log(GPR_INFO, "%s[call] Start RecvMessage: %s", DebugTag().c_str(),
2552
+ CompletionString(completion).c_str());
2553
+ }
2554
+ recv_message_ = op.data.recv_message.recv_message;
2555
+ spawner.Spawn(
2556
+ "call_recv_message",
2557
+ [first_promise_factory = std::move(first_promise_factory), receiver]() {
2558
+ return Seq(first_promise_factory(), receiver->Next());
2559
+ },
2560
+ [this, cancel_on_error,
2561
+ completion = AddOpToCompletion(completion, PendingOp::kReceiveMessage)](
2562
+ NextResult<MessageHandle> result) mutable {
2563
+ if (result.has_value()) {
2564
+ MessageHandle& message = *result;
2565
+ NoteLastMessageFlags(message->flags());
2566
+ if ((message->flags() & GRPC_WRITE_INTERNAL_COMPRESS) &&
2567
+ (incoming_compression_algorithm() != GRPC_COMPRESS_NONE)) {
2568
+ *recv_message_ = grpc_raw_compressed_byte_buffer_create(
2569
+ nullptr, 0, incoming_compression_algorithm());
2570
+ } else {
2571
+ *recv_message_ = grpc_raw_byte_buffer_create(nullptr, 0);
2572
+ }
2573
+ grpc_slice_buffer_move_into(message->payload()->c_slice_buffer(),
2574
+ &(*recv_message_)->data.raw.slice_buffer);
2575
+ if (grpc_call_trace.enabled()) {
2576
+ gpr_log(GPR_INFO,
2577
+ "%s[call] RecvMessage: outstanding_recv "
2578
+ "finishes: received %" PRIdPTR " byte message",
2579
+ DebugTag().c_str(),
2580
+ (*recv_message_)->data.raw.slice_buffer.length);
2581
+ }
2582
+ } else if (result.cancelled()) {
2583
+ if (grpc_call_trace.enabled()) {
2584
+ gpr_log(GPR_INFO,
2585
+ "%s[call] RecvMessage: outstanding_recv "
2586
+ "finishes: received end-of-stream with error",
2587
+ DebugTag().c_str());
2588
+ }
2589
+ failed_before_recv_message_.store(true);
2590
+ FailCompletion(completion);
2591
+ if (cancel_on_error) CancelWithError(absl::CancelledError());
2592
+ *recv_message_ = nullptr;
2593
+ } else {
2594
+ if (grpc_call_trace.enabled()) {
2595
+ gpr_log(GPR_INFO,
2596
+ "%s[call] RecvMessage: outstanding_recv "
2597
+ "finishes: received end-of-stream",
2598
+ DebugTag().c_str());
2599
+ }
2600
+ *recv_message_ = nullptr;
2601
+ }
2602
+ FinishOpOnCompletion(&completion, PendingOp::kReceiveMessage);
2603
+ });
2604
+ }
2605
+
2606
+ ///////////////////////////////////////////////////////////////////////////////
2607
+ // CallContext
2608
+
2609
+ void CallContext::RunInContext(absl::AnyInvocable<void()> fn) {
2610
+ call_->RunInContext(std::move(fn));
2611
+ }
2612
+
2613
+ void CallContext::IncrementRefCount(const char* reason) {
2614
+ call_->InternalRef(reason);
2615
+ }
2616
+
2617
+ void CallContext::Unref(const char* reason) { call_->InternalUnref(reason); }
2618
+
2619
+ void CallContext::UpdateDeadline(Timestamp deadline) {
2620
+ call_->UpdateDeadline(deadline);
2621
+ }
2622
+
2623
+ Timestamp CallContext::deadline() const { return call_->deadline(); }
2624
+
2625
+ ServerCallContext* CallContext::server_call_context() {
2626
+ return call_->server_call_context();
2627
+ }
2628
+
2629
+ ///////////////////////////////////////////////////////////////////////////////
2630
+ // PublishMetadataArray
2631
+
2632
+ namespace {
2633
+ void PublishMetadataArray(grpc_metadata_batch* md, grpc_metadata_array* array) {
2634
+ const auto md_count = md->count();
2635
+ if (md_count > array->capacity) {
2636
+ array->capacity =
2637
+ std::max(array->capacity + md->count(), array->capacity * 3 / 2);
2638
+ array->metadata = static_cast<grpc_metadata*>(
2639
+ gpr_realloc(array->metadata, sizeof(grpc_metadata) * array->capacity));
2640
+ }
2641
+ PublishToAppEncoder encoder(array);
2642
+ md->Encode(&encoder);
2643
+ }
2644
+ } // namespace
2645
+
2646
+ ///////////////////////////////////////////////////////////////////////////////
2647
+ // ClientPromiseBasedCall
2648
+
2649
+ #ifdef GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_CLIENT_CALL
2650
+ class ClientPromiseBasedCall final : public PromiseBasedCall {
2651
+ public:
2652
+ ClientPromiseBasedCall(Arena* arena, grpc_call_create_args* args)
2653
+ : PromiseBasedCall(arena, 1, *args) {
2654
+ global_stats().IncrementClientCallsCreated();
2655
+ if (args->cq != nullptr) {
2656
+ GPR_ASSERT(args->pollset_set_alternative == nullptr &&
2657
+ "Only one of 'cq' and 'pollset_set_alternative' should be "
2658
+ "non-nullptr.");
2659
+ polling_entity_.Set(
2660
+ grpc_polling_entity_create_from_pollset(grpc_cq_pollset(args->cq)));
2661
+ }
2662
+ if (args->pollset_set_alternative != nullptr) {
2663
+ polling_entity_.Set(grpc_polling_entity_create_from_pollset_set(
2664
+ args->pollset_set_alternative));
2665
+ }
2666
+ ScopedContext context(this);
2667
+ send_initial_metadata_ =
2668
+ GetContext<Arena>()->MakePooled<ClientMetadata>(GetContext<Arena>());
2669
+ send_initial_metadata_->Set(HttpPathMetadata(), std::move(*args->path));
2670
+ if (args->authority.has_value()) {
2671
+ send_initial_metadata_->Set(HttpAuthorityMetadata(),
2672
+ std::move(*args->authority));
2673
+ }
2674
+ if (auto* channelz_channel = channel()->channelz_node()) {
2675
+ channelz_channel->RecordCallStarted();
2676
+ }
2677
+ if (args->send_deadline != Timestamp::InfFuture()) {
2678
+ UpdateDeadline(args->send_deadline);
2679
+ }
2680
+ }
2681
+
2682
+ ~ClientPromiseBasedCall() override {
2683
+ ScopedContext context(this);
2684
+ send_initial_metadata_.reset();
2685
+ // Need to destroy the pipes under the ScopedContext above, so we
2686
+ // move them out here and then allow the destructors to run at
2687
+ // end of scope, but before context.
2688
+ auto c2s = std::move(client_to_server_messages_);
2689
+ auto s2c = std::move(server_to_client_messages_);
2690
+ auto sim = std::move(server_initial_metadata_);
2691
+ }
2692
+
2693
+ void CancelWithError(absl::Status error) override {
2694
+ if (!started_.exchange(true, std::memory_order_relaxed)) {
2695
+ // Initial metadata not sent yet, so we can just fail the call.
2696
+ Spawn(
2697
+ "cancel_before_initial_metadata",
2698
+ [error = std::move(error), this]() {
2699
+ server_to_client_messages_.sender.Close();
2700
+ Finish(ServerMetadataFromStatus(error));
2701
+ return Empty{};
2702
+ },
2703
+ [](Empty) {});
2704
+ } else {
2705
+ Spawn(
2706
+ "cancel_with_error",
2707
+ [error = std::move(error), this]() {
2708
+ if (!cancel_error_.is_set()) {
2709
+ cancel_error_.Set(ServerMetadataFromStatus(error));
2710
+ }
2711
+ return Empty{};
2712
+ },
2713
+ [](Empty) {});
2714
+ }
2715
+ }
2716
+ absl::string_view GetServerAuthority() const override { abort(); }
2717
+ bool is_trailers_only() const override { return is_trailers_only_; }
2718
+
2719
+ grpc_call_error StartBatch(const grpc_op* ops, size_t nops, void* notify_tag,
2720
+ bool is_notify_tag_closure) override;
2721
+
2722
+ std::string DebugTag() const override {
2723
+ return absl::StrFormat("CLIENT_CALL[%p]: ", this);
2724
+ }
2725
+
2726
+ private:
2727
+ // Finish the call with the given status/trailing metadata.
2728
+ void Finish(ServerMetadataHandle trailing_metadata);
2729
+ // Validate that a set of ops is valid for a client call.
2730
+ grpc_call_error ValidateBatch(const grpc_op* ops, size_t nops) const;
2731
+ // Commit a valid batch of operations to be executed.
2732
+ void CommitBatch(const grpc_op* ops, size_t nops,
2733
+ const Completion& completion);
2734
+ // Start the underlying promise.
2735
+ void StartPromise(ClientMetadataHandle client_initial_metadata,
2736
+ const Completion& completion, Party::BulkSpawner& spawner);
2737
+ // Start receiving initial metadata
2738
+ void StartRecvInitialMetadata(grpc_metadata_array* array,
2739
+ const Completion& completion,
2740
+ Party::BulkSpawner& spawner);
2741
+ void StartRecvStatusOnClient(
2742
+ const Completion& completion,
2743
+ grpc_op::grpc_op_data::grpc_op_recv_status_on_client op_args,
2744
+ Party::BulkSpawner& spawner);
2745
+ // Publish status out to the application.
2746
+ void PublishStatus(
2747
+ grpc_op::grpc_op_data::grpc_op_recv_status_on_client op_args,
2748
+ ServerMetadataHandle trailing_metadata);
2749
+ // Publish server initial metadata out to the application.
2750
+ void PublishInitialMetadata(ServerMetadata* metadata);
2751
+
2752
+ ClientMetadataHandle send_initial_metadata_;
2753
+ Pipe<ServerMetadataHandle> server_initial_metadata_{arena()};
2754
+ Latch<ServerMetadataHandle> server_trailing_metadata_;
2755
+ Latch<ServerMetadataHandle> cancel_error_;
2756
+ Latch<grpc_polling_entity> polling_entity_;
2757
+ Pipe<MessageHandle> client_to_server_messages_{arena()};
2758
+ Pipe<MessageHandle> server_to_client_messages_{arena()};
2759
+ bool is_trailers_only_;
2760
+ // True once the promise for the call is started.
2761
+ // This corresponds to sending initial metadata, or cancelling before doing
2762
+ // so.
2763
+ // In the latter case real world code sometimes does not sent the initial
2764
+ // metadata, and so gating based upon that does not work out.
2765
+ std::atomic<bool> started_{false};
2766
+ // TODO(ctiller): delete when we remove the filter based API (may require some
2767
+ // cleanup in wrapped languages: they depend on this to hold slice refs)
2768
+ ServerMetadataHandle recv_initial_metadata_;
2769
+ ServerMetadataHandle recv_trailing_metadata_;
2770
+ };
2771
+
2772
+ void ClientPromiseBasedCall::StartPromise(
2773
+ ClientMetadataHandle client_initial_metadata, const Completion& completion,
2774
+ Party::BulkSpawner& spawner) {
2775
+ auto token = ClientInitialMetadataOutstandingToken::New(arena());
2776
+ spawner.Spawn(
2777
+ "call_send_initial_metadata", token.Wait(),
2778
+ [this,
2779
+ completion = AddOpToCompletion(
2780
+ completion, PendingOp::kSendInitialMetadata)](bool result) mutable {
2781
+ if (!result) FailCompletion(completion);
2782
+ FinishOpOnCompletion(&completion, PendingOp::kSendInitialMetadata);
2783
+ });
2784
+ spawner.Spawn(
2785
+ "client_promise",
2786
+ [this, client_initial_metadata = std::move(client_initial_metadata),
2787
+ token = std::move(token)]() mutable {
2788
+ return Race(
2789
+ cancel_error_.Wait(),
2790
+ Map(channel()->channel_stack()->MakeClientCallPromise(CallArgs{
2791
+ std::move(client_initial_metadata), std::move(token),
2792
+ &polling_entity_, &server_initial_metadata_.sender,
2793
+ &client_to_server_messages_.receiver,
2794
+ &server_to_client_messages_.sender}),
2795
+ [this](ServerMetadataHandle trailing_metadata) {
2796
+ // If we're cancelled the transport doesn't get to return
2797
+ // stats.
2798
+ AcceptTransportStatsFromContext();
2799
+ return trailing_metadata;
2800
+ }));
2801
+ },
2802
+ [this](ServerMetadataHandle trailing_metadata) {
2803
+ Finish(std::move(trailing_metadata));
2804
+ });
2805
+ }
2806
+
2807
+ grpc_call_error ClientPromiseBasedCall::ValidateBatch(const grpc_op* ops,
2808
+ size_t nops) const {
2809
+ BitSet<8> got_ops;
2810
+ for (size_t op_idx = 0; op_idx < nops; op_idx++) {
2811
+ const grpc_op& op = ops[op_idx];
2812
+ switch (op.op) {
2813
+ case GRPC_OP_SEND_INITIAL_METADATA:
2814
+ if (!AreInitialMetadataFlagsValid(op.flags)) {
2815
+ return GRPC_CALL_ERROR_INVALID_FLAGS;
2816
+ }
2817
+ if (!ValidateMetadata(op.data.send_initial_metadata.count,
2818
+ op.data.send_initial_metadata.metadata)) {
2819
+ return GRPC_CALL_ERROR_INVALID_METADATA;
2820
+ }
2821
+ break;
2822
+ case GRPC_OP_SEND_MESSAGE:
2823
+ if (!AreWriteFlagsValid(op.flags)) {
2824
+ return GRPC_CALL_ERROR_INVALID_FLAGS;
2825
+ }
2826
+ break;
2827
+ case GRPC_OP_RECV_INITIAL_METADATA:
2828
+ case GRPC_OP_RECV_MESSAGE:
2829
+ case GRPC_OP_SEND_CLOSE_FROM_CLIENT:
2830
+ case GRPC_OP_RECV_STATUS_ON_CLIENT:
2831
+ if (op.flags != 0) return GRPC_CALL_ERROR_INVALID_FLAGS;
2832
+ break;
2833
+ case GRPC_OP_RECV_CLOSE_ON_SERVER:
2834
+ case GRPC_OP_SEND_STATUS_FROM_SERVER:
2835
+ return GRPC_CALL_ERROR_NOT_ON_CLIENT;
2836
+ }
2837
+ if (got_ops.is_set(op.op)) return GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
2838
+ got_ops.set(op.op);
2839
+ }
2840
+ return GRPC_CALL_OK;
2841
+ }
2842
+
2843
+ void ClientPromiseBasedCall::CommitBatch(const grpc_op* ops, size_t nops,
2844
+ const Completion& completion) {
2845
+ Party::BulkSpawner spawner(this);
2846
+ for (size_t op_idx = 0; op_idx < nops; op_idx++) {
2847
+ const grpc_op& op = ops[op_idx];
2848
+ switch (op.op) {
2849
+ case GRPC_OP_SEND_INITIAL_METADATA: {
2850
+ if (started_.exchange(true, std::memory_order_relaxed)) break;
2851
+ CToMetadata(op.data.send_initial_metadata.metadata,
2852
+ op.data.send_initial_metadata.count,
2853
+ send_initial_metadata_.get());
2854
+ PrepareOutgoingInitialMetadata(op, *send_initial_metadata_);
2855
+ if (send_deadline() != Timestamp::InfFuture()) {
2856
+ send_initial_metadata_->Set(GrpcTimeoutMetadata(), send_deadline());
2857
+ }
2858
+ send_initial_metadata_->Set(
2859
+ WaitForReady(),
2860
+ WaitForReady::ValueType{
2861
+ (op.flags & GRPC_INITIAL_METADATA_WAIT_FOR_READY) != 0,
2862
+ (op.flags &
2863
+ GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET) != 0});
2864
+ StartPromise(std::move(send_initial_metadata_), completion, spawner);
2865
+ } break;
2866
+ case GRPC_OP_RECV_INITIAL_METADATA: {
2867
+ StartRecvInitialMetadata(
2868
+ op.data.recv_initial_metadata.recv_initial_metadata, completion,
2869
+ spawner);
2870
+ } break;
2871
+ case GRPC_OP_RECV_STATUS_ON_CLIENT: {
2872
+ StartRecvStatusOnClient(completion, op.data.recv_status_on_client,
2873
+ spawner);
2874
+ } break;
2875
+ case GRPC_OP_SEND_MESSAGE:
2876
+ StartSendMessage(op, completion, &client_to_server_messages_.sender,
2877
+ spawner);
2878
+ break;
2879
+ case GRPC_OP_RECV_MESSAGE:
2880
+ StartRecvMessage(
2881
+ op, completion,
2882
+ [this]() {
2883
+ return server_initial_metadata_.receiver.AwaitClosed();
2884
+ },
2885
+ &server_to_client_messages_.receiver, false, spawner);
2886
+ break;
2887
+ case GRPC_OP_SEND_CLOSE_FROM_CLIENT:
2888
+ spawner.Spawn(
2889
+ "send_close_from_client",
2890
+ [this]() {
2891
+ client_to_server_messages_.sender.Close();
2892
+ return Empty{};
2893
+ },
2894
+ [this,
2895
+ completion = AddOpToCompletion(
2896
+ completion, PendingOp::kSendCloseFromClient)](Empty) mutable {
2897
+ FinishOpOnCompletion(&completion,
2898
+ PendingOp::kSendCloseFromClient);
2899
+ });
2900
+ break;
2901
+ case GRPC_OP_SEND_STATUS_FROM_SERVER:
2902
+ case GRPC_OP_RECV_CLOSE_ON_SERVER:
2903
+ abort(); // unreachable
2904
+ }
2905
+ }
2906
+ }
2907
+
2908
+ grpc_call_error ClientPromiseBasedCall::StartBatch(const grpc_op* ops,
2909
+ size_t nops,
2910
+ void* notify_tag,
2911
+ bool is_notify_tag_closure) {
2912
+ if (nops == 0) {
2913
+ EndOpImmediately(cq(), notify_tag, is_notify_tag_closure);
2914
+ return GRPC_CALL_OK;
2915
+ }
2916
+ const grpc_call_error validation_result = ValidateBatch(ops, nops);
2917
+ if (validation_result != GRPC_CALL_OK) {
2918
+ return validation_result;
2919
+ }
2920
+ Completion completion =
2921
+ StartCompletion(notify_tag, is_notify_tag_closure, ops);
2922
+ CommitBatch(ops, nops, completion);
2923
+ FinishOpOnCompletion(&completion, PendingOp::kStartingBatch);
2924
+ return GRPC_CALL_OK;
2925
+ }
2926
+
2927
+ void ClientPromiseBasedCall::StartRecvInitialMetadata(
2928
+ grpc_metadata_array* array, const Completion& completion,
2929
+ Party::BulkSpawner& spawner) {
2930
+ spawner.Spawn(
2931
+ "recv_initial_metadata",
2932
+ Race(server_initial_metadata_.receiver.Next(),
2933
+ Map(finished(),
2934
+ [](Empty) { return NextResult<ServerMetadataHandle>(true); })),
2935
+ [this, array,
2936
+ completion =
2937
+ AddOpToCompletion(completion, PendingOp::kReceiveInitialMetadata)](
2938
+ NextResult<ServerMetadataHandle> next_metadata) mutable {
2939
+ server_initial_metadata_.sender.Close();
2940
+ ServerMetadataHandle metadata;
2941
+ if (next_metadata.has_value()) {
2942
+ is_trailers_only_ = false;
2943
+ metadata = std::move(next_metadata.value());
2944
+ } else {
2945
+ is_trailers_only_ = true;
2946
+ metadata = arena()->MakePooled<ServerMetadata>(arena());
2947
+ }
2948
+ ProcessIncomingInitialMetadata(*metadata);
2949
+ PublishMetadataArray(metadata.get(), array);
2950
+ recv_initial_metadata_ = std::move(metadata);
2951
+ FinishOpOnCompletion(&completion, PendingOp::kReceiveInitialMetadata);
2952
+ });
2953
+ }
2954
+
2955
+ void ClientPromiseBasedCall::Finish(ServerMetadataHandle trailing_metadata) {
2956
+ if (grpc_call_trace.enabled()) {
2957
+ gpr_log(GPR_INFO, "%s[call] Finish: %s", DebugTag().c_str(),
2958
+ trailing_metadata->DebugString().c_str());
2959
+ }
2960
+ ResetDeadline();
2961
+ set_completed();
2962
+ client_to_server_messages_.sender.Close();
2963
+ if (auto* channelz_channel = channel()->channelz_node()) {
2964
+ if (trailing_metadata->get(GrpcStatusMetadata())
2965
+ .value_or(GRPC_STATUS_UNKNOWN) == GRPC_STATUS_OK) {
2966
+ channelz_channel->RecordCallSucceeded();
2967
+ } else {
2968
+ channelz_channel->RecordCallFailed();
2969
+ }
2970
+ }
2971
+ server_trailing_metadata_.Set(std::move(trailing_metadata));
2972
+ }
2973
+
2974
+ namespace {
2975
+ std::string MakeErrorString(const ServerMetadata* trailing_metadata) {
2976
+ std::string out = absl::StrCat(
2977
+ trailing_metadata->get(GrpcStatusFromWire()).value_or(false)
2978
+ ? "Error received from peer"
2979
+ : "Error generated by client",
2980
+ "grpc_status: ",
2981
+ grpc_status_code_to_string(trailing_metadata->get(GrpcStatusMetadata())
2982
+ .value_or(GRPC_STATUS_UNKNOWN)));
2983
+ if (const Slice* message =
2984
+ trailing_metadata->get_pointer(GrpcMessageMetadata())) {
2985
+ absl::StrAppend(&out, "\ngrpc_message: ", message->as_string_view());
2986
+ }
2987
+ if (auto annotations = trailing_metadata->get_pointer(GrpcStatusContext())) {
2988
+ absl::StrAppend(&out, "\nStatus Context:");
2989
+ for (const std::string& annotation : *annotations) {
2990
+ absl::StrAppend(&out, "\n ", annotation);
2991
+ }
2992
+ }
2993
+ return out;
2994
+ }
2995
+ } // namespace
2996
+
2997
+ void ClientPromiseBasedCall::StartRecvStatusOnClient(
2998
+ const Completion& completion,
2999
+ grpc_op::grpc_op_data::grpc_op_recv_status_on_client op_args,
3000
+ Party::BulkSpawner& spawner) {
3001
+ ForceCompletionSuccess(completion);
3002
+ spawner.Spawn(
3003
+ "recv_status_on_client", server_trailing_metadata_.Wait(),
3004
+ [this, op_args,
3005
+ completion =
3006
+ AddOpToCompletion(completion, PendingOp::kReceiveStatusOnClient)](
3007
+ ServerMetadataHandle trailing_metadata) mutable {
3008
+ const grpc_status_code status =
3009
+ trailing_metadata->get(GrpcStatusMetadata())
3010
+ .value_or(GRPC_STATUS_UNKNOWN);
3011
+ *op_args.status = status;
3012
+ absl::string_view message_string;
3013
+ if (Slice* message =
3014
+ trailing_metadata->get_pointer(GrpcMessageMetadata())) {
3015
+ message_string = message->as_string_view();
3016
+ *op_args.status_details = message->Ref().TakeCSlice();
3017
+ } else {
3018
+ *op_args.status_details = grpc_empty_slice();
3019
+ }
3020
+ if (message_string.empty()) {
3021
+ RunFinalization(status, nullptr);
3022
+ } else {
3023
+ std::string error_string(message_string);
3024
+ RunFinalization(status, error_string.c_str());
3025
+ }
3026
+ if (op_args.error_string != nullptr && status != GRPC_STATUS_OK) {
3027
+ *op_args.error_string =
3028
+ gpr_strdup(MakeErrorString(trailing_metadata.get()).c_str());
3029
+ }
3030
+ PublishMetadataArray(trailing_metadata.get(),
3031
+ op_args.trailing_metadata);
3032
+ recv_trailing_metadata_ = std::move(trailing_metadata);
3033
+ FinishOpOnCompletion(&completion, PendingOp::kReceiveStatusOnClient);
3034
+ });
3035
+ }
3036
+ #endif
3037
+
3038
+ ///////////////////////////////////////////////////////////////////////////////
3039
+ // ServerPromiseBasedCall
3040
+
3041
+ #ifdef GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_SERVER_CALL
3042
+
3043
+ class ServerPromiseBasedCall final : public PromiseBasedCall {
3044
+ public:
3045
+ ServerPromiseBasedCall(Arena* arena, grpc_call_create_args* args);
3046
+
3047
+ void CancelWithError(grpc_error_handle) override;
3048
+ grpc_call_error StartBatch(const grpc_op* ops, size_t nops, void* notify_tag,
3049
+ bool is_notify_tag_closure) override;
3050
+ bool is_trailers_only() const override { abort(); }
3051
+ absl::string_view GetServerAuthority() const override {
3052
+ const Slice* authority_metadata =
3053
+ client_initial_metadata_->get_pointer(HttpAuthorityMetadata());
3054
+ if (authority_metadata == nullptr) return "";
3055
+ return authority_metadata->as_string_view();
3056
+ }
3057
+
3058
+ // Polling order for the server promise stack:
3059
+ //
3060
+ // │ ┌───────────────────────────────────────┐
3061
+ // │ │ ServerPromiseBasedCall ├──► Lifetime management
3062
+ // │ ├───────────────────────────────────────┤
3063
+ // │ │ ConnectedChannel ├─┐
3064
+ // │ ├───────────────────────────────────────┤ └► Interactions with the
3065
+ // │ │ ... closest to transport filter │ transport - send/recv msgs
3066
+ // │ ├───────────────────────────────────────┤ and metadata, call phase
3067
+ // │ │ ... │ ordering
3068
+ // │ ├───────────────────────────────────────┤
3069
+ // │ │ ... closest to app filter │ ┌► Request matching, initial
3070
+ // │ ├───────────────────────────────────────┤ │ setup, publishing call to
3071
+ // │ │ Server::ChannelData::MakeCallPromise ├─┘ application
3072
+ // │ ├───────────────────────────────────────┤
3073
+ // │ │ MakeTopOfServerCallPromise ├──► Send trailing metadata
3074
+ // ▼ └───────────────────────────────────────┘
3075
+ // Polling &
3076
+ // instantiation
3077
+ // order
3078
+
3079
+ std::string DebugTag() const override {
3080
+ return absl::StrFormat("SERVER_CALL[%p]: ", this);
3081
+ }
3082
+
3083
+ ServerCallContext* server_call_context() override { return &call_context_; }
3084
+
3085
+ private:
3086
+ class RecvCloseOpCancelState {
3087
+ public:
3088
+ // Request that receiver be filled in per
3089
+ // grpc_op_recv_close_on_server. Returns true if the request can
3090
+ // be fulfilled immediately. Returns false if the request will be
3091
+ // fulfilled later.
3092
+ bool ReceiveCloseOnServerOpStarted(int* receiver) {
3093
+ uintptr_t state = state_.load(std::memory_order_acquire);
3094
+ uintptr_t new_state;
3095
+ do {
3096
+ switch (state) {
3097
+ case kUnset:
3098
+ new_state = reinterpret_cast<uintptr_t>(receiver);
3099
+ break;
3100
+ case kFinishedWithFailure:
3101
+ *receiver = 1;
3102
+ return true;
3103
+ case kFinishedWithSuccess:
3104
+ *receiver = 0;
3105
+ return true;
3106
+ default:
3107
+ Crash("Two threads offered ReceiveCloseOnServerOpStarted");
3108
+ }
3109
+ } while (!state_.compare_exchange_weak(state, new_state,
3110
+ std::memory_order_acq_rel,
3111
+ std::memory_order_acquire));
3112
+ return false;
3113
+ }
3114
+
3115
+ // Mark the call as having completed.
3116
+ // Returns true if this finishes a previous
3117
+ // RequestReceiveCloseOnServer.
3118
+ bool CompleteCallWithCancelledSetTo(bool cancelled) {
3119
+ uintptr_t state = state_.load(std::memory_order_acquire);
3120
+ uintptr_t new_state;
3121
+ bool r;
3122
+ do {
3123
+ switch (state) {
3124
+ case kUnset:
3125
+ new_state = cancelled ? kFinishedWithFailure : kFinishedWithSuccess;
3126
+ r = false;
3127
+ break;
3128
+ case kFinishedWithFailure:
3129
+ return false;
3130
+ case kFinishedWithSuccess:
3131
+ Crash("unreachable");
3132
+ default:
3133
+ new_state = cancelled ? kFinishedWithFailure : kFinishedWithSuccess;
3134
+ r = true;
3135
+ }
3136
+ } while (!state_.compare_exchange_weak(state, new_state,
3137
+ std::memory_order_acq_rel,
3138
+ std::memory_order_acquire));
3139
+ if (r) *reinterpret_cast<int*>(state) = cancelled ? 1 : 0;
3140
+ return r;
3141
+ }
3142
+
3143
+ std::string ToString() const {
3144
+ auto state = state_.load(std::memory_order_relaxed);
3145
+ switch (state) {
3146
+ case kUnset:
3147
+ return "Unset";
3148
+ case kFinishedWithFailure:
3149
+ return "FinishedWithFailure";
3150
+ case kFinishedWithSuccess:
3151
+ return "FinishedWithSuccess";
3152
+ default:
3153
+ return absl::StrFormat("WaitingForReceiver(%p)",
3154
+ reinterpret_cast<void*>(state));
3155
+ }
3156
+ }
3157
+
3158
+ private:
3159
+ static constexpr uintptr_t kUnset = 0;
3160
+ static constexpr uintptr_t kFinishedWithFailure = 1;
3161
+ static constexpr uintptr_t kFinishedWithSuccess = 2;
3162
+ // Holds one of kUnset, kFinishedWithFailure, or
3163
+ // kFinishedWithSuccess OR an int* that wants to receive the
3164
+ // final status.
3165
+ std::atomic<uintptr_t> state_{kUnset};
3166
+ };
3167
+
3168
+ grpc_call_error ValidateBatch(const grpc_op* ops, size_t nops) const;
3169
+ void CommitBatch(const grpc_op* ops, size_t nops,
3170
+ const Completion& completion);
3171
+ void Finish(ServerMetadataHandle result);
3172
+
3173
+ friend class ServerCallContext;
3174
+ ServerCallContext call_context_;
3175
+ Server* const server_;
3176
+ PipeSender<ServerMetadataHandle>* server_initial_metadata_ = nullptr;
3177
+ PipeSender<MessageHandle>* server_to_client_messages_ = nullptr;
3178
+ PipeReceiver<MessageHandle>* client_to_server_messages_ = nullptr;
3179
+ Latch<ServerMetadataHandle> send_trailing_metadata_;
3180
+ RecvCloseOpCancelState recv_close_op_cancel_state_;
3181
+ ClientMetadataHandle client_initial_metadata_;
3182
+ Completion recv_close_completion_;
3183
+ std::atomic<bool> cancelled_{false};
3184
+ };
3185
+
3186
+ ServerPromiseBasedCall::ServerPromiseBasedCall(Arena* arena,
3187
+ grpc_call_create_args* args)
3188
+ : PromiseBasedCall(arena, 0, *args),
3189
+ call_context_(this, args->server_transport_data),
3190
+ server_(args->server) {
3191
+ global_stats().IncrementServerCallsCreated();
3192
+ channelz::ServerNode* channelz_node = server_->channelz_node();
3193
+ if (channelz_node != nullptr) {
3194
+ channelz_node->RecordCallStarted();
3195
+ }
3196
+ // TODO(yashykt): In the future, we want to also enable stats and trace
3197
+ // collecting from when the call is created at the transport. The idea is that
3198
+ // the transport would create the call tracer and pass it in as part of the
3199
+ // metadata.
3200
+ auto* server_call_tracer_factory =
3201
+ ServerCallTracerFactory::Get(args->server->channel_args());
3202
+ if (server_call_tracer_factory != nullptr) {
3203
+ auto* server_call_tracer =
3204
+ server_call_tracer_factory->CreateNewServerCallTracer(arena);
3205
+ if (server_call_tracer != nullptr) {
3206
+ // Note that we are setting both
3207
+ // GRPC_CONTEXT_CALL_TRACER_ANNOTATION_INTERFACE and
3208
+ // GRPC_CONTEXT_CALL_TRACER as a matter of convenience. In the future
3209
+ // promise-based world, we would just a single tracer object for each
3210
+ // stack (call, subchannel_call, server_call.)
3211
+ ContextSet(GRPC_CONTEXT_CALL_TRACER_ANNOTATION_INTERFACE,
3212
+ server_call_tracer, nullptr);
3213
+ ContextSet(GRPC_CONTEXT_CALL_TRACER, server_call_tracer, nullptr);
3214
+ }
3215
+ }
3216
+ ScopedContext activity_context(this);
3217
+ Spawn("server_promise",
3218
+ channel()->channel_stack()->MakeServerCallPromise(
3219
+ CallArgs{nullptr, ClientInitialMetadataOutstandingToken::Empty(),
3220
+ nullptr, nullptr, nullptr, nullptr}),
3221
+ [this](ServerMetadataHandle result) { Finish(std::move(result)); });
3222
+ }
3223
+
3224
+ void ServerPromiseBasedCall::Finish(ServerMetadataHandle result) {
3225
+ if (grpc_call_trace.enabled()) {
3226
+ gpr_log(GPR_INFO, "%s[call] Finish: recv_close_state:%s result:%s",
3227
+ DebugTag().c_str(), recv_close_op_cancel_state_.ToString().c_str(),
3228
+ result->DebugString().c_str());
3229
+ }
3230
+ const auto status =
3231
+ result->get(GrpcStatusMetadata()).value_or(GRPC_STATUS_UNKNOWN);
3232
+ channelz::ServerNode* channelz_node = server_->channelz_node();
3233
+ if (channelz_node != nullptr) {
3234
+ if (status == GRPC_STATUS_OK) {
3235
+ channelz_node->RecordCallSucceeded();
3236
+ } else {
3237
+ channelz_node->RecordCallFailed();
3238
+ }
3239
+ }
3240
+ if (recv_close_op_cancel_state_.CompleteCallWithCancelledSetTo(
3241
+ result->get(GrpcCallWasCancelled()).value_or(true))) {
3242
+ FinishOpOnCompletion(&recv_close_completion_,
3243
+ PendingOp::kReceiveCloseOnServer);
3244
+ }
3245
+ if (server_initial_metadata_ != nullptr) {
3246
+ server_initial_metadata_->Close();
3247
+ }
3248
+ absl::string_view message_string;
3249
+ if (Slice* message = result->get_pointer(GrpcMessageMetadata())) {
3250
+ message_string = message->as_string_view();
3251
+ }
3252
+ AcceptTransportStatsFromContext();
3253
+ if (message_string.empty()) {
3254
+ RunFinalization(status, nullptr);
3255
+ } else {
3256
+ std::string error_string(message_string);
3257
+ RunFinalization(status, error_string.c_str());
3258
+ }
3259
+ set_completed();
3260
+ ResetDeadline();
3261
+ PropagateCancellationToChildren();
3262
+ }
3263
+
3264
+ grpc_call_error ServerPromiseBasedCall::ValidateBatch(const grpc_op* ops,
3265
+ size_t nops) const {
3266
+ BitSet<8> got_ops;
3267
+ for (size_t op_idx = 0; op_idx < nops; op_idx++) {
3268
+ const grpc_op& op = ops[op_idx];
3269
+ switch (op.op) {
3270
+ case GRPC_OP_SEND_INITIAL_METADATA:
3271
+ if (!AreInitialMetadataFlagsValid(op.flags)) {
3272
+ return GRPC_CALL_ERROR_INVALID_FLAGS;
3273
+ }
3274
+ if (!ValidateMetadata(op.data.send_initial_metadata.count,
3275
+ op.data.send_initial_metadata.metadata)) {
3276
+ return GRPC_CALL_ERROR_INVALID_METADATA;
3277
+ }
3278
+ break;
3279
+ case GRPC_OP_SEND_MESSAGE:
3280
+ if (!AreWriteFlagsValid(op.flags)) {
3281
+ return GRPC_CALL_ERROR_INVALID_FLAGS;
3282
+ }
3283
+ break;
3284
+ case GRPC_OP_RECV_MESSAGE:
3285
+ case GRPC_OP_RECV_CLOSE_ON_SERVER:
3286
+ case GRPC_OP_SEND_STATUS_FROM_SERVER:
3287
+ if (op.flags != 0) return GRPC_CALL_ERROR_INVALID_FLAGS;
3288
+ break;
3289
+ case GRPC_OP_RECV_INITIAL_METADATA:
3290
+ case GRPC_OP_SEND_CLOSE_FROM_CLIENT:
3291
+ case GRPC_OP_RECV_STATUS_ON_CLIENT:
3292
+ return GRPC_CALL_ERROR_NOT_ON_SERVER;
3293
+ }
3294
+ if (got_ops.is_set(op.op)) return GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
3295
+ got_ops.set(op.op);
3296
+ }
3297
+ return GRPC_CALL_OK;
3298
+ }
3299
+
3300
+ void ServerPromiseBasedCall::CommitBatch(const grpc_op* ops, size_t nops,
3301
+ const Completion& completion) {
3302
+ Party::BulkSpawner spawner(this);
3303
+ for (size_t op_idx = 0; op_idx < nops; op_idx++) {
3304
+ const grpc_op& op = ops[op_idx];
3305
+ switch (op.op) {
3306
+ case GRPC_OP_SEND_INITIAL_METADATA: {
3307
+ auto metadata = arena()->MakePooled<ServerMetadata>(arena());
3308
+ PrepareOutgoingInitialMetadata(op, *metadata);
3309
+ CToMetadata(op.data.send_initial_metadata.metadata,
3310
+ op.data.send_initial_metadata.count, metadata.get());
3311
+ if (grpc_call_trace.enabled()) {
3312
+ gpr_log(GPR_INFO, "%s[call] Send initial metadata",
3313
+ DebugTag().c_str());
3314
+ }
3315
+ QueueSend();
3316
+ spawner.Spawn(
3317
+ "call_send_initial_metadata",
3318
+ [this, metadata = std::move(metadata)]() mutable {
3319
+ EnactSend();
3320
+ return server_initial_metadata_->Push(std::move(metadata));
3321
+ },
3322
+ [this,
3323
+ completion = AddOpToCompletion(
3324
+ completion, PendingOp::kSendInitialMetadata)](bool r) mutable {
3325
+ if (!r) FailCompletion(completion);
3326
+ FinishOpOnCompletion(&completion,
3327
+ PendingOp::kSendInitialMetadata);
3328
+ });
3329
+ } break;
3330
+ case GRPC_OP_SEND_MESSAGE:
3331
+ StartSendMessage(op, completion, server_to_client_messages_, spawner);
3332
+ break;
3333
+ case GRPC_OP_RECV_MESSAGE:
3334
+ if (cancelled_.load(std::memory_order_relaxed)) {
3335
+ FailCompletion(completion);
3336
+ break;
3337
+ }
3338
+ StartRecvMessage(
3339
+ op, completion, []() { return []() { return Empty{}; }; },
3340
+ client_to_server_messages_, true, spawner);
3341
+ break;
3342
+ case GRPC_OP_SEND_STATUS_FROM_SERVER: {
3343
+ auto metadata = arena()->MakePooled<ServerMetadata>(arena());
3344
+ CToMetadata(op.data.send_status_from_server.trailing_metadata,
3345
+ op.data.send_status_from_server.trailing_metadata_count,
3346
+ metadata.get());
3347
+ metadata->Set(GrpcStatusMetadata(),
3348
+ op.data.send_status_from_server.status);
3349
+ if (auto* details = op.data.send_status_from_server.status_details) {
3350
+ // TODO(ctiller): this should not be a copy, but we have callers that
3351
+ // allocate and pass in a slice created with
3352
+ // grpc_slice_from_static_string and then delete the string after
3353
+ // passing it in, which shouldn't be a supported API.
3354
+ metadata->Set(GrpcMessageMetadata(),
3355
+ Slice(grpc_slice_copy(*details)));
3356
+ }
3357
+ spawner.Spawn(
3358
+ "call_send_status_from_server",
3359
+ [this, metadata = std::move(metadata)]() mutable {
3360
+ bool r = true;
3361
+ if (send_trailing_metadata_.is_set()) {
3362
+ r = false;
3363
+ } else {
3364
+ send_trailing_metadata_.Set(std::move(metadata));
3365
+ }
3366
+ return Map(WaitForSendingStarted(), [this, r](Empty) {
3367
+ server_initial_metadata_->Close();
3368
+ server_to_client_messages_->Close();
3369
+ return r;
3370
+ });
3371
+ },
3372
+ [this, completion = AddOpToCompletion(
3373
+ completion, PendingOp::kSendStatusFromServer)](
3374
+ bool ok) mutable {
3375
+ if (!ok) FailCompletion(completion);
3376
+ FinishOpOnCompletion(&completion,
3377
+ PendingOp::kSendStatusFromServer);
3378
+ });
3379
+ } break;
3380
+ case GRPC_OP_RECV_CLOSE_ON_SERVER:
3381
+ if (grpc_call_trace.enabled()) {
3382
+ gpr_log(GPR_INFO, "%s[call] StartBatch: RecvClose %s",
3383
+ DebugTag().c_str(),
3384
+ recv_close_op_cancel_state_.ToString().c_str());
3385
+ }
3386
+ ForceCompletionSuccess(completion);
3387
+ recv_close_completion_ =
3388
+ AddOpToCompletion(completion, PendingOp::kReceiveCloseOnServer);
3389
+ if (recv_close_op_cancel_state_.ReceiveCloseOnServerOpStarted(
3390
+ op.data.recv_close_on_server.cancelled)) {
3391
+ FinishOpOnCompletion(&recv_close_completion_,
3392
+ PendingOp::kReceiveCloseOnServer);
3393
+ }
3394
+ break;
3395
+ case GRPC_OP_RECV_STATUS_ON_CLIENT:
3396
+ case GRPC_OP_SEND_CLOSE_FROM_CLIENT:
3397
+ case GRPC_OP_RECV_INITIAL_METADATA:
3398
+ abort(); // unreachable
3399
+ }
3400
+ }
3401
+ }
3402
+
3403
+ grpc_call_error ServerPromiseBasedCall::StartBatch(const grpc_op* ops,
3404
+ size_t nops,
3405
+ void* notify_tag,
3406
+ bool is_notify_tag_closure) {
3407
+ if (nops == 0) {
3408
+ EndOpImmediately(cq(), notify_tag, is_notify_tag_closure);
3409
+ return GRPC_CALL_OK;
3410
+ }
3411
+ const grpc_call_error validation_result = ValidateBatch(ops, nops);
3412
+ if (validation_result != GRPC_CALL_OK) {
3413
+ return validation_result;
3414
+ }
3415
+ Completion completion =
3416
+ StartCompletion(notify_tag, is_notify_tag_closure, ops);
3417
+ CommitBatch(ops, nops, completion);
3418
+ FinishOpOnCompletion(&completion, PendingOp::kStartingBatch);
3419
+ return GRPC_CALL_OK;
3420
+ }
3421
+
3422
+ void ServerPromiseBasedCall::CancelWithError(absl::Status error) {
3423
+ cancelled_.store(true, std::memory_order_relaxed);
3424
+ Spawn(
3425
+ "cancel_with_error",
3426
+ [this, error = std::move(error)]() {
3427
+ if (!send_trailing_metadata_.is_set()) {
3428
+ auto md = ServerMetadataFromStatus(error);
3429
+ md->Set(GrpcCallWasCancelled(), true);
3430
+ send_trailing_metadata_.Set(std::move(md));
3431
+ }
3432
+ if (server_to_client_messages_ != nullptr) {
3433
+ server_to_client_messages_->Close();
3434
+ }
3435
+ if (server_initial_metadata_ != nullptr) {
3436
+ server_initial_metadata_->Close();
3437
+ }
3438
+ return Empty{};
3439
+ },
3440
+ [](Empty) {});
3441
+ }
3442
+ #endif
3443
+
3444
+ #ifdef GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_SERVER_CALL
3445
+ ArenaPromise<ServerMetadataHandle>
3446
+ ServerCallContext::MakeTopOfServerCallPromise(
3447
+ CallArgs call_args, grpc_completion_queue* cq,
3448
+ grpc_metadata_array* publish_initial_metadata,
3449
+ absl::FunctionRef<void(grpc_call* call)> publish) {
3450
+ call_->SetCompletionQueue(cq);
3451
+ call_args.polling_entity->Set(
3452
+ grpc_polling_entity_create_from_pollset(grpc_cq_pollset(cq)));
3453
+ call_->server_to_client_messages_ = call_args.server_to_client_messages;
3454
+ call_->client_to_server_messages_ = call_args.client_to_server_messages;
3455
+ call_->server_initial_metadata_ = call_args.server_initial_metadata;
3456
+ call_->client_initial_metadata_ =
3457
+ std::move(call_args.client_initial_metadata);
3458
+ call_->set_send_deadline(call_->deadline());
3459
+ call_->ProcessIncomingInitialMetadata(*call_->client_initial_metadata_);
3460
+ PublishMetadataArray(call_->client_initial_metadata_.get(),
3461
+ publish_initial_metadata);
3462
+ call_->ExternalRef();
3463
+ publish(call_->c_ptr());
3464
+ return Seq(call_->server_to_client_messages_->AwaitClosed(),
3465
+ call_->send_trailing_metadata_.Wait());
3466
+ }
3467
+ #else
3468
+ ArenaPromise<ServerMetadataHandle>
3469
+ ServerCallContext::MakeTopOfServerCallPromise(
3470
+ CallArgs, grpc_completion_queue*, grpc_metadata_array*,
3471
+ absl::FunctionRef<void(grpc_call*)>) {
3472
+ (void)call_;
3473
+ Crash("Promise-based server call is not enabled");
3474
+ }
3475
+ #endif
3476
+
3477
+ } // namespace grpc_core
3478
+
3479
+ ///////////////////////////////////////////////////////////////////////////////
3480
+ // C-based API
3481
+
3482
+ void* grpc_call_arena_alloc(grpc_call* call, size_t size) {
3483
+ grpc_core::ExecCtx exec_ctx;
3484
+ return grpc_core::Call::FromC(call)->arena()->Alloc(size);
3485
+ }
3486
+
3487
+ size_t grpc_call_get_initial_size_estimate() {
3488
+ return grpc_core::FilterStackCall::InitialSizeEstimate();
3489
+ }
3490
+
3491
+ grpc_error_handle grpc_call_create(grpc_call_create_args* args,
3492
+ grpc_call** out_call) {
3493
+ #ifdef GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_CLIENT_CALL
3494
+ if (grpc_core::IsPromiseBasedClientCallEnabled() &&
3495
+ args->server_transport_data == nullptr && args->channel->is_promising()) {
3496
+ return grpc_core::MakePromiseBasedCall<grpc_core::ClientPromiseBasedCall>(
3497
+ args, out_call);
3498
+ }
3499
+ #endif
3500
+ #ifdef GRPC_EXPERIMENT_IS_INCLUDED_PROMISE_BASED_SERVER_CALL
3501
+ if (grpc_core::IsPromiseBasedServerCallEnabled() &&
3502
+ args->server_transport_data != nullptr && args->channel->is_promising()) {
3503
+ return grpc_core::MakePromiseBasedCall<grpc_core::ServerPromiseBasedCall>(
3504
+ args, out_call);
3505
+ }
3506
+ #endif
3507
+ return grpc_core::FilterStackCall::Create(args, out_call);
3508
+ }
3509
+
3510
+ void grpc_call_set_completion_queue(grpc_call* call,
3511
+ grpc_completion_queue* cq) {
3512
+ grpc_core::Call::FromC(call)->SetCompletionQueue(cq);
3513
+ }
3514
+
3515
+ void grpc_call_ref(grpc_call* c) { grpc_core::Call::FromC(c)->ExternalRef(); }
3516
+
3517
+ void grpc_call_unref(grpc_call* c) {
3518
+ grpc_core::ExecCtx exec_ctx;
3519
+ grpc_core::Call::FromC(c)->ExternalUnref();
3520
+ }
3521
+
3522
+ char* grpc_call_get_peer(grpc_call* call) {
3523
+ return grpc_core::Call::FromC(call)->GetPeer();
3524
+ }
3525
+
3526
+ grpc_call* grpc_call_from_top_element(grpc_call_element* surface_element) {
3527
+ return grpc_core::FilterStackCall::FromTopElem(surface_element)->c_ptr();
3528
+ }
3529
+
3530
+ grpc_call_error grpc_call_cancel(grpc_call* call, void* reserved) {
3531
+ GRPC_API_TRACE("grpc_call_cancel(call=%p, reserved=%p)", 2, (call, reserved));
3532
+ GPR_ASSERT(reserved == nullptr);
3533
+ if (call == nullptr) {
3534
+ return GRPC_CALL_ERROR;
3535
+ }
3536
+ grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
3537
+ grpc_core::ExecCtx exec_ctx;
3538
+ grpc_core::Call::FromC(call)->CancelWithError(absl::CancelledError());
3539
+ return GRPC_CALL_OK;
3540
+ }
3541
+
3542
+ grpc_call_error grpc_call_cancel_with_status(grpc_call* c,
3543
+ grpc_status_code status,
3544
+ const char* description,
3545
+ void* reserved) {
3546
+ GRPC_API_TRACE(
3547
+ "grpc_call_cancel_with_status("
3548
+ "c=%p, status=%d, description=%s, reserved=%p)",
3549
+ 4, (c, (int)status, description, reserved));
3550
+ GPR_ASSERT(reserved == nullptr);
3551
+ if (c == nullptr) {
3552
+ return GRPC_CALL_ERROR;
3553
+ }
1796
3554
  grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
1797
3555
  grpc_core::ExecCtx exec_ctx;
1798
3556
  grpc_core::Call::FromC(c)->CancelWithStatus(status, description);
@@ -1800,7 +3558,7 @@ grpc_call_error grpc_call_cancel_with_status(grpc_call* c,
1800
3558
  }
1801
3559
 
1802
3560
  void grpc_call_cancel_internal(grpc_call* call) {
1803
- grpc_core::Call::FromC(call)->CancelWithError(GRPC_ERROR_CANCELLED);
3561
+ grpc_core::Call::FromC(call)->CancelWithError(absl::CancelledError());
1804
3562
  }
1805
3563
 
1806
3564
  grpc_compression_algorithm grpc_call_test_only_get_compression_algorithm(
@@ -1813,7 +3571,9 @@ uint32_t grpc_call_test_only_get_message_flags(grpc_call* call) {
1813
3571
  }
1814
3572
 
1815
3573
  uint32_t grpc_call_test_only_get_encodings_accepted_by_peer(grpc_call* call) {
1816
- return grpc_core::Call::FromC(call)->test_only_encodings_accepted_by_peer();
3574
+ return grpc_core::Call::FromC(call)
3575
+ ->encodings_accepted_by_peer()
3576
+ .ToLegacyBitmask();
1817
3577
  }
1818
3578
 
1819
3579
  grpc_core::Arena* grpc_call_get_arena(grpc_call* call) {
@@ -1831,7 +3591,7 @@ grpc_call_error grpc_call_start_batch(grpc_call* call, const grpc_op* ops,
1831
3591
  "reserved=%p)",
1832
3592
  5, (call, ops, (unsigned long)nops, tag, reserved));
1833
3593
 
1834
- if (reserved != nullptr) {
3594
+ if (reserved != nullptr || call == nullptr) {
1835
3595
  return GRPC_CALL_ERROR;
1836
3596
  } else {
1837
3597
  grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
@@ -1862,7 +3622,9 @@ uint8_t grpc_call_is_client(grpc_call* call) {
1862
3622
 
1863
3623
  grpc_compression_algorithm grpc_call_compression_for_level(
1864
3624
  grpc_call* call, grpc_compression_level level) {
1865
- return grpc_core::Call::FromC(call)->compression_for_level(level);
3625
+ return grpc_core::Call::FromC(call)
3626
+ ->encodings_accepted_by_peer()
3627
+ .CompressionAlgorithmForLevel(level);
1866
3628
  }
1867
3629
 
1868
3630
  bool grpc_call_is_trailers_only(const grpc_call* call) {