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
@@ -16,43 +16,114 @@
16
16
 
17
17
  #include "src/core/lib/channel/promise_based_filter.h"
18
18
 
19
+ #include <algorithm>
20
+ #include <initializer_list>
19
21
  #include <memory>
20
22
  #include <string>
23
+ #include <utility>
24
+ #include <vector>
21
25
 
22
26
  #include "absl/base/attributes.h"
23
- #include "absl/memory/memory.h"
24
- #include "absl/types/variant.h"
27
+ #include "absl/functional/function_ref.h"
28
+ #include "absl/status/status.h"
29
+ #include "absl/strings/str_cat.h"
30
+ #include "absl/strings/str_format.h"
31
+ #include "absl/strings/str_join.h"
25
32
 
26
33
  #include <grpc/status.h>
27
34
 
28
35
  #include "src/core/lib/channel/channel_stack.h"
36
+ #include "src/core/lib/debug/trace.h"
37
+ #include "src/core/lib/gprpp/crash.h"
29
38
  #include "src/core/lib/gprpp/manual_constructor.h"
39
+ #include "src/core/lib/gprpp/status_helper.h"
30
40
  #include "src/core/lib/iomgr/error.h"
41
+ #include "src/core/lib/promise/detail/basic_seq.h"
31
42
  #include "src/core/lib/slice/slice.h"
32
43
 
44
+ extern grpc_core::TraceFlag grpc_trace_channel;
45
+
33
46
  namespace grpc_core {
34
47
  namespace promise_filter_detail {
35
48
 
49
+ namespace {
50
+ class FakeActivity final : public Activity {
51
+ public:
52
+ explicit FakeActivity(Activity* wake_activity)
53
+ : wake_activity_(wake_activity) {}
54
+ void Orphan() override {}
55
+ void ForceImmediateRepoll(WakeupMask) override {}
56
+ Waker MakeOwningWaker() override { return wake_activity_->MakeOwningWaker(); }
57
+ Waker MakeNonOwningWaker() override {
58
+ return wake_activity_->MakeNonOwningWaker();
59
+ }
60
+ void Run(absl::FunctionRef<void()> f) {
61
+ ScopedActivity activity(this);
62
+ f();
63
+ }
64
+
65
+ private:
66
+ Activity* const wake_activity_;
67
+ };
68
+
69
+ absl::Status StatusFromMetadata(const ServerMetadata& md) {
70
+ auto status_code = md.get(GrpcStatusMetadata()).value_or(GRPC_STATUS_UNKNOWN);
71
+ if (status_code == GRPC_STATUS_OK) {
72
+ return absl::OkStatus();
73
+ }
74
+ const auto* message = md.get_pointer(GrpcMessageMetadata());
75
+ return grpc_error_set_int(
76
+ absl::Status(static_cast<absl::StatusCode>(status_code),
77
+ message == nullptr ? "" : message->as_string_view()),
78
+ StatusIntProperty::kRpcStatus, status_code);
79
+ }
80
+ } // namespace
81
+
36
82
  ///////////////////////////////////////////////////////////////////////////////
37
83
  // BaseCallData
38
84
 
39
- BaseCallData::BaseCallData(grpc_call_element* elem,
40
- const grpc_call_element_args* args, uint8_t flags)
85
+ BaseCallData::BaseCallData(
86
+ grpc_call_element* elem, const grpc_call_element_args* args, uint8_t flags,
87
+ absl::FunctionRef<Interceptor*()> make_send_interceptor,
88
+ absl::FunctionRef<Interceptor*()> make_recv_interceptor)
41
89
  : call_stack_(args->call_stack),
42
90
  elem_(elem),
43
91
  arena_(args->arena),
44
92
  call_combiner_(args->call_combiner),
45
93
  deadline_(args->deadline),
46
- context_(args->context) {
47
- if (flags & kFilterExaminesServerInitialMetadata) {
48
- server_initial_metadata_latch_ = arena_->New<Latch<ServerMetadata*>>();
49
- }
94
+ call_context_(flags & kFilterExaminesCallContext
95
+ ? arena_->New<CallContext>(nullptr)
96
+ : nullptr),
97
+ context_(args->context),
98
+ server_initial_metadata_pipe_(
99
+ flags & kFilterExaminesServerInitialMetadata
100
+ ? arena_->New<Pipe<ServerMetadataHandle>>(arena_)
101
+ : nullptr),
102
+ send_message_(
103
+ flags & kFilterExaminesOutboundMessages
104
+ ? arena_->New<SendMessage>(this, make_send_interceptor())
105
+ : nullptr),
106
+ receive_message_(
107
+ flags & kFilterExaminesInboundMessages
108
+ ? arena_->New<ReceiveMessage>(this, make_recv_interceptor())
109
+ : nullptr),
110
+ event_engine_(
111
+ static_cast<ChannelFilter*>(elem->channel_data)
112
+ ->hack_until_per_channel_stack_event_engines_land_get_event_engine()) {
50
113
  }
51
114
 
52
115
  BaseCallData::~BaseCallData() {
53
- if (server_initial_metadata_latch_ != nullptr) {
54
- server_initial_metadata_latch_->~Latch();
55
- }
116
+ FakeActivity(this).Run([this] {
117
+ if (send_message_ != nullptr) {
118
+ send_message_->~SendMessage();
119
+ }
120
+ if (receive_message_ != nullptr) {
121
+ receive_message_->~ReceiveMessage();
122
+ }
123
+ if (server_initial_metadata_pipe_ != nullptr) {
124
+ server_initial_metadata_pipe_->~Pipe();
125
+ }
126
+ });
56
127
  }
57
128
 
58
129
  // We don't form ActivityPtr's to this type, and consequently don't need
@@ -65,20 +136,28 @@ Waker BaseCallData::MakeNonOwningWaker() { return MakeOwningWaker(); }
65
136
 
66
137
  Waker BaseCallData::MakeOwningWaker() {
67
138
  GRPC_CALL_STACK_REF(call_stack_, "waker");
68
- return Waker(this);
139
+ return Waker(this, 0);
69
140
  }
70
141
 
71
- void BaseCallData::Wakeup() {
142
+ void BaseCallData::Wakeup(WakeupMask) {
72
143
  auto wakeup = [](void* p, grpc_error_handle) {
73
144
  auto* self = static_cast<BaseCallData*>(p);
74
145
  self->OnWakeup();
75
- self->Drop();
146
+ self->Drop(0);
76
147
  };
77
148
  auto* closure = GRPC_CLOSURE_CREATE(wakeup, this, nullptr);
78
- GRPC_CALL_COMBINER_START(call_combiner_, closure, GRPC_ERROR_NONE, "wakeup");
149
+ GRPC_CALL_COMBINER_START(call_combiner_, closure, absl::OkStatus(), "wakeup");
79
150
  }
80
151
 
81
- void BaseCallData::Drop() { GRPC_CALL_STACK_UNREF(call_stack_, "waker"); }
152
+ void BaseCallData::Drop(WakeupMask) {
153
+ GRPC_CALL_STACK_UNREF(call_stack_, "waker");
154
+ }
155
+
156
+ std::string BaseCallData::LogTag() const {
157
+ return absl::StrCat(
158
+ ClientOrServerString(), "[", elem_->filter->name, ":0x",
159
+ absl::Hex(reinterpret_cast<uintptr_t>(elem_), absl::kZeroPad8), "]");
160
+ }
82
161
 
83
162
  ///////////////////////////////////////////////////////////////////////////////
84
163
  // BaseCallData::CapturedBatch
@@ -136,7 +215,14 @@ void BaseCallData::CapturedBatch::ResumeWith(Flusher* releaser) {
136
215
  auto* batch = std::exchange(batch_, nullptr);
137
216
  GPR_ASSERT(batch != nullptr);
138
217
  uintptr_t& refcnt = *RefCountField(batch);
139
- if (refcnt == 0) return; // refcnt==0 ==> cancelled
218
+ if (refcnt == 0) {
219
+ // refcnt==0 ==> cancelled
220
+ if (grpc_trace_channel.enabled()) {
221
+ gpr_log(GPR_INFO, "%sRESUME BATCH REQUEST CANCELLED",
222
+ releaser->call()->DebugTag().c_str());
223
+ }
224
+ return;
225
+ }
140
226
  if (--refcnt == 0) {
141
227
  releaser->Resume(batch);
142
228
  }
@@ -159,7 +245,6 @@ void BaseCallData::CapturedBatch::CancelWith(grpc_error_handle error,
159
245
  uintptr_t& refcnt = *RefCountField(batch);
160
246
  if (refcnt == 0) {
161
247
  // refcnt==0 ==> cancelled
162
- GRPC_ERROR_UNREF(error);
163
248
  return;
164
249
  }
165
250
  refcnt = 0;
@@ -188,23 +273,659 @@ BaseCallData::Flusher::~Flusher() {
188
273
  auto* batch = static_cast<grpc_transport_stream_op_batch*>(p);
189
274
  BaseCallData* call =
190
275
  static_cast<BaseCallData*>(batch->handler_private.extra_arg);
276
+ if (grpc_trace_channel.enabled()) {
277
+ gpr_log(GPR_INFO, "FLUSHER:forward batch via closure: %s",
278
+ grpc_transport_stream_op_batch_string(batch, false).c_str());
279
+ }
191
280
  grpc_call_next_op(call->elem(), batch);
192
281
  GRPC_CALL_STACK_UNREF(call->call_stack(), "flusher_batch");
193
282
  };
194
283
  for (size_t i = 1; i < release_.size(); i++) {
195
284
  auto* batch = release_[i];
285
+ if (call_->call_context_ != nullptr && call_->call_context_->traced()) {
286
+ batch->is_traced = true;
287
+ }
288
+ if (grpc_trace_channel.enabled()) {
289
+ gpr_log(
290
+ GPR_INFO, "FLUSHER:queue batch to forward in closure: %s",
291
+ grpc_transport_stream_op_batch_string(release_[i], false).c_str());
292
+ }
196
293
  batch->handler_private.extra_arg = call_;
197
294
  GRPC_CLOSURE_INIT(&batch->handler_private.closure, call_next_op, batch,
198
295
  nullptr);
199
296
  GRPC_CALL_STACK_REF(call_->call_stack(), "flusher_batch");
200
- call_closures_.Add(&batch->handler_private.closure, GRPC_ERROR_NONE,
297
+ call_closures_.Add(&batch->handler_private.closure, absl::OkStatus(),
201
298
  "flusher_batch");
202
299
  }
203
300
  call_closures_.RunClosuresWithoutYielding(call_->call_combiner());
301
+ if (grpc_trace_channel.enabled()) {
302
+ gpr_log(GPR_INFO, "FLUSHER:forward batch: %s",
303
+ grpc_transport_stream_op_batch_string(release_[0], false).c_str());
304
+ }
204
305
  grpc_call_next_op(call_->elem(), release_[0]);
205
306
  GRPC_CALL_STACK_UNREF(call_->call_stack(), "flusher");
206
307
  }
207
308
 
309
+ ///////////////////////////////////////////////////////////////////////////////
310
+ // BaseCallData::SendMessage
311
+
312
+ const char* BaseCallData::SendMessage::StateString(State state) {
313
+ switch (state) {
314
+ case State::kInitial:
315
+ return "INITIAL";
316
+ case State::kIdle:
317
+ return "IDLE";
318
+ case State::kGotBatchNoPipe:
319
+ return "GOT_BATCH_NO_PIPE";
320
+ case State::kGotBatch:
321
+ return "GOT_BATCH";
322
+ case State::kPushedToPipe:
323
+ return "PUSHED_TO_PIPE";
324
+ case State::kForwardedBatch:
325
+ return "FORWARDED_BATCH";
326
+ case State::kBatchCompleted:
327
+ return "BATCH_COMPLETED";
328
+ case State::kCancelled:
329
+ return "CANCELLED";
330
+ case State::kCancelledButNotYetPolled:
331
+ return "CANCELLED_BUT_NOT_YET_POLLED";
332
+ case State::kCancelledButNoStatus:
333
+ return "CANCELLED_BUT_NO_STATUS";
334
+ }
335
+ return "UNKNOWN";
336
+ }
337
+
338
+ void BaseCallData::SendMessage::StartOp(CapturedBatch batch) {
339
+ if (grpc_trace_channel.enabled()) {
340
+ gpr_log(GPR_INFO, "%s SendMessage.StartOp st=%s", base_->LogTag().c_str(),
341
+ StateString(state_));
342
+ }
343
+ switch (state_) {
344
+ case State::kInitial:
345
+ state_ = State::kGotBatchNoPipe;
346
+ break;
347
+ case State::kIdle:
348
+ state_ = State::kGotBatch;
349
+ break;
350
+ case State::kGotBatch:
351
+ case State::kGotBatchNoPipe:
352
+ case State::kForwardedBatch:
353
+ case State::kBatchCompleted:
354
+ case State::kPushedToPipe:
355
+ Crash(absl::StrFormat("ILLEGAL STATE: %s", StateString(state_)));
356
+ case State::kCancelled:
357
+ case State::kCancelledButNotYetPolled:
358
+ case State::kCancelledButNoStatus:
359
+ return;
360
+ }
361
+ batch_ = batch;
362
+ intercepted_on_complete_ = std::exchange(batch_->on_complete, &on_complete_);
363
+ }
364
+
365
+ template <typename T>
366
+ void BaseCallData::SendMessage::GotPipe(T* pipe_end) {
367
+ if (grpc_trace_channel.enabled()) {
368
+ gpr_log(GPR_INFO, "%s SendMessage.GotPipe st=%s", base_->LogTag().c_str(),
369
+ StateString(state_));
370
+ }
371
+ GPR_ASSERT(pipe_end != nullptr);
372
+ switch (state_) {
373
+ case State::kInitial:
374
+ state_ = State::kIdle;
375
+ Activity::current()->ForceImmediateRepoll();
376
+ break;
377
+ case State::kGotBatchNoPipe:
378
+ state_ = State::kGotBatch;
379
+ Activity::current()->ForceImmediateRepoll();
380
+ break;
381
+ case State::kIdle:
382
+ case State::kGotBatch:
383
+ case State::kForwardedBatch:
384
+ case State::kBatchCompleted:
385
+ case State::kPushedToPipe:
386
+ case State::kCancelledButNoStatus:
387
+ Crash(absl::StrFormat("ILLEGAL STATE: %s", StateString(state_)));
388
+ case State::kCancelled:
389
+ case State::kCancelledButNotYetPolled:
390
+ return;
391
+ }
392
+ interceptor_->GotPipe(pipe_end);
393
+ }
394
+
395
+ bool BaseCallData::SendMessage::IsIdle() const {
396
+ switch (state_) {
397
+ case State::kInitial:
398
+ case State::kIdle:
399
+ case State::kForwardedBatch:
400
+ case State::kCancelled:
401
+ case State::kCancelledButNotYetPolled:
402
+ case State::kCancelledButNoStatus:
403
+ return true;
404
+ case State::kGotBatchNoPipe:
405
+ case State::kGotBatch:
406
+ case State::kBatchCompleted:
407
+ case State::kPushedToPipe:
408
+ return false;
409
+ }
410
+ GPR_UNREACHABLE_CODE(return false);
411
+ }
412
+
413
+ void BaseCallData::SendMessage::OnComplete(absl::Status status) {
414
+ Flusher flusher(base_);
415
+ if (grpc_trace_channel.enabled()) {
416
+ gpr_log(GPR_INFO, "%s SendMessage.OnComplete st=%s status=%s",
417
+ base_->LogTag().c_str(), StateString(state_),
418
+ status.ToString().c_str());
419
+ }
420
+ switch (state_) {
421
+ case State::kInitial:
422
+ case State::kIdle:
423
+ case State::kGotBatchNoPipe:
424
+ case State::kPushedToPipe:
425
+ case State::kGotBatch:
426
+ case State::kBatchCompleted:
427
+ Crash(absl::StrFormat("ILLEGAL STATE: %s", StateString(state_)));
428
+ break;
429
+ case State::kCancelled:
430
+ case State::kCancelledButNotYetPolled:
431
+ case State::kCancelledButNoStatus:
432
+ flusher.AddClosure(intercepted_on_complete_, status,
433
+ "forward after cancel");
434
+ break;
435
+ case State::kForwardedBatch:
436
+ completed_status_ = status;
437
+ state_ = State::kBatchCompleted;
438
+ ScopedContext ctx(base_);
439
+ base_->WakeInsideCombiner(&flusher);
440
+ break;
441
+ }
442
+ }
443
+
444
+ void BaseCallData::SendMessage::Done(const ServerMetadata& metadata,
445
+ Flusher* flusher) {
446
+ if (grpc_trace_channel.enabled()) {
447
+ gpr_log(GPR_INFO, "%s SendMessage.Done st=%s md=%s",
448
+ base_->LogTag().c_str(), StateString(state_),
449
+ metadata.DebugString().c_str());
450
+ }
451
+ switch (state_) {
452
+ case State::kCancelled:
453
+ case State::kCancelledButNotYetPolled:
454
+ break;
455
+ case State::kInitial:
456
+ state_ = State::kCancelled;
457
+ break;
458
+ case State::kIdle:
459
+ case State::kForwardedBatch:
460
+ state_ = State::kCancelledButNotYetPolled;
461
+ if (base_->is_current()) base_->ForceImmediateRepoll();
462
+ break;
463
+ case State::kCancelledButNoStatus:
464
+ case State::kGotBatchNoPipe:
465
+ case State::kGotBatch: {
466
+ std::string temp;
467
+ batch_.CancelWith(
468
+ absl::Status(
469
+ static_cast<absl::StatusCode>(metadata.get(GrpcStatusMetadata())
470
+ .value_or(GRPC_STATUS_UNKNOWN)),
471
+ metadata.GetStringValue("grpc-message", &temp).value_or("")),
472
+ flusher);
473
+ state_ = State::kCancelledButNotYetPolled;
474
+ } break;
475
+ case State::kBatchCompleted:
476
+ Crash(absl::StrFormat("ILLEGAL STATE: %s", StateString(state_)));
477
+ break;
478
+ case State::kPushedToPipe:
479
+ push_.reset();
480
+ next_.reset();
481
+ state_ = State::kCancelledButNotYetPolled;
482
+ if (base_->is_current()) base_->ForceImmediateRepoll();
483
+ break;
484
+ }
485
+ }
486
+
487
+ void BaseCallData::SendMessage::WakeInsideCombiner(Flusher* flusher,
488
+ bool allow_push_to_pipe) {
489
+ if (grpc_trace_channel.enabled()) {
490
+ gpr_log(GPR_INFO, "%s SendMessage.WakeInsideCombiner st=%s%s",
491
+ base_->LogTag().c_str(), StateString(state_),
492
+ state_ == State::kBatchCompleted
493
+ ? absl::StrCat(" status=", completed_status_.ToString()).c_str()
494
+ : "");
495
+ }
496
+ switch (state_) {
497
+ case State::kInitial:
498
+ case State::kIdle:
499
+ case State::kGotBatchNoPipe:
500
+ case State::kCancelled:
501
+ case State::kCancelledButNoStatus:
502
+ break;
503
+ case State::kCancelledButNotYetPolled:
504
+ interceptor()->Push()->Close();
505
+ state_ = State::kCancelled;
506
+ break;
507
+ case State::kGotBatch:
508
+ if (allow_push_to_pipe) {
509
+ state_ = State::kPushedToPipe;
510
+ auto message = GetContext<Arena>()->MakePooled<Message>();
511
+ message->payload()->Swap(batch_->payload->send_message.send_message);
512
+ message->mutable_flags() = batch_->payload->send_message.flags;
513
+ push_ = interceptor()->Push()->Push(std::move(message));
514
+ next_.emplace(interceptor()->Pull()->Next());
515
+ } else {
516
+ break;
517
+ }
518
+ ABSL_FALLTHROUGH_INTENDED;
519
+ case State::kPushedToPipe: {
520
+ GPR_ASSERT(push_.has_value());
521
+ auto r_push = (*push_)();
522
+ if (auto* p = r_push.value_if_ready()) {
523
+ if (grpc_trace_channel.enabled()) {
524
+ gpr_log(GPR_INFO,
525
+ "%s SendMessage.WakeInsideCombiner push complete, result=%s",
526
+ base_->LogTag().c_str(), *p ? "true" : "false");
527
+ }
528
+ // We haven't pulled through yet, so this certainly shouldn't succeed.
529
+ GPR_ASSERT(!*p);
530
+ state_ = State::kCancelled;
531
+ batch_.CancelWith(absl::CancelledError(), flusher);
532
+ break;
533
+ }
534
+ GPR_ASSERT(next_.has_value());
535
+ auto r_next = (*next_)();
536
+ if (auto* p = r_next.value_if_ready()) {
537
+ if (grpc_trace_channel.enabled()) {
538
+ gpr_log(GPR_INFO,
539
+ "%s SendMessage.WakeInsideCombiner next complete, "
540
+ "result.has_value=%s",
541
+ base_->LogTag().c_str(), p->has_value() ? "true" : "false");
542
+ }
543
+ if (p->has_value()) {
544
+ batch_->payload->send_message.send_message->Swap((**p)->payload());
545
+ batch_->payload->send_message.flags = (**p)->flags();
546
+ state_ = State::kForwardedBatch;
547
+ batch_.ResumeWith(flusher);
548
+ next_.reset();
549
+ if ((*push_)().ready()) push_.reset();
550
+ } else {
551
+ state_ = State::kCancelledButNoStatus;
552
+ next_.reset();
553
+ push_.reset();
554
+ }
555
+ }
556
+ } break;
557
+ case State::kForwardedBatch:
558
+ if (push_.has_value() && (*push_)().ready()) {
559
+ push_.reset();
560
+ }
561
+ break;
562
+ case State::kBatchCompleted:
563
+ if (push_.has_value() && (*push_)().pending()) {
564
+ break;
565
+ }
566
+ if (completed_status_.ok()) {
567
+ state_ = State::kIdle;
568
+ Activity::current()->ForceImmediateRepoll();
569
+ } else {
570
+ state_ = State::kCancelled;
571
+ }
572
+ flusher->AddClosure(intercepted_on_complete_, completed_status_,
573
+ "batch_completed");
574
+ break;
575
+ }
576
+ }
577
+
578
+ ///////////////////////////////////////////////////////////////////////////////
579
+ // BaseCallData::ReceiveMessage
580
+
581
+ const char* BaseCallData::ReceiveMessage::StateString(State state) {
582
+ switch (state) {
583
+ case State::kInitial:
584
+ return "INITIAL";
585
+ case State::kIdle:
586
+ return "IDLE";
587
+ case State::kForwardedBatchNoPipe:
588
+ return "FORWARDED_BATCH_NO_PIPE";
589
+ case State::kForwardedBatch:
590
+ return "FORWARDED_BATCH";
591
+ case State::kBatchCompletedNoPipe:
592
+ return "BATCH_COMPLETED_NO_PIPE";
593
+ case State::kBatchCompleted:
594
+ return "BATCH_COMPLETED";
595
+ case State::kPushedToPipe:
596
+ return "PUSHED_TO_PIPE";
597
+ case State::kPulledFromPipe:
598
+ return "PULLED_FROM_PIPE";
599
+ case State::kCancelled:
600
+ return "CANCELLED";
601
+ case State::kCancelledWhilstForwarding:
602
+ return "CANCELLED_WHILST_FORWARDING";
603
+ case State::kCancelledWhilstForwardingNoPipe:
604
+ return "CANCELLED_WHILST_FORWARDING_NO_PIPE";
605
+ case State::kBatchCompletedButCancelled:
606
+ return "BATCH_COMPLETED_BUT_CANCELLED";
607
+ case State::kBatchCompletedButCancelledNoPipe:
608
+ return "BATCH_COMPLETED_BUT_CANCELLED_NO_PIPE";
609
+ case State::kCancelledWhilstIdle:
610
+ return "CANCELLED_WHILST_IDLE";
611
+ case State::kCompletedWhilePulledFromPipe:
612
+ return "COMPLETED_WHILE_PULLED_FROM_PIPE";
613
+ case State::kCompletedWhilePushedToPipe:
614
+ return "COMPLETED_WHILE_PUSHED_TO_PIPE";
615
+ case State::kCompletedWhileBatchCompleted:
616
+ return "COMPLETED_WHILE_BATCH_COMPLETED";
617
+ }
618
+ return "UNKNOWN";
619
+ }
620
+
621
+ void BaseCallData::ReceiveMessage::StartOp(CapturedBatch& batch) {
622
+ if (grpc_trace_channel.enabled()) {
623
+ gpr_log(GPR_INFO, "%s ReceiveMessage.StartOp st=%s",
624
+ base_->LogTag().c_str(), StateString(state_));
625
+ }
626
+ switch (state_) {
627
+ case State::kInitial:
628
+ state_ = State::kForwardedBatchNoPipe;
629
+ break;
630
+ case State::kIdle:
631
+ state_ = State::kForwardedBatch;
632
+ break;
633
+ case State::kCancelledWhilstForwarding:
634
+ case State::kCancelledWhilstForwardingNoPipe:
635
+ case State::kBatchCompletedButCancelled:
636
+ case State::kBatchCompletedButCancelledNoPipe:
637
+ case State::kForwardedBatch:
638
+ case State::kForwardedBatchNoPipe:
639
+ case State::kBatchCompleted:
640
+ case State::kBatchCompletedNoPipe:
641
+ case State::kCompletedWhileBatchCompleted:
642
+ case State::kPushedToPipe:
643
+ case State::kPulledFromPipe:
644
+ case State::kCompletedWhilePulledFromPipe:
645
+ case State::kCompletedWhilePushedToPipe:
646
+ Crash(absl::StrFormat("ILLEGAL STATE: %s", StateString(state_)));
647
+ case State::kCancelledWhilstIdle:
648
+ case State::kCancelled:
649
+ return;
650
+ }
651
+ intercepted_slice_buffer_ = batch->payload->recv_message.recv_message;
652
+ intercepted_flags_ = batch->payload->recv_message.flags;
653
+ if (intercepted_flags_ == nullptr) {
654
+ intercepted_flags_ = &scratch_flags_;
655
+ *intercepted_flags_ = 0;
656
+ }
657
+ intercepted_on_complete_ = std::exchange(
658
+ batch->payload->recv_message.recv_message_ready, &on_complete_);
659
+ }
660
+
661
+ template <typename T>
662
+ void BaseCallData::ReceiveMessage::GotPipe(T* pipe_end) {
663
+ if (grpc_trace_channel.enabled()) {
664
+ gpr_log(GPR_INFO, "%s ReceiveMessage.GotPipe st=%s",
665
+ base_->LogTag().c_str(), StateString(state_));
666
+ }
667
+ switch (state_) {
668
+ case State::kInitial:
669
+ state_ = State::kIdle;
670
+ break;
671
+ case State::kForwardedBatchNoPipe:
672
+ state_ = State::kForwardedBatch;
673
+ break;
674
+ case State::kBatchCompletedNoPipe:
675
+ state_ = State::kBatchCompleted;
676
+ Activity::current()->ForceImmediateRepoll();
677
+ break;
678
+ case State::kIdle:
679
+ case State::kForwardedBatch:
680
+ case State::kBatchCompleted:
681
+ case State::kPushedToPipe:
682
+ case State::kPulledFromPipe:
683
+ case State::kCompletedWhilePulledFromPipe:
684
+ case State::kCompletedWhilePushedToPipe:
685
+ case State::kCompletedWhileBatchCompleted:
686
+ case State::kCancelledWhilstForwarding:
687
+ case State::kCancelledWhilstForwardingNoPipe:
688
+ case State::kCancelledWhilstIdle:
689
+ case State::kBatchCompletedButCancelled:
690
+ case State::kBatchCompletedButCancelledNoPipe:
691
+ Crash(absl::StrFormat("ILLEGAL STATE: %s", StateString(state_)));
692
+ case State::kCancelled:
693
+ return;
694
+ }
695
+ interceptor()->GotPipe(pipe_end);
696
+ }
697
+
698
+ void BaseCallData::ReceiveMessage::OnComplete(absl::Status status) {
699
+ if (grpc_trace_channel.enabled()) {
700
+ gpr_log(GPR_INFO, "%s ReceiveMessage.OnComplete st=%s status=%s",
701
+ base_->LogTag().c_str(), StateString(state_),
702
+ status.ToString().c_str());
703
+ }
704
+ switch (state_) {
705
+ case State::kInitial:
706
+ case State::kIdle:
707
+ case State::kPushedToPipe:
708
+ case State::kPulledFromPipe:
709
+ case State::kBatchCompleted:
710
+ case State::kCompletedWhileBatchCompleted:
711
+ case State::kBatchCompletedNoPipe:
712
+ case State::kCancelled:
713
+ case State::kBatchCompletedButCancelled:
714
+ case State::kBatchCompletedButCancelledNoPipe:
715
+ case State::kCancelledWhilstIdle:
716
+ case State::kCompletedWhilePulledFromPipe:
717
+ case State::kCompletedWhilePushedToPipe:
718
+ Crash(absl::StrFormat("ILLEGAL STATE: %s", StateString(state_)));
719
+ case State::kForwardedBatchNoPipe:
720
+ state_ = State::kBatchCompletedNoPipe;
721
+ return;
722
+ case State::kForwardedBatch:
723
+ state_ = State::kBatchCompleted;
724
+ break;
725
+ case State::kCancelledWhilstForwarding:
726
+ state_ = State::kBatchCompletedButCancelled;
727
+ break;
728
+ case State::kCancelledWhilstForwardingNoPipe:
729
+ state_ = State::kBatchCompletedButCancelledNoPipe;
730
+ break;
731
+ }
732
+ completed_status_ = status;
733
+ Flusher flusher(base_);
734
+ ScopedContext ctx(base_);
735
+ base_->WakeInsideCombiner(&flusher);
736
+ }
737
+
738
+ void BaseCallData::ReceiveMessage::Done(const ServerMetadata& metadata,
739
+ Flusher* flusher) {
740
+ if (grpc_trace_channel.enabled()) {
741
+ gpr_log(GPR_INFO, "%s ReceiveMessage.Done st=%s md=%s",
742
+ base_->LogTag().c_str(), StateString(state_),
743
+ metadata.DebugString().c_str());
744
+ }
745
+ switch (state_) {
746
+ case State::kInitial:
747
+ state_ = State::kCancelled;
748
+ break;
749
+ case State::kIdle:
750
+ state_ = State::kCancelledWhilstIdle;
751
+ break;
752
+ case State::kForwardedBatch:
753
+ state_ = State::kCancelledWhilstForwarding;
754
+ break;
755
+ case State::kForwardedBatchNoPipe:
756
+ state_ = State::kCancelledWhilstForwardingNoPipe;
757
+ break;
758
+ case State::kCompletedWhileBatchCompleted:
759
+ case State::kBatchCompleted:
760
+ state_ = State::kCompletedWhileBatchCompleted;
761
+ break;
762
+ case State::kCompletedWhilePulledFromPipe:
763
+ case State::kCompletedWhilePushedToPipe:
764
+ case State::kPulledFromPipe:
765
+ case State::kPushedToPipe: {
766
+ auto status_code =
767
+ metadata.get(GrpcStatusMetadata()).value_or(GRPC_STATUS_UNKNOWN);
768
+ if (status_code == GRPC_STATUS_OK) {
769
+ if (state_ == State::kCompletedWhilePulledFromPipe ||
770
+ state_ == State::kPulledFromPipe) {
771
+ state_ = State::kCompletedWhilePulledFromPipe;
772
+ } else {
773
+ state_ = State::kCompletedWhilePushedToPipe;
774
+ }
775
+ } else {
776
+ push_.reset();
777
+ next_.reset();
778
+ flusher->AddClosure(intercepted_on_complete_,
779
+ StatusFromMetadata(metadata), "recv_message_done");
780
+ state_ = State::kCancelled;
781
+ }
782
+ } break;
783
+ case State::kBatchCompletedNoPipe:
784
+ case State::kBatchCompletedButCancelled:
785
+ case State::kBatchCompletedButCancelledNoPipe:
786
+ Crash(absl::StrFormat("ILLEGAL STATE: %s", StateString(state_)));
787
+ case State::kCancelledWhilstIdle:
788
+ case State::kCancelledWhilstForwarding:
789
+ case State::kCancelledWhilstForwardingNoPipe:
790
+ case State::kCancelled:
791
+ break;
792
+ }
793
+ }
794
+
795
+ void BaseCallData::ReceiveMessage::WakeInsideCombiner(Flusher* flusher,
796
+ bool allow_push_to_pipe) {
797
+ if (grpc_trace_channel.enabled()) {
798
+ gpr_log(GPR_INFO,
799
+ "%s ReceiveMessage.WakeInsideCombiner st=%s push?=%s next?=%s "
800
+ "allow_push_to_pipe=%s",
801
+ base_->LogTag().c_str(), StateString(state_),
802
+ push_.has_value() ? "yes" : "no", next_.has_value() ? "yes" : "no",
803
+ allow_push_to_pipe ? "yes" : "no");
804
+ }
805
+ switch (state_) {
806
+ case State::kInitial:
807
+ case State::kIdle:
808
+ case State::kForwardedBatchNoPipe:
809
+ case State::kForwardedBatch:
810
+ case State::kCancelled:
811
+ case State::kCancelledWhilstForwarding:
812
+ case State::kCancelledWhilstForwardingNoPipe:
813
+ case State::kBatchCompletedNoPipe:
814
+ break;
815
+ case State::kCancelledWhilstIdle:
816
+ interceptor()->Push()->Close();
817
+ state_ = State::kCancelled;
818
+ break;
819
+ case State::kBatchCompletedButCancelled:
820
+ case State::kCompletedWhileBatchCompleted:
821
+ interceptor()->Push()->Close();
822
+ state_ = State::kCancelled;
823
+ flusher->AddClosure(std::exchange(intercepted_on_complete_, nullptr),
824
+ completed_status_, "recv_message");
825
+ break;
826
+ case State::kBatchCompletedButCancelledNoPipe:
827
+ state_ = State::kCancelled;
828
+ flusher->AddClosure(std::exchange(intercepted_on_complete_, nullptr),
829
+ completed_status_, "recv_message");
830
+ break;
831
+ case State::kBatchCompleted:
832
+ if (completed_status_.ok() && intercepted_slice_buffer_->has_value()) {
833
+ if (!allow_push_to_pipe) break;
834
+ if (state_ == State::kBatchCompleted) {
835
+ state_ = State::kPushedToPipe;
836
+ } else {
837
+ state_ = State::kCompletedWhilePushedToPipe;
838
+ }
839
+ auto message = GetContext<Arena>()->MakePooled<Message>();
840
+ message->payload()->Swap(&**intercepted_slice_buffer_);
841
+ message->mutable_flags() = *intercepted_flags_;
842
+ push_ = interceptor()->Push()->Push(std::move(message));
843
+ next_.emplace(interceptor()->Pull()->Next());
844
+ } else {
845
+ interceptor()->Push()->Close();
846
+ state_ = State::kCancelled;
847
+ flusher->AddClosure(std::exchange(intercepted_on_complete_, nullptr),
848
+ completed_status_, "recv_message");
849
+ break;
850
+ }
851
+ GPR_ASSERT(state_ == State::kPushedToPipe ||
852
+ state_ == State::kCompletedWhilePushedToPipe);
853
+ ABSL_FALLTHROUGH_INTENDED;
854
+ case State::kCompletedWhilePushedToPipe:
855
+ case State::kPushedToPipe: {
856
+ GPR_ASSERT(push_.has_value());
857
+ auto r_push = (*push_)();
858
+ if (auto* p = r_push.value_if_ready()) {
859
+ if (grpc_trace_channel.enabled()) {
860
+ gpr_log(GPR_INFO,
861
+ "%s ReceiveMessage.WakeInsideCombiner push complete: %s",
862
+ base_->LogTag().c_str(), *p ? "true" : "false");
863
+ }
864
+ // We haven't pulled through yet, so this certainly shouldn't succeed.
865
+ GPR_ASSERT(!*p);
866
+ state_ = State::kCancelled;
867
+ break;
868
+ }
869
+ GPR_ASSERT(next_.has_value());
870
+ auto r_next = (*next_)();
871
+ if (auto* p = r_next.value_if_ready()) {
872
+ next_.reset();
873
+ if (p->has_value()) {
874
+ *intercepted_slice_buffer_ = std::move(*(**p)->payload());
875
+ *intercepted_flags_ = (**p)->flags();
876
+ if (state_ == State::kCompletedWhilePushedToPipe) {
877
+ state_ = State::kCompletedWhilePulledFromPipe;
878
+ } else {
879
+ state_ = State::kPulledFromPipe;
880
+ }
881
+ } else {
882
+ *intercepted_slice_buffer_ = absl::nullopt;
883
+ *intercepted_flags_ = 0;
884
+ state_ = State::kCancelled;
885
+ flusher->AddClosure(
886
+ std::exchange(intercepted_on_complete_, nullptr),
887
+ p->cancelled() ? absl::CancelledError() : absl::OkStatus(),
888
+ "recv_message");
889
+ }
890
+ if (grpc_trace_channel.enabled()) {
891
+ gpr_log(GPR_INFO,
892
+ "%s ReceiveMessage.WakeInsideCombiner next complete: %s "
893
+ "new_state=%s",
894
+ base_->LogTag().c_str(),
895
+ p->has_value() ? "got message" : "end of stream",
896
+ StateString(state_));
897
+ }
898
+ }
899
+ if (state_ != State::kPulledFromPipe &&
900
+ state_ != State::kCompletedWhilePulledFromPipe) {
901
+ break;
902
+ }
903
+ }
904
+ ABSL_FALLTHROUGH_INTENDED;
905
+ case State::kCompletedWhilePulledFromPipe:
906
+ case State::kPulledFromPipe: {
907
+ GPR_ASSERT(push_.has_value());
908
+ if ((*push_)().ready()) {
909
+ if (grpc_trace_channel.enabled()) {
910
+ gpr_log(GPR_INFO,
911
+ "%s ReceiveMessage.WakeInsideCombiner push complete",
912
+ base_->LogTag().c_str());
913
+ }
914
+ if (state_ == State::kCompletedWhilePulledFromPipe) {
915
+ interceptor()->Push()->Close();
916
+ state_ = State::kCancelled;
917
+ } else {
918
+ state_ = State::kIdle;
919
+ }
920
+ push_.reset();
921
+ flusher->AddClosure(std::exchange(intercepted_on_complete_, nullptr),
922
+ absl::OkStatus(), "recv_message");
923
+ }
924
+ break;
925
+ }
926
+ }
927
+ }
928
+
208
929
  ///////////////////////////////////////////////////////////////////////////////
209
930
  // ClientCallData
210
931
 
@@ -213,28 +934,76 @@ struct ClientCallData::RecvInitialMetadata final {
213
934
  // Initial state; no op seen
214
935
  kInitial,
215
936
  // No op seen, but we have a latch that would like to modify it when we do
216
- kGotLatch,
937
+ kGotPipe,
217
938
  // Responded to trailing metadata prior to getting a recv_initial_metadata
218
939
  kRespondedToTrailingMetadataPriorToHook,
219
940
  // Hooked, no latch yet
220
- kHookedWaitingForLatch,
941
+ kHookedWaitingForPipe,
221
942
  // Hooked, latch seen
222
- kHookedAndGotLatch,
943
+ kHookedAndGotPipe,
223
944
  // Got the callback, haven't set latch yet
224
- kCompleteWaitingForLatch,
945
+ kCompleteWaitingForPipe,
225
946
  // Got the callback and got the latch
226
- kCompleteAndGotLatch,
947
+ kCompleteAndGotPipe,
227
948
  // Got the callback and set the latch
228
- kCompleteAndSetLatch,
949
+ kCompleteAndPushedToPipe,
229
950
  // Called the original callback
230
951
  kResponded,
952
+ // Called the original callback with an error: still need to set the latch
953
+ kRespondedButNeedToClosePipe,
231
954
  };
232
955
 
233
956
  State state = kInitial;
234
957
  grpc_closure* original_on_ready = nullptr;
235
958
  grpc_closure on_ready;
236
959
  grpc_metadata_batch* metadata = nullptr;
237
- Latch<ServerMetadata*>* server_initial_metadata_publisher = nullptr;
960
+ PipeSender<ServerMetadataHandle>* server_initial_metadata_publisher = nullptr;
961
+ absl::optional<PipeSender<ServerMetadataHandle>::PushType> metadata_push_;
962
+ absl::optional<PipeReceiverNextType<ServerMetadataHandle>> metadata_next_;
963
+
964
+ static const char* StateString(State state) {
965
+ switch (state) {
966
+ case kInitial:
967
+ return "INITIAL";
968
+ case kGotPipe:
969
+ return "GOT_PIPE";
970
+ case kRespondedToTrailingMetadataPriorToHook:
971
+ return "RESPONDED_TO_TRAILING_METADATA_PRIOR_TO_HOOK";
972
+ case kHookedWaitingForPipe:
973
+ return "HOOKED_WAITING_FOR_PIPE";
974
+ case kHookedAndGotPipe:
975
+ return "HOOKED_AND_GOT_PIPE";
976
+ case kCompleteWaitingForPipe:
977
+ return "COMPLETE_WAITING_FOR_PIPE";
978
+ case kCompleteAndGotPipe:
979
+ return "COMPLETE_AND_GOT_PIPE";
980
+ case kCompleteAndPushedToPipe:
981
+ return "COMPLETE_AND_PUSHED_TO_PIPE";
982
+ case kResponded:
983
+ return "RESPONDED";
984
+ case kRespondedButNeedToClosePipe:
985
+ return "RESPONDED_BUT_NEED_TO_CLOSE_PIPE";
986
+ }
987
+ return "UNKNOWN";
988
+ }
989
+
990
+ bool AllowRecvMessage() const {
991
+ switch (state) {
992
+ case kInitial:
993
+ case kGotPipe:
994
+ case kHookedWaitingForPipe:
995
+ case kHookedAndGotPipe:
996
+ case kCompleteWaitingForPipe:
997
+ case kCompleteAndGotPipe:
998
+ case kCompleteAndPushedToPipe:
999
+ case kRespondedToTrailingMetadataPriorToHook:
1000
+ return false;
1001
+ case kResponded:
1002
+ case kRespondedButNeedToClosePipe:
1003
+ return true;
1004
+ }
1005
+ GPR_UNREACHABLE_CODE(return false);
1006
+ }
238
1007
  };
239
1008
 
240
1009
  class ClientCallData::PollContext {
@@ -252,38 +1021,79 @@ class ClientCallData::PollContext {
252
1021
  PollContext& operator=(const PollContext&) = delete;
253
1022
 
254
1023
  void Run() {
1024
+ GPR_DEBUG_ASSERT(HasContext<Arena>());
1025
+ if (grpc_trace_channel.enabled()) {
1026
+ gpr_log(GPR_INFO, "%s ClientCallData.PollContext.Run %s",
1027
+ self_->LogTag().c_str(), self_->DebugString().c_str());
1028
+ }
255
1029
  GPR_ASSERT(have_scoped_activity_);
256
1030
  repoll_ = false;
257
- if (self_->server_initial_metadata_latch() != nullptr) {
1031
+ if (self_->send_message() != nullptr) {
1032
+ self_->send_message()->WakeInsideCombiner(flusher_, true);
1033
+ }
1034
+ if (self_->receive_message() != nullptr) {
1035
+ self_->receive_message()->WakeInsideCombiner(
1036
+ flusher_, self_->recv_initial_metadata_ == nullptr
1037
+ ? true
1038
+ : self_->recv_initial_metadata_->AllowRecvMessage());
1039
+ }
1040
+ if (self_->server_initial_metadata_pipe() != nullptr) {
1041
+ if (self_->recv_initial_metadata_->metadata_push_.has_value()) {
1042
+ if ((*self_->recv_initial_metadata_->metadata_push_)().ready()) {
1043
+ self_->recv_initial_metadata_->metadata_push_.reset();
1044
+ }
1045
+ }
258
1046
  switch (self_->recv_initial_metadata_->state) {
259
1047
  case RecvInitialMetadata::kInitial:
260
- case RecvInitialMetadata::kGotLatch:
261
- case RecvInitialMetadata::kHookedWaitingForLatch:
262
- case RecvInitialMetadata::kHookedAndGotLatch:
263
- case RecvInitialMetadata::kCompleteWaitingForLatch:
1048
+ case RecvInitialMetadata::kGotPipe:
1049
+ case RecvInitialMetadata::kHookedWaitingForPipe:
1050
+ case RecvInitialMetadata::kHookedAndGotPipe:
1051
+ case RecvInitialMetadata::kCompleteWaitingForPipe:
264
1052
  case RecvInitialMetadata::kResponded:
265
1053
  case RecvInitialMetadata::kRespondedToTrailingMetadataPriorToHook:
266
1054
  break;
267
- case RecvInitialMetadata::kCompleteAndGotLatch:
1055
+ case RecvInitialMetadata::kRespondedButNeedToClosePipe:
1056
+ self_->recv_initial_metadata_->server_initial_metadata_publisher
1057
+ ->Close();
1058
+ self_->recv_initial_metadata_->state =
1059
+ RecvInitialMetadata::kResponded;
1060
+ break;
1061
+ case RecvInitialMetadata::kCompleteAndGotPipe:
268
1062
  self_->recv_initial_metadata_->state =
269
- RecvInitialMetadata::kCompleteAndSetLatch;
270
- self_->recv_initial_metadata_->server_initial_metadata_publisher->Set(
271
- self_->recv_initial_metadata_->metadata);
1063
+ RecvInitialMetadata::kCompleteAndPushedToPipe;
1064
+ GPR_ASSERT(
1065
+ !self_->recv_initial_metadata_->metadata_push_.has_value());
1066
+ GPR_ASSERT(
1067
+ !self_->recv_initial_metadata_->metadata_next_.has_value());
1068
+ self_->recv_initial_metadata_->metadata_push_.emplace(
1069
+ self_->recv_initial_metadata_->server_initial_metadata_publisher
1070
+ ->Push(ServerMetadataHandle(
1071
+ self_->recv_initial_metadata_->metadata,
1072
+ Arena::PooledDeleter(nullptr))));
1073
+ repoll_ = true; // ensure Push() gets polled.
1074
+ self_->recv_initial_metadata_->metadata_next_.emplace(
1075
+ self_->server_initial_metadata_pipe()->receiver.Next());
272
1076
  ABSL_FALLTHROUGH_INTENDED;
273
- case RecvInitialMetadata::kCompleteAndSetLatch: {
274
- Poll<ServerMetadata**> p =
275
- self_->server_initial_metadata_latch()->Wait()();
276
- if (ServerMetadata*** ppp = absl::get_if<ServerMetadata**>(&p)) {
277
- ServerMetadata* md = **ppp;
278
- if (self_->recv_initial_metadata_->metadata != md) {
279
- *self_->recv_initial_metadata_->metadata = std::move(*md);
1077
+ case RecvInitialMetadata::kCompleteAndPushedToPipe: {
1078
+ GPR_ASSERT(self_->recv_initial_metadata_->metadata_next_.has_value());
1079
+ Poll<NextResult<ServerMetadataHandle>> p =
1080
+ (*self_->recv_initial_metadata_->metadata_next_)();
1081
+ if (NextResult<ServerMetadataHandle>* nr = p.value_if_ready()) {
1082
+ if (nr->has_value()) {
1083
+ ServerMetadataHandle md = std::move(nr->value());
1084
+ if (self_->recv_initial_metadata_->metadata != md.get()) {
1085
+ *self_->recv_initial_metadata_->metadata = std::move(*md);
1086
+ }
1087
+ } else {
1088
+ self_->recv_initial_metadata_->metadata->Clear();
280
1089
  }
281
1090
  self_->recv_initial_metadata_->state =
282
1091
  RecvInitialMetadata::kResponded;
1092
+ repoll_ = true;
283
1093
  flusher_->AddClosure(
284
1094
  std::exchange(self_->recv_initial_metadata_->original_on_ready,
285
1095
  nullptr),
286
- GRPC_ERROR_NONE,
1096
+ absl::OkStatus(),
287
1097
  "wake_inside_combiner:recv_initial_metadata_ready");
288
1098
  }
289
1099
  } break;
@@ -298,98 +1108,109 @@ class ClientCallData::PollContext {
298
1108
  case SendInitialState::kForwarded: {
299
1109
  // Poll the promise once since we're waiting for it.
300
1110
  Poll<ServerMetadataHandle> poll = self_->promise_();
301
- if (auto* r = absl::get_if<ServerMetadataHandle>(&poll)) {
302
- auto* md = UnwrapMetadata(std::move(*r));
303
- bool destroy_md = true;
1111
+ if (grpc_trace_channel.enabled()) {
1112
+ gpr_log(GPR_INFO, "%s ClientCallData.PollContext.Run: poll=%s; %s",
1113
+ self_->LogTag().c_str(),
1114
+ PollToString(poll,
1115
+ [](const ServerMetadataHandle& h) {
1116
+ return h->DebugString();
1117
+ })
1118
+ .c_str(),
1119
+ self_->DebugString().c_str());
1120
+ }
1121
+ if (auto* r = poll.value_if_ready()) {
1122
+ auto md = std::move(*r);
1123
+ if (self_->send_message() != nullptr) {
1124
+ self_->send_message()->Done(*md, flusher_);
1125
+ }
1126
+ if (self_->receive_message() != nullptr) {
1127
+ self_->receive_message()->Done(*md, flusher_);
1128
+ }
304
1129
  if (self_->recv_trailing_state_ == RecvTrailingState::kComplete) {
305
- if (self_->recv_trailing_metadata_ != md) {
1130
+ if (self_->recv_trailing_metadata_ != md.get()) {
306
1131
  *self_->recv_trailing_metadata_ = std::move(*md);
307
- } else {
308
- destroy_md = false;
309
1132
  }
310
1133
  self_->recv_trailing_state_ = RecvTrailingState::kResponded;
311
1134
  flusher_->AddClosure(
312
1135
  std::exchange(self_->original_recv_trailing_metadata_ready_,
313
1136
  nullptr),
314
- GRPC_ERROR_NONE, "wake_inside_combiner:recv_trailing_ready:1");
1137
+ absl::OkStatus(), "wake_inside_combiner:recv_trailing_ready:1");
315
1138
  if (self_->recv_initial_metadata_ != nullptr) {
316
1139
  switch (self_->recv_initial_metadata_->state) {
317
1140
  case RecvInitialMetadata::kInitial:
318
- case RecvInitialMetadata::kGotLatch:
1141
+ case RecvInitialMetadata::kGotPipe:
319
1142
  self_->recv_initial_metadata_->state = RecvInitialMetadata::
320
1143
  kRespondedToTrailingMetadataPriorToHook;
321
1144
  break;
322
1145
  case RecvInitialMetadata::
323
1146
  kRespondedToTrailingMetadataPriorToHook:
324
- abort(); // not reachable
1147
+ case RecvInitialMetadata::kRespondedButNeedToClosePipe:
1148
+ Crash(absl::StrFormat("ILLEGAL STATE: %s",
1149
+ RecvInitialMetadata::StateString(
1150
+ self_->recv_initial_metadata_
1151
+ ->state))); // not reachable
325
1152
  break;
326
- case RecvInitialMetadata::kHookedWaitingForLatch:
327
- case RecvInitialMetadata::kHookedAndGotLatch:
1153
+ case RecvInitialMetadata::kHookedWaitingForPipe:
1154
+ case RecvInitialMetadata::kHookedAndGotPipe:
328
1155
  case RecvInitialMetadata::kResponded:
329
- case RecvInitialMetadata::kCompleteAndGotLatch:
330
- case RecvInitialMetadata::kCompleteAndSetLatch:
1156
+ case RecvInitialMetadata::kCompleteAndGotPipe:
1157
+ case RecvInitialMetadata::kCompleteAndPushedToPipe:
331
1158
  break;
332
- case RecvInitialMetadata::kCompleteWaitingForLatch:
1159
+ case RecvInitialMetadata::kCompleteWaitingForPipe:
333
1160
  self_->recv_initial_metadata_->state =
334
1161
  RecvInitialMetadata::kResponded;
335
1162
  flusher_->AddClosure(
336
1163
  std::exchange(
337
1164
  self_->recv_initial_metadata_->original_on_ready,
338
1165
  nullptr),
339
- GRPC_ERROR_CANCELLED,
1166
+ absl::CancelledError(),
340
1167
  "wake_inside_combiner:recv_initial_metadata_ready");
341
1168
  }
342
1169
  }
343
1170
  } else {
344
- GPR_ASSERT(*md->get_pointer(GrpcStatusMetadata()) !=
345
- GRPC_STATUS_OK);
346
- grpc_error_handle error = grpc_error_set_int(
347
- GRPC_ERROR_CREATE_FROM_STATIC_STRING(
348
- "early return from promise based filter"),
349
- GRPC_ERROR_INT_GRPC_STATUS,
350
- *md->get_pointer(GrpcStatusMetadata()));
351
- if (auto* message = md->get_pointer(GrpcMessageMetadata())) {
352
- error = grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE,
353
- message->as_string_view());
354
- }
355
- GRPC_ERROR_UNREF(self_->cancelled_error_);
356
- self_->cancelled_error_ = GRPC_ERROR_REF(error);
1171
+ self_->cancelled_error_ = StatusFromMetadata(*md);
1172
+ GPR_ASSERT(!self_->cancelled_error_.ok());
357
1173
  if (self_->recv_initial_metadata_ != nullptr) {
358
1174
  switch (self_->recv_initial_metadata_->state) {
359
1175
  case RecvInitialMetadata::kInitial:
360
- case RecvInitialMetadata::kGotLatch:
1176
+ case RecvInitialMetadata::kGotPipe:
361
1177
  self_->recv_initial_metadata_->state = RecvInitialMetadata::
362
1178
  kRespondedToTrailingMetadataPriorToHook;
363
1179
  break;
364
- case RecvInitialMetadata::kHookedWaitingForLatch:
365
- case RecvInitialMetadata::kHookedAndGotLatch:
1180
+ case RecvInitialMetadata::kHookedWaitingForPipe:
1181
+ case RecvInitialMetadata::kHookedAndGotPipe:
366
1182
  case RecvInitialMetadata::kResponded:
367
1183
  break;
368
1184
  case RecvInitialMetadata::
369
1185
  kRespondedToTrailingMetadataPriorToHook:
370
- abort(); // not reachable
1186
+ case RecvInitialMetadata::kRespondedButNeedToClosePipe:
1187
+ Crash(absl::StrFormat("ILLEGAL STATE: %s",
1188
+ RecvInitialMetadata::StateString(
1189
+ self_->recv_initial_metadata_
1190
+ ->state))); // not reachable
371
1191
  break;
372
- case RecvInitialMetadata::kCompleteWaitingForLatch:
373
- case RecvInitialMetadata::kCompleteAndGotLatch:
374
- case RecvInitialMetadata::kCompleteAndSetLatch:
1192
+ case RecvInitialMetadata::kCompleteWaitingForPipe:
1193
+ case RecvInitialMetadata::kCompleteAndGotPipe:
1194
+ case RecvInitialMetadata::kCompleteAndPushedToPipe:
375
1195
  self_->recv_initial_metadata_->state =
376
1196
  RecvInitialMetadata::kResponded;
377
1197
  flusher_->AddClosure(
378
1198
  std::exchange(
379
1199
  self_->recv_initial_metadata_->original_on_ready,
380
1200
  nullptr),
381
- GRPC_ERROR_REF(error),
1201
+ self_->cancelled_error_,
382
1202
  "wake_inside_combiner:recv_initial_metadata_ready");
383
1203
  }
384
1204
  }
385
1205
  if (self_->send_initial_state_ == SendInitialState::kQueued) {
386
1206
  self_->send_initial_state_ = SendInitialState::kCancelled;
387
- self_->send_initial_metadata_batch_.CancelWith(error, flusher_);
1207
+ self_->send_initial_metadata_batch_.CancelWith(
1208
+ self_->cancelled_error_, flusher_);
388
1209
  } else {
389
1210
  GPR_ASSERT(
390
1211
  self_->recv_trailing_state_ == RecvTrailingState::kInitial ||
391
1212
  self_->recv_trailing_state_ == RecvTrailingState::kForwarded);
392
- self_->call_combiner()->Cancel(GRPC_ERROR_REF(error));
1213
+ self_->call_combiner()->Cancel(self_->cancelled_error_);
393
1214
  CapturedBatch b(grpc_make_transport_stream_op(GRPC_CLOSURE_CREATE(
394
1215
  [](void* p, grpc_error_handle) {
395
1216
  GRPC_CALL_COMBINER_STOP(static_cast<CallCombiner*>(p),
@@ -397,17 +1218,15 @@ class ClientCallData::PollContext {
397
1218
  },
398
1219
  self_->call_combiner(), nullptr)));
399
1220
  b->cancel_stream = true;
400
- b->payload->cancel_stream.cancel_error = error;
1221
+ b->payload->cancel_stream.cancel_error = self_->cancelled_error_;
401
1222
  b.ResumeWith(flusher_);
402
1223
  }
1224
+ self_->cancelling_metadata_ = std::move(md);
403
1225
  self_->recv_trailing_state_ = RecvTrailingState::kCancelled;
404
1226
  }
405
- if (destroy_md) {
406
- md->~grpc_metadata_batch();
407
- }
1227
+ self_->promise_ = ArenaPromise<ServerMetadataHandle>();
408
1228
  scoped_activity_.Destroy();
409
1229
  have_scoped_activity_ = false;
410
- self_->promise_ = ArenaPromise<ServerMetadataHandle>();
411
1230
  }
412
1231
  } break;
413
1232
  case SendInitialState::kInitial:
@@ -420,7 +1239,7 @@ class ClientCallData::PollContext {
420
1239
  flusher_->AddClosure(
421
1240
  std::exchange(self_->original_recv_trailing_metadata_ready_,
422
1241
  nullptr),
423
- GRPC_ERROR_NONE, "wake_inside_combiner:recv_trailing_ready:2");
1242
+ absl::OkStatus(), "wake_inside_combiner:recv_trailing_ready:2");
424
1243
  }
425
1244
  break;
426
1245
  }
@@ -437,6 +1256,7 @@ class ClientCallData::PollContext {
437
1256
  auto run = [](void* p, grpc_error_handle) {
438
1257
  auto* next_poll = static_cast<NextPoll*>(p);
439
1258
  {
1259
+ ScopedContext ctx(next_poll->call_data);
440
1260
  Flusher flusher(next_poll->call_data);
441
1261
  next_poll->call_data->WakeInsideCombiner(&flusher);
442
1262
  }
@@ -445,12 +1265,12 @@ class ClientCallData::PollContext {
445
1265
  };
446
1266
  // Unique ptr --> release to suppress clang-tidy warnings about allocating
447
1267
  // in a destructor.
448
- auto* p = absl::make_unique<NextPoll>().release();
1268
+ auto* p = std::make_unique<NextPoll>().release();
449
1269
  p->call_stack = self_->call_stack();
450
1270
  p->call_data = self_;
451
1271
  GRPC_CALL_STACK_REF(self_->call_stack(), "re-poll");
452
1272
  GRPC_CLOSURE_INIT(p, run, p, nullptr);
453
- flusher_->AddClosure(p, GRPC_ERROR_NONE, "re-poll");
1273
+ flusher_->AddClosure(p, absl::OkStatus(), "re-poll");
454
1274
  }
455
1275
  }
456
1276
 
@@ -471,29 +1291,93 @@ class ClientCallData::PollContext {
471
1291
  ClientCallData::ClientCallData(grpc_call_element* elem,
472
1292
  const grpc_call_element_args* args,
473
1293
  uint8_t flags)
474
- : BaseCallData(elem, args, flags) {
1294
+ : BaseCallData(
1295
+ elem, args, flags,
1296
+ [args]() {
1297
+ return args->arena->New<ReceiveInterceptor>(args->arena);
1298
+ },
1299
+ [args]() { return args->arena->New<SendInterceptor>(args->arena); }),
1300
+ initial_metadata_outstanding_token_(
1301
+ (flags & kFilterIsLast) != 0
1302
+ ? ClientInitialMetadataOutstandingToken::New(arena())
1303
+ : ClientInitialMetadataOutstandingToken::Empty()) {
475
1304
  GRPC_CLOSURE_INIT(&recv_trailing_metadata_ready_,
476
1305
  RecvTrailingMetadataReadyCallback, this,
477
1306
  grpc_schedule_on_exec_ctx);
478
- if (server_initial_metadata_latch() != nullptr) {
1307
+ if (server_initial_metadata_pipe() != nullptr) {
479
1308
  recv_initial_metadata_ = arena()->New<RecvInitialMetadata>();
480
1309
  }
481
1310
  }
482
1311
 
483
1312
  ClientCallData::~ClientCallData() {
484
1313
  GPR_ASSERT(poll_ctx_ == nullptr);
485
- GRPC_ERROR_UNREF(cancelled_error_);
486
1314
  if (recv_initial_metadata_ != nullptr) {
487
1315
  recv_initial_metadata_->~RecvInitialMetadata();
488
1316
  }
489
1317
  }
490
1318
 
1319
+ std::string ClientCallData::DebugTag() const {
1320
+ return absl::StrFormat("PBF_CLIENT[%p]: [%s] ", this, elem()->filter->name);
1321
+ }
1322
+
491
1323
  // Activity implementation.
492
- void ClientCallData::ForceImmediateRepoll() {
1324
+ void ClientCallData::ForceImmediateRepoll(WakeupMask) {
493
1325
  GPR_ASSERT(poll_ctx_ != nullptr);
494
1326
  poll_ctx_->Repoll();
495
1327
  }
496
1328
 
1329
+ const char* ClientCallData::StateString(SendInitialState state) {
1330
+ switch (state) {
1331
+ case SendInitialState::kInitial:
1332
+ return "INITIAL";
1333
+ case SendInitialState::kQueued:
1334
+ return "QUEUED";
1335
+ case SendInitialState::kForwarded:
1336
+ return "FORWARDED";
1337
+ case SendInitialState::kCancelled:
1338
+ return "CANCELLED";
1339
+ }
1340
+ return "UNKNOWN";
1341
+ }
1342
+
1343
+ const char* ClientCallData::StateString(RecvTrailingState state) {
1344
+ switch (state) {
1345
+ case RecvTrailingState::kInitial:
1346
+ return "INITIAL";
1347
+ case RecvTrailingState::kQueued:
1348
+ return "QUEUED";
1349
+ case RecvTrailingState::kComplete:
1350
+ return "COMPLETE";
1351
+ case RecvTrailingState::kForwarded:
1352
+ return "FORWARDED";
1353
+ case RecvTrailingState::kCancelled:
1354
+ return "CANCELLED";
1355
+ case RecvTrailingState::kResponded:
1356
+ return "RESPONDED";
1357
+ }
1358
+ return "UNKNOWN";
1359
+ }
1360
+
1361
+ std::string ClientCallData::DebugString() const {
1362
+ std::vector<absl::string_view> captured;
1363
+ if (send_initial_metadata_batch_.is_captured()) {
1364
+ captured.push_back("send_initial_metadata");
1365
+ }
1366
+ if (send_message() != nullptr && send_message()->HaveCapturedBatch()) {
1367
+ captured.push_back("send_message");
1368
+ }
1369
+ return absl::StrCat(
1370
+ "has_promise=", promise_.has_value() ? "true" : "false",
1371
+ " sent_initial_state=", StateString(send_initial_state_),
1372
+ " recv_trailing_state=", StateString(recv_trailing_state_), " captured={",
1373
+ absl::StrJoin(captured, ","), "}",
1374
+ server_initial_metadata_pipe() == nullptr
1375
+ ? ""
1376
+ : absl::StrCat(" recv_initial_metadata=",
1377
+ RecvInitialMetadata::StateString(
1378
+ recv_initial_metadata_->state)));
1379
+ }
1380
+
497
1381
  // Handle one grpc_transport_stream_op_batch
498
1382
  void ClientCallData::StartBatch(grpc_transport_stream_op_batch* b) {
499
1383
  // Fake out the activity based context.
@@ -501,6 +1385,11 @@ void ClientCallData::StartBatch(grpc_transport_stream_op_batch* b) {
501
1385
  CapturedBatch batch(b);
502
1386
  Flusher flusher(this);
503
1387
 
1388
+ if (grpc_trace_channel.enabled()) {
1389
+ gpr_log(GPR_INFO, "%s StartBatch %s", LogTag().c_str(),
1390
+ DebugString().c_str());
1391
+ }
1392
+
504
1393
  // If this is a cancel stream, cancel anything we have pending and propagate
505
1394
  // the cancellation.
506
1395
  if (batch->cancel_stream) {
@@ -508,9 +1397,10 @@ void ClientCallData::StartBatch(grpc_transport_stream_op_batch* b) {
508
1397
  !batch->send_trailing_metadata && !batch->send_message &&
509
1398
  !batch->recv_initial_metadata && !batch->recv_message &&
510
1399
  !batch->recv_trailing_metadata);
511
- Cancel(batch->payload->cancel_stream.cancel_error);
1400
+ PollContext poll_ctx(this, &flusher);
1401
+ Cancel(batch->payload->cancel_stream.cancel_error, &flusher);
1402
+ poll_ctx.Run();
512
1403
  if (is_last()) {
513
- GRPC_ERROR_UNREF(batch->payload->cancel_stream.cancel_error);
514
1404
  batch.CompleteWith(&flusher);
515
1405
  } else {
516
1406
  batch.ResumeWith(&flusher);
@@ -523,21 +1413,25 @@ void ClientCallData::StartBatch(grpc_transport_stream_op_batch* b) {
523
1413
  switch (recv_initial_metadata_->state) {
524
1414
  case RecvInitialMetadata::kInitial:
525
1415
  recv_initial_metadata_->state =
526
- RecvInitialMetadata::kHookedWaitingForLatch;
1416
+ RecvInitialMetadata::kHookedWaitingForPipe;
527
1417
  break;
528
- case RecvInitialMetadata::kGotLatch:
529
- recv_initial_metadata_->state = RecvInitialMetadata::kHookedAndGotLatch;
1418
+ case RecvInitialMetadata::kGotPipe:
1419
+ recv_initial_metadata_->state = RecvInitialMetadata::kHookedAndGotPipe;
530
1420
  break;
531
1421
  case RecvInitialMetadata::kRespondedToTrailingMetadataPriorToHook:
532
1422
  hook = false;
533
1423
  break;
534
- case RecvInitialMetadata::kHookedWaitingForLatch:
535
- case RecvInitialMetadata::kHookedAndGotLatch:
536
- case RecvInitialMetadata::kCompleteWaitingForLatch:
537
- case RecvInitialMetadata::kCompleteAndGotLatch:
538
- case RecvInitialMetadata::kCompleteAndSetLatch:
1424
+ case RecvInitialMetadata::kHookedWaitingForPipe:
1425
+ case RecvInitialMetadata::kHookedAndGotPipe:
1426
+ case RecvInitialMetadata::kCompleteWaitingForPipe:
1427
+ case RecvInitialMetadata::kCompleteAndGotPipe:
1428
+ case RecvInitialMetadata::kCompleteAndPushedToPipe:
539
1429
  case RecvInitialMetadata::kResponded:
540
- abort(); // unreachable
1430
+ case RecvInitialMetadata::kRespondedButNeedToClosePipe:
1431
+ Crash(absl::StrFormat(
1432
+ "ILLEGAL STATE: %s",
1433
+ RecvInitialMetadata::StateString(
1434
+ recv_initial_metadata_->state))); // unreachable
541
1435
  }
542
1436
  if (hook) {
543
1437
  auto cb = [](void* ptr, grpc_error_handle error) {
@@ -554,13 +1448,23 @@ void ClientCallData::StartBatch(grpc_transport_stream_op_batch* b) {
554
1448
  }
555
1449
  }
556
1450
 
1451
+ bool wake = false;
1452
+ if (send_message() != nullptr && batch->send_message) {
1453
+ send_message()->StartOp(batch);
1454
+ wake = true;
1455
+ }
1456
+ if (receive_message() != nullptr && batch->recv_message) {
1457
+ receive_message()->StartOp(batch);
1458
+ wake = true;
1459
+ }
1460
+
557
1461
  // send_initial_metadata: seeing this triggers the start of the promise part
558
1462
  // of this filter.
559
1463
  if (batch->send_initial_metadata) {
560
1464
  // If we're already cancelled, just terminate the batch.
561
1465
  if (send_initial_state_ == SendInitialState::kCancelled ||
562
1466
  recv_trailing_state_ == RecvTrailingState::kCancelled) {
563
- batch.CancelWith(GRPC_ERROR_REF(cancelled_error_), &flusher);
1467
+ batch.CancelWith(cancelled_error_, &flusher);
564
1468
  } else {
565
1469
  // Otherwise, we should not have seen a send_initial_metadata op yet.
566
1470
  GPR_ASSERT(send_initial_state_ == SendInitialState::kInitial);
@@ -575,35 +1479,43 @@ void ClientCallData::StartBatch(grpc_transport_stream_op_batch* b) {
575
1479
  send_initial_metadata_batch_ = batch;
576
1480
  // And kick start the promise.
577
1481
  StartPromise(&flusher);
1482
+ wake = false;
578
1483
  }
579
1484
  } else if (batch->recv_trailing_metadata) {
580
1485
  // recv_trailing_metadata *without* send_initial_metadata: hook it so we
581
1486
  // can respond to it, and push it down.
582
1487
  if (recv_trailing_state_ == RecvTrailingState::kCancelled) {
583
- batch.CancelWith(GRPC_ERROR_REF(cancelled_error_), &flusher);
1488
+ batch.CancelWith(cancelled_error_, &flusher);
584
1489
  } else {
585
1490
  GPR_ASSERT(recv_trailing_state_ == RecvTrailingState::kInitial);
586
1491
  recv_trailing_state_ = RecvTrailingState::kForwarded;
587
1492
  HookRecvTrailingMetadata(batch);
588
1493
  }
589
- } else if (!GRPC_ERROR_IS_NONE(cancelled_error_)) {
590
- batch.CancelWith(GRPC_ERROR_REF(cancelled_error_), &flusher);
1494
+ } else if (!cancelled_error_.ok()) {
1495
+ batch.CancelWith(cancelled_error_, &flusher);
1496
+ }
1497
+
1498
+ if (wake) {
1499
+ PollContext(this, &flusher).Run();
591
1500
  }
592
1501
 
593
1502
  if (batch.is_captured()) {
594
1503
  if (!is_last()) {
595
1504
  batch.ResumeWith(&flusher);
596
1505
  } else {
597
- batch.CancelWith(GRPC_ERROR_CANCELLED, &flusher);
1506
+ batch.CancelWith(absl::CancelledError(), &flusher);
598
1507
  }
599
1508
  }
600
1509
  }
601
1510
 
602
1511
  // Handle cancellation.
603
- void ClientCallData::Cancel(grpc_error_handle error) {
1512
+ void ClientCallData::Cancel(grpc_error_handle error, Flusher* flusher) {
1513
+ if (grpc_trace_channel.enabled()) {
1514
+ gpr_log(GPR_INFO, "%s Cancel error=%s", LogTag().c_str(),
1515
+ error.ToString().c_str());
1516
+ }
604
1517
  // Track the latest reason for cancellation.
605
- GRPC_ERROR_UNREF(cancelled_error_);
606
- cancelled_error_ = GRPC_ERROR_REF(error);
1518
+ cancelled_error_ = error;
607
1519
  // Stop running the promise.
608
1520
  promise_ = ArenaPromise<ServerMetadataHandle>();
609
1521
  // If we have an op queued, fail that op.
@@ -613,50 +1525,41 @@ void ClientCallData::Cancel(grpc_error_handle error) {
613
1525
  if (recv_trailing_state_ == RecvTrailingState::kQueued) {
614
1526
  recv_trailing_state_ = RecvTrailingState::kCancelled;
615
1527
  }
616
- struct FailBatch : public grpc_closure {
617
- CapturedBatch batch;
618
- ClientCallData* call;
619
- };
620
- auto fail = [](void* p, grpc_error_handle error) {
621
- auto* f = static_cast<FailBatch*>(p);
622
- {
623
- Flusher flusher(f->call);
624
- f->batch.CancelWith(GRPC_ERROR_REF(error), &flusher);
625
- GRPC_CALL_STACK_UNREF(f->call->call_stack(), "cancel pending batch");
626
- }
627
- delete f;
628
- };
629
- auto* b = new FailBatch();
630
- GRPC_CLOSURE_INIT(b, fail, b, nullptr);
631
- b->batch = std::move(send_initial_metadata_batch_);
632
- b->call = this;
633
- GRPC_CALL_STACK_REF(call_stack(), "cancel pending batch");
634
- GRPC_CALL_COMBINER_START(call_combiner(), b,
635
- GRPC_ERROR_REF(cancelled_error_),
636
- "cancel pending batch");
1528
+ send_initial_metadata_batch_.CancelWith(error, flusher);
637
1529
  } else {
638
1530
  send_initial_state_ = SendInitialState::kCancelled;
639
1531
  }
640
1532
  if (recv_initial_metadata_ != nullptr) {
641
1533
  switch (recv_initial_metadata_->state) {
642
- case RecvInitialMetadata::kCompleteWaitingForLatch:
643
- case RecvInitialMetadata::kCompleteAndGotLatch:
644
- case RecvInitialMetadata::kCompleteAndSetLatch:
1534
+ case RecvInitialMetadata::kCompleteWaitingForPipe:
1535
+ case RecvInitialMetadata::kCompleteAndGotPipe:
1536
+ case RecvInitialMetadata::kCompleteAndPushedToPipe:
645
1537
  recv_initial_metadata_->state = RecvInitialMetadata::kResponded;
646
1538
  GRPC_CALL_COMBINER_START(
647
1539
  call_combiner(),
648
1540
  std::exchange(recv_initial_metadata_->original_on_ready, nullptr),
649
- GRPC_ERROR_REF(error), "propagate cancellation");
1541
+ error, "propagate cancellation");
650
1542
  break;
651
1543
  case RecvInitialMetadata::kInitial:
652
- case RecvInitialMetadata::kGotLatch:
1544
+ case RecvInitialMetadata::kGotPipe:
653
1545
  case RecvInitialMetadata::kRespondedToTrailingMetadataPriorToHook:
654
- case RecvInitialMetadata::kHookedWaitingForLatch:
655
- case RecvInitialMetadata::kHookedAndGotLatch:
1546
+ case RecvInitialMetadata::kHookedWaitingForPipe:
1547
+ case RecvInitialMetadata::kHookedAndGotPipe:
656
1548
  case RecvInitialMetadata::kResponded:
657
1549
  break;
1550
+ case RecvInitialMetadata::kRespondedButNeedToClosePipe:
1551
+ Crash(absl::StrFormat(
1552
+ "ILLEGAL STATE: %s",
1553
+ RecvInitialMetadata::StateString(recv_initial_metadata_->state)));
1554
+ break;
658
1555
  }
659
1556
  }
1557
+ if (send_message() != nullptr) {
1558
+ send_message()->Done(*ServerMetadataFromStatus(error), flusher);
1559
+ }
1560
+ if (receive_message() != nullptr) {
1561
+ receive_message()->Done(*ServerMetadataFromStatus(error), flusher);
1562
+ }
660
1563
  }
661
1564
 
662
1565
  // Begin running the promise - which will ultimately take some initial
@@ -670,7 +1573,16 @@ void ClientCallData::StartPromise(Flusher* flusher) {
670
1573
  promise_ = filter->MakeCallPromise(
671
1574
  CallArgs{WrapMetadata(send_initial_metadata_batch_->payload
672
1575
  ->send_initial_metadata.send_initial_metadata),
673
- server_initial_metadata_latch()},
1576
+ std::move(initial_metadata_outstanding_token_), nullptr,
1577
+ server_initial_metadata_pipe() == nullptr
1578
+ ? nullptr
1579
+ : &server_initial_metadata_pipe()->sender,
1580
+ send_message() == nullptr
1581
+ ? nullptr
1582
+ : send_message()->interceptor()->original_receiver(),
1583
+ receive_message() == nullptr
1584
+ ? nullptr
1585
+ : receive_message()->interceptor()->original_sender()},
674
1586
  [this](CallArgs call_args) {
675
1587
  return MakeNextPromise(std::move(call_args));
676
1588
  });
@@ -678,36 +1590,68 @@ void ClientCallData::StartPromise(Flusher* flusher) {
678
1590
  }
679
1591
 
680
1592
  void ClientCallData::RecvInitialMetadataReady(grpc_error_handle error) {
681
- ScopedContext context(this);
682
- switch (recv_initial_metadata_->state) {
683
- case RecvInitialMetadata::kHookedWaitingForLatch:
684
- recv_initial_metadata_->state =
685
- RecvInitialMetadata::kCompleteWaitingForLatch;
686
- break;
687
- case RecvInitialMetadata::kHookedAndGotLatch:
688
- recv_initial_metadata_->state = RecvInitialMetadata::kCompleteAndGotLatch;
689
- break;
690
- case RecvInitialMetadata::kInitial:
691
- case RecvInitialMetadata::kGotLatch:
692
- case RecvInitialMetadata::kCompleteWaitingForLatch:
693
- case RecvInitialMetadata::kCompleteAndGotLatch:
694
- case RecvInitialMetadata::kCompleteAndSetLatch:
695
- case RecvInitialMetadata::kResponded:
696
- case RecvInitialMetadata::kRespondedToTrailingMetadataPriorToHook:
697
- abort(); // unreachable
1593
+ if (grpc_trace_channel.enabled()) {
1594
+ gpr_log(GPR_INFO,
1595
+ "%s ClientCallData.RecvInitialMetadataReady %s error:%s md:%s",
1596
+ LogTag().c_str(), DebugString().c_str(), error.ToString().c_str(),
1597
+ recv_initial_metadata_->metadata->DebugString().c_str());
698
1598
  }
1599
+ ScopedContext context(this);
699
1600
  Flusher flusher(this);
700
- if (!GRPC_ERROR_IS_NONE(error)) {
701
- recv_initial_metadata_->state = RecvInitialMetadata::kResponded;
1601
+ if (!error.ok()) {
1602
+ switch (recv_initial_metadata_->state) {
1603
+ case RecvInitialMetadata::kHookedWaitingForPipe:
1604
+ recv_initial_metadata_->state = RecvInitialMetadata::kResponded;
1605
+ break;
1606
+ case RecvInitialMetadata::kHookedAndGotPipe:
1607
+ recv_initial_metadata_->state =
1608
+ RecvInitialMetadata::kRespondedButNeedToClosePipe;
1609
+ break;
1610
+ case RecvInitialMetadata::kInitial:
1611
+ case RecvInitialMetadata::kGotPipe:
1612
+ case RecvInitialMetadata::kCompleteWaitingForPipe:
1613
+ case RecvInitialMetadata::kCompleteAndGotPipe:
1614
+ case RecvInitialMetadata::kCompleteAndPushedToPipe:
1615
+ case RecvInitialMetadata::kResponded:
1616
+ case RecvInitialMetadata::kRespondedToTrailingMetadataPriorToHook:
1617
+ case RecvInitialMetadata::kRespondedButNeedToClosePipe:
1618
+ Crash(absl::StrFormat(
1619
+ "ILLEGAL STATE: %s",
1620
+ RecvInitialMetadata::StateString(
1621
+ recv_initial_metadata_->state))); // unreachable
1622
+ }
702
1623
  flusher.AddClosure(
703
1624
  std::exchange(recv_initial_metadata_->original_on_ready, nullptr),
704
- GRPC_ERROR_REF(error), "propagate cancellation");
1625
+ error, "propagate cancellation");
705
1626
  } else if (send_initial_state_ == SendInitialState::kCancelled ||
706
1627
  recv_trailing_state_ == RecvTrailingState::kResponded) {
707
1628
  recv_initial_metadata_->state = RecvInitialMetadata::kResponded;
708
1629
  flusher.AddClosure(
709
1630
  std::exchange(recv_initial_metadata_->original_on_ready, nullptr),
710
- GRPC_ERROR_REF(cancelled_error_), "propagate cancellation");
1631
+ cancelled_error_, "propagate cancellation");
1632
+ } else {
1633
+ switch (recv_initial_metadata_->state) {
1634
+ case RecvInitialMetadata::kHookedWaitingForPipe:
1635
+ recv_initial_metadata_->state =
1636
+ RecvInitialMetadata::kCompleteWaitingForPipe;
1637
+ break;
1638
+ case RecvInitialMetadata::kHookedAndGotPipe:
1639
+ recv_initial_metadata_->state =
1640
+ RecvInitialMetadata::kCompleteAndGotPipe;
1641
+ break;
1642
+ case RecvInitialMetadata::kInitial:
1643
+ case RecvInitialMetadata::kGotPipe:
1644
+ case RecvInitialMetadata::kCompleteWaitingForPipe:
1645
+ case RecvInitialMetadata::kCompleteAndGotPipe:
1646
+ case RecvInitialMetadata::kCompleteAndPushedToPipe:
1647
+ case RecvInitialMetadata::kResponded:
1648
+ case RecvInitialMetadata::kRespondedToTrailingMetadataPriorToHook:
1649
+ case RecvInitialMetadata::kRespondedButNeedToClosePipe:
1650
+ Crash(absl::StrFormat(
1651
+ "ILLEGAL STATE: %s",
1652
+ RecvInitialMetadata::StateString(
1653
+ recv_initial_metadata_->state))); // unreachable
1654
+ }
711
1655
  }
712
1656
  WakeInsideCombiner(&flusher);
713
1657
  }
@@ -730,11 +1674,14 @@ void ClientCallData::HookRecvTrailingMetadata(CapturedBatch batch) {
730
1674
  // - return a wrapper around PollTrailingMetadata as the promise.
731
1675
  ArenaPromise<ServerMetadataHandle> ClientCallData::MakeNextPromise(
732
1676
  CallArgs call_args) {
1677
+ if (grpc_trace_channel.enabled()) {
1678
+ gpr_log(GPR_INFO, "%s ClientCallData.MakeNextPromise %s", LogTag().c_str(),
1679
+ DebugString().c_str());
1680
+ }
733
1681
  GPR_ASSERT(poll_ctx_ != nullptr);
734
1682
  GPR_ASSERT(send_initial_state_ == SendInitialState::kQueued);
735
1683
  send_initial_metadata_batch_->payload->send_initial_metadata
736
- .send_initial_metadata =
737
- UnwrapMetadata(std::move(call_args.client_initial_metadata));
1684
+ .send_initial_metadata = call_args.client_initial_metadata.get();
738
1685
  if (recv_initial_metadata_ != nullptr) {
739
1686
  // Call args should contain a latch for receiving initial metadata.
740
1687
  // It might be the one we passed in - in which case we know this filter
@@ -745,28 +1692,42 @@ ArenaPromise<ServerMetadataHandle> ClientCallData::MakeNextPromise(
745
1692
  call_args.server_initial_metadata;
746
1693
  switch (recv_initial_metadata_->state) {
747
1694
  case RecvInitialMetadata::kInitial:
748
- recv_initial_metadata_->state = RecvInitialMetadata::kGotLatch;
1695
+ recv_initial_metadata_->state = RecvInitialMetadata::kGotPipe;
749
1696
  break;
750
- case RecvInitialMetadata::kHookedWaitingForLatch:
751
- recv_initial_metadata_->state = RecvInitialMetadata::kHookedAndGotLatch;
1697
+ case RecvInitialMetadata::kHookedWaitingForPipe:
1698
+ recv_initial_metadata_->state = RecvInitialMetadata::kHookedAndGotPipe;
752
1699
  poll_ctx_->Repoll();
753
1700
  break;
754
- case RecvInitialMetadata::kCompleteWaitingForLatch:
1701
+ case RecvInitialMetadata::kCompleteWaitingForPipe:
755
1702
  recv_initial_metadata_->state =
756
- RecvInitialMetadata::kCompleteAndGotLatch;
1703
+ RecvInitialMetadata::kCompleteAndGotPipe;
757
1704
  poll_ctx_->Repoll();
758
1705
  break;
759
- case RecvInitialMetadata::kGotLatch:
760
- case RecvInitialMetadata::kHookedAndGotLatch:
761
- case RecvInitialMetadata::kCompleteAndGotLatch:
762
- case RecvInitialMetadata::kCompleteAndSetLatch:
1706
+ case RecvInitialMetadata::kGotPipe:
1707
+ case RecvInitialMetadata::kHookedAndGotPipe:
1708
+ case RecvInitialMetadata::kCompleteAndGotPipe:
1709
+ case RecvInitialMetadata::kCompleteAndPushedToPipe:
763
1710
  case RecvInitialMetadata::kResponded:
764
1711
  case RecvInitialMetadata::kRespondedToTrailingMetadataPriorToHook:
765
- abort(); // unreachable
1712
+ case RecvInitialMetadata::kRespondedButNeedToClosePipe:
1713
+ Crash(absl::StrFormat(
1714
+ "ILLEGAL STATE: %s",
1715
+ RecvInitialMetadata::StateString(
1716
+ recv_initial_metadata_->state))); // unreachable
766
1717
  }
767
1718
  } else {
768
1719
  GPR_ASSERT(call_args.server_initial_metadata == nullptr);
769
1720
  }
1721
+ if (send_message() != nullptr) {
1722
+ send_message()->GotPipe(call_args.client_to_server_messages);
1723
+ } else {
1724
+ GPR_ASSERT(call_args.client_to_server_messages == nullptr);
1725
+ }
1726
+ if (receive_message() != nullptr) {
1727
+ receive_message()->GotPipe(call_args.server_to_client_messages);
1728
+ } else {
1729
+ GPR_ASSERT(call_args.server_to_client_messages == nullptr);
1730
+ }
770
1731
  return ArenaPromise<ServerMetadataHandle>(
771
1732
  [this]() { return PollTrailingMetadata(); });
772
1733
  }
@@ -776,6 +1737,10 @@ ArenaPromise<ServerMetadataHandle> ClientCallData::MakeNextPromise(
776
1737
  // All polls: await receiving the trailing metadata, then return it to the
777
1738
  // application.
778
1739
  Poll<ServerMetadataHandle> ClientCallData::PollTrailingMetadata() {
1740
+ if (grpc_trace_channel.enabled()) {
1741
+ gpr_log(GPR_INFO, "%s ClientCallData.PollTrailingMetadata %s",
1742
+ LogTag().c_str(), DebugString().c_str());
1743
+ }
779
1744
  GPR_ASSERT(poll_ctx_ != nullptr);
780
1745
  if (send_initial_state_ == SendInitialState::kQueued) {
781
1746
  // First poll: pass the send_initial_metadata op down the stack.
@@ -810,7 +1775,8 @@ Poll<ServerMetadataHandle> ClientCallData::PollTrailingMetadata() {
810
1775
  case RecvTrailingState::kResponded:
811
1776
  // We've already responded to the caller: we can't do anything and we
812
1777
  // should never reach here.
813
- abort();
1778
+ Crash(absl::StrFormat("ILLEGAL STATE: %s",
1779
+ StateString(recv_trailing_state_)));
814
1780
  }
815
1781
  GPR_UNREACHABLE_CODE(return Pending{});
816
1782
  }
@@ -822,24 +1788,40 @@ void ClientCallData::RecvTrailingMetadataReadyCallback(
822
1788
 
823
1789
  void ClientCallData::RecvTrailingMetadataReady(grpc_error_handle error) {
824
1790
  Flusher flusher(this);
1791
+ if (grpc_trace_channel.enabled()) {
1792
+ gpr_log(GPR_INFO,
1793
+ "%s ClientCallData.RecvTrailingMetadataReady "
1794
+ "recv_trailing_state=%s error=%s md=%s",
1795
+ LogTag().c_str(), StateString(recv_trailing_state_),
1796
+ error.ToString().c_str(),
1797
+ recv_trailing_metadata_->DebugString().c_str());
1798
+ }
825
1799
  // If we were cancelled prior to receiving this callback, we should simply
826
1800
  // forward the callback up with the same error.
827
1801
  if (recv_trailing_state_ == RecvTrailingState::kCancelled) {
1802
+ if (cancelling_metadata_.get() != nullptr) {
1803
+ *recv_trailing_metadata_ = std::move(*cancelling_metadata_);
1804
+ }
828
1805
  if (grpc_closure* call_closure =
829
1806
  std::exchange(original_recv_trailing_metadata_ready_, nullptr)) {
830
- flusher.AddClosure(call_closure, GRPC_ERROR_REF(error),
831
- "propagate failure");
1807
+ flusher.AddClosure(call_closure, error, "propagate failure");
832
1808
  }
833
1809
  return;
834
1810
  }
835
1811
  // If there was an error, we'll put that into the trailing metadata and
836
1812
  // proceed as if there was not.
837
- if (!GRPC_ERROR_IS_NONE(error)) {
1813
+ if (!error.ok()) {
838
1814
  SetStatusFromError(recv_trailing_metadata_, error);
839
1815
  }
840
1816
  // Record that we've got the callback.
841
1817
  GPR_ASSERT(recv_trailing_state_ == RecvTrailingState::kForwarded);
842
1818
  recv_trailing_state_ = RecvTrailingState::kComplete;
1819
+ if (receive_message() != nullptr) {
1820
+ receive_message()->Done(*recv_trailing_metadata_, &flusher);
1821
+ }
1822
+ if (send_message() != nullptr) {
1823
+ send_message()->Done(*recv_trailing_metadata_, &flusher);
1824
+ }
843
1825
  // Repoll the promise.
844
1826
  ScopedContext context(this);
845
1827
  WakeInsideCombiner(&flusher);
@@ -855,7 +1837,7 @@ void ClientCallData::SetStatusFromError(grpc_metadata_batch* metadata,
855
1837
  metadata->Set(GrpcStatusMetadata(), status_code);
856
1838
  metadata->Set(GrpcMessageMetadata(), Slice::FromCopiedString(status_details));
857
1839
  metadata->GetOrCreatePointer(GrpcStatusContext())
858
- ->emplace_back(grpc_error_std_string(error));
1840
+ ->emplace_back(StatusToString(error));
859
1841
  }
860
1842
 
861
1843
  // Wakeup and poll the promise if appropriate.
@@ -875,22 +1857,51 @@ void ClientCallData::OnWakeup() {
875
1857
  struct ServerCallData::SendInitialMetadata {
876
1858
  enum State {
877
1859
  kInitial,
878
- kGotLatch,
879
- kQueuedWaitingForLatch,
880
- kQueuedAndGotLatch,
881
- kQueuedAndSetLatch,
1860
+ kGotPipe,
1861
+ kQueuedWaitingForPipe,
1862
+ kQueuedAndGotPipe,
1863
+ kQueuedAndPushedToPipe,
882
1864
  kForwarded,
883
1865
  kCancelled,
884
1866
  };
885
1867
  State state = kInitial;
886
1868
  CapturedBatch batch;
887
- Latch<ServerMetadata*>* server_initial_metadata_publisher = nullptr;
1869
+ PipeSender<ServerMetadataHandle>* server_initial_metadata_publisher = nullptr;
1870
+ absl::optional<PipeSender<ServerMetadataHandle>::PushType> metadata_push_;
1871
+ absl::optional<PipeReceiverNextType<ServerMetadataHandle>> metadata_next_;
1872
+
1873
+ static const char* StateString(State state) {
1874
+ switch (state) {
1875
+ case kInitial:
1876
+ return "INITIAL";
1877
+ case kGotPipe:
1878
+ return "GOT_PIPE";
1879
+ case kQueuedWaitingForPipe:
1880
+ return "QUEUED_WAITING_FOR_PIPE";
1881
+ case kQueuedAndGotPipe:
1882
+ return "QUEUED_AND_GOT_PIPE";
1883
+ case kQueuedAndPushedToPipe:
1884
+ return "QUEUED_AND_PUSHED_TO_PIPE";
1885
+ case kForwarded:
1886
+ return "FORWARDED";
1887
+ case kCancelled:
1888
+ return "CANCELLED";
1889
+ }
1890
+ return "UNKNOWN";
1891
+ }
888
1892
  };
889
1893
 
890
1894
  class ServerCallData::PollContext {
891
1895
  public:
892
- explicit PollContext(ServerCallData* self, Flusher* flusher)
893
- : self_(self), flusher_(flusher) {
1896
+ explicit PollContext(ServerCallData* self, Flusher* flusher,
1897
+ DebugLocation created = DebugLocation())
1898
+ : self_(self), flusher_(flusher), created_(created) {
1899
+ if (self_->poll_ctx_ != nullptr) {
1900
+ Crash(absl::StrCat(
1901
+ "PollContext: disallowed recursion. New: ", created_.file(), ":",
1902
+ created_.line(), "; Old: ", self_->poll_ctx_->created_.file(), ":",
1903
+ self_->poll_ctx_->created_.line()));
1904
+ }
894
1905
  GPR_ASSERT(self_->poll_ctx_ == nullptr);
895
1906
  self_->poll_ctx_ = this;
896
1907
  scoped_activity_.Init(self_);
@@ -912,17 +1923,18 @@ class ServerCallData::PollContext {
912
1923
  auto* next_poll = static_cast<NextPoll*>(p);
913
1924
  {
914
1925
  Flusher flusher(next_poll->call_data);
1926
+ ScopedContext context(next_poll->call_data);
915
1927
  next_poll->call_data->WakeInsideCombiner(&flusher);
916
1928
  }
917
1929
  GRPC_CALL_STACK_UNREF(next_poll->call_stack, "re-poll");
918
1930
  delete next_poll;
919
1931
  };
920
- auto* p = absl::make_unique<NextPoll>().release();
1932
+ auto* p = std::make_unique<NextPoll>().release();
921
1933
  p->call_stack = self_->call_stack();
922
1934
  p->call_data = self_;
923
1935
  GRPC_CALL_STACK_REF(self_->call_stack(), "re-poll");
924
1936
  GRPC_CLOSURE_INIT(p, run, p, nullptr);
925
- flusher_->AddClosure(p, GRPC_ERROR_NONE, "re-poll");
1937
+ flusher_->AddClosure(p, absl::OkStatus(), "re-poll");
926
1938
  }
927
1939
  }
928
1940
 
@@ -935,27 +1947,78 @@ class ServerCallData::PollContext {
935
1947
  Flusher* const flusher_;
936
1948
  bool repoll_ = false;
937
1949
  bool have_scoped_activity_;
1950
+ GPR_NO_UNIQUE_ADDRESS DebugLocation created_;
938
1951
  };
939
1952
 
1953
+ const char* ServerCallData::StateString(RecvInitialState state) {
1954
+ switch (state) {
1955
+ case RecvInitialState::kInitial:
1956
+ return "INITIAL";
1957
+ case RecvInitialState::kForwarded:
1958
+ return "FORWARDED";
1959
+ case RecvInitialState::kComplete:
1960
+ return "COMPLETE";
1961
+ case RecvInitialState::kResponded:
1962
+ return "RESPONDED";
1963
+ }
1964
+ return "UNKNOWN";
1965
+ }
1966
+
1967
+ const char* ServerCallData::StateString(SendTrailingState state) {
1968
+ switch (state) {
1969
+ case SendTrailingState::kInitial:
1970
+ return "INITIAL";
1971
+ case SendTrailingState::kForwarded:
1972
+ return "FORWARDED";
1973
+ case SendTrailingState::kQueuedBehindSendMessage:
1974
+ return "QUEUED_BEHIND_SEND_MESSAGE";
1975
+ case SendTrailingState::kQueuedButHaventClosedSends:
1976
+ return "QUEUED_BUT_HAVENT_CLOSED_SENDS";
1977
+ case SendTrailingState::kQueued:
1978
+ return "QUEUED";
1979
+ case SendTrailingState::kCancelled:
1980
+ return "CANCELLED";
1981
+ }
1982
+ return "UNKNOWN";
1983
+ }
1984
+
940
1985
  ServerCallData::ServerCallData(grpc_call_element* elem,
941
1986
  const grpc_call_element_args* args,
942
1987
  uint8_t flags)
943
- : BaseCallData(elem, args, flags) {
944
- if (server_initial_metadata_latch() != nullptr) {
1988
+ : BaseCallData(
1989
+ elem, args, flags,
1990
+ [args]() { return args->arena->New<SendInterceptor>(args->arena); },
1991
+ [args]() {
1992
+ return args->arena->New<ReceiveInterceptor>(args->arena);
1993
+ }) {
1994
+ if (server_initial_metadata_pipe() != nullptr) {
945
1995
  send_initial_metadata_ = arena()->New<SendInitialMetadata>();
946
1996
  }
947
1997
  GRPC_CLOSURE_INIT(&recv_initial_metadata_ready_,
948
1998
  RecvInitialMetadataReadyCallback, this,
949
1999
  grpc_schedule_on_exec_ctx);
2000
+ GRPC_CLOSURE_INIT(&recv_trailing_metadata_ready_,
2001
+ RecvTrailingMetadataReadyCallback, this,
2002
+ grpc_schedule_on_exec_ctx);
950
2003
  }
951
2004
 
952
2005
  ServerCallData::~ServerCallData() {
2006
+ if (grpc_trace_channel.enabled()) {
2007
+ gpr_log(GPR_INFO, "%s ~ServerCallData %s", LogTag().c_str(),
2008
+ DebugString().c_str());
2009
+ }
2010
+ if (send_initial_metadata_ != nullptr) {
2011
+ send_initial_metadata_->~SendInitialMetadata();
2012
+ }
953
2013
  GPR_ASSERT(poll_ctx_ == nullptr);
954
- GRPC_ERROR_UNREF(cancelled_error_);
2014
+ }
2015
+
2016
+ std::string ServerCallData::DebugTag() const {
2017
+ return absl::StrFormat("PBF_SERVER[%p]: [%s] ", this, elem()->filter->name);
955
2018
  }
956
2019
 
957
2020
  // Activity implementation.
958
- void ServerCallData::ForceImmediateRepoll() {
2021
+ void ServerCallData::ForceImmediateRepoll(WakeupMask) {
959
2022
  GPR_ASSERT(poll_ctx_ != nullptr);
960
2023
  poll_ctx_->Repoll();
961
2024
  }
@@ -968,6 +2031,11 @@ void ServerCallData::StartBatch(grpc_transport_stream_op_batch* b) {
968
2031
  Flusher flusher(this);
969
2032
  bool wake = false;
970
2033
 
2034
+ if (grpc_trace_channel.enabled()) {
2035
+ gpr_log(GPR_INFO, "%s StartBatch: %s", LogTag().c_str(),
2036
+ DebugString().c_str());
2037
+ }
2038
+
971
2039
  // If this is a cancel stream, cancel anything we have pending and
972
2040
  // propagate the cancellation.
973
2041
  if (batch->cancel_stream) {
@@ -975,10 +2043,9 @@ void ServerCallData::StartBatch(grpc_transport_stream_op_batch* b) {
975
2043
  !batch->send_trailing_metadata && !batch->send_message &&
976
2044
  !batch->recv_initial_metadata && !batch->recv_message &&
977
2045
  !batch->recv_trailing_metadata);
978
- Cancel(GRPC_ERROR_REF(batch->payload->cancel_stream.cancel_error),
979
- &flusher);
2046
+ PollContext poll_ctx(this, &flusher);
2047
+ Completed(batch->payload->cancel_stream.cancel_error, &flusher);
980
2048
  if (is_last()) {
981
- GRPC_ERROR_UNREF(batch->payload->cancel_stream.cancel_error);
982
2049
  batch.CompleteWith(&flusher);
983
2050
  } else {
984
2051
  batch.ResumeWith(&flusher);
@@ -1004,43 +2071,89 @@ void ServerCallData::StartBatch(grpc_transport_stream_op_batch* b) {
1004
2071
  recv_initial_state_ = RecvInitialState::kForwarded;
1005
2072
  }
1006
2073
 
2074
+ // Hook recv_trailing_metadata so we can see cancellation from the client.
2075
+ if (batch->recv_trailing_metadata) {
2076
+ recv_trailing_metadata_ =
2077
+ batch->payload->recv_trailing_metadata.recv_trailing_metadata;
2078
+ original_recv_trailing_metadata_ready_ =
2079
+ batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready;
2080
+ batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready =
2081
+ &recv_trailing_metadata_ready_;
2082
+ }
2083
+
1007
2084
  // send_initial_metadata
1008
2085
  if (send_initial_metadata_ != nullptr && batch->send_initial_metadata) {
1009
2086
  switch (send_initial_metadata_->state) {
1010
2087
  case SendInitialMetadata::kInitial:
1011
2088
  send_initial_metadata_->state =
1012
- SendInitialMetadata::kQueuedWaitingForLatch;
2089
+ SendInitialMetadata::kQueuedWaitingForPipe;
1013
2090
  break;
1014
- case SendInitialMetadata::kGotLatch:
1015
- send_initial_metadata_->state = SendInitialMetadata::kQueuedAndGotLatch;
2091
+ case SendInitialMetadata::kGotPipe:
2092
+ send_initial_metadata_->state = SendInitialMetadata::kQueuedAndGotPipe;
1016
2093
  break;
1017
2094
  case SendInitialMetadata::kCancelled:
1018
- batch.CancelWith(GRPC_ERROR_REF(cancelled_error_), &flusher);
2095
+ batch.CancelWith(
2096
+ cancelled_error_.ok() ? absl::CancelledError() : cancelled_error_,
2097
+ &flusher);
1019
2098
  break;
1020
- case SendInitialMetadata::kQueuedAndGotLatch:
1021
- case SendInitialMetadata::kQueuedWaitingForLatch:
1022
- case SendInitialMetadata::kQueuedAndSetLatch:
2099
+ case SendInitialMetadata::kQueuedAndGotPipe:
2100
+ case SendInitialMetadata::kQueuedWaitingForPipe:
2101
+ case SendInitialMetadata::kQueuedAndPushedToPipe:
1023
2102
  case SendInitialMetadata::kForwarded:
1024
- abort(); // not reachable
2103
+ Crash(absl::StrFormat(
2104
+ "ILLEGAL STATE: %s",
2105
+ SendInitialMetadata::StateString(
2106
+ send_initial_metadata_->state))); // not reachable
1025
2107
  }
1026
2108
  send_initial_metadata_->batch = batch;
1027
2109
  wake = true;
1028
2110
  }
1029
2111
 
2112
+ if (send_message() != nullptr && batch.is_captured() && batch->send_message) {
2113
+ send_message()->StartOp(batch);
2114
+ wake = true;
2115
+ }
2116
+ if (receive_message() != nullptr && batch.is_captured() &&
2117
+ batch->recv_message) {
2118
+ receive_message()->StartOp(batch);
2119
+ wake = true;
2120
+ }
2121
+
1030
2122
  // send_trailing_metadata
1031
2123
  if (batch.is_captured() && batch->send_trailing_metadata) {
1032
2124
  switch (send_trailing_state_) {
1033
2125
  case SendTrailingState::kInitial:
1034
2126
  send_trailing_metadata_batch_ = batch;
1035
- send_trailing_state_ = SendTrailingState::kQueued;
1036
- wake = true;
2127
+ if (receive_message() != nullptr &&
2128
+ batch->payload->send_trailing_metadata.send_trailing_metadata
2129
+ ->get(GrpcStatusMetadata())
2130
+ .value_or(GRPC_STATUS_UNKNOWN) != GRPC_STATUS_OK) {
2131
+ receive_message()->Done(
2132
+ *batch->payload->send_trailing_metadata.send_trailing_metadata,
2133
+ &flusher);
2134
+ }
2135
+ if (send_message() != nullptr && !send_message()->IsIdle()) {
2136
+ send_trailing_state_ = SendTrailingState::kQueuedBehindSendMessage;
2137
+ } else if (send_message() != nullptr) {
2138
+ send_trailing_state_ = SendTrailingState::kQueuedButHaventClosedSends;
2139
+ wake = true;
2140
+ } else {
2141
+ send_trailing_state_ = SendTrailingState::kQueued;
2142
+ wake = true;
2143
+ }
1037
2144
  break;
1038
2145
  case SendTrailingState::kQueued:
2146
+ case SendTrailingState::kQueuedBehindSendMessage:
2147
+ case SendTrailingState::kQueuedButHaventClosedSends:
1039
2148
  case SendTrailingState::kForwarded:
1040
- abort(); // unreachable
2149
+ Crash(
2150
+ absl::StrFormat("ILLEGAL STATE: %s",
2151
+ StateString(send_trailing_state_))); // unreachable
1041
2152
  break;
1042
2153
  case SendTrailingState::kCancelled:
1043
- batch.CancelWith(GRPC_ERROR_REF(cancelled_error_), &flusher);
2154
+ batch.CancelWith(
2155
+ cancelled_error_.ok() ? absl::CancelledError() : cancelled_error_,
2156
+ &flusher);
1044
2157
  break;
1045
2158
  }
1046
2159
  }
@@ -1050,38 +2163,74 @@ void ServerCallData::StartBatch(grpc_transport_stream_op_batch* b) {
1050
2163
  }
1051
2164
 
1052
2165
  // Handle cancellation.
1053
- void ServerCallData::Cancel(grpc_error_handle error, Flusher* flusher) {
2166
+ void ServerCallData::Completed(grpc_error_handle error, Flusher* flusher) {
2167
+ if (grpc_trace_channel.enabled()) {
2168
+ gpr_log(
2169
+ GPR_DEBUG,
2170
+ "%sServerCallData::Completed: send_trailing_state=%s "
2171
+ "send_initial_state=%s error=%s",
2172
+ LogTag().c_str(), StateString(send_trailing_state_),
2173
+ send_initial_metadata_ == nullptr
2174
+ ? "null"
2175
+ : SendInitialMetadata::StateString(send_initial_metadata_->state),
2176
+ error.ToString().c_str());
2177
+ }
1054
2178
  // Track the latest reason for cancellation.
1055
- GRPC_ERROR_UNREF(cancelled_error_);
1056
2179
  cancelled_error_ = error;
1057
2180
  // Stop running the promise.
1058
2181
  promise_ = ArenaPromise<ServerMetadataHandle>();
1059
- if (send_trailing_state_ == SendTrailingState::kQueued) {
1060
- send_trailing_state_ = SendTrailingState::kCancelled;
1061
- send_trailing_metadata_batch_.CancelWith(GRPC_ERROR_REF(error), flusher);
1062
- } else {
1063
- send_trailing_state_ = SendTrailingState::kCancelled;
2182
+ switch (send_trailing_state_) {
2183
+ case SendTrailingState::kInitial:
2184
+ case SendTrailingState::kForwarded:
2185
+ send_trailing_state_ = SendTrailingState::kCancelled;
2186
+ if (!error.ok()) {
2187
+ call_stack()->IncrementRefCount();
2188
+ auto* batch = grpc_make_transport_stream_op(
2189
+ NewClosure([call_combiner = call_combiner(),
2190
+ call_stack = call_stack()](absl::Status) {
2191
+ GRPC_CALL_COMBINER_STOP(call_combiner, "done-cancel");
2192
+ call_stack->Unref();
2193
+ }));
2194
+ batch->cancel_stream = true;
2195
+ batch->payload->cancel_stream.cancel_error = error;
2196
+ flusher->Resume(batch);
2197
+ }
2198
+ break;
2199
+ case SendTrailingState::kQueued:
2200
+ send_trailing_state_ = SendTrailingState::kCancelled;
2201
+ send_trailing_metadata_batch_.CancelWith(error, flusher);
2202
+ break;
2203
+ case SendTrailingState::kQueuedBehindSendMessage:
2204
+ case SendTrailingState::kQueuedButHaventClosedSends:
2205
+ case SendTrailingState::kCancelled:
2206
+ send_trailing_state_ = SendTrailingState::kCancelled;
2207
+ break;
1064
2208
  }
1065
2209
  if (send_initial_metadata_ != nullptr) {
1066
2210
  switch (send_initial_metadata_->state) {
1067
2211
  case SendInitialMetadata::kInitial:
1068
- case SendInitialMetadata::kGotLatch:
2212
+ case SendInitialMetadata::kGotPipe:
1069
2213
  case SendInitialMetadata::kForwarded:
1070
2214
  case SendInitialMetadata::kCancelled:
1071
2215
  break;
1072
- case SendInitialMetadata::kQueuedWaitingForLatch:
1073
- case SendInitialMetadata::kQueuedAndGotLatch:
1074
- case SendInitialMetadata::kQueuedAndSetLatch:
1075
- send_initial_metadata_->batch.CancelWith(GRPC_ERROR_REF(error),
1076
- flusher);
2216
+ case SendInitialMetadata::kQueuedWaitingForPipe:
2217
+ case SendInitialMetadata::kQueuedAndGotPipe:
2218
+ case SendInitialMetadata::kQueuedAndPushedToPipe:
2219
+ send_initial_metadata_->batch.CancelWith(error, flusher);
1077
2220
  break;
1078
2221
  }
1079
2222
  send_initial_metadata_->state = SendInitialMetadata::kCancelled;
1080
2223
  }
1081
2224
  if (auto* closure =
1082
2225
  std::exchange(original_recv_initial_metadata_ready_, nullptr)) {
1083
- flusher->AddClosure(closure, GRPC_ERROR_REF(error),
1084
- "original_recv_initial_metadata");
2226
+ flusher->AddClosure(closure, error, "original_recv_initial_metadata");
2227
+ }
2228
+ ScopedContext ctx(this);
2229
+ if (send_message() != nullptr) {
2230
+ send_message()->Done(*ServerMetadataFromStatus(error), flusher);
2231
+ }
2232
+ if (receive_message() != nullptr) {
2233
+ receive_message()->Done(*ServerMetadataFromStatus(error), flusher);
1085
2234
  }
1086
2235
  }
1087
2236
 
@@ -1092,7 +2241,7 @@ void ServerCallData::Cancel(grpc_error_handle error, Flusher* flusher) {
1092
2241
  ArenaPromise<ServerMetadataHandle> ServerCallData::MakeNextPromise(
1093
2242
  CallArgs call_args) {
1094
2243
  GPR_ASSERT(recv_initial_state_ == RecvInitialState::kComplete);
1095
- GPR_ASSERT(UnwrapMetadata(std::move(call_args.client_initial_metadata)) ==
2244
+ GPR_ASSERT(std::move(call_args.client_initial_metadata).get() ==
1096
2245
  recv_initial_metadata_);
1097
2246
  forward_recv_initial_metadata_callback_ = true;
1098
2247
  if (send_initial_metadata_ != nullptr) {
@@ -1103,16 +2252,19 @@ ArenaPromise<ServerMetadataHandle> ServerCallData::MakeNextPromise(
1103
2252
  call_args.server_initial_metadata;
1104
2253
  switch (send_initial_metadata_->state) {
1105
2254
  case SendInitialMetadata::kInitial:
1106
- send_initial_metadata_->state = SendInitialMetadata::kGotLatch;
2255
+ send_initial_metadata_->state = SendInitialMetadata::kGotPipe;
1107
2256
  break;
1108
- case SendInitialMetadata::kGotLatch:
1109
- case SendInitialMetadata::kQueuedAndGotLatch:
1110
- case SendInitialMetadata::kQueuedAndSetLatch:
2257
+ case SendInitialMetadata::kGotPipe:
2258
+ case SendInitialMetadata::kQueuedAndGotPipe:
2259
+ case SendInitialMetadata::kQueuedAndPushedToPipe:
1111
2260
  case SendInitialMetadata::kForwarded:
1112
- abort(); // not reachable
2261
+ Crash(absl::StrFormat(
2262
+ "ILLEGAL STATE: %s",
2263
+ SendInitialMetadata::StateString(
2264
+ send_initial_metadata_->state))); // not reachable
1113
2265
  break;
1114
- case SendInitialMetadata::kQueuedWaitingForLatch:
1115
- send_initial_metadata_->state = SendInitialMetadata::kQueuedAndGotLatch;
2266
+ case SendInitialMetadata::kQueuedWaitingForPipe:
2267
+ send_initial_metadata_->state = SendInitialMetadata::kQueuedAndGotPipe;
1116
2268
  break;
1117
2269
  case SendInitialMetadata::kCancelled:
1118
2270
  break;
@@ -1120,6 +2272,16 @@ ArenaPromise<ServerMetadataHandle> ServerCallData::MakeNextPromise(
1120
2272
  } else {
1121
2273
  GPR_ASSERT(call_args.server_initial_metadata == nullptr);
1122
2274
  }
2275
+ if (send_message() != nullptr) {
2276
+ send_message()->GotPipe(call_args.server_to_client_messages);
2277
+ } else {
2278
+ GPR_ASSERT(call_args.server_to_client_messages == nullptr);
2279
+ }
2280
+ if (receive_message() != nullptr) {
2281
+ receive_message()->GotPipe(call_args.client_to_server_messages);
2282
+ } else {
2283
+ GPR_ASSERT(call_args.client_to_server_messages == nullptr);
2284
+ }
1123
2285
  return ArenaPromise<ServerMetadataHandle>(
1124
2286
  [this]() { return PollTrailingMetadata(); });
1125
2287
  }
@@ -1128,14 +2290,21 @@ ArenaPromise<ServerMetadataHandle> ServerCallData::MakeNextPromise(
1128
2290
  // All polls: await sending the trailing metadata, then foward it down the
1129
2291
  // stack.
1130
2292
  Poll<ServerMetadataHandle> ServerCallData::PollTrailingMetadata() {
2293
+ if (grpc_trace_channel.enabled()) {
2294
+ gpr_log(GPR_INFO, "%s PollTrailingMetadata: %s", LogTag().c_str(),
2295
+ StateString(send_trailing_state_));
2296
+ }
1131
2297
  switch (send_trailing_state_) {
1132
2298
  case SendTrailingState::kInitial:
2299
+ case SendTrailingState::kQueuedBehindSendMessage:
2300
+ case SendTrailingState::kQueuedButHaventClosedSends:
1133
2301
  return Pending{};
1134
2302
  case SendTrailingState::kQueued:
1135
2303
  return WrapMetadata(send_trailing_metadata_batch_->payload
1136
2304
  ->send_trailing_metadata.send_trailing_metadata);
1137
2305
  case SendTrailingState::kForwarded:
1138
- abort(); // unreachable
2306
+ Crash(absl::StrFormat("ILLEGAL STATE: %s",
2307
+ StateString(send_trailing_state_))); // unreachable
1139
2308
  case SendTrailingState::kCancelled:
1140
2309
  // We could translate cancelled_error to metadata and return it... BUT
1141
2310
  // we're not gonna be running much longer and the results going to be
@@ -1145,20 +2314,43 @@ Poll<ServerMetadataHandle> ServerCallData::PollTrailingMetadata() {
1145
2314
  GPR_UNREACHABLE_CODE(return Pending{});
1146
2315
  }
1147
2316
 
2317
+ void ServerCallData::RecvTrailingMetadataReadyCallback(
2318
+ void* arg, grpc_error_handle error) {
2319
+ static_cast<ServerCallData*>(arg)->RecvTrailingMetadataReady(
2320
+ std::move(error));
2321
+ }
2322
+
2323
+ void ServerCallData::RecvTrailingMetadataReady(grpc_error_handle error) {
2324
+ if (grpc_trace_channel.enabled()) {
2325
+ gpr_log(GPR_INFO, "%s: RecvTrailingMetadataReady error=%s md=%s",
2326
+ LogTag().c_str(), error.ToString().c_str(),
2327
+ recv_trailing_metadata_->DebugString().c_str());
2328
+ }
2329
+ Flusher flusher(this);
2330
+ PollContext poll_ctx(this, &flusher);
2331
+ Completed(error, &flusher);
2332
+ flusher.AddClosure(original_recv_trailing_metadata_ready_, std::move(error),
2333
+ "continue recv trailing");
2334
+ }
2335
+
1148
2336
  void ServerCallData::RecvInitialMetadataReadyCallback(void* arg,
1149
2337
  grpc_error_handle error) {
1150
- static_cast<ServerCallData*>(arg)->RecvInitialMetadataReady(error);
2338
+ static_cast<ServerCallData*>(arg)->RecvInitialMetadataReady(std::move(error));
1151
2339
  }
1152
2340
 
1153
2341
  void ServerCallData::RecvInitialMetadataReady(grpc_error_handle error) {
1154
2342
  Flusher flusher(this);
2343
+ if (grpc_trace_channel.enabled()) {
2344
+ gpr_log(GPR_INFO, "%s: RecvInitialMetadataReady %s", LogTag().c_str(),
2345
+ error.ToString().c_str());
2346
+ }
1155
2347
  GPR_ASSERT(recv_initial_state_ == RecvInitialState::kForwarded);
1156
2348
  // If there was an error we just propagate that through
1157
- if (!GRPC_ERROR_IS_NONE(error)) {
2349
+ if (!error.ok()) {
1158
2350
  recv_initial_state_ = RecvInitialState::kResponded;
1159
2351
  flusher.AddClosure(
1160
- std::exchange(original_recv_initial_metadata_ready_, nullptr),
1161
- GRPC_ERROR_REF(error), "propagate error");
2352
+ std::exchange(original_recv_initial_metadata_ready_, nullptr), error,
2353
+ "propagate error");
1162
2354
  return;
1163
2355
  }
1164
2356
  // Record that we've got the callback.
@@ -1168,95 +2360,216 @@ void ServerCallData::RecvInitialMetadataReady(grpc_error_handle error) {
1168
2360
  ScopedContext context(this);
1169
2361
  // Construct the promise.
1170
2362
  ChannelFilter* filter = static_cast<ChannelFilter*>(elem()->channel_data);
1171
- promise_ =
1172
- filter->MakeCallPromise(CallArgs{WrapMetadata(recv_initial_metadata_),
1173
- server_initial_metadata_latch()},
1174
- [this](CallArgs call_args) {
1175
- return MakeNextPromise(std::move(call_args));
1176
- });
2363
+ FakeActivity(this).Run([this, filter] {
2364
+ promise_ = filter->MakeCallPromise(
2365
+ CallArgs{WrapMetadata(recv_initial_metadata_),
2366
+ ClientInitialMetadataOutstandingToken::Empty(), nullptr,
2367
+ server_initial_metadata_pipe() == nullptr
2368
+ ? nullptr
2369
+ : &server_initial_metadata_pipe()->sender,
2370
+ receive_message() == nullptr
2371
+ ? nullptr
2372
+ : receive_message()->interceptor()->original_receiver(),
2373
+ send_message() == nullptr
2374
+ ? nullptr
2375
+ : send_message()->interceptor()->original_sender()},
2376
+ [this](CallArgs call_args) {
2377
+ return MakeNextPromise(std::move(call_args));
2378
+ });
2379
+ });
1177
2380
  // Poll once.
1178
2381
  WakeInsideCombiner(&flusher);
1179
- if (auto* closure =
1180
- std::exchange(original_recv_initial_metadata_ready_, nullptr)) {
1181
- flusher.AddClosure(closure, GRPC_ERROR_NONE,
1182
- "original_recv_initial_metadata");
2382
+ }
2383
+
2384
+ std::string ServerCallData::DebugString() const {
2385
+ std::vector<absl::string_view> captured;
2386
+ if (send_message() != nullptr && send_message()->HaveCapturedBatch()) {
2387
+ captured.push_back("send_message");
1183
2388
  }
2389
+ if (send_trailing_metadata_batch_.is_captured()) {
2390
+ captured.push_back("send_trailing_metadata");
2391
+ }
2392
+ return absl::StrCat(
2393
+ "have_promise=", promise_.has_value() ? "true" : "false",
2394
+ " recv_initial_state=", StateString(recv_initial_state_),
2395
+ " send_trailing_state=", StateString(send_trailing_state_), " captured={",
2396
+ absl::StrJoin(captured, ","), "}",
2397
+ send_initial_metadata_ == nullptr
2398
+ ? ""
2399
+ : absl::StrCat(
2400
+ " send_initial_metadata=",
2401
+ SendInitialMetadata::StateString(send_initial_metadata_->state))
2402
+ .c_str());
1184
2403
  }
1185
2404
 
1186
2405
  // Wakeup and poll the promise if appropriate.
1187
2406
  void ServerCallData::WakeInsideCombiner(Flusher* flusher) {
1188
2407
  PollContext poll_ctx(this, flusher);
1189
- if (send_initial_metadata_ != nullptr &&
1190
- send_initial_metadata_->state ==
1191
- SendInitialMetadata::kQueuedAndGotLatch) {
1192
- send_initial_metadata_->state = SendInitialMetadata::kQueuedAndSetLatch;
1193
- send_initial_metadata_->server_initial_metadata_publisher->Set(
1194
- send_initial_metadata_->batch->payload->send_initial_metadata
1195
- .send_initial_metadata);
2408
+ if (grpc_trace_channel.enabled()) {
2409
+ gpr_log(GPR_INFO, "%s: WakeInsideCombiner %s", LogTag().c_str(),
2410
+ DebugString().c_str());
1196
2411
  }
1197
2412
  poll_ctx.ClearRepoll();
2413
+ if (send_initial_metadata_ != nullptr) {
2414
+ if (send_initial_metadata_->state ==
2415
+ SendInitialMetadata::kQueuedAndGotPipe) {
2416
+ send_initial_metadata_->state =
2417
+ SendInitialMetadata::kQueuedAndPushedToPipe;
2418
+ GPR_ASSERT(!send_initial_metadata_->metadata_push_.has_value());
2419
+ GPR_ASSERT(!send_initial_metadata_->metadata_next_.has_value());
2420
+ send_initial_metadata_->metadata_push_.emplace(
2421
+ send_initial_metadata_->server_initial_metadata_publisher->Push(
2422
+ ServerMetadataHandle(
2423
+ send_initial_metadata_->batch->payload->send_initial_metadata
2424
+ .send_initial_metadata,
2425
+ Arena::PooledDeleter(nullptr))));
2426
+ send_initial_metadata_->metadata_next_.emplace(
2427
+ server_initial_metadata_pipe()->receiver.Next());
2428
+ }
2429
+ if (send_initial_metadata_->metadata_push_.has_value()) {
2430
+ if ((*send_initial_metadata_->metadata_push_)().ready()) {
2431
+ if (grpc_trace_channel.enabled()) {
2432
+ gpr_log(GPR_INFO, "%s: WakeInsideCombiner: metadata_push done",
2433
+ LogTag().c_str());
2434
+ }
2435
+ send_initial_metadata_->metadata_push_.reset();
2436
+ } else if (grpc_trace_channel.enabled()) {
2437
+ gpr_log(GPR_INFO, "%s: WakeInsideCombiner: metadata_push pending",
2438
+ LogTag().c_str());
2439
+ }
2440
+ }
2441
+ }
2442
+ if (send_message() != nullptr) {
2443
+ if (send_trailing_state_ ==
2444
+ SendTrailingState::kQueuedButHaventClosedSends) {
2445
+ send_trailing_state_ = SendTrailingState::kQueued;
2446
+ send_message()->Done(*send_trailing_metadata_batch_->payload
2447
+ ->send_trailing_metadata.send_trailing_metadata,
2448
+ flusher);
2449
+ }
2450
+ send_message()->WakeInsideCombiner(
2451
+ flusher,
2452
+ send_initial_metadata_ == nullptr ||
2453
+ send_initial_metadata_->state == SendInitialMetadata::kForwarded);
2454
+ if (grpc_trace_channel.enabled()) {
2455
+ gpr_log(GPR_DEBUG,
2456
+ "%s: After send_message WakeInsideCombiner %s is_idle=%s "
2457
+ "is_forwarded=%s",
2458
+ LogTag().c_str(), DebugString().c_str(),
2459
+ send_message()->IsIdle() ? "true" : "false",
2460
+ send_message()->IsForwarded() ? "true" : "false");
2461
+ }
2462
+ if (send_trailing_state_ == SendTrailingState::kQueuedBehindSendMessage &&
2463
+ (send_message()->IsIdle() ||
2464
+ (send_trailing_metadata_batch_->send_message &&
2465
+ send_message()->IsForwarded()))) {
2466
+ send_trailing_state_ = SendTrailingState::kQueued;
2467
+ if (send_trailing_metadata_batch_->payload->send_trailing_metadata
2468
+ .send_trailing_metadata->get(GrpcStatusMetadata())
2469
+ .value_or(GRPC_STATUS_UNKNOWN) != GRPC_STATUS_OK) {
2470
+ send_message()->Done(
2471
+ *send_trailing_metadata_batch_->payload->send_trailing_metadata
2472
+ .send_trailing_metadata,
2473
+ flusher);
2474
+ }
2475
+ }
2476
+ }
2477
+ if (receive_message() != nullptr) {
2478
+ receive_message()->WakeInsideCombiner(flusher, true);
2479
+ }
1198
2480
  if (promise_.has_value()) {
1199
2481
  Poll<ServerMetadataHandle> poll;
1200
2482
  poll = promise_();
2483
+ if (grpc_trace_channel.enabled()) {
2484
+ gpr_log(
2485
+ GPR_INFO,
2486
+ "%s: WakeInsideCombiner poll=%s; send_initial_metadata=%s "
2487
+ "send_trailing_metadata=%s",
2488
+ LogTag().c_str(),
2489
+ PollToString(
2490
+ poll,
2491
+ [](const ServerMetadataHandle& h) { return h->DebugString(); })
2492
+ .c_str(),
2493
+ send_initial_metadata_ == nullptr
2494
+ ? "null"
2495
+ : SendInitialMetadata::StateString(send_initial_metadata_->state),
2496
+ StateString(send_trailing_state_));
2497
+ }
1201
2498
  if (send_initial_metadata_ != nullptr &&
1202
2499
  send_initial_metadata_->state ==
1203
- SendInitialMetadata::kQueuedAndSetLatch) {
1204
- Poll<ServerMetadata**> p = server_initial_metadata_latch()->Wait()();
1205
- if (ServerMetadata*** ppp = absl::get_if<ServerMetadata**>(&p)) {
1206
- ServerMetadata* md = **ppp;
2500
+ SendInitialMetadata::kQueuedAndPushedToPipe) {
2501
+ GPR_ASSERT(send_initial_metadata_->metadata_next_.has_value());
2502
+ auto p = (*send_initial_metadata_->metadata_next_)();
2503
+ if (grpc_trace_channel.enabled()) {
2504
+ gpr_log(GPR_INFO,
2505
+ "%s: WakeInsideCombiner send_initial_metadata poll=%s",
2506
+ LogTag().c_str(),
2507
+ PollToString(p, [](const NextResult<ServerMetadataHandle>& h) {
2508
+ return (*h)->DebugString();
2509
+ }).c_str());
2510
+ }
2511
+ if (auto* nr = p.value_if_ready()) {
2512
+ ServerMetadataHandle md = std::move(nr->value());
1207
2513
  if (send_initial_metadata_->batch->payload->send_initial_metadata
1208
- .send_initial_metadata != md) {
2514
+ .send_initial_metadata != md.get()) {
1209
2515
  *send_initial_metadata_->batch->payload->send_initial_metadata
1210
2516
  .send_initial_metadata = std::move(*md);
1211
2517
  }
1212
2518
  send_initial_metadata_->state = SendInitialMetadata::kForwarded;
2519
+ poll_ctx.Repoll();
1213
2520
  send_initial_metadata_->batch.ResumeWith(flusher);
1214
2521
  }
1215
2522
  }
1216
- if (auto* r = absl::get_if<ServerMetadataHandle>(&poll)) {
2523
+ if (auto* r = poll.value_if_ready()) {
1217
2524
  promise_ = ArenaPromise<ServerMetadataHandle>();
1218
- auto* md = UnwrapMetadata(std::move(*r));
1219
- bool destroy_md = true;
2525
+ auto md = std::move(*r);
2526
+ if (send_message() != nullptr) {
2527
+ send_message()->Done(*md, flusher);
2528
+ }
2529
+ if (receive_message() != nullptr) {
2530
+ receive_message()->Done(*md, flusher);
2531
+ }
1220
2532
  switch (send_trailing_state_) {
2533
+ case SendTrailingState::kQueuedBehindSendMessage:
2534
+ case SendTrailingState::kQueuedButHaventClosedSends:
1221
2535
  case SendTrailingState::kQueued: {
1222
2536
  if (send_trailing_metadata_batch_->payload->send_trailing_metadata
1223
- .send_trailing_metadata != md) {
2537
+ .send_trailing_metadata != md.get()) {
1224
2538
  *send_trailing_metadata_batch_->payload->send_trailing_metadata
1225
2539
  .send_trailing_metadata = std::move(*md);
1226
- } else {
1227
- destroy_md = false;
1228
2540
  }
1229
2541
  send_trailing_metadata_batch_.ResumeWith(flusher);
1230
2542
  send_trailing_state_ = SendTrailingState::kForwarded;
1231
2543
  } break;
1232
2544
  case SendTrailingState::kForwarded:
1233
- abort(); // unreachable
2545
+ Crash(absl::StrFormat(
2546
+ "ILLEGAL STATE: %s",
2547
+ StateString(send_trailing_state_))); // unreachable
1234
2548
  break;
1235
2549
  case SendTrailingState::kInitial: {
1236
2550
  GPR_ASSERT(*md->get_pointer(GrpcStatusMetadata()) != GRPC_STATUS_OK);
1237
- grpc_error_handle error =
1238
- grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1239
- "early return from promise based filter"),
1240
- GRPC_ERROR_INT_GRPC_STATUS,
1241
- *md->get_pointer(GrpcStatusMetadata()));
1242
- if (auto* message = md->get_pointer(GrpcMessageMetadata())) {
1243
- error = grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE,
1244
- message->as_string_view());
1245
- }
1246
- Cancel(error, flusher);
2551
+ Completed(StatusFromMetadata(*md), flusher);
1247
2552
  } break;
1248
2553
  case SendTrailingState::kCancelled:
1249
2554
  // Nothing to do.
1250
2555
  break;
1251
2556
  }
1252
- if (destroy_md) {
1253
- md->~grpc_metadata_batch();
1254
- }
2557
+ }
2558
+ }
2559
+ if (std::exchange(forward_recv_initial_metadata_callback_, false)) {
2560
+ if (auto* closure =
2561
+ std::exchange(original_recv_initial_metadata_ready_, nullptr)) {
2562
+ flusher->AddClosure(closure, absl::OkStatus(),
2563
+ "original_recv_initial_metadata");
1255
2564
  }
1256
2565
  }
1257
2566
  }
1258
2567
 
1259
- void ServerCallData::OnWakeup() { abort(); } // not implemented
2568
+ void ServerCallData::OnWakeup() {
2569
+ Flusher flusher(this);
2570
+ ScopedContext context(this);
2571
+ WakeInsideCombiner(&flusher);
2572
+ }
1260
2573
 
1261
2574
  } // namespace promise_filter_detail
1262
2575
  } // namespace grpc_core