grpc 1.48.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 (2600) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +501 -260
  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/endpoint_config.h +11 -5
  7. data/include/grpc/event_engine/event_engine.h +99 -36
  8. data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -1
  9. data/include/grpc/event_engine/internal/slice_cast.h +67 -0
  10. data/include/grpc/event_engine/memory_allocator.h +1 -1
  11. data/include/grpc/event_engine/slice.h +24 -4
  12. data/include/grpc/event_engine/slice_buffer.h +44 -3
  13. data/include/grpc/fork.h +25 -1
  14. data/include/grpc/grpc.h +3 -13
  15. data/include/grpc/grpc_audit_logging.h +96 -0
  16. data/include/grpc/grpc_posix.h +1 -1
  17. data/include/grpc/grpc_security.h +4 -0
  18. data/include/grpc/impl/codegen/atm.h +3 -71
  19. data/include/grpc/impl/codegen/atm_gcc_atomic.h +3 -67
  20. data/include/grpc/impl/codegen/atm_gcc_sync.h +3 -61
  21. data/include/grpc/impl/codegen/atm_windows.h +3 -108
  22. data/include/grpc/impl/codegen/byte_buffer.h +4 -78
  23. data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -19
  24. data/include/grpc/impl/codegen/compression_types.h +3 -82
  25. data/include/grpc/impl/codegen/connectivity_state.h +3 -20
  26. data/include/grpc/impl/codegen/fork.h +4 -25
  27. data/include/grpc/impl/codegen/gpr_types.h +2 -34
  28. data/include/grpc/impl/codegen/grpc_types.h +3 -790
  29. data/include/grpc/impl/codegen/log.h +3 -86
  30. data/include/grpc/impl/codegen/port_platform.h +3 -766
  31. data/include/grpc/impl/codegen/propagation_bits.h +3 -28
  32. data/include/grpc/impl/codegen/slice.h +3 -106
  33. data/include/grpc/impl/codegen/status.h +4 -131
  34. data/include/grpc/impl/codegen/sync.h +3 -42
  35. data/include/grpc/impl/codegen/sync_abseil.h +3 -12
  36. data/include/grpc/impl/codegen/sync_custom.h +3 -14
  37. data/include/grpc/impl/codegen/sync_generic.h +3 -25
  38. data/include/grpc/impl/codegen/sync_posix.h +3 -28
  39. data/include/grpc/impl/codegen/sync_windows.h +3 -16
  40. data/include/grpc/impl/compression_types.h +109 -0
  41. data/include/grpc/impl/connectivity_state.h +47 -0
  42. data/include/grpc/impl/grpc_types.h +838 -0
  43. data/include/grpc/impl/propagation_bits.h +54 -0
  44. data/include/grpc/impl/slice_type.h +112 -0
  45. data/include/grpc/load_reporting.h +1 -1
  46. data/include/grpc/module.modulemap +7 -1
  47. data/include/grpc/slice.h +1 -1
  48. data/include/grpc/status.h +131 -1
  49. data/include/grpc/support/atm.h +70 -1
  50. data/include/grpc/support/atm_gcc_atomic.h +59 -1
  51. data/include/grpc/support/atm_gcc_sync.h +58 -1
  52. data/include/grpc/support/atm_windows.h +105 -1
  53. data/include/grpc/support/json.h +218 -0
  54. data/include/grpc/support/log.h +87 -1
  55. data/include/grpc/support/log_windows.h +1 -1
  56. data/include/grpc/support/port_platform.h +767 -1
  57. data/include/grpc/support/string_util.h +1 -1
  58. data/include/grpc/support/sync.h +35 -2
  59. data/include/grpc/support/sync_abseil.h +11 -1
  60. data/include/grpc/support/sync_custom.h +13 -1
  61. data/include/grpc/support/sync_generic.h +24 -1
  62. data/include/grpc/support/sync_posix.h +27 -1
  63. data/include/grpc/support/sync_windows.h +15 -1
  64. data/include/grpc/support/time.h +31 -6
  65. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +164 -0
  66. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +52 -0
  67. data/src/core/ext/filters/backend_metrics/backend_metric_provider.h +29 -0
  68. data/src/core/ext/filters/census/grpc_context.cc +17 -18
  69. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +34 -28
  70. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +7 -6
  71. data/src/core/ext/filters/channel_idle/idle_filter_state.h +4 -4
  72. data/src/core/ext/filters/client_channel/backend_metric.cc +12 -1
  73. data/src/core/ext/filters/client_channel/backend_metric.h +3 -3
  74. data/src/core/ext/filters/client_channel/backup_poller.cc +30 -41
  75. data/src/core/ext/filters/client_channel/backup_poller.h +24 -27
  76. data/src/core/ext/filters/client_channel/channel_connectivity.cc +51 -28
  77. data/src/core/ext/filters/client_channel/client_channel.cc +1135 -1201
  78. data/src/core/ext/filters/client_channel/client_channel.h +170 -195
  79. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +36 -37
  80. data/src/core/ext/filters/client_channel/client_channel_channelz.h +22 -22
  81. data/src/core/ext/filters/client_channel/client_channel_factory.cc +17 -46
  82. data/src/core/ext/filters/client_channel/client_channel_factory.h +5 -13
  83. data/src/core/ext/filters/client_channel/client_channel_internal.h +77 -0
  84. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +18 -34
  85. data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
  86. data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +26 -26
  87. data/src/core/ext/filters/client_channel/config_selector.h +34 -56
  88. data/src/core/ext/filters/client_channel/connector.h +13 -10
  89. data/src/core/ext/filters/client_channel/dynamic_filters.cc +28 -55
  90. data/src/core/ext/filters/client_channel/dynamic_filters.h +10 -11
  91. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +21 -21
  92. data/src/core/ext/filters/client_channel/http_proxy.cc +125 -112
  93. data/src/core/ext/filters/client_channel/http_proxy.h +36 -32
  94. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +3 -4
  95. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +3 -3
  96. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +29 -21
  97. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +27 -18
  98. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +14 -14
  99. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +66 -132
  100. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +40 -24
  101. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +325 -360
  102. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +26 -27
  103. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +12 -4
  104. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +9 -7
  105. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +18 -20
  106. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +21 -22
  107. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +19 -19
  108. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +22 -24
  109. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +455 -0
  110. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.h +54 -0
  111. data/src/core/ext/filters/client_channel/lb_policy/health_check_client_internal.h +186 -0
  112. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +30 -104
  113. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +5 -5
  114. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric_internal.h +117 -0
  115. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +436 -311
  116. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +69 -8
  117. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +61 -56
  118. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +261 -401
  119. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +288 -310
  120. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +32 -10
  121. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +561 -626
  122. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +60 -53
  123. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +94 -57
  124. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +198 -0
  125. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.h +71 -0
  126. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +1002 -0
  127. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +176 -186
  128. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +166 -176
  129. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
  130. data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +15 -17
  131. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +3 -3
  132. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +159 -262
  133. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +183 -215
  134. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +391 -444
  135. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +814 -0
  136. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +67 -0
  137. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +363 -0
  138. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +21 -21
  139. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +13 -18
  140. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +456 -286
  141. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.h +30 -0
  142. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +42 -43
  143. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +22 -23
  144. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +92 -87
  145. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +303 -232
  146. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +69 -57
  147. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +18 -18
  148. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +18 -18
  149. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_plugin.cc +60 -0
  150. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_plugin.h +27 -0
  151. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +549 -0
  152. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.h +35 -0
  153. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.cc +97 -0
  154. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.h +32 -0
  155. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +29 -46
  156. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.h +24 -0
  157. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +8 -20
  158. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +15 -4
  159. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +127 -246
  160. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +122 -67
  161. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +25 -18
  162. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +8 -19
  163. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +431 -341
  164. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +19 -4
  165. data/src/core/ext/filters/client_channel/retry_filter.cc +220 -295
  166. data/src/core/ext/filters/client_channel/retry_filter.h +3 -3
  167. data/src/core/ext/filters/client_channel/retry_service_config.cc +195 -225
  168. data/src/core/ext/filters/client_channel/retry_service_config.h +22 -28
  169. data/src/core/ext/filters/client_channel/retry_throttle.cc +27 -29
  170. data/src/core/ext/filters/client_channel/retry_throttle.h +29 -28
  171. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +22 -53
  172. data/src/core/ext/filters/client_channel/subchannel.cc +211 -450
  173. data/src/core/ext/filters/client_channel/subchannel.h +42 -96
  174. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +4 -4
  175. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +6 -76
  176. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +37 -46
  177. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +38 -42
  178. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +11 -8
  179. data/src/core/ext/filters/deadline/deadline_filter.cc +78 -69
  180. data/src/core/ext/filters/deadline/deadline_filter.h +8 -13
  181. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +26 -20
  182. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +12 -8
  183. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
  184. data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +20 -13
  185. data/src/core/ext/filters/http/client/http_client_filter.cc +48 -46
  186. data/src/core/ext/filters/http/client/http_client_filter.h +21 -21
  187. data/src/core/ext/filters/http/client_authority_filter.cc +20 -21
  188. data/src/core/ext/filters/http/client_authority_filter.h +22 -22
  189. data/src/core/ext/filters/http/http_filters_plugin.cc +30 -57
  190. data/src/core/ext/filters/http/message_compress/compression_filter.cc +323 -0
  191. data/src/core/ext/filters/http/message_compress/compression_filter.h +139 -0
  192. data/src/core/ext/filters/http/server/http_server_filter.cc +55 -55
  193. data/src/core/ext/filters/http/server/http_server_filter.h +22 -22
  194. data/src/core/ext/filters/message_size/message_size_filter.cc +183 -290
  195. data/src/core/ext/filters/message_size/message_size_filter.h +72 -23
  196. data/src/core/ext/filters/rbac/rbac_filter.cc +16 -15
  197. data/src/core/ext/filters/rbac/rbac_filter.h +3 -3
  198. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +831 -536
  199. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +7 -8
  200. data/src/core/ext/filters/server_config_selector/server_config_selector.h +14 -11
  201. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +15 -21
  202. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +3 -3
  203. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +220 -0
  204. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +81 -0
  205. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +82 -0
  206. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +93 -0
  207. data/src/core/ext/gcp/metadata_query.cc +137 -0
  208. data/src/core/ext/gcp/metadata_query.h +87 -0
  209. data/src/core/ext/transport/chttp2/alpn/alpn.cc +18 -18
  210. data/src/core/ext/transport/chttp2/alpn/alpn.h +24 -24
  211. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +108 -130
  212. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +30 -24
  213. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +221 -242
  214. data/src/core/ext/transport/chttp2/server/chttp2_server.h +25 -27
  215. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +22 -22
  216. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +33 -33
  217. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +42 -38
  218. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +35 -31
  219. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +808 -730
  220. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +45 -24
  221. data/src/core/ext/transport/chttp2/transport/context_list_entry.h +70 -0
  222. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +251 -0
  223. data/src/core/ext/transport/chttp2/transport/decode_huff.h +971 -0
  224. data/src/core/ext/transport/chttp2/transport/flow_control.cc +180 -60
  225. data/src/core/ext/transport/chttp2/transport/flow_control.h +78 -45
  226. data/src/core/ext/transport/chttp2/transport/frame.h +21 -21
  227. data/src/core/ext/transport/chttp2/transport/frame_data.cc +35 -32
  228. data/src/core/ext/transport/chttp2/transport/frame_data.h +27 -27
  229. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +38 -36
  230. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +20 -20
  231. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +28 -33
  232. data/src/core/ext/transport/chttp2/transport/frame_ping.h +21 -24
  233. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +30 -25
  234. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +21 -21
  235. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +39 -37
  236. data/src/core/ext/transport/chttp2/transport/frame_settings.h +22 -22
  237. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +24 -21
  238. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +21 -21
  239. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +10 -4
  240. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +212 -365
  241. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +328 -160
  242. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +4 -2
  243. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +13 -5
  244. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +500 -754
  245. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +30 -26
  246. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +42 -47
  247. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +41 -28
  248. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +21 -19
  249. data/src/core/ext/transport/chttp2/transport/http2_settings.h +39 -37
  250. data/src/core/ext/transport/chttp2/transport/http_trace.cc +19 -0
  251. data/src/core/ext/transport/chttp2/transport/http_trace.h +24 -0
  252. data/src/core/ext/transport/chttp2/transport/huffsyms.cc +20 -20
  253. data/src/core/ext/transport/chttp2/transport/huffsyms.h +21 -21
  254. data/src/core/ext/transport/chttp2/transport/internal.h +224 -193
  255. data/src/core/ext/transport/chttp2/transport/parsing.cc +307 -109
  256. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +19 -19
  257. data/src/core/ext/transport/chttp2/transport/stream_map.cc +23 -23
  258. data/src/core/ext/transport/chttp2/transport/stream_map.h +33 -33
  259. data/src/core/ext/transport/chttp2/transport/varint.cc +19 -20
  260. data/src/core/ext/transport/chttp2/transport/varint.h +37 -34
  261. data/src/core/ext/transport/chttp2/transport/writing.cc +94 -84
  262. data/src/core/ext/transport/inproc/inproc_plugin.cc +17 -17
  263. data/src/core/ext/transport/inproc/inproc_transport.cc +184 -232
  264. data/src/core/ext/transport/inproc/inproc_transport.h +21 -21
  265. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +87 -52
  266. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +435 -182
  267. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +121 -59
  268. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +502 -220
  269. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +93 -377
  270. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +468 -1881
  271. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +535 -0
  272. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +2796 -0
  273. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +30 -17
  274. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +152 -47
  275. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +34 -19
  276. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +176 -49
  277. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +27 -14
  278. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +82 -38
  279. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +20 -11
  280. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +52 -26
  281. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +20 -11
  282. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +52 -26
  283. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +109 -62
  284. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +574 -244
  285. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +21 -12
  286. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +49 -30
  287. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +22 -19
  288. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +82 -29
  289. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +23 -16
  290. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +49 -30
  291. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +230 -143
  292. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +795 -406
  293. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +417 -256
  294. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1954 -858
  295. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -41
  296. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +298 -148
  297. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +537 -348
  298. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +2136 -1171
  299. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +21 -12
  300. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +49 -30
  301. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +89 -52
  302. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +351 -232
  303. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +264 -165
  304. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +948 -480
  305. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +154 -72
  306. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +631 -213
  307. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +22 -13
  308. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +54 -36
  309. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +380 -219
  310. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1263 -598
  311. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +166 -94
  312. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +694 -292
  313. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +18 -11
  314. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +41 -26
  315. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +21 -12
  316. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +49 -30
  317. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +30 -17
  318. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +152 -47
  319. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +274 -167
  320. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +841 -440
  321. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +222 -128
  322. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +1152 -485
  323. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +22 -13
  324. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +64 -37
  325. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +350 -207
  326. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +1156 -620
  327. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +44 -11
  328. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +179 -18
  329. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +34 -19
  330. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +127 -57
  331. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +48 -16
  332. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +193 -44
  333. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +31 -18
  334. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +147 -65
  335. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +22 -13
  336. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +55 -37
  337. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +78 -43
  338. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +277 -127
  339. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +147 -84
  340. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +479 -227
  341. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +115 -62
  342. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +579 -227
  343. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +18 -11
  344. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +39 -26
  345. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +198 -94
  346. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +1072 -358
  347. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +172 -95
  348. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +893 -375
  349. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +49 -23
  350. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +186 -89
  351. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +40 -16
  352. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +95 -45
  353. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +28 -15
  354. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +75 -45
  355. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +131 -74
  356. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +521 -249
  357. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +135 -80
  358. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +542 -246
  359. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +263 -121
  360. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +1083 -374
  361. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +83 -48
  362. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +656 -232
  363. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +1317 -722
  364. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +5948 -2306
  365. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +49 -28
  366. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +177 -85
  367. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +223 -117
  368. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +847 -369
  369. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +20 -10
  370. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +57 -22
  371. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +21 -12
  372. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +49 -30
  373. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +32 -19
  374. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +78 -49
  375. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +27 -14
  376. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +114 -43
  377. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +46 -25
  378. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +263 -100
  379. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +55 -0
  380. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +122 -0
  381. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +18 -11
  382. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +39 -26
  383. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +42 -23
  384. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +116 -70
  385. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +8 -4
  386. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +21 -15
  387. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +43 -24
  388. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +118 -75
  389. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +30 -16
  390. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +104 -46
  391. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +16 -9
  392. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +77 -23
  393. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +60 -37
  394. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +170 -108
  395. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +74 -43
  396. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +369 -167
  397. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +47 -21
  398. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +146 -58
  399. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +42 -18
  400. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +257 -67
  401. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c +75 -0
  402. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +201 -0
  403. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +476 -283
  404. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +2259 -1015
  405. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c +53 -0
  406. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +107 -0
  407. 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
  408. 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
  409. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.c +138 -0
  410. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +499 -0
  411. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +36 -17
  412. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +148 -55
  413. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +18 -11
  414. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +39 -26
  415. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +7 -4
  416. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +15 -10
  417. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +184 -94
  418. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +948 -349
  419. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +56 -33
  420. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +162 -101
  421. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +188 -109
  422. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +855 -408
  423. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +32 -19
  424. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +118 -54
  425. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +10 -7
  426. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +22 -14
  427. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +325 -85
  428. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +1705 -299
  429. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +42 -23
  430. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +197 -76
  431. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +131 -84
  432. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +531 -239
  433. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +22 -13
  434. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +59 -34
  435. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +39 -26
  436. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +141 -69
  437. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.c +56 -0
  438. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.h +130 -0
  439. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +60 -26
  440. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +146 -51
  441. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +37 -20
  442. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +141 -63
  443. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +22 -13
  444. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +95 -40
  445. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +21 -12
  446. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +54 -32
  447. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +18 -11
  448. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +41 -26
  449. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +46 -27
  450. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +113 -70
  451. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.c +46 -0
  452. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.h +117 -0
  453. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +40 -23
  454. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +170 -76
  455. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +31 -18
  456. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +123 -57
  457. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +46 -29
  458. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +151 -91
  459. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +65 -42
  460. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +228 -121
  461. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +80 -45
  462. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +228 -131
  463. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +34 -21
  464. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +86 -53
  465. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +7 -4
  466. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +13 -8
  467. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +16 -9
  468. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +32 -18
  469. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +28 -15
  470. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +63 -34
  471. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +43 -22
  472. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +103 -53
  473. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +78 -0
  474. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +237 -0
  475. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.c +7 -4
  476. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +16 -9
  477. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +20 -11
  478. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +52 -26
  479. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +23 -14
  480. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +65 -41
  481. data/src/core/ext/upb-generated/google/api/annotations.upb.c +14 -11
  482. data/src/core/ext/upb-generated/google/api/annotations.upb.h +30 -20
  483. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +255 -154
  484. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +979 -451
  485. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +299 -180
  486. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +995 -484
  487. data/src/core/ext/upb-generated/google/api/http.upb.c +68 -35
  488. data/src/core/ext/upb-generated/google/api/http.upb.h +297 -121
  489. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +22 -13
  490. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +99 -37
  491. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +19 -10
  492. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +42 -22
  493. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +1037 -442
  494. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +3972 -1411
  495. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +19 -10
  496. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +42 -22
  497. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +10 -7
  498. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +22 -14
  499. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +62 -39
  500. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +220 -103
  501. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +19 -10
  502. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +42 -22
  503. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +90 -51
  504. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +193 -107
  505. data/src/core/ext/upb-generated/google/rpc/status.upb.c +22 -13
  506. data/src/core/ext/upb-generated/google/rpc/status.upb.h +99 -37
  507. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +59 -34
  508. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +170 -92
  509. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +43 -24
  510. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +122 -60
  511. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +250 -145
  512. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +960 -416
  513. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +34 -19
  514. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +84 -51
  515. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +25 -14
  516. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +53 -30
  517. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +144 -81
  518. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +442 -218
  519. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +51 -26
  520. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +161 -61
  521. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +173 -102
  522. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +884 -299
  523. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +68 -49
  524. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +167 -104
  525. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +26 -17
  526. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +59 -34
  527. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +12 -9
  528. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +31 -14
  529. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +26 -17
  530. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +59 -34
  531. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +23 -16
  532. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +49 -30
  533. data/src/core/ext/upb-generated/validate/validate.upb.c +846 -456
  534. data/src/core/ext/upb-generated/validate/validate.upb.h +4439 -1908
  535. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +68 -49
  536. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +167 -104
  537. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +26 -17
  538. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +59 -34
  539. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +12 -9
  540. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +31 -14
  541. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +65 -44
  542. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +153 -91
  543. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +23 -16
  544. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +49 -30
  545. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +16 -9
  546. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +32 -18
  547. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.c +56 -0
  548. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.h +122 -0
  549. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +37 -22
  550. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +104 -63
  551. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +26 -17
  552. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +56 -29
  553. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +21 -12
  554. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +49 -30
  555. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +23 -14
  556. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +66 -42
  557. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +44 -25
  558. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +177 -79
  559. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +27 -14
  560. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +69 -38
  561. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +86 -30
  562. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +227 -54
  563. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +21 -13
  564. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +93 -34
  565. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.c +53 -0
  566. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.h +107 -0
  567. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.c +75 -0
  568. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.h +270 -0
  569. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.c +39 -0
  570. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.h +78 -0
  571. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.c +78 -0
  572. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.h +289 -0
  573. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +162 -101
  574. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +539 -295
  575. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.c +160 -0
  576. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.h +740 -0
  577. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +24 -15
  578. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +61 -37
  579. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +40 -23
  580. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +170 -76
  581. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.c +82 -0
  582. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.h +240 -0
  583. data/src/core/ext/upb-generated/xds/type/v3/range.upb.c +85 -0
  584. data/src/core/ext/upb-generated/xds/type/v3/range.upb.h +246 -0
  585. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +21 -13
  586. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +49 -30
  587. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.c +1 -1
  588. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.h +6 -5
  589. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +55 -54
  590. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.h +6 -5
  591. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +68 -275
  592. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +6 -90
  593. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +277 -0
  594. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +126 -0
  595. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.c +1 -1
  596. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.h +6 -5
  597. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +15 -12
  598. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.h +6 -5
  599. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.c +1 -1
  600. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.h +6 -5
  601. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.c +1 -1
  602. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.h +6 -5
  603. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.c +1 -1
  604. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.h +6 -5
  605. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.c +1 -1
  606. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.h +6 -5
  607. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.c +1 -1
  608. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.h +6 -5
  609. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +1 -1
  610. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +6 -5
  611. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +1 -1
  612. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +6 -5
  613. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +108 -108
  614. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +6 -5
  615. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +251 -236
  616. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +6 -5
  617. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +1 -1
  618. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +6 -5
  619. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +233 -223
  620. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +6 -10
  621. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +1 -1
  622. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +6 -5
  623. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +1 -1
  624. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +6 -5
  625. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.c +1 -1
  626. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.h +6 -5
  627. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +96 -76
  628. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +11 -5
  629. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +1 -1
  630. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +6 -5
  631. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +188 -184
  632. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +6 -5
  633. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +13 -12
  634. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +11 -5
  635. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +1 -1
  636. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +6 -5
  637. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +1 -1
  638. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +6 -5
  639. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.c +1 -1
  640. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.h +6 -5
  641. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +1 -1
  642. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +6 -5
  643. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +82 -76
  644. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +6 -5
  645. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +1 -1
  646. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +6 -5
  647. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +194 -187
  648. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +6 -5
  649. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +32 -16
  650. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +11 -5
  651. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +1 -1
  652. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +6 -5
  653. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +8 -4
  654. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +11 -5
  655. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +17 -17
  656. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +6 -5
  657. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +1 -1
  658. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +6 -5
  659. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +1 -1
  660. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +6 -5
  661. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +72 -67
  662. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +6 -5
  663. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +1 -1
  664. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +6 -5
  665. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +1 -1
  666. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +6 -5
  667. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +161 -131
  668. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +26 -5
  669. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +1 -1
  670. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +6 -5
  671. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +55 -42
  672. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +6 -5
  673. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +40 -32
  674. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +6 -5
  675. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +1 -1
  676. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.h +6 -5
  677. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +1 -1
  678. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +6 -5
  679. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +1 -1
  680. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +6 -5
  681. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +162 -129
  682. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +21 -5
  683. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +83 -75
  684. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +8 -7
  685. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +744 -668
  686. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +26 -5
  687. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +1 -1
  688. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +6 -5
  689. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +151 -140
  690. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +11 -5
  691. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +17 -15
  692. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.h +6 -5
  693. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.c +1 -1
  694. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.h +6 -5
  695. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +1 -1
  696. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +6 -5
  697. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.c +1 -1
  698. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.h +6 -5
  699. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.c +1 -1
  700. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.h +6 -5
  701. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +45 -0
  702. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +36 -0
  703. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.c +1 -1
  704. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.h +6 -5
  705. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.c +1 -1
  706. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.h +6 -5
  707. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +17 -13
  708. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.h +6 -5
  709. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.c +1 -1
  710. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.h +6 -5
  711. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +21 -19
  712. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.h +6 -5
  713. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +1 -1
  714. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +6 -5
  715. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +1 -1
  716. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +6 -5
  717. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +1 -1
  718. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +6 -5
  719. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +47 -26
  720. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +6 -5
  721. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +54 -43
  722. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +6 -5
  723. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +60 -0
  724. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +41 -0
  725. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +497 -468
  726. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +6 -5
  727. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +50 -0
  728. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +36 -0
  729. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +1 -1
  730. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +6 -5
  731. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +138 -133
  732. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +6 -5
  733. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +1 -1
  734. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +6 -5
  735. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +151 -147
  736. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +6 -5
  737. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +1 -1
  738. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +6 -5
  739. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +6 -6
  740. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +6 -5
  741. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +157 -85
  742. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +41 -5
  743. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +6 -6
  744. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +6 -5
  745. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -114
  746. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +6 -5
  747. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.c +1 -1
  748. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.h +6 -5
  749. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +1 -1
  750. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +6 -5
  751. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.c +48 -0
  752. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.h +36 -0
  753. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +13 -10
  754. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +11 -5
  755. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +1 -1
  756. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +6 -5
  757. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +1 -1
  758. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +6 -5
  759. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +1 -1
  760. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +6 -5
  761. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +1 -1
  762. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +6 -5
  763. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +30 -29
  764. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +6 -5
  765. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.c +40 -0
  766. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.h +41 -0
  767. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +1 -1
  768. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +6 -5
  769. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +1 -1
  770. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +6 -5
  771. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +1 -1
  772. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +6 -5
  773. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +1 -1
  774. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +6 -5
  775. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +1 -1
  776. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +6 -5
  777. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.c +1 -1
  778. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.h +6 -5
  779. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +1 -1
  780. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +6 -5
  781. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.c +1 -1
  782. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.h +6 -5
  783. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +1 -1
  784. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +6 -5
  785. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +1 -1
  786. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +6 -5
  787. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  788. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +41 -0
  789. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +11 -10
  790. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.h +6 -5
  791. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +1 -1
  792. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +6 -5
  793. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.c +1 -1
  794. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.h +6 -5
  795. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +1 -1
  796. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +6 -5
  797. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +1 -1
  798. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +6 -5
  799. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +1 -1
  800. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +6 -5
  801. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +1 -1
  802. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +6 -5
  803. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.c +1 -1
  804. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.h +6 -5
  805. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +1 -1
  806. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +6 -5
  807. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +328 -270
  808. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +11 -5
  809. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +1 -1
  810. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +6 -5
  811. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +1 -1
  812. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +6 -5
  813. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +1 -1
  814. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +6 -5
  815. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +1 -1
  816. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +6 -5
  817. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +1 -1
  818. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +6 -5
  819. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +1 -1
  820. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +6 -5
  821. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.c +1 -1
  822. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.h +6 -5
  823. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +1 -1
  824. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +6 -5
  825. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +1 -1
  826. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +6 -5
  827. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +1 -1
  828. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +6 -5
  829. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +1 -1
  830. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +6 -5
  831. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +1 -1
  832. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +6 -5
  833. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +1 -1
  834. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +6 -5
  835. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +1 -1
  836. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +6 -5
  837. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.c +1 -1
  838. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.h +6 -5
  839. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.c +1 -1
  840. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.h +6 -5
  841. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.c +1 -1
  842. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.h +6 -5
  843. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +1 -1
  844. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +6 -5
  845. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.c +1 -1
  846. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.h +6 -5
  847. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +1 -1
  848. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +6 -5
  849. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.c +45 -0
  850. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.h +36 -0
  851. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +1 -1
  852. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +6 -5
  853. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +1 -1
  854. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +6 -5
  855. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.c +1 -1
  856. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.h +6 -5
  857. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +1 -1
  858. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +6 -5
  859. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +1 -1
  860. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +6 -5
  861. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +1 -1
  862. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +6 -5
  863. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.c +43 -0
  864. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.h +36 -0
  865. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.c +51 -0
  866. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.h +41 -0
  867. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.c +36 -0
  868. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.h +36 -0
  869. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.c +55 -0
  870. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.h +41 -0
  871. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +10 -10
  872. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.h +6 -5
  873. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.c +71 -0
  874. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.h +61 -0
  875. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.c +1 -1
  876. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.h +6 -5
  877. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.c +1 -1
  878. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.h +6 -5
  879. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.c +60 -0
  880. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.h +41 -0
  881. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.c +36 -0
  882. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.h +46 -0
  883. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +5 -8
  884. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +6 -5
  885. data/src/core/ext/xds/certificate_provider_store.cc +58 -3
  886. data/src/core/ext/xds/certificate_provider_store.h +12 -4
  887. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +36 -50
  888. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +18 -13
  889. data/src/core/ext/xds/upb_utils.h +4 -25
  890. data/src/core/ext/xds/xds_api.cc +117 -198
  891. data/src/core/ext/xds/xds_api.h +32 -36
  892. data/src/core/ext/xds/xds_audit_logger_registry.cc +122 -0
  893. data/src/core/ext/xds/xds_audit_logger_registry.h +68 -0
  894. data/src/core/ext/xds/xds_bootstrap.cc +7 -552
  895. data/src/core/ext/xds/xds_bootstrap.h +41 -94
  896. data/src/core/ext/xds/xds_bootstrap_grpc.cc +374 -0
  897. data/src/core/ext/xds/xds_bootstrap_grpc.h +189 -0
  898. data/src/core/ext/xds/xds_certificate_provider.cc +22 -25
  899. data/src/core/ext/xds/xds_certificate_provider.h +13 -4
  900. data/src/core/ext/xds/xds_channel_args.h +3 -3
  901. data/src/core/ext/xds/xds_channel_stack_modifier.cc +7 -7
  902. data/src/core/ext/xds/xds_channel_stack_modifier.h +12 -4
  903. data/src/core/ext/xds/xds_client.cc +830 -1348
  904. data/src/core/ext/xds/xds_client.h +46 -64
  905. data/src/core/ext/xds/xds_client_grpc.cc +235 -0
  906. data/src/core/ext/xds/xds_client_grpc.h +79 -0
  907. data/src/core/ext/xds/xds_client_stats.cc +50 -36
  908. data/src/core/ext/xds/xds_client_stats.h +46 -41
  909. data/src/core/ext/xds/xds_cluster.cc +396 -246
  910. data/src/core/ext/xds/xds_cluster.h +60 -43
  911. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +62 -77
  912. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +50 -25
  913. data/src/core/ext/xds/xds_common_types.cc +234 -130
  914. data/src/core/ext/xds/xds_common_types.h +24 -19
  915. data/src/core/ext/xds/xds_endpoint.cc +263 -164
  916. data/src/core/ext/xds/xds_endpoint.h +19 -15
  917. data/src/core/ext/xds/xds_health_status.cc +80 -0
  918. data/src/core/ext/xds/xds_health_status.h +109 -0
  919. data/src/core/ext/xds/xds_http_fault_filter.cc +72 -62
  920. data/src/core/ext/xds/xds_http_fault_filter.h +21 -28
  921. data/src/core/ext/xds/xds_http_filters.cc +65 -73
  922. data/src/core/ext/xds/xds_http_filters.h +78 -27
  923. data/src/core/ext/xds/xds_http_rbac_filter.cc +307 -295
  924. data/src/core/ext/xds/xds_http_rbac_filter.h +21 -23
  925. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +222 -0
  926. data/src/core/ext/xds/xds_http_stateful_session_filter.h +59 -0
  927. data/src/core/ext/xds/xds_lb_policy_registry.cc +215 -171
  928. data/src/core/ext/xds/xds_lb_policy_registry.h +15 -16
  929. data/src/core/ext/xds/xds_listener.cc +549 -478
  930. data/src/core/ext/xds/xds_listener.h +51 -54
  931. data/src/core/ext/xds/xds_resource_type.h +28 -22
  932. data/src/core/ext/xds/xds_resource_type_impl.h +13 -16
  933. data/src/core/ext/xds/xds_route_config.cc +610 -576
  934. data/src/core/ext/xds/xds_route_config.h +69 -44
  935. data/src/core/ext/xds/xds_routing.cc +7 -9
  936. data/src/core/ext/xds/xds_routing.h +12 -12
  937. data/src/core/ext/xds/xds_server_config_fetcher.cc +184 -184
  938. data/src/core/ext/xds/xds_transport.h +86 -0
  939. data/src/core/ext/xds/xds_transport_grpc.cc +358 -0
  940. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  941. data/src/core/lib/address_utils/parse_address.cc +49 -46
  942. data/src/core/lib/address_utils/parse_address.h +43 -40
  943. data/src/core/lib/address_utils/sockaddr_utils.cc +30 -28
  944. data/src/core/lib/address_utils/sockaddr_utils.h +36 -36
  945. data/src/core/lib/avl/avl.h +59 -32
  946. data/src/core/lib/backoff/backoff.cc +19 -21
  947. data/src/core/lib/backoff/backoff.h +20 -20
  948. data/src/core/lib/backoff/random_early_detection.cc +31 -0
  949. data/src/core/lib/backoff/random_early_detection.h +59 -0
  950. data/src/core/lib/channel/call_finalization.h +5 -7
  951. data/src/core/lib/channel/call_tracer.cc +51 -0
  952. data/src/core/lib/channel/call_tracer.h +106 -34
  953. data/src/core/lib/channel/channel_args.cc +188 -61
  954. data/src/core/lib/channel/channel_args.h +318 -112
  955. data/src/core/lib/channel/channel_args_preconditioning.h +4 -4
  956. data/src/core/lib/channel/channel_fwd.h +3 -3
  957. data/src/core/lib/channel/channel_stack.cc +60 -58
  958. data/src/core/lib/channel/channel_stack.h +148 -135
  959. data/src/core/lib/channel/channel_stack_builder.cc +21 -24
  960. data/src/core/lib/channel/channel_stack_builder.h +17 -9
  961. data/src/core/lib/channel/channel_stack_builder_impl.cc +55 -26
  962. data/src/core/lib/channel/channel_stack_builder_impl.h +5 -3
  963. data/src/core/lib/channel/channel_trace.cc +40 -38
  964. data/src/core/lib/channel/channel_trace.h +22 -22
  965. data/src/core/lib/channel/channelz.cc +190 -173
  966. data/src/core/lib/channel/channelz.h +80 -64
  967. data/src/core/lib/channel/channelz_registry.cc +41 -37
  968. data/src/core/lib/channel/channelz_registry.h +21 -21
  969. data/src/core/lib/channel/connected_channel.cc +764 -67
  970. data/src/core/lib/channel/connected_channel.h +20 -24
  971. data/src/core/lib/channel/context.h +33 -22
  972. data/src/core/lib/channel/promise_based_filter.cc +1607 -295
  973. data/src/core/lib/channel/promise_based_filter.h +485 -104
  974. data/src/core/lib/channel/server_call_tracer_filter.cc +110 -0
  975. data/src/core/lib/channel/status_util.cc +62 -17
  976. data/src/core/lib/channel/status_util.h +39 -22
  977. data/src/core/lib/compression/compression.cc +19 -19
  978. data/src/core/lib/compression/compression_internal.cc +38 -48
  979. data/src/core/lib/compression/compression_internal.h +25 -25
  980. data/src/core/lib/compression/message_compress.cc +26 -26
  981. data/src/core/lib/compression/message_compress.h +27 -27
  982. data/src/core/lib/config/config_vars.cc +153 -0
  983. data/src/core/lib/config/config_vars.h +127 -0
  984. data/src/core/lib/config/config_vars_non_generated.cc +51 -0
  985. data/src/core/lib/config/core_configuration.cc +5 -1
  986. data/src/core/lib/config/core_configuration.h +84 -38
  987. data/src/core/lib/config/load_config.cc +79 -0
  988. data/src/core/lib/config/load_config.h +55 -0
  989. data/src/core/lib/debug/event_log.cc +88 -0
  990. data/src/core/lib/debug/event_log.h +81 -0
  991. data/src/core/lib/debug/histogram_view.cc +69 -0
  992. data/src/core/lib/debug/histogram_view.h +37 -0
  993. data/src/core/lib/debug/stats.cc +47 -151
  994. data/src/core/lib/debug/stats.h +49 -57
  995. data/src/core/lib/debug/stats_data.cc +302 -646
  996. data/src/core/lib/debug/stats_data.h +295 -543
  997. data/src/core/lib/debug/trace.cc +56 -81
  998. data/src/core/lib/debug/trace.h +37 -54
  999. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +211 -0
  1000. data/src/core/lib/event_engine/cf_engine/cf_engine.h +86 -0
  1001. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +354 -0
  1002. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +146 -0
  1003. data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +79 -0
  1004. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +15 -18
  1005. data/src/core/lib/event_engine/channel_args_endpoint_config.h +16 -10
  1006. data/src/core/lib/event_engine/common_closures.h +71 -0
  1007. data/src/core/lib/event_engine/default_event_engine.cc +111 -0
  1008. data/src/core/lib/event_engine/default_event_engine.h +73 -0
  1009. data/src/core/lib/event_engine/default_event_engine_factory.cc +32 -5
  1010. data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine_factory.h} +4 -12
  1011. data/src/core/lib/event_engine/event_engine.cc +29 -36
  1012. data/src/core/lib/event_engine/forkable.cc +106 -0
  1013. data/src/core/lib/event_engine/forkable.h +61 -0
  1014. data/src/core/lib/event_engine/handle_containers.h +12 -20
  1015. data/src/core/lib/event_engine/memory_allocator.cc +1 -1
  1016. data/src/core/lib/event_engine/memory_allocator_factory.h +47 -0
  1017. data/src/core/lib/event_engine/poller.h +62 -0
  1018. data/src/core/lib/event_engine/posix.h +162 -0
  1019. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +642 -0
  1020. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +139 -0
  1021. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +895 -0
  1022. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
  1023. data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
  1024. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +68 -0
  1025. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +33 -0
  1026. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
  1027. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
  1028. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +254 -0
  1029. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
  1030. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1338 -0
  1031. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +726 -0
  1032. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +637 -0
  1033. data/src/core/lib/event_engine/posix_engine/posix_engine.h +259 -0
  1034. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
  1035. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +292 -0
  1036. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +278 -0
  1037. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +379 -0
  1038. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +91 -0
  1039. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +867 -0
  1040. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +316 -0
  1041. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer.cc +51 -52
  1042. data/src/core/lib/event_engine/posix_engine/timer.h +194 -0
  1043. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_heap.cc +29 -29
  1044. data/src/core/lib/event_engine/posix_engine/timer_heap.h +56 -0
  1045. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +173 -0
  1046. data/src/core/lib/event_engine/posix_engine/timer_manager.h +114 -0
  1047. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +332 -0
  1048. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +185 -0
  1049. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +127 -0
  1050. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
  1051. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +150 -0
  1052. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +45 -0
  1053. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
  1054. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
  1055. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
  1056. data/src/core/lib/event_engine/resolved_address.cc +21 -1
  1057. data/src/core/lib/event_engine/resolved_address_internal.h +34 -0
  1058. data/src/core/lib/event_engine/shim.cc +64 -0
  1059. data/src/core/lib/event_engine/shim.h +33 -0
  1060. data/src/core/lib/event_engine/slice.cc +8 -7
  1061. data/src/core/lib/event_engine/slice_buffer.cc +2 -2
  1062. data/src/core/lib/event_engine/tcp_socket_utils.cc +389 -0
  1063. data/src/core/lib/event_engine/tcp_socket_utils.h +90 -0
  1064. data/src/core/lib/event_engine/thread_local.cc +29 -0
  1065. data/src/core/lib/event_engine/thread_local.h +32 -0
  1066. data/src/core/lib/event_engine/thread_pool/original_thread_pool.cc +256 -0
  1067. data/src/core/lib/event_engine/thread_pool/original_thread_pool.h +137 -0
  1068. data/src/core/lib/event_engine/thread_pool/thread_pool.h +50 -0
  1069. data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +40 -0
  1070. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +489 -0
  1071. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +249 -0
  1072. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +166 -0
  1073. data/src/core/lib/event_engine/{iomgr_engine/iomgr_engine.h → thready_event_engine/thready_event_engine.h} +51 -65
  1074. data/src/core/lib/event_engine/time_util.cc +30 -0
  1075. data/src/core/lib/event_engine/time_util.h +32 -0
  1076. data/src/core/lib/event_engine/trace.cc +7 -0
  1077. data/src/core/lib/event_engine/trace.h +22 -3
  1078. data/src/core/lib/event_engine/utils.cc +44 -0
  1079. data/src/core/lib/event_engine/utils.h +44 -0
  1080. data/src/core/lib/event_engine/windows/iocp.cc +141 -0
  1081. data/src/core/lib/event_engine/windows/iocp.h +69 -0
  1082. data/src/core/lib/event_engine/windows/win_socket.cc +218 -0
  1083. data/src/core/lib/event_engine/windows/win_socket.h +129 -0
  1084. data/src/core/lib/event_engine/windows/windows_endpoint.cc +379 -0
  1085. data/src/core/lib/event_engine/windows/windows_endpoint.h +120 -0
  1086. data/src/core/lib/event_engine/windows/windows_engine.cc +411 -0
  1087. data/src/core/lib/event_engine/windows/windows_engine.h +164 -0
  1088. data/src/core/lib/event_engine/windows/windows_listener.cc +370 -0
  1089. data/src/core/lib/event_engine/windows/windows_listener.h +156 -0
  1090. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +63 -0
  1091. data/src/core/lib/event_engine/work_queue/basic_work_queue.h +71 -0
  1092. data/src/core/lib/event_engine/work_queue/work_queue.h +62 -0
  1093. data/src/core/lib/experiments/config.cc +185 -0
  1094. data/src/core/lib/experiments/config.h +69 -0
  1095. data/src/core/lib/experiments/experiments.cc +138 -0
  1096. data/src/core/lib/experiments/experiments.h +134 -0
  1097. data/src/core/lib/gpr/alloc.cc +19 -25
  1098. data/src/core/lib/gpr/alloc.h +20 -20
  1099. data/src/core/lib/gpr/{log_android.cc → android/log.cc} +22 -20
  1100. data/src/core/lib/gpr/atm.cc +17 -17
  1101. data/src/core/lib/gpr/iphone/cpu.cc +44 -0
  1102. data/src/core/lib/gpr/{cpu_linux.cc → linux/cpu.cc} +28 -23
  1103. data/src/core/lib/gpr/{log_linux.cc → linux/log.cc} +24 -24
  1104. data/src/core/lib/gpr/log.cc +42 -47
  1105. data/src/core/lib/gpr/log_internal.h +55 -0
  1106. data/src/core/lib/gpr/{tmpfile_msys.cc → msys/tmpfile.cc} +21 -20
  1107. data/src/core/lib/gpr/{cpu_posix.cc → posix/cpu.cc} +23 -22
  1108. data/src/core/lib/gpr/{log_posix.cc → posix/log.cc} +20 -19
  1109. data/src/core/lib/gpr/{string_posix.cc → posix/string.cc} +24 -24
  1110. data/src/core/lib/gpr/{sync_posix.cc → posix/sync.cc} +22 -34
  1111. data/src/core/lib/gpr/{time_posix.cc → posix/time.cc} +40 -36
  1112. data/src/core/lib/gpr/{tmpfile_posix.cc → posix/tmpfile.cc} +22 -20
  1113. data/src/core/lib/gpr/spinlock.h +20 -20
  1114. data/src/core/lib/gpr/string.cc +25 -24
  1115. data/src/core/lib/gpr/string.h +61 -61
  1116. data/src/core/lib/gpr/sync.cc +25 -25
  1117. data/src/core/lib/gpr/sync_abseil.cc +36 -40
  1118. data/src/core/lib/gpr/time.cc +34 -30
  1119. data/src/core/lib/gpr/time_precise.cc +22 -22
  1120. data/src/core/lib/gpr/time_precise.h +21 -22
  1121. data/src/core/lib/gpr/tmpfile.h +24 -24
  1122. data/src/core/lib/gpr/useful.h +83 -30
  1123. data/src/core/{ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc → lib/gpr/windows/cpu.cc} +16 -11
  1124. data/src/core/lib/gpr/{log_windows.cc → windows/log.cc} +25 -25
  1125. data/src/core/lib/gpr/windows/string.cc +69 -0
  1126. data/src/core/lib/gpr/windows/string_util.cc +55 -0
  1127. data/src/core/lib/gpr/{sync_windows.cc → windows/sync.cc} +29 -27
  1128. data/src/core/lib/gpr/{time_windows.cc → windows/time.cc} +25 -22
  1129. data/src/core/lib/gpr/windows/tmpfile.cc +68 -0
  1130. data/src/core/lib/gpr/wrap_memcpy.cc +23 -23
  1131. data/src/core/lib/gprpp/atomic_utils.h +20 -20
  1132. data/src/core/lib/gprpp/bitset.h +30 -16
  1133. data/src/core/lib/gprpp/chunked_vector.h +3 -3
  1134. data/src/core/lib/gprpp/construct_destruct.h +3 -3
  1135. data/src/core/lib/gprpp/cpp_impl_of.h +3 -3
  1136. data/src/core/lib/gprpp/crash.cc +43 -0
  1137. data/src/core/lib/gprpp/crash.h +37 -0
  1138. data/src/core/lib/gprpp/debug_location.h +60 -31
  1139. data/src/core/lib/gprpp/dual_ref_counted.h +3 -3
  1140. data/src/core/lib/gprpp/env.h +53 -0
  1141. data/src/core/lib/gprpp/examine_stack.cc +17 -17
  1142. data/src/core/lib/gprpp/examine_stack.h +21 -21
  1143. data/src/core/lib/gprpp/fork.cc +63 -61
  1144. data/src/core/lib/gprpp/fork.h +29 -35
  1145. data/src/core/lib/gprpp/host_port.cc +28 -26
  1146. data/src/core/lib/gprpp/host_port.h +32 -31
  1147. data/src/core/lib/gprpp/linux/env.cc +80 -0
  1148. data/src/core/lib/gprpp/load_file.cc +75 -0
  1149. data/src/core/lib/gprpp/load_file.h +33 -0
  1150. data/src/core/lib/gprpp/manual_constructor.h +21 -21
  1151. data/src/core/lib/gprpp/match.h +3 -3
  1152. data/src/core/lib/gprpp/memory.h +21 -21
  1153. data/src/core/lib/gprpp/mpscq.cc +17 -17
  1154. data/src/core/lib/gprpp/mpscq.h +21 -21
  1155. data/src/core/lib/gprpp/no_destruct.h +95 -0
  1156. data/src/core/lib/gprpp/notification.h +67 -0
  1157. data/src/core/lib/gprpp/orphanable.h +25 -24
  1158. data/src/core/lib/gprpp/overload.h +3 -3
  1159. data/src/core/lib/gprpp/packed_table.h +40 -0
  1160. data/src/core/lib/gprpp/per_cpu.cc +33 -0
  1161. data/src/core/lib/gprpp/per_cpu.h +75 -0
  1162. data/src/core/lib/gprpp/posix/env.cc +47 -0
  1163. data/src/core/lib/gprpp/{stat_posix.cc → posix/stat.cc} +5 -4
  1164. data/src/core/lib/gprpp/{thd_posix.cc → posix/thd.cc} +75 -64
  1165. data/src/core/lib/gprpp/ref_counted.h +54 -55
  1166. data/src/core/lib/gprpp/ref_counted_ptr.h +41 -54
  1167. data/src/core/lib/gprpp/single_set_ptr.h +3 -3
  1168. data/src/core/lib/gprpp/sorted_pack.h +98 -0
  1169. data/src/core/lib/gprpp/stat.h +3 -3
  1170. data/src/core/lib/gprpp/status_helper.cc +6 -4
  1171. data/src/core/lib/gprpp/status_helper.h +9 -5
  1172. data/src/core/lib/gprpp/strerror.cc +43 -0
  1173. data/src/core/lib/gprpp/strerror.h +29 -0
  1174. data/src/core/lib/gprpp/sync.h +23 -23
  1175. data/src/core/lib/gprpp/table.h +12 -4
  1176. data/src/core/lib/gprpp/tchar.cc +49 -0
  1177. data/src/core/lib/gprpp/tchar.h +33 -0
  1178. data/src/core/lib/gprpp/thd.h +39 -23
  1179. data/src/core/lib/gprpp/time.cc +37 -8
  1180. data/src/core/lib/gprpp/time.h +69 -4
  1181. data/src/core/lib/{event_engine/iomgr_engine → gprpp}/time_averaged_stats.cc +23 -25
  1182. data/src/core/lib/gprpp/time_averaged_stats.h +79 -0
  1183. data/src/core/lib/gprpp/time_util.h +4 -4
  1184. data/src/core/lib/gprpp/unique_type_name.h +21 -21
  1185. data/src/core/lib/gprpp/validation_errors.cc +66 -0
  1186. data/src/core/lib/gprpp/validation_errors.h +134 -0
  1187. data/src/core/lib/gprpp/windows/env.cc +56 -0
  1188. data/src/core/lib/gprpp/{stat_windows.cc → windows/stat.cc} +4 -2
  1189. data/src/core/lib/gprpp/{thd_windows.cc → windows/thd.cc} +28 -28
  1190. data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
  1191. data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -27
  1192. data/src/core/lib/handshaker/proxy_mapper.h +53 -0
  1193. data/src/core/lib/handshaker/proxy_mapper_registry.cc +71 -0
  1194. data/src/core/lib/handshaker/proxy_mapper_registry.h +75 -0
  1195. data/src/core/lib/http/format_request.cc +19 -18
  1196. data/src/core/lib/http/format_request.h +20 -20
  1197. data/src/core/lib/http/httpcli.cc +69 -84
  1198. data/src/core/lib/http/httpcli.h +29 -29
  1199. data/src/core/lib/http/httpcli_security_connector.cc +33 -36
  1200. data/src/core/lib/http/httpcli_ssl_credentials.h +3 -3
  1201. data/src/core/lib/http/parser.cc +76 -87
  1202. data/src/core/lib/http/parser.h +35 -35
  1203. data/src/core/lib/iomgr/block_annotate.h +23 -23
  1204. data/src/core/lib/iomgr/buffer_list.cc +156 -136
  1205. data/src/core/lib/iomgr/buffer_list.h +122 -101
  1206. data/src/core/lib/iomgr/call_combiner.cc +32 -64
  1207. data/src/core/lib/iomgr/call_combiner.h +26 -27
  1208. data/src/core/lib/iomgr/cfstream_handle.cc +34 -37
  1209. data/src/core/lib/iomgr/cfstream_handle.h +25 -25
  1210. data/src/core/lib/iomgr/closure.cc +27 -0
  1211. data/src/core/lib/iomgr/closure.h +95 -58
  1212. data/src/core/lib/iomgr/combiner.cc +20 -39
  1213. data/src/core/lib/iomgr/combiner.h +20 -20
  1214. data/src/core/lib/iomgr/dualstack_socket_posix.cc +21 -21
  1215. data/src/core/lib/iomgr/dynamic_annotations.h +22 -22
  1216. data/src/core/lib/iomgr/endpoint.cc +17 -17
  1217. data/src/core/lib/iomgr/endpoint.h +49 -49
  1218. data/src/core/lib/iomgr/endpoint_cfstream.cc +58 -53
  1219. data/src/core/lib/iomgr/endpoint_cfstream.h +32 -32
  1220. data/src/core/lib/iomgr/endpoint_pair.h +22 -22
  1221. data/src/core/lib/iomgr/endpoint_pair_posix.cc +36 -30
  1222. data/src/core/lib/iomgr/endpoint_pair_windows.cc +31 -22
  1223. data/src/core/lib/iomgr/error.cc +49 -834
  1224. data/src/core/lib/iomgr/error.h +45 -321
  1225. data/src/core/lib/iomgr/error_cfstream.cc +18 -23
  1226. data/src/core/lib/iomgr/error_cfstream.h +21 -21
  1227. data/src/core/lib/iomgr/ev_apple.cc +33 -33
  1228. data/src/core/lib/iomgr/ev_apple.h +21 -21
  1229. data/src/core/lib/iomgr/ev_epoll1_linux.cc +219 -236
  1230. data/src/core/lib/iomgr/ev_epoll1_linux.h +20 -20
  1231. data/src/core/lib/iomgr/ev_poll_posix.cc +231 -231
  1232. data/src/core/lib/iomgr/ev_poll_posix.h +20 -20
  1233. data/src/core/lib/iomgr/ev_posix.cc +47 -79
  1234. data/src/core/lib/iomgr/ev_posix.h +88 -87
  1235. data/src/core/lib/iomgr/ev_windows.cc +18 -18
  1236. data/src/core/lib/iomgr/event_engine_shims/closure.cc +62 -0
  1237. data/src/core/lib/iomgr/event_engine_shims/closure.h +39 -0
  1238. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +471 -0
  1239. data/src/core/lib/iomgr/event_engine_shims/endpoint.h +43 -0
  1240. data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +91 -0
  1241. data/src/core/lib/iomgr/event_engine_shims/tcp_client.h +44 -0
  1242. data/src/core/lib/iomgr/exec_ctx.cc +34 -56
  1243. data/src/core/lib/iomgr/exec_ctx.h +151 -175
  1244. data/src/core/lib/iomgr/executor.cc +21 -31
  1245. data/src/core/lib/iomgr/executor.h +27 -30
  1246. data/src/core/lib/iomgr/fork_posix.cc +29 -26
  1247. data/src/core/lib/iomgr/fork_windows.cc +21 -21
  1248. data/src/core/lib/iomgr/gethostname.h +20 -20
  1249. data/src/core/lib/iomgr/gethostname_fallback.cc +17 -17
  1250. data/src/core/lib/iomgr/gethostname_host_name_max.cc +17 -17
  1251. data/src/core/lib/iomgr/gethostname_sysconf.cc +17 -17
  1252. data/src/core/lib/iomgr/grpc_if_nametoindex.h +22 -22
  1253. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +20 -19
  1254. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +20 -19
  1255. data/src/core/lib/iomgr/internal_errqueue.cc +4 -2
  1256. data/src/core/lib/iomgr/internal_errqueue.h +83 -83
  1257. data/src/core/lib/iomgr/iocp_windows.cc +47 -26
  1258. data/src/core/lib/iomgr/iocp_windows.h +32 -21
  1259. data/src/core/lib/iomgr/iomgr.cc +29 -34
  1260. data/src/core/lib/iomgr/iomgr.h +35 -35
  1261. data/src/core/lib/iomgr/iomgr_fwd.h +4 -3
  1262. data/src/core/lib/iomgr/iomgr_internal.cc +17 -17
  1263. data/src/core/lib/iomgr/iomgr_internal.h +28 -28
  1264. data/src/core/lib/iomgr/iomgr_posix.cc +20 -20
  1265. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +21 -20
  1266. data/src/core/lib/iomgr/iomgr_windows.cc +32 -24
  1267. data/src/core/lib/iomgr/load_file.cc +24 -27
  1268. data/src/core/lib/iomgr/load_file.h +22 -22
  1269. data/src/core/lib/iomgr/lockfree_event.cc +114 -131
  1270. data/src/core/lib/iomgr/lockfree_event.h +23 -23
  1271. data/src/core/lib/iomgr/nameser.h +86 -86
  1272. data/src/core/lib/iomgr/polling_entity.cc +25 -21
  1273. data/src/core/lib/iomgr/polling_entity.h +29 -29
  1274. data/src/core/lib/iomgr/pollset.cc +17 -17
  1275. data/src/core/lib/iomgr/pollset.h +55 -55
  1276. data/src/core/lib/iomgr/pollset_set.cc +17 -17
  1277. data/src/core/lib/iomgr/pollset_set.h +25 -26
  1278. data/src/core/lib/iomgr/pollset_set_windows.cc +27 -27
  1279. data/src/core/lib/iomgr/pollset_set_windows.h +20 -20
  1280. data/src/core/lib/iomgr/pollset_windows.cc +33 -32
  1281. data/src/core/lib/iomgr/pollset_windows.h +24 -24
  1282. data/src/core/lib/iomgr/port.h +34 -31
  1283. data/src/core/lib/iomgr/python_util.h +24 -24
  1284. data/src/core/lib/iomgr/resolve_address.cc +26 -20
  1285. data/src/core/lib/iomgr/resolve_address.h +54 -31
  1286. data/src/core/lib/iomgr/resolve_address_impl.h +5 -4
  1287. data/src/core/lib/iomgr/resolve_address_posix.cc +74 -49
  1288. data/src/core/lib/iomgr/resolve_address_posix.h +23 -10
  1289. data/src/core/lib/iomgr/resolve_address_windows.cc +59 -26
  1290. data/src/core/lib/iomgr/resolve_address_windows.h +23 -10
  1291. data/src/core/lib/iomgr/resolved_address.h +3 -3
  1292. data/src/core/lib/iomgr/sockaddr.h +23 -23
  1293. data/src/core/lib/iomgr/sockaddr_posix.h +21 -21
  1294. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +20 -18
  1295. data/src/core/lib/iomgr/sockaddr_windows.h +21 -21
  1296. data/src/core/lib/iomgr/socket_factory_posix.cc +18 -18
  1297. data/src/core/lib/iomgr/socket_factory_posix.h +32 -32
  1298. data/src/core/lib/iomgr/socket_mutator.cc +19 -18
  1299. data/src/core/lib/iomgr/socket_mutator.h +39 -39
  1300. data/src/core/lib/iomgr/socket_utils.h +27 -27
  1301. data/src/core/lib/iomgr/socket_utils_common_posix.cc +99 -104
  1302. data/src/core/lib/iomgr/socket_utils_linux.cc +18 -17
  1303. data/src/core/lib/iomgr/socket_utils_posix.cc +106 -19
  1304. data/src/core/lib/iomgr/socket_utils_posix.h +179 -84
  1305. data/src/core/lib/iomgr/socket_utils_windows.cc +20 -19
  1306. data/src/core/lib/iomgr/socket_windows.cc +97 -42
  1307. data/src/core/lib/iomgr/socket_windows.h +68 -63
  1308. data/src/core/lib/iomgr/systemd_utils.cc +116 -0
  1309. data/src/core/lib/iomgr/systemd_utils.h +33 -0
  1310. data/src/core/lib/iomgr/tcp_client.cc +23 -24
  1311. data/src/core/lib/iomgr/tcp_client.h +39 -39
  1312. data/src/core/lib/iomgr/tcp_client_cfstream.cc +43 -35
  1313. data/src/core/lib/iomgr/tcp_client_posix.cc +117 -100
  1314. data/src/core/lib/iomgr/tcp_client_posix.h +54 -51
  1315. data/src/core/lib/iomgr/tcp_client_windows.cc +57 -48
  1316. data/src/core/lib/iomgr/tcp_posix.cc +448 -350
  1317. data/src/core/lib/iomgr/tcp_posix.h +32 -30
  1318. data/src/core/lib/iomgr/tcp_server.cc +33 -24
  1319. data/src/core/lib/iomgr/tcp_server.h +78 -69
  1320. data/src/core/lib/iomgr/tcp_server_posix.cc +390 -126
  1321. data/src/core/lib/iomgr/tcp_server_utils_posix.h +68 -55
  1322. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +93 -58
  1323. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +40 -40
  1324. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +19 -19
  1325. data/src/core/lib/iomgr/tcp_server_windows.cc +280 -123
  1326. data/src/core/lib/iomgr/tcp_windows.cc +121 -102
  1327. data/src/core/lib/iomgr/tcp_windows.h +34 -35
  1328. data/src/core/lib/iomgr/timer.cc +17 -17
  1329. data/src/core/lib/iomgr/timer.h +68 -68
  1330. data/src/core/lib/iomgr/timer_generic.cc +142 -150
  1331. data/src/core/lib/iomgr/timer_generic.h +21 -21
  1332. data/src/core/lib/iomgr/timer_heap.cc +25 -25
  1333. data/src/core/lib/iomgr/timer_heap.h +22 -22
  1334. data/src/core/lib/iomgr/timer_manager.cc +31 -31
  1335. data/src/core/lib/iomgr/timer_manager.h +27 -27
  1336. data/src/core/lib/iomgr/unix_sockets_posix.cc +20 -21
  1337. data/src/core/lib/iomgr/unix_sockets_posix.h +21 -21
  1338. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +19 -17
  1339. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +23 -23
  1340. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +23 -23
  1341. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +29 -26
  1342. data/src/core/lib/iomgr/wakeup_fd_pipe.h +20 -20
  1343. data/src/core/lib/iomgr/wakeup_fd_posix.cc +18 -18
  1344. data/src/core/lib/iomgr/wakeup_fd_posix.h +52 -52
  1345. data/src/core/lib/json/json.h +21 -240
  1346. data/src/core/{ext/filters/http/message_compress/message_decompress_filter.h → lib/json/json_args.h} +13 -11
  1347. data/src/core/lib/json/json_channel_args.h +42 -0
  1348. data/src/core/lib/json/json_object_loader.cc +216 -0
  1349. data/src/core/lib/json/json_object_loader.h +646 -0
  1350. data/src/core/lib/json/json_reader.cc +181 -129
  1351. data/src/core/lib/json/json_reader.h +34 -0
  1352. data/src/core/lib/json/json_util.cc +23 -55
  1353. data/src/core/lib/json/json_util.h +12 -11
  1354. data/src/core/lib/json/json_writer.cc +80 -81
  1355. data/src/core/{ext/xds/xds_resource_type.cc → lib/json/json_writer.h} +11 -11
  1356. data/src/core/lib/load_balancing/lb_policy.cc +98 -0
  1357. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +49 -36
  1358. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  1359. data/src/core/lib/load_balancing/lb_policy_registry.cc +143 -0
  1360. data/src/core/lib/load_balancing/lb_policy_registry.h +82 -0
  1361. data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +9 -14
  1362. data/src/core/lib/matchers/matchers.cc +10 -9
  1363. data/src/core/lib/matchers/matchers.h +5 -4
  1364. data/src/core/lib/promise/activity.cc +43 -6
  1365. data/src/core/lib/promise/activity.h +159 -48
  1366. data/src/core/lib/promise/arena_promise.h +105 -72
  1367. data/src/core/lib/promise/cancel_callback.h +77 -0
  1368. data/src/core/lib/promise/context.h +17 -10
  1369. data/src/core/lib/promise/detail/basic_join.h +197 -0
  1370. data/src/core/lib/promise/detail/basic_seq.h +28 -33
  1371. data/src/core/lib/promise/detail/promise_factory.h +66 -14
  1372. data/src/core/lib/promise/detail/promise_like.h +3 -3
  1373. data/src/core/lib/promise/detail/status.h +31 -3
  1374. data/src/core/lib/promise/detail/switch.h +21 -21
  1375. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +23 -15
  1376. data/src/core/lib/promise/for_each.h +176 -0
  1377. data/src/core/lib/promise/if.h +204 -0
  1378. data/src/core/lib/promise/interceptor_list.h +329 -0
  1379. data/src/core/lib/promise/latch.h +197 -23
  1380. data/src/core/lib/promise/loop.h +22 -16
  1381. data/src/core/lib/promise/map.h +11 -6
  1382. data/src/core/lib/promise/party.cc +304 -0
  1383. data/src/core/lib/promise/party.h +508 -0
  1384. data/src/core/lib/promise/pipe.h +762 -0
  1385. data/src/core/lib/promise/poll.h +177 -11
  1386. data/src/core/lib/promise/prioritized_race.h +95 -0
  1387. data/src/core/lib/promise/promise.h +6 -7
  1388. data/src/core/lib/promise/race.h +6 -9
  1389. data/src/core/lib/promise/seq.h +32 -12
  1390. data/src/core/lib/promise/sleep.cc +53 -43
  1391. data/src/core/lib/promise/sleep.h +34 -26
  1392. data/src/core/lib/promise/trace.cc +20 -0
  1393. data/src/core/lib/promise/trace.h +24 -0
  1394. data/src/core/lib/promise/try_join.h +82 -0
  1395. data/src/core/lib/promise/try_seq.h +39 -21
  1396. data/src/core/lib/resolver/resolver.cc +17 -64
  1397. data/src/core/lib/resolver/resolver.h +18 -18
  1398. data/src/core/lib/resolver/resolver_factory.h +6 -7
  1399. data/src/core/lib/resolver/resolver_registry.cc +16 -1
  1400. data/src/core/lib/resolver/resolver_registry.h +5 -6
  1401. data/src/core/lib/resolver/server_address.cc +29 -39
  1402. data/src/core/lib/resolver/server_address.h +25 -37
  1403. data/src/core/lib/resource_quota/api.cc +10 -2
  1404. data/src/core/lib/resource_quota/api.h +10 -4
  1405. data/src/core/lib/resource_quota/arena.cc +101 -21
  1406. data/src/core/lib/resource_quota/arena.h +310 -23
  1407. data/src/core/lib/resource_quota/memory_quota.cc +280 -59
  1408. data/src/core/lib/resource_quota/memory_quota.h +165 -36
  1409. data/src/core/lib/resource_quota/periodic_update.cc +78 -0
  1410. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  1411. data/src/core/lib/resource_quota/resource_quota.h +4 -4
  1412. data/src/core/lib/resource_quota/thread_quota.h +3 -3
  1413. data/src/core/lib/resource_quota/trace.h +3 -3
  1414. data/src/core/lib/security/authorization/audit_logging.cc +98 -0
  1415. data/src/core/lib/security/authorization/audit_logging.h +73 -0
  1416. data/src/core/lib/security/authorization/authorization_engine.h +3 -3
  1417. data/src/core/lib/security/authorization/authorization_policy_provider.h +4 -4
  1418. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +0 -1
  1419. data/src/core/lib/security/authorization/evaluate_args.cc +10 -7
  1420. data/src/core/lib/security/authorization/evaluate_args.h +3 -3
  1421. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +47 -4
  1422. data/src/core/lib/security/authorization/grpc_authorization_engine.h +21 -4
  1423. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +5 -4
  1424. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +4 -4
  1425. data/src/core/lib/security/authorization/matchers.cc +38 -32
  1426. data/src/core/lib/security/authorization/matchers.h +3 -3
  1427. data/src/core/lib/security/authorization/rbac_policy.cc +39 -8
  1428. data/src/core/lib/security/authorization/rbac_policy.h +22 -5
  1429. data/src/core/lib/security/authorization/stdout_logger.cc +75 -0
  1430. data/src/core/lib/security/authorization/stdout_logger.h +61 -0
  1431. data/src/core/{ext/xds → lib/security/certificate_provider}/certificate_provider_factory.h +11 -7
  1432. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +50 -0
  1433. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +76 -0
  1434. data/src/core/lib/security/context/security_context.cc +22 -23
  1435. data/src/core/lib/security/context/security_context.h +43 -33
  1436. data/src/core/lib/security/credentials/alts/alts_credentials.cc +19 -20
  1437. data/src/core/lib/security/credentials/alts/alts_credentials.h +56 -57
  1438. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +19 -19
  1439. data/src/core/lib/security/credentials/alts/check_gcp_environment.h +43 -43
  1440. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +17 -17
  1441. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +18 -17
  1442. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +18 -17
  1443. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +19 -19
  1444. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +18 -18
  1445. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +38 -39
  1446. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +18 -18
  1447. data/src/core/lib/security/credentials/call_creds_util.h +3 -3
  1448. data/src/core/lib/security/credentials/channel_creds_registry.h +3 -3
  1449. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +4 -4
  1450. data/src/core/lib/security/credentials/composite/composite_credentials.cc +25 -29
  1451. data/src/core/lib/security/credentials/composite/composite_credentials.h +25 -28
  1452. data/src/core/lib/security/credentials/credentials.cc +19 -18
  1453. data/src/core/lib/security/credentials/credentials.h +53 -48
  1454. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +131 -120
  1455. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +4 -3
  1456. data/src/core/lib/security/credentials/external/aws_request_signer.cc +5 -3
  1457. data/src/core/lib/security/credentials/external/aws_request_signer.h +3 -3
  1458. data/src/core/lib/security/credentials/external/external_account_credentials.cc +121 -121
  1459. data/src/core/lib/security/credentials/external/external_account_credentials.h +3 -3
  1460. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +40 -43
  1461. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +3 -3
  1462. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +51 -54
  1463. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +3 -3
  1464. data/src/core/lib/security/credentials/fake/fake_credentials.cc +23 -31
  1465. data/src/core/lib/security/credentials/fake/fake_credentials.h +37 -42
  1466. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +22 -25
  1467. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +105 -156
  1468. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +22 -25
  1469. data/src/core/lib/security/credentials/iam/iam_credentials.cc +19 -18
  1470. data/src/core/lib/security/credentials/iam/iam_credentials.h +20 -20
  1471. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +3 -3
  1472. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +6 -7
  1473. data/src/core/lib/security/credentials/jwt/json_token.cc +54 -43
  1474. data/src/core/lib/security/credentials/jwt/json_token.h +35 -35
  1475. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +27 -26
  1476. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +22 -22
  1477. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +125 -124
  1478. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +47 -47
  1479. data/src/core/lib/security/credentials/local/local_credentials.cc +20 -21
  1480. data/src/core/lib/security/credentials/local/local_credentials.h +26 -27
  1481. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +89 -91
  1482. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +24 -23
  1483. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +24 -24
  1484. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +25 -25
  1485. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +31 -40
  1486. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +23 -24
  1487. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +20 -28
  1488. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +7 -14
  1489. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +48 -47
  1490. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +15 -5
  1491. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +1 -1
  1492. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +3 -3
  1493. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +18 -18
  1494. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +3 -3
  1495. data/src/core/lib/security/credentials/tls/tls_credentials.cc +30 -43
  1496. data/src/core/lib/security/credentials/tls/tls_credentials.h +24 -25
  1497. data/src/core/lib/security/credentials/tls/tls_utils.cc +3 -1
  1498. data/src/core/lib/security/credentials/tls/tls_utils.h +3 -3
  1499. data/src/core/lib/security/credentials/xds/xds_credentials.cc +13 -31
  1500. data/src/core/lib/security/credentials/xds/xds_credentials.h +6 -6
  1501. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +43 -61
  1502. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +43 -44
  1503. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +58 -78
  1504. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +24 -25
  1505. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +7 -7
  1506. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +11 -15
  1507. data/src/core/lib/security/security_connector/load_system_roots.h +20 -20
  1508. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +18 -18
  1509. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +24 -31
  1510. data/src/core/lib/security/security_connector/load_system_roots_supported.h +22 -23
  1511. data/src/core/lib/security/security_connector/local/local_security_connector.cc +43 -45
  1512. data/src/core/lib/security/security_connector/local/local_security_connector.h +44 -45
  1513. data/src/core/lib/security/security_connector/security_connector.cc +17 -17
  1514. data/src/core/lib/security/security_connector/security_connector.h +40 -39
  1515. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +40 -43
  1516. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +40 -41
  1517. data/src/core/lib/security/security_connector/ssl_utils.cc +48 -64
  1518. data/src/core/lib/security/security_connector/ssl_utils.h +35 -35
  1519. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +59 -53
  1520. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +26 -26
  1521. data/src/core/lib/security/transport/auth_filters.h +46 -24
  1522. data/src/core/lib/security/transport/client_auth_filter.cc +36 -26
  1523. data/src/core/lib/security/transport/secure_endpoint.cc +58 -62
  1524. data/src/core/lib/security/transport/secure_endpoint.h +25 -25
  1525. data/src/core/lib/security/transport/security_handshaker.cc +111 -114
  1526. data/src/core/lib/security/transport/security_handshaker.h +24 -23
  1527. data/src/core/lib/security/transport/server_auth_filter.cc +160 -274
  1528. data/src/core/lib/security/transport/tsi_error.cc +23 -20
  1529. data/src/core/lib/security/transport/tsi_error.h +20 -20
  1530. data/src/core/lib/security/util/json_util.cc +27 -27
  1531. data/src/core/lib/security/util/json_util.h +20 -20
  1532. data/src/core/lib/service_config/service_config.h +15 -4
  1533. data/src/core/lib/service_config/service_config_call_data.h +54 -19
  1534. data/src/core/lib/service_config/service_config_impl.cc +113 -152
  1535. data/src/core/lib/service_config/service_config_impl.h +19 -24
  1536. data/src/core/lib/service_config/service_config_parser.cc +10 -28
  1537. data/src/core/lib/service_config/service_config_parser.h +13 -21
  1538. data/src/core/lib/slice/b64.cc +26 -26
  1539. data/src/core/lib/slice/b64.h +32 -32
  1540. data/src/core/lib/slice/percent_encoding.cc +21 -30
  1541. data/src/core/lib/slice/percent_encoding.h +28 -28
  1542. data/src/core/lib/slice/slice.cc +58 -46
  1543. data/src/core/lib/slice/slice.h +59 -18
  1544. data/src/core/lib/slice/slice_buffer.cc +63 -59
  1545. data/src/core/lib/slice/slice_buffer.h +35 -4
  1546. data/src/core/lib/slice/slice_internal.h +34 -42
  1547. data/src/core/lib/slice/slice_refcount.cc +3 -18
  1548. data/src/core/lib/slice/slice_refcount.h +53 -18
  1549. data/src/core/lib/slice/slice_string_helpers.cc +17 -17
  1550. data/src/core/lib/slice/slice_string_helpers.h +21 -21
  1551. data/src/core/lib/surface/api_trace.cc +17 -17
  1552. data/src/core/lib/surface/api_trace.h +25 -25
  1553. data/src/core/lib/surface/builtins.cc +2 -0
  1554. data/src/core/lib/surface/builtins.h +3 -3
  1555. data/src/core/lib/surface/byte_buffer.cc +22 -23
  1556. data/src/core/lib/surface/byte_buffer_reader.cc +23 -23
  1557. data/src/core/lib/surface/call.cc +2305 -547
  1558. data/src/core/lib/surface/call.h +123 -42
  1559. data/src/core/lib/surface/call_details.cc +20 -21
  1560. data/src/core/lib/surface/call_log_batch.cc +19 -18
  1561. data/src/core/lib/surface/call_test_only.h +33 -33
  1562. data/src/core/lib/surface/call_trace.cc +123 -0
  1563. data/src/core/lib/surface/call_trace.h +30 -0
  1564. data/src/core/lib/surface/channel.cc +65 -69
  1565. data/src/core/lib/surface/channel.h +43 -35
  1566. data/src/core/lib/surface/channel_init.cc +17 -17
  1567. data/src/core/lib/surface/channel_init.h +20 -20
  1568. data/src/core/lib/surface/channel_ping.cc +19 -19
  1569. data/src/core/lib/surface/channel_stack_type.cc +21 -17
  1570. data/src/core/lib/surface/channel_stack_type.h +22 -20
  1571. data/src/core/lib/surface/completion_queue.cc +195 -221
  1572. data/src/core/lib/surface/completion_queue.h +37 -40
  1573. data/src/core/lib/surface/completion_queue_factory.cc +33 -28
  1574. data/src/core/lib/surface/completion_queue_factory.h +22 -22
  1575. data/src/core/lib/surface/event_string.cc +18 -17
  1576. data/src/core/lib/surface/event_string.h +22 -22
  1577. data/src/core/lib/surface/init.cc +44 -72
  1578. data/src/core/lib/surface/init.h +20 -20
  1579. data/src/core/lib/surface/init_internally.cc +25 -0
  1580. data/src/core/lib/surface/init_internally.h +37 -0
  1581. data/src/core/lib/surface/lame_client.cc +33 -29
  1582. data/src/core/lib/surface/lame_client.h +22 -22
  1583. data/src/core/lib/surface/metadata_array.cc +17 -18
  1584. data/src/core/lib/surface/server.cc +371 -130
  1585. data/src/core/lib/surface/server.h +20 -21
  1586. data/src/core/lib/surface/validate_metadata.cc +64 -74
  1587. data/src/core/lib/surface/validate_metadata.h +30 -21
  1588. data/src/core/lib/surface/version.cc +21 -21
  1589. data/src/core/lib/transport/batch_builder.cc +182 -0
  1590. data/src/core/lib/transport/batch_builder.h +480 -0
  1591. data/src/core/lib/transport/bdp_estimator.cc +25 -27
  1592. data/src/core/lib/transport/bdp_estimator.h +31 -28
  1593. data/src/core/lib/transport/connectivity_state.cc +19 -20
  1594. data/src/core/lib/transport/connectivity_state.h +23 -23
  1595. data/src/core/lib/transport/custom_metadata.h +30 -0
  1596. data/src/core/lib/transport/error_utils.cc +51 -81
  1597. data/src/core/lib/transport/error_utils.h +24 -24
  1598. data/src/core/lib/transport/handshaker.cc +66 -54
  1599. data/src/core/lib/transport/handshaker.h +51 -47
  1600. data/src/core/lib/transport/handshaker_factory.h +49 -24
  1601. data/src/core/lib/transport/handshaker_registry.cc +27 -20
  1602. data/src/core/lib/transport/handshaker_registry.h +25 -28
  1603. data/src/core/lib/transport/http2_errors.h +22 -22
  1604. data/src/core/lib/transport/http_connect_handshaker.cc +56 -57
  1605. data/src/core/lib/transport/http_connect_handshaker.h +21 -21
  1606. data/src/core/lib/transport/metadata_batch.cc +31 -10
  1607. data/src/core/lib/transport/metadata_batch.h +252 -65
  1608. data/src/core/lib/transport/metadata_compression_traits.h +67 -0
  1609. data/src/core/lib/transport/parsed_metadata.cc +2 -6
  1610. data/src/core/lib/transport/parsed_metadata.h +23 -11
  1611. data/src/core/lib/transport/pid_controller.cc +20 -20
  1612. data/src/core/lib/transport/pid_controller.h +27 -27
  1613. data/src/core/lib/transport/simple_slice_based_metadata.h +48 -0
  1614. data/src/core/lib/transport/status_conversion.cc +23 -25
  1615. data/src/core/lib/transport/status_conversion.h +22 -22
  1616. data/src/core/lib/transport/tcp_connect_handshaker.cc +34 -42
  1617. data/src/core/lib/transport/tcp_connect_handshaker.h +3 -3
  1618. data/src/core/lib/transport/timeout_encoding.cc +28 -23
  1619. data/src/core/lib/transport/timeout_encoding.h +20 -20
  1620. data/src/core/lib/transport/transport.cc +113 -43
  1621. data/src/core/lib/transport/transport.h +275 -218
  1622. data/src/core/lib/transport/transport_fwd.h +3 -3
  1623. data/src/core/lib/transport/transport_impl.h +53 -47
  1624. data/src/core/lib/transport/transport_op_string.cc +75 -63
  1625. data/src/core/lib/uri/uri_parser.cc +1 -1
  1626. data/src/core/lib/uri/uri_parser.h +3 -3
  1627. data/src/core/plugin_registry/grpc_plugin_registry.cc +55 -79
  1628. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +22 -39
  1629. data/src/core/tsi/alts/crypt/aes_gcm.cc +20 -20
  1630. data/src/core/tsi/alts/crypt/gsec.cc +26 -26
  1631. data/src/core/tsi/alts/crypt/gsec.h +336 -336
  1632. data/src/core/tsi/alts/frame_protector/alts_counter.cc +23 -23
  1633. data/src/core/tsi/alts/frame_protector/alts_counter.h +68 -68
  1634. data/src/core/tsi/alts/frame_protector/alts_crypter.cc +19 -19
  1635. data/src/core/tsi/alts/frame_protector/alts_crypter.h +209 -209
  1636. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +73 -71
  1637. data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +40 -40
  1638. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +18 -18
  1639. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +82 -83
  1640. data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +22 -22
  1641. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +22 -22
  1642. data/src/core/tsi/alts/frame_protector/frame_handler.cc +26 -25
  1643. data/src/core/tsi/alts/frame_protector/frame_handler.h +169 -169
  1644. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +137 -100
  1645. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +109 -104
  1646. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +18 -17
  1647. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +43 -44
  1648. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +52 -44
  1649. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +60 -60
  1650. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +24 -24
  1651. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +21 -20
  1652. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +38 -38
  1653. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +19 -19
  1654. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +105 -104
  1655. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +45 -44
  1656. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +40 -41
  1657. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +38 -36
  1658. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +35 -36
  1659. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +67 -68
  1660. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +32 -31
  1661. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +55 -56
  1662. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +54 -53
  1663. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +141 -142
  1664. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +58 -57
  1665. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +43 -44
  1666. data/src/core/tsi/fake_transport_security.cc +133 -109
  1667. data/src/core/tsi/fake_transport_security.h +33 -33
  1668. data/src/core/tsi/local_transport_security.cc +43 -38
  1669. data/src/core/tsi/local_transport_security.h +33 -33
  1670. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +9 -4
  1671. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +3 -3
  1672. data/src/core/tsi/ssl/session_cache/ssl_session.h +21 -21
  1673. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +19 -19
  1674. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +18 -17
  1675. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +31 -22
  1676. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +25 -20
  1677. data/src/core/tsi/ssl_transport_security.cc +302 -371
  1678. data/src/core/tsi/ssl_transport_security.h +206 -203
  1679. data/src/core/tsi/ssl_transport_security_utils.cc +250 -0
  1680. data/src/core/tsi/ssl_transport_security_utils.h +147 -0
  1681. data/src/core/tsi/ssl_types.h +27 -27
  1682. data/src/core/tsi/transport_security.cc +44 -32
  1683. data/src/core/tsi/transport_security.h +49 -48
  1684. data/src/core/tsi/transport_security_grpc.cc +20 -20
  1685. data/src/core/tsi/transport_security_grpc.h +41 -41
  1686. data/src/core/tsi/transport_security_interface.h +344 -332
  1687. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.clang +2 -0
  1688. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.gcc +7 -0
  1689. data/src/ruby/ext/grpc/ext-export.clang +0 -1
  1690. data/src/ruby/ext/grpc/ext-export.gcc +1 -2
  1691. data/src/ruby/ext/grpc/extconf.rb +57 -11
  1692. data/src/ruby/ext/grpc/rb_call.c +1 -0
  1693. data/src/ruby/ext/grpc/rb_channel.c +1 -0
  1694. data/src/ruby/ext/grpc/rb_channel_args.c +1 -0
  1695. data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
  1696. data/src/ruby/ext/grpc/rb_grpc.c +1 -0
  1697. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +38 -38
  1698. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +59 -59
  1699. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  1700. data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
  1701. data/src/ruby/lib/grpc/version.rb +1 -1
  1702. data/src/ruby/pb/generate_proto_ruby.sh +0 -6
  1703. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
  1704. data/src/ruby/spec/channel_spec.rb +5 -43
  1705. data/src/ruby/spec/client_server_spec.rb +20 -8
  1706. data/src/ruby/spec/generic/active_call_spec.rb +12 -3
  1707. data/src/ruby/spec/generic/server_interceptors_spec.rb +1 -1
  1708. data/src/ruby/spec/user_agent_spec.rb +1 -1
  1709. data/third_party/abseil-cpp/absl/algorithm/container.h +56 -57
  1710. data/third_party/abseil-cpp/absl/base/attributes.h +39 -19
  1711. data/third_party/abseil-cpp/absl/base/config.h +45 -4
  1712. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +3 -18
  1713. data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +55 -0
  1714. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +2 -1
  1715. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +3 -3
  1716. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +2 -2
  1717. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +1 -1
  1718. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +10 -6
  1719. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +23 -24
  1720. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -3
  1721. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +2 -6
  1722. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +4 -1
  1723. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +4 -4
  1724. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +14 -10
  1725. data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +9 -0
  1726. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -0
  1727. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -40
  1728. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +62 -0
  1729. data/third_party/abseil-cpp/absl/base/macros.h +4 -21
  1730. data/third_party/abseil-cpp/absl/base/optimization.h +58 -6
  1731. data/third_party/abseil-cpp/absl/base/options.h +1 -7
  1732. data/third_party/abseil-cpp/absl/base/policy_checks.h +15 -13
  1733. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  1734. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  1735. data/third_party/abseil-cpp/absl/container/fixed_array.h +7 -5
  1736. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +0 -7
  1737. data/third_party/abseil-cpp/absl/container/inlined_vector.h +66 -18
  1738. data/third_party/abseil-cpp/absl/container/internal/common.h +3 -3
  1739. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +132 -0
  1740. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +13 -1
  1741. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +4 -55
  1742. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +50 -5
  1743. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +14 -46
  1744. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +110 -32
  1745. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +155 -4
  1746. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +661 -341
  1747. data/third_party/abseil-cpp/absl/crc/crc32c.cc +99 -0
  1748. data/third_party/abseil-cpp/absl/crc/crc32c.h +183 -0
  1749. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +256 -0
  1750. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +57 -0
  1751. data/third_party/abseil-cpp/absl/crc/internal/crc.cc +468 -0
  1752. data/third_party/abseil-cpp/absl/crc/internal/crc.h +91 -0
  1753. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +269 -0
  1754. data/third_party/abseil-cpp/absl/crc/internal/crc32c.h +39 -0
  1755. data/third_party/abseil-cpp/absl/crc/internal/crc32c_inline.h +72 -0
  1756. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.cc +130 -0
  1757. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.h +159 -0
  1758. data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +179 -0
  1759. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy.h +119 -0
  1760. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_fallback.cc +75 -0
  1761. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_64.cc +434 -0
  1762. data/third_party/abseil-cpp/absl/crc/internal/crc_non_temporal_memcpy.cc +93 -0
  1763. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +725 -0
  1764. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +79 -0
  1765. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +180 -0
  1766. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +1 -1
  1767. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +67 -38
  1768. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +1 -1
  1769. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +12 -13
  1770. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +11 -9
  1771. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +1 -1
  1772. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +40 -85
  1773. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +5 -4
  1774. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +33 -8
  1775. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +3 -2
  1776. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +3 -2
  1777. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +118 -94
  1778. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +7 -6
  1779. data/third_party/abseil-cpp/absl/flags/commandlineflag.cc +34 -0
  1780. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +200 -0
  1781. data/third_party/abseil-cpp/absl/flags/config.h +68 -0
  1782. data/third_party/abseil-cpp/absl/flags/declare.h +73 -0
  1783. data/third_party/abseil-cpp/absl/flags/flag.cc +38 -0
  1784. data/third_party/abseil-cpp/absl/flags/flag.h +310 -0
  1785. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.cc +26 -0
  1786. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +68 -0
  1787. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +615 -0
  1788. data/third_party/abseil-cpp/absl/flags/internal/flag.h +800 -0
  1789. data/third_party/abseil-cpp/absl/flags/internal/flag_msvc.inc +116 -0
  1790. data/third_party/abseil-cpp/absl/flags/internal/path_util.h +62 -0
  1791. data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.cc +65 -0
  1792. data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.h +61 -0
  1793. data/third_party/abseil-cpp/absl/flags/internal/program_name.cc +60 -0
  1794. data/third_party/abseil-cpp/absl/flags/internal/program_name.h +50 -0
  1795. data/third_party/abseil-cpp/absl/flags/internal/registry.h +97 -0
  1796. data/third_party/abseil-cpp/absl/flags/internal/sequence_lock.h +187 -0
  1797. data/third_party/abseil-cpp/absl/flags/marshalling.cc +241 -0
  1798. data/third_party/abseil-cpp/absl/flags/marshalling.h +356 -0
  1799. data/third_party/abseil-cpp/absl/flags/reflection.cc +354 -0
  1800. data/third_party/abseil-cpp/absl/flags/reflection.h +90 -0
  1801. data/third_party/abseil-cpp/absl/flags/usage_config.cc +165 -0
  1802. data/third_party/abseil-cpp/absl/flags/usage_config.h +135 -0
  1803. data/third_party/abseil-cpp/absl/functional/any_invocable.h +316 -0
  1804. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +878 -0
  1805. data/third_party/abseil-cpp/absl/hash/internal/city.cc +10 -10
  1806. data/third_party/abseil-cpp/absl/hash/internal/hash.h +18 -4
  1807. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +3 -14
  1808. data/third_party/abseil-cpp/absl/memory/memory.h +26 -447
  1809. data/third_party/abseil-cpp/absl/meta/type_traits.h +104 -12
  1810. data/third_party/abseil-cpp/absl/numeric/bits.h +2 -3
  1811. data/third_party/abseil-cpp/absl/numeric/int128.cc +10 -8
  1812. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +14 -6
  1813. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
  1814. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +1 -1
  1815. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +2 -23
  1816. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +9 -9
  1817. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +2 -2
  1818. data/third_party/abseil-cpp/absl/random/random.h +6 -6
  1819. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +1 -0
  1820. data/third_party/abseil-cpp/absl/status/status.cc +19 -12
  1821. data/third_party/abseil-cpp/absl/status/status.h +2 -2
  1822. data/third_party/abseil-cpp/absl/strings/ascii.cc +5 -5
  1823. data/third_party/abseil-cpp/absl/strings/charconv.cc +534 -96
  1824. data/third_party/abseil-cpp/absl/strings/cord.cc +92 -40
  1825. data/third_party/abseil-cpp/absl/strings/cord.h +71 -80
  1826. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +8 -5
  1827. data/third_party/abseil-cpp/absl/strings/escaping.cc +73 -62
  1828. data/third_party/abseil-cpp/absl/strings/escaping.h +24 -19
  1829. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +14 -12
  1830. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +4 -4
  1831. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
  1832. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +330 -70
  1833. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +8 -4
  1834. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +26 -14
  1835. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +5 -5
  1836. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +9 -7
  1837. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +5 -4
  1838. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +7 -15
  1839. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +3 -3
  1840. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +8 -5
  1841. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +7 -7
  1842. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +4 -4
  1843. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +93 -0
  1844. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +34 -0
  1845. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +12 -10
  1846. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +7 -9
  1847. data/third_party/abseil-cpp/absl/strings/internal/has_absl_stringify.h +55 -0
  1848. data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +9 -6
  1849. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +14 -7
  1850. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +35 -10
  1851. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +113 -46
  1852. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +126 -29
  1853. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -2
  1854. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +4 -3
  1855. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +49 -287
  1856. data/third_party/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +351 -0
  1857. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +2 -1
  1858. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +4 -2
  1859. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +215 -181
  1860. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +10 -209
  1861. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +10 -101
  1862. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -1
  1863. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.cc +28 -0
  1864. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +57 -0
  1865. data/third_party/abseil-cpp/absl/strings/numbers.cc +34 -31
  1866. data/third_party/abseil-cpp/absl/strings/str_cat.cc +9 -6
  1867. data/third_party/abseil-cpp/absl/strings/str_cat.h +50 -3
  1868. data/third_party/abseil-cpp/absl/strings/str_format.h +71 -9
  1869. data/third_party/abseil-cpp/absl/strings/string_view.cc +6 -6
  1870. data/third_party/abseil-cpp/absl/strings/string_view.h +3 -10
  1871. data/third_party/abseil-cpp/absl/strings/substitute.cc +8 -6
  1872. data/third_party/abseil-cpp/absl/strings/substitute.h +46 -20
  1873. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +20 -17
  1874. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +37 -31
  1875. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +22 -8
  1876. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +104 -55
  1877. data/third_party/abseil-cpp/absl/synchronization/mutex.h +85 -46
  1878. data/third_party/abseil-cpp/absl/synchronization/notification.cc +0 -1
  1879. data/third_party/abseil-cpp/absl/synchronization/notification.h +0 -1
  1880. data/third_party/abseil-cpp/absl/time/civil_time.cc +26 -0
  1881. data/third_party/abseil-cpp/absl/time/civil_time.h +25 -0
  1882. data/third_party/abseil-cpp/absl/time/clock.cc +17 -11
  1883. data/third_party/abseil-cpp/absl/time/duration.cc +7 -7
  1884. data/third_party/abseil-cpp/absl/time/format.cc +2 -1
  1885. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1 -1
  1886. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +26 -5
  1887. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +7 -6
  1888. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +36 -35
  1889. data/third_party/abseil-cpp/absl/time/time.cc +2 -2
  1890. data/third_party/abseil-cpp/absl/time/time.h +253 -158
  1891. data/third_party/abseil-cpp/absl/types/internal/span.h +30 -19
  1892. data/third_party/abseil-cpp/absl/types/internal/variant.h +28 -40
  1893. data/third_party/abseil-cpp/absl/types/span.h +29 -7
  1894. data/third_party/boringssl-with-bazel/err_data.c +728 -712
  1895. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +177 -177
  1896. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +28 -55
  1897. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +21 -23
  1898. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c +20 -23
  1899. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +66 -185
  1900. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c +18 -21
  1901. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +356 -311
  1902. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +177 -196
  1903. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +146 -210
  1904. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +6 -9
  1905. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strex.c +346 -526
  1906. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +110 -131
  1907. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +130 -116
  1908. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +93 -60
  1909. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +93 -181
  1910. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +242 -305
  1911. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +41 -18
  1912. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +30 -33
  1913. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +36 -33
  1914. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +29 -26
  1915. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +135 -90
  1916. data/third_party/boringssl-with-bazel/src/crypto/asn1/posix_time.c +230 -0
  1917. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +797 -793
  1918. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +529 -526
  1919. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +114 -135
  1920. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +201 -207
  1921. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +21 -26
  1922. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +55 -68
  1923. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +2 -4
  1924. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +17 -11
  1925. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +37 -51
  1926. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +15 -9
  1927. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +13 -9
  1928. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +22 -19
  1929. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +5 -5
  1930. data/third_party/boringssl-with-bazel/src/crypto/bio/printf.c +0 -13
  1931. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -6
  1932. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +2 -0
  1933. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +40 -27
  1934. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c +10 -23
  1935. data/third_party/boringssl-with-bazel/src/crypto/buf/buf.c +2 -6
  1936. data/third_party/boringssl-with-bazel/src/crypto/bytestring/asn1_compat.c +2 -1
  1937. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +29 -28
  1938. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +161 -201
  1939. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +254 -39
  1940. data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +2 -2
  1941. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +0 -2
  1942. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +4 -4
  1943. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c +9 -8
  1944. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c +37 -75
  1945. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +8 -10
  1946. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/cipher → cipher_extra}/e_des.c +100 -78
  1947. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_null.c +1 -0
  1948. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc2.c +1 -0
  1949. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc4.c +2 -0
  1950. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +34 -37
  1951. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +22 -11
  1952. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +189 -13
  1953. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +6 -10
  1954. data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +0 -1
  1955. data/third_party/boringssl-with-bazel/src/crypto/conf/internal.h +12 -0
  1956. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_apple.c +74 -0
  1957. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_freebsd.c +62 -0
  1958. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-fuchsia.c → cpu_aarch64_fuchsia.c} +8 -7
  1959. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-linux.c → cpu_aarch64_linux.c} +6 -4
  1960. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.c +62 -0
  1961. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-win.c → cpu_aarch64_win.c} +4 -4
  1962. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm.c → cpu_arm.c} +1 -1
  1963. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_freebsd.c +55 -0
  1964. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm-linux.c → cpu_arm_linux.c} +11 -90
  1965. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm-linux.h → cpu_arm_linux.h} +0 -38
  1966. data/third_party/boringssl-with-bazel/src/crypto/{cpu-ppc64le.c → cpu_arm_openbsd.c} +10 -17
  1967. data/third_party/boringssl-with-bazel/src/crypto/{cpu-intel.c → cpu_intel.c} +1 -2
  1968. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +25 -20
  1969. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +22 -31
  1970. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +795 -795
  1971. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -5
  1972. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +17 -32
  1973. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/des → des}/des.c +232 -232
  1974. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/des → des}/internal.h +1 -1
  1975. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/dh_asn1.c +1 -0
  1976. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/params.c +232 -29
  1977. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +0 -3
  1978. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +43 -16
  1979. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +37 -7
  1980. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +3 -3
  1981. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +11 -36
  1982. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +229 -102
  1983. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +31 -7
  1984. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +1 -1
  1985. data/third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c +2 -4
  1986. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +83 -60
  1987. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +46 -12
  1988. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +3 -3
  1989. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c +25 -23
  1990. data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +43 -9
  1991. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +75 -44
  1992. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +19 -25
  1993. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +96 -45
  1994. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c +7 -8
  1995. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c +26 -23
  1996. data/third_party/boringssl-with-bazel/src/crypto/evp/p_hkdf.c +233 -0
  1997. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +6 -6
  1998. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c +42 -25
  1999. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c +4 -5
  2000. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c +35 -47
  2001. data/third_party/boringssl-with-bazel/src/crypto/evp/print.c +135 -244
  2002. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +2 -4
  2003. data/third_party/boringssl-with-bazel/src/crypto/evp/sign.c +15 -10
  2004. data/third_party/boringssl-with-bazel/src/crypto/ex_data.c +29 -15
  2005. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c +0 -2
  2006. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +13 -14
  2007. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +3 -13
  2008. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.c +13 -7
  2009. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +9 -7
  2010. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +36 -27
  2011. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +16 -26
  2012. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bytes.c +88 -60
  2013. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/cmp.c +4 -3
  2014. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/ctx.c +0 -2
  2015. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +1 -1
  2016. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div_extra.c +1 -1
  2017. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +99 -113
  2018. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +0 -1
  2019. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +5 -3
  2020. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/generic.c +112 -168
  2021. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +86 -31
  2022. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +11 -6
  2023. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +4 -5
  2024. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +4 -5
  2025. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +13 -0
  2026. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.c +13 -5
  2027. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c +19 -108
  2028. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h +19 -15
  2029. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.c +15 -16
  2030. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +22 -21
  2031. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/aead.c +3 -0
  2032. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +79 -19
  2033. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +102 -99
  2034. data/third_party/boringssl-with-bazel/src/crypto/{cipher_extra → fipsmodule/cipher}/e_aesccm.c +52 -46
  2035. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +39 -0
  2036. data/third_party/boringssl-with-bazel/src/crypto/{cmac → fipsmodule/cmac}/cmac.c +55 -11
  2037. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/check.c +2 -3
  2038. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +24 -6
  2039. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/internal.h +56 -0
  2040. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +5 -3
  2041. data/third_party/boringssl-with-bazel/src/crypto/{evp → fipsmodule/digestsign}/digestsign.c +51 -15
  2042. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +49 -49
  2043. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +92 -18
  2044. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +12 -12
  2045. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +108 -86
  2046. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +55 -25
  2047. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +55 -71
  2048. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64-table.h → p256-nistz-table.h} +1 -1
  2049. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64.c → p256-nistz.c} +72 -65
  2050. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64.h → p256-nistz.h} +5 -13
  2051. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +62 -51
  2052. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +1 -1
  2053. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +2 -8
  2054. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +12 -17
  2055. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +25 -26
  2056. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +13 -14
  2057. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +9 -1
  2058. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +44 -16
  2059. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +6 -0
  2060. data/third_party/boringssl-with-bazel/src/crypto/{hkdf → fipsmodule/hkdf}/hkdf.c +1 -1
  2061. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/hmac/hmac.c +52 -24
  2062. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +9 -23
  2063. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +1 -4
  2064. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +3 -8
  2065. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +170 -160
  2066. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +12 -14
  2067. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +69 -61
  2068. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -12
  2069. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +27 -28
  2070. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/ctrdrbg.c +31 -13
  2071. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +16 -8
  2072. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +3 -2
  2073. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +2 -2
  2074. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +9 -38
  2075. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +73 -59
  2076. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +22 -68
  2077. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +0 -1
  2078. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +43 -16
  2079. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +42 -314
  2080. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +244 -139
  2081. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +144 -205
  2082. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +41 -0
  2083. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +593 -421
  2084. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/internal.h +89 -0
  2085. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/service_indicator.c +334 -0
  2086. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +3 -12
  2087. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +2 -0
  2088. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +12 -8
  2089. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +14 -12
  2090. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +8 -0
  2091. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +52 -6
  2092. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +192 -18
  2093. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +65 -29
  2094. data/third_party/boringssl-with-bazel/src/crypto/internal.h +391 -18
  2095. data/third_party/boringssl-with-bazel/src/crypto/kyber/internal.h +91 -0
  2096. data/third_party/boringssl-with-bazel/src/crypto/kyber/keccak.c +204 -0
  2097. data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +833 -0
  2098. data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +13 -1
  2099. data/third_party/boringssl-with-bazel/src/crypto/mem.c +220 -13
  2100. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +19 -7
  2101. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +9 -4
  2102. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +81 -90
  2103. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +150 -245
  2104. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +633 -613
  2105. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c +17 -17
  2106. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +142 -149
  2107. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +99 -131
  2108. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_x509.c +0 -1
  2109. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_xaux.c +0 -1
  2110. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +0 -1
  2111. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +0 -3
  2112. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -66
  2113. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +31 -38
  2114. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +2 -1
  2115. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +18 -31
  2116. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +1 -0
  2117. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +8 -1
  2118. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +129 -5
  2119. data/third_party/boringssl-with-bazel/src/crypto/refcount_c11.c +0 -2
  2120. data/third_party/boringssl-with-bazel/src/crypto/{refcount_lock.c → refcount_no_threads.c} +6 -17
  2121. data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +89 -0
  2122. data/third_party/boringssl-with-bazel/src/crypto/{asn1/a_print.c → rsa_extra/internal.h} +15 -21
  2123. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_crypt.c +568 -0
  2124. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +8 -11
  2125. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +61 -27
  2126. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +10 -13
  2127. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +10 -13
  2128. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +128 -34
  2129. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +418 -133
  2130. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +116 -284
  2131. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +701 -87
  2132. data/third_party/boringssl-with-bazel/src/crypto/x509/a_digest.c +22 -24
  2133. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +63 -55
  2134. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +32 -34
  2135. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +32 -16
  2136. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +465 -704
  2137. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +285 -331
  2138. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +183 -178
  2139. data/third_party/boringssl-with-bazel/src/crypto/x509/i2d_pr.c +11 -15
  2140. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +68 -50
  2141. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +132 -151
  2142. data/third_party/boringssl-with-bazel/src/crypto/x509/policy.c +790 -0
  2143. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +95 -102
  2144. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +72 -57
  2145. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +12 -10
  2146. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +220 -254
  2147. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +52 -47
  2148. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +3 -4
  2149. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +136 -270
  2150. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +161 -327
  2151. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c +37 -33
  2152. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c +14 -31
  2153. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +55 -85
  2154. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +528 -616
  2155. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +129 -122
  2156. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +164 -181
  2157. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +132 -132
  2158. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +186 -203
  2159. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +64 -79
  2160. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +175 -160
  2161. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1864 -2050
  2162. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +380 -480
  2163. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +156 -163
  2164. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +266 -265
  2165. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +40 -15
  2166. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +59 -63
  2167. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +63 -67
  2168. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +114 -144
  2169. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +25 -26
  2170. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +329 -416
  2171. data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c +8 -7
  2172. data/third_party/boringssl-with-bazel/src/crypto/x509/x_info.c +30 -28
  2173. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +354 -370
  2174. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +37 -32
  2175. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +116 -119
  2176. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +36 -26
  2177. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +3 -4
  2178. data/third_party/boringssl-with-bazel/src/crypto/x509/x_spki.c +10 -13
  2179. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +3 -4
  2180. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +419 -261
  2181. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +113 -105
  2182. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +11 -15
  2183. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +79 -171
  2184. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +126 -131
  2185. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akeya.c +3 -4
  2186. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +465 -469
  2187. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bcons.c +56 -54
  2188. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +46 -49
  2189. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +294 -344
  2190. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +342 -365
  2191. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +429 -393
  2192. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +29 -24
  2193. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_extku.c +65 -59
  2194. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +125 -121
  2195. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +43 -42
  2196. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +120 -125
  2197. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_int.c +50 -20
  2198. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +228 -265
  2199. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +386 -389
  2200. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c +45 -32
  2201. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcons.c +57 -54
  2202. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pmaps.c +63 -67
  2203. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +130 -135
  2204. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +652 -691
  2205. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +90 -75
  2206. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1063 -1145
  2207. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +13 -11
  2208. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +28 -48
  2209. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +217 -191
  2210. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +26 -78
  2211. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +50 -14
  2212. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +29 -14
  2213. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -4
  2214. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +49 -17
  2215. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +99 -29
  2216. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +49 -60
  2217. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +2 -15
  2218. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +16 -200
  2219. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +34 -0
  2220. data/third_party/boringssl-with-bazel/src/include/openssl/ctrdrbg.h +82 -0
  2221. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +32 -30
  2222. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +7 -0
  2223. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +4 -0
  2224. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +48 -5
  2225. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +37 -8
  2226. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +1 -0
  2227. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +33 -5
  2228. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +25 -33
  2229. data/third_party/boringssl-with-bazel/src/include/openssl/ex_data.h +1 -1
  2230. data/third_party/boringssl-with-bazel/src/include/openssl/hmac.h +7 -0
  2231. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +69 -16
  2232. data/third_party/boringssl-with-bazel/src/include/openssl/kdf.h +91 -0
  2233. data/third_party/boringssl-with-bazel/src/include/openssl/kyber.h +128 -0
  2234. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +74 -8
  2235. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +7 -3
  2236. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +8 -1
  2237. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +1 -0
  2238. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +11 -18
  2239. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +8 -0
  2240. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +12 -1
  2241. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +98 -5
  2242. data/third_party/boringssl-with-bazel/src/include/openssl/service_indicator.h +96 -0
  2243. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +18 -21
  2244. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +285 -92
  2245. data/third_party/boringssl-with-bazel/src/include/openssl/ssl3.h +1 -6
  2246. data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +381 -287
  2247. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +9 -6
  2248. data/third_party/boringssl-with-bazel/src/include/openssl/time.h +41 -0
  2249. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +22 -7
  2250. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +57 -23
  2251. data/third_party/boringssl-with-bazel/src/include/openssl/type_check.h +0 -11
  2252. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +2075 -1407
  2253. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +242 -214
  2254. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +2 -2
  2255. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +6 -13
  2256. data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +17 -18
  2257. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +4 -5
  2258. data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +25 -33
  2259. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +45 -26
  2260. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +64 -35
  2261. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +198 -54
  2262. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +5 -5
  2263. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +53 -34
  2264. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +76 -44
  2265. data/third_party/boringssl-with-bazel/src/ssl/internal.h +200 -121
  2266. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +47 -12
  2267. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  2268. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +91 -75
  2269. data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +8 -10
  2270. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +47 -69
  2271. data/third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc +1 -0
  2272. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +5 -9
  2273. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +217 -226
  2274. data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +78 -101
  2275. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +106 -142
  2276. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +244 -35
  2277. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +167 -64
  2278. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +41 -32
  2279. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +27 -19
  2280. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +22 -6
  2281. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +15 -13
  2282. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +7 -44
  2283. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +7 -4
  2284. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +7 -23
  2285. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +25 -34
  2286. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +2 -2
  2287. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +16 -98
  2288. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +1241 -657
  2289. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +751 -398
  2290. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_msvc.h +1281 -0
  2291. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +3551 -1938
  2292. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +1272 -487
  2293. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64_msvc.h +2002 -0
  2294. data/third_party/cares/cares/include/ares.h +23 -1
  2295. data/third_party/cares/cares/{src/lib → include}/ares_nameser.h +9 -7
  2296. data/third_party/cares/cares/include/ares_rules.h +2 -2
  2297. data/third_party/cares/cares/include/ares_version.h +3 -3
  2298. data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +266 -0
  2299. data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +240 -0
  2300. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +49 -80
  2301. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +37 -43
  2302. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +12 -4
  2303. data/third_party/cares/cares/src/lib/ares_data.c +16 -0
  2304. data/third_party/cares/cares/src/lib/ares_data.h +7 -0
  2305. data/third_party/cares/cares/src/lib/ares_destroy.c +8 -0
  2306. data/third_party/cares/cares/src/lib/ares_expand_name.c +17 -6
  2307. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +1 -0
  2308. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +156 -78
  2309. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +130 -326
  2310. data/third_party/cares/cares/src/lib/ares_init.c +97 -485
  2311. data/third_party/cares/cares/src/lib/ares_library_init.c +2 -89
  2312. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +23 -142
  2313. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +22 -142
  2314. data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +184 -0
  2315. data/third_party/cares/cares/src/lib/ares_private.h +30 -16
  2316. data/third_party/cares/cares/src/lib/ares_process.c +55 -16
  2317. data/third_party/cares/cares/src/lib/ares_query.c +1 -35
  2318. data/third_party/cares/cares/src/lib/ares_rand.c +279 -0
  2319. data/third_party/cares/cares/src/lib/ares_send.c +5 -7
  2320. data/third_party/cares/cares/src/lib/ares_strdup.c +12 -19
  2321. data/third_party/cares/cares/src/lib/ares_strsplit.c +44 -128
  2322. data/third_party/cares/cares/src/lib/ares_strsplit.h +9 -10
  2323. data/third_party/cares/cares/src/lib/inet_net_pton.c +78 -116
  2324. data/third_party/cares/cares/src/tools/ares_getopt.h +53 -0
  2325. data/third_party/re2/re2/bitstate.cc +3 -3
  2326. data/third_party/re2/re2/dfa.cc +13 -13
  2327. data/third_party/re2/re2/nfa.cc +4 -4
  2328. data/third_party/re2/re2/onepass.cc +2 -2
  2329. data/third_party/re2/re2/prefilter_tree.cc +27 -59
  2330. data/third_party/re2/re2/prefilter_tree.h +3 -2
  2331. data/third_party/re2/re2/prog.cc +11 -2
  2332. data/third_party/re2/re2/prog.h +17 -5
  2333. data/third_party/re2/re2/re2.cc +6 -11
  2334. data/third_party/re2/re2/re2.h +1 -1
  2335. data/third_party/re2/re2/regexp.cc +1 -2
  2336. data/third_party/re2/re2/stringpiece.h +10 -7
  2337. data/third_party/re2/re2/unicode_casefold.cc +25 -11
  2338. data/third_party/re2/re2/unicode_groups.cc +319 -151
  2339. data/third_party/re2/re2/walker-inl.h +3 -2
  2340. data/third_party/re2/util/mutex.h +4 -4
  2341. data/third_party/upb/upb/alloc.h +36 -0
  2342. data/third_party/upb/upb/arena.h +36 -0
  2343. data/third_party/upb/upb/array.h +36 -0
  2344. data/third_party/upb/upb/base/descriptor_constants.h +104 -0
  2345. data/third_party/upb/upb/base/log2.h +57 -0
  2346. data/third_party/upb/upb/base/status.c +81 -0
  2347. data/third_party/upb/upb/base/status.h +66 -0
  2348. data/third_party/upb/upb/base/string_view.h +75 -0
  2349. data/third_party/upb/upb/collections/array.c +145 -0
  2350. data/third_party/upb/upb/collections/array.h +85 -0
  2351. data/third_party/upb/upb/collections/array_internal.h +135 -0
  2352. data/third_party/upb/upb/collections/map.c +135 -0
  2353. data/third_party/upb/upb/collections/map.h +135 -0
  2354. data/third_party/upb/upb/collections/map_gencode_util.h +78 -0
  2355. data/third_party/upb/upb/collections/map_internal.h +170 -0
  2356. data/third_party/upb/upb/collections/map_sorter.c +166 -0
  2357. data/third_party/upb/upb/collections/map_sorter_internal.h +109 -0
  2358. data/third_party/upb/upb/collections/message_value.h +65 -0
  2359. data/third_party/upb/upb/decode.h +3 -61
  2360. data/third_party/upb/upb/def.h +4 -377
  2361. data/third_party/upb/upb/def.hpp +3 -408
  2362. data/third_party/upb/upb/encode.h +3 -38
  2363. data/third_party/upb/upb/extension_registry.h +35 -0
  2364. data/third_party/upb/upb/{table.c → hash/common.c} +51 -109
  2365. data/third_party/upb/upb/hash/common.h +199 -0
  2366. data/third_party/upb/upb/hash/int_table.h +102 -0
  2367. data/third_party/upb/upb/hash/str_table.h +161 -0
  2368. data/third_party/upb/upb/json/decode.c +1477 -0
  2369. data/third_party/upb/upb/json/decode.h +52 -0
  2370. data/third_party/upb/upb/{json_encode.c → json/encode.c} +74 -46
  2371. data/third_party/upb/upb/json/encode.h +70 -0
  2372. data/third_party/upb/upb/json_decode.h +36 -0
  2373. data/third_party/upb/upb/json_encode.h +4 -30
  2374. data/third_party/upb/upb/lex/atoi.c +68 -0
  2375. data/third_party/upb/upb/lex/atoi.h +53 -0
  2376. data/third_party/upb/upb/lex/round_trip.c +67 -0
  2377. data/third_party/upb/upb/{upb_internal.h → lex/round_trip.h} +17 -30
  2378. data/third_party/upb/upb/lex/strtod.c +97 -0
  2379. data/third_party/upb/upb/lex/strtod.h +46 -0
  2380. data/third_party/upb/upb/lex/unicode.c +57 -0
  2381. data/third_party/upb/upb/lex/unicode.h +77 -0
  2382. data/third_party/upb/upb/map.h +36 -0
  2383. data/third_party/upb/upb/mem/alloc.c +47 -0
  2384. data/third_party/upb/upb/mem/alloc.h +98 -0
  2385. data/third_party/upb/upb/mem/arena.c +367 -0
  2386. data/third_party/upb/upb/mem/arena.h +160 -0
  2387. data/third_party/upb/upb/mem/arena_internal.h +114 -0
  2388. data/third_party/upb/upb/message/accessors.c +68 -0
  2389. data/third_party/upb/upb/message/accessors.h +379 -0
  2390. data/third_party/upb/upb/message/accessors_internal.h +325 -0
  2391. data/third_party/upb/upb/message/extension_internal.h +83 -0
  2392. data/third_party/upb/upb/message/internal.h +135 -0
  2393. data/third_party/upb/upb/message/message.c +180 -0
  2394. data/third_party/upb/upb/message/message.h +69 -0
  2395. data/third_party/upb/upb/mini_table/common.c +128 -0
  2396. data/third_party/upb/upb/mini_table/common.h +170 -0
  2397. data/third_party/upb/upb/mini_table/common_internal.h +111 -0
  2398. data/third_party/upb/upb/mini_table/decode.c +1127 -0
  2399. data/third_party/upb/upb/mini_table/decode.h +179 -0
  2400. data/third_party/upb/upb/mini_table/encode.c +300 -0
  2401. data/third_party/upb/upb/mini_table/encode_internal.h +111 -0
  2402. data/third_party/upb/upb/mini_table/encode_internal.hpp +136 -0
  2403. data/third_party/upb/upb/mini_table/enum_internal.h +88 -0
  2404. data/third_party/upb/upb/mini_table/extension_internal.h +47 -0
  2405. data/third_party/upb/upb/mini_table/extension_registry.c +96 -0
  2406. data/third_party/upb/upb/mini_table/extension_registry.h +104 -0
  2407. data/third_party/upb/upb/mini_table/field_internal.h +192 -0
  2408. data/third_party/upb/upb/mini_table/file_internal.h +47 -0
  2409. data/third_party/upb/upb/mini_table/message_internal.h +136 -0
  2410. data/third_party/upb/upb/mini_table/sub_internal.h +38 -0
  2411. data/third_party/upb/upb/mini_table/types.h +40 -0
  2412. data/third_party/upb/upb/mini_table.h +36 -0
  2413. data/third_party/upb/upb/msg.h +3 -81
  2414. data/third_party/upb/upb/port/atomic.h +101 -0
  2415. data/third_party/upb/upb/{port_def.inc → port/def.inc} +96 -28
  2416. data/third_party/upb/upb/{port_undef.inc → port/undef.inc} +14 -3
  2417. data/third_party/upb/upb/port/vsnprintf_compat.h +50 -0
  2418. data/third_party/upb/upb/reflection/common.h +67 -0
  2419. data/third_party/upb/upb/reflection/def.h +42 -0
  2420. data/third_party/upb/upb/reflection/def.hpp +610 -0
  2421. data/third_party/upb/upb/reflection/def_builder.c +357 -0
  2422. data/third_party/upb/upb/reflection/def_builder_internal.h +157 -0
  2423. data/third_party/upb/upb/reflection/def_pool.c +462 -0
  2424. data/third_party/upb/upb/reflection/def_pool.h +108 -0
  2425. data/third_party/upb/upb/reflection/def_pool_internal.h +77 -0
  2426. data/third_party/upb/upb/reflection/def_type.c +50 -0
  2427. data/third_party/upb/upb/reflection/def_type.h +81 -0
  2428. data/third_party/upb/upb/reflection/desc_state.c +53 -0
  2429. data/third_party/upb/upb/reflection/desc_state_internal.h +64 -0
  2430. data/third_party/upb/upb/reflection/enum_def.c +310 -0
  2431. data/third_party/upb/upb/reflection/enum_def.h +80 -0
  2432. data/third_party/upb/upb/reflection/enum_def_internal.h +56 -0
  2433. data/third_party/upb/upb/reflection/enum_reserved_range.c +84 -0
  2434. data/third_party/upb/upb/reflection/enum_reserved_range.h +51 -0
  2435. data/third_party/upb/upb/reflection/enum_reserved_range_internal.h +55 -0
  2436. data/third_party/upb/upb/reflection/enum_value_def.c +144 -0
  2437. data/third_party/upb/upb/reflection/enum_value_def.h +57 -0
  2438. data/third_party/upb/upb/reflection/enum_value_def_internal.h +57 -0
  2439. data/third_party/upb/upb/reflection/extension_range.c +93 -0
  2440. data/third_party/upb/upb/reflection/extension_range.h +55 -0
  2441. data/third_party/upb/upb/reflection/extension_range_internal.h +54 -0
  2442. data/third_party/upb/upb/reflection/field_def.c +930 -0
  2443. data/third_party/upb/upb/reflection/field_def.h +91 -0
  2444. data/third_party/upb/upb/reflection/field_def_internal.h +76 -0
  2445. data/third_party/upb/upb/reflection/file_def.c +370 -0
  2446. data/third_party/upb/upb/reflection/file_def.h +77 -0
  2447. data/third_party/upb/upb/reflection/file_def_internal.h +57 -0
  2448. data/third_party/upb/upb/reflection/message.c +233 -0
  2449. data/third_party/upb/upb/reflection/message.h +102 -0
  2450. data/third_party/upb/upb/reflection/message.hpp +37 -0
  2451. data/third_party/upb/upb/reflection/message_def.c +718 -0
  2452. data/third_party/upb/upb/reflection/message_def.h +174 -0
  2453. data/third_party/upb/upb/reflection/message_def_internal.h +63 -0
  2454. data/third_party/upb/upb/reflection/message_reserved_range.c +81 -0
  2455. data/third_party/upb/upb/reflection/message_reserved_range.h +51 -0
  2456. data/third_party/upb/upb/reflection/message_reserved_range_internal.h +55 -0
  2457. data/third_party/upb/upb/reflection/method_def.c +124 -0
  2458. data/third_party/upb/upb/reflection/method_def.h +59 -0
  2459. data/third_party/upb/upb/reflection/method_def_internal.h +53 -0
  2460. data/third_party/upb/upb/reflection/oneof_def.c +226 -0
  2461. data/third_party/upb/upb/reflection/oneof_def.h +66 -0
  2462. data/third_party/upb/upb/reflection/oneof_def_internal.h +57 -0
  2463. data/third_party/upb/upb/reflection/service_def.c +128 -0
  2464. data/third_party/upb/upb/reflection/service_def.h +60 -0
  2465. data/third_party/upb/upb/reflection/service_def_internal.h +53 -0
  2466. data/third_party/upb/upb/reflection.h +4 -188
  2467. data/third_party/upb/upb/reflection.hpp +3 -7
  2468. data/third_party/upb/upb/status.h +36 -0
  2469. data/third_party/upb/upb/string_view.h +36 -0
  2470. data/third_party/upb/upb/{text_encode.c → text/encode.c} +75 -70
  2471. data/third_party/upb/upb/text/encode.h +69 -0
  2472. data/third_party/upb/upb/text_encode.h +4 -32
  2473. data/third_party/upb/upb/upb.h +6 -340
  2474. data/third_party/upb/upb/upb.hpp +10 -18
  2475. data/third_party/upb/upb/wire/common.h +44 -0
  2476. data/third_party/upb/upb/wire/common_internal.h +50 -0
  2477. data/third_party/upb/upb/wire/decode.c +1343 -0
  2478. data/third_party/upb/upb/wire/decode.h +108 -0
  2479. data/third_party/upb/upb/{decode_fast.c → wire/decode_fast.c} +184 -225
  2480. data/third_party/upb/upb/{decode_fast.h → wire/decode_fast.h} +21 -7
  2481. data/third_party/upb/upb/{decode_internal.h → wire/decode_internal.h} +44 -92
  2482. data/third_party/upb/upb/{encode.c → wire/encode.c} +130 -102
  2483. data/third_party/upb/upb/wire/encode.h +92 -0
  2484. data/third_party/upb/upb/wire/eps_copy_input_stream.c +39 -0
  2485. data/third_party/upb/upb/wire/eps_copy_input_stream.h +425 -0
  2486. data/third_party/upb/upb/wire/reader.c +67 -0
  2487. data/third_party/upb/upb/wire/reader.h +227 -0
  2488. data/third_party/upb/upb/wire/swap_internal.h +63 -0
  2489. data/third_party/upb/upb/wire/types.h +41 -0
  2490. data/third_party/{upb/third_party/utf8_range → utf8_range}/range2-neon.c +1 -1
  2491. data/third_party/utf8_range/utf8_range.h +21 -0
  2492. data/third_party/zlib/compress.c +3 -3
  2493. data/third_party/zlib/crc32.c +21 -12
  2494. data/third_party/zlib/deflate.c +112 -106
  2495. data/third_party/zlib/deflate.h +2 -2
  2496. data/third_party/zlib/gzlib.c +1 -1
  2497. data/third_party/zlib/gzread.c +3 -5
  2498. data/third_party/zlib/gzwrite.c +1 -1
  2499. data/third_party/zlib/infback.c +10 -7
  2500. data/third_party/zlib/inflate.c +5 -2
  2501. data/third_party/zlib/inftrees.c +2 -2
  2502. data/third_party/zlib/inftrees.h +1 -1
  2503. data/third_party/zlib/trees.c +61 -62
  2504. data/third_party/zlib/uncompr.c +2 -2
  2505. data/third_party/zlib/zconf.h +16 -3
  2506. data/third_party/zlib/zlib.h +10 -10
  2507. data/third_party/zlib/zutil.c +9 -7
  2508. data/third_party/zlib/zutil.h +1 -0
  2509. metadata +597 -174
  2510. data/include/grpc/impl/codegen/gpr_slice.h +0 -71
  2511. data/src/core/ext/filters/client_channel/health/health_check_client.cc +0 -176
  2512. data/src/core/ext/filters/client_channel/health/health_check_client.h +0 -43
  2513. data/src/core/ext/filters/client_channel/lb_policy.cc +0 -134
  2514. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -50
  2515. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +0 -190
  2516. data/src/core/ext/filters/client_channel/lb_policy_registry.h +0 -70
  2517. data/src/core/ext/filters/client_channel/proxy_mapper.h +0 -54
  2518. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -90
  2519. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +0 -55
  2520. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +0 -30
  2521. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -180
  2522. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -182
  2523. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +0 -334
  2524. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -52
  2525. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -324
  2526. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +0 -62
  2527. data/src/core/ext/transport/chttp2/transport/context_list.cc +0 -71
  2528. data/src/core/ext/transport/chttp2/transport/context_list.h +0 -54
  2529. data/src/core/ext/xds/certificate_provider_registry.cc +0 -103
  2530. data/src/core/ext/xds/certificate_provider_registry.h +0 -59
  2531. data/src/core/lib/event_engine/iomgr_engine/iomgr_engine.cc +0 -159
  2532. data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +0 -123
  2533. data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +0 -70
  2534. data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h +0 -81
  2535. data/src/core/lib/event_engine/iomgr_engine/timer.h +0 -193
  2536. data/src/core/lib/event_engine/iomgr_engine/timer_heap.h +0 -56
  2537. data/src/core/lib/event_engine/iomgr_engine/timer_manager.cc +0 -254
  2538. data/src/core/lib/event_engine/iomgr_engine/timer_manager.h +0 -111
  2539. data/src/core/lib/event_engine/promise.h +0 -69
  2540. data/src/core/lib/gpr/cpu_iphone.cc +0 -44
  2541. data/src/core/lib/gpr/cpu_windows.cc +0 -33
  2542. data/src/core/lib/gpr/env.h +0 -40
  2543. data/src/core/lib/gpr/env_linux.cc +0 -75
  2544. data/src/core/lib/gpr/env_posix.cc +0 -46
  2545. data/src/core/lib/gpr/env_windows.cc +0 -74
  2546. data/src/core/lib/gpr/murmur_hash.cc +0 -82
  2547. data/src/core/lib/gpr/murmur_hash.h +0 -29
  2548. data/src/core/lib/gpr/string_util_windows.cc +0 -82
  2549. data/src/core/lib/gpr/string_windows.cc +0 -69
  2550. data/src/core/lib/gpr/string_windows.h +0 -32
  2551. data/src/core/lib/gpr/tls.h +0 -156
  2552. data/src/core/lib/gpr/tmpfile_windows.cc +0 -69
  2553. data/src/core/lib/gprpp/global_config.h +0 -93
  2554. data/src/core/lib/gprpp/global_config_custom.h +0 -29
  2555. data/src/core/lib/gprpp/global_config_env.cc +0 -138
  2556. data/src/core/lib/gprpp/global_config_env.h +0 -133
  2557. data/src/core/lib/gprpp/global_config_generic.h +0 -40
  2558. data/src/core/lib/iomgr/error_internal.h +0 -66
  2559. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
  2560. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
  2561. data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
  2562. data/src/core/lib/iomgr/executor/threadpool.h +0 -150
  2563. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  2564. data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
  2565. data/src/core/lib/profiling/basic_timers.cc +0 -295
  2566. data/src/core/lib/profiling/stap_timers.cc +0 -50
  2567. data/src/core/lib/profiling/timers.h +0 -94
  2568. data/src/core/lib/promise/call_push_pull.h +0 -148
  2569. data/src/core/lib/promise/intra_activity_waiter.h +0 -49
  2570. data/src/core/lib/security/security_connector/ssl_utils_config.cc +0 -32
  2571. data/src/core/lib/security/security_connector/ssl_utils_config.h +0 -30
  2572. data/src/core/lib/slice/slice_api.cc +0 -39
  2573. data/src/core/lib/slice/slice_buffer_api.cc +0 -35
  2574. data/src/core/lib/slice/slice_refcount_base.h +0 -60
  2575. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +0 -195
  2576. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c +0 -236
  2577. data/third_party/boringssl-with-bazel/src/crypto/asn1/charmap.h +0 -15
  2578. data/third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c +0 -206
  2579. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1-altivec.c +0 -361
  2580. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +0 -287
  2581. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +0 -132
  2582. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +0 -155
  2583. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +0 -131
  2584. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +0 -189
  2585. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +0 -843
  2586. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +0 -289
  2587. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcia.c +0 -57
  2588. data/third_party/cares/cares/src/lib/ares_library_init.h +0 -43
  2589. data/third_party/upb/third_party/utf8_range/utf8_range.h +0 -9
  2590. data/third_party/upb/upb/decode.c +0 -1125
  2591. data/third_party/upb/upb/def.c +0 -3261
  2592. data/third_party/upb/upb/msg.c +0 -428
  2593. data/third_party/upb/upb/msg_internal.h +0 -831
  2594. data/third_party/upb/upb/reflection.c +0 -480
  2595. data/third_party/upb/upb/table_internal.h +0 -385
  2596. data/third_party/upb/upb/upb.c +0 -362
  2597. /data/src/ruby/ext/grpc/{ext-export-truffleruby.clang → ext-export-truffleruby-with-ruby-abi-version.clang} +0 -0
  2598. /data/src/ruby/ext/grpc/{ext-export-truffleruby.gcc → ext-export-truffleruby-with-ruby-abi-version.gcc} +0 -0
  2599. /data/third_party/{upb/third_party/utf8_range → utf8_range}/naive.c +0 -0
  2600. /data/third_party/{upb/third_party/utf8_range → utf8_range}/range2-sse.c +0 -0
@@ -16,44 +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"
25
- #include "absl/utility/utility.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"
26
32
 
27
33
  #include <grpc/status.h>
28
34
 
29
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"
30
38
  #include "src/core/lib/gprpp/manual_constructor.h"
39
+ #include "src/core/lib/gprpp/status_helper.h"
31
40
  #include "src/core/lib/iomgr/error.h"
41
+ #include "src/core/lib/promise/detail/basic_seq.h"
32
42
  #include "src/core/lib/slice/slice.h"
33
43
 
44
+ extern grpc_core::TraceFlag grpc_trace_channel;
45
+
34
46
  namespace grpc_core {
35
47
  namespace promise_filter_detail {
36
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
+
37
82
  ///////////////////////////////////////////////////////////////////////////////
38
83
  // BaseCallData
39
84
 
40
- BaseCallData::BaseCallData(grpc_call_element* elem,
41
- 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)
42
89
  : call_stack_(args->call_stack),
43
90
  elem_(elem),
44
91
  arena_(args->arena),
45
92
  call_combiner_(args->call_combiner),
46
93
  deadline_(args->deadline),
47
- context_(args->context) {
48
- if (flags & kFilterExaminesServerInitialMetadata) {
49
- server_initial_metadata_latch_ = arena_->New<Latch<ServerMetadata*>>();
50
- }
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()) {
51
113
  }
52
114
 
53
115
  BaseCallData::~BaseCallData() {
54
- if (server_initial_metadata_latch_ != nullptr) {
55
- server_initial_metadata_latch_->~Latch();
56
- }
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
+ });
57
127
  }
58
128
 
59
129
  // We don't form ActivityPtr's to this type, and consequently don't need
@@ -66,20 +136,28 @@ Waker BaseCallData::MakeNonOwningWaker() { return MakeOwningWaker(); }
66
136
 
67
137
  Waker BaseCallData::MakeOwningWaker() {
68
138
  GRPC_CALL_STACK_REF(call_stack_, "waker");
69
- return Waker(this);
139
+ return Waker(this, 0);
70
140
  }
71
141
 
72
- void BaseCallData::Wakeup() {
142
+ void BaseCallData::Wakeup(WakeupMask) {
73
143
  auto wakeup = [](void* p, grpc_error_handle) {
74
144
  auto* self = static_cast<BaseCallData*>(p);
75
145
  self->OnWakeup();
76
- self->Drop();
146
+ self->Drop(0);
77
147
  };
78
148
  auto* closure = GRPC_CLOSURE_CREATE(wakeup, this, nullptr);
79
- GRPC_CALL_COMBINER_START(call_combiner_, closure, GRPC_ERROR_NONE, "wakeup");
149
+ GRPC_CALL_COMBINER_START(call_combiner_, closure, absl::OkStatus(), "wakeup");
80
150
  }
81
151
 
82
- 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
+ }
83
161
 
84
162
  ///////////////////////////////////////////////////////////////////////////////
85
163
  // BaseCallData::CapturedBatch
@@ -134,17 +212,24 @@ BaseCallData::CapturedBatch& BaseCallData::CapturedBatch::operator=(
134
212
  }
135
213
 
136
214
  void BaseCallData::CapturedBatch::ResumeWith(Flusher* releaser) {
137
- auto* batch = absl::exchange(batch_, nullptr);
215
+ auto* batch = std::exchange(batch_, nullptr);
138
216
  GPR_ASSERT(batch != nullptr);
139
217
  uintptr_t& refcnt = *RefCountField(batch);
140
- 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
+ }
141
226
  if (--refcnt == 0) {
142
227
  releaser->Resume(batch);
143
228
  }
144
229
  }
145
230
 
146
231
  void BaseCallData::CapturedBatch::CompleteWith(Flusher* releaser) {
147
- auto* batch = absl::exchange(batch_, nullptr);
232
+ auto* batch = std::exchange(batch_, nullptr);
148
233
  GPR_ASSERT(batch != nullptr);
149
234
  uintptr_t& refcnt = *RefCountField(batch);
150
235
  if (refcnt == 0) return; // refcnt==0 ==> cancelled
@@ -155,12 +240,11 @@ void BaseCallData::CapturedBatch::CompleteWith(Flusher* releaser) {
155
240
 
156
241
  void BaseCallData::CapturedBatch::CancelWith(grpc_error_handle error,
157
242
  Flusher* releaser) {
158
- auto* batch = absl::exchange(batch_, nullptr);
243
+ auto* batch = std::exchange(batch_, nullptr);
159
244
  GPR_ASSERT(batch != nullptr);
160
245
  uintptr_t& refcnt = *RefCountField(batch);
161
246
  if (refcnt == 0) {
162
247
  // refcnt==0 ==> cancelled
163
- GRPC_ERROR_UNREF(error);
164
248
  return;
165
249
  }
166
250
  refcnt = 0;
@@ -189,23 +273,659 @@ BaseCallData::Flusher::~Flusher() {
189
273
  auto* batch = static_cast<grpc_transport_stream_op_batch*>(p);
190
274
  BaseCallData* call =
191
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
+ }
192
280
  grpc_call_next_op(call->elem(), batch);
193
281
  GRPC_CALL_STACK_UNREF(call->call_stack(), "flusher_batch");
194
282
  };
195
283
  for (size_t i = 1; i < release_.size(); i++) {
196
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
+ }
197
293
  batch->handler_private.extra_arg = call_;
198
294
  GRPC_CLOSURE_INIT(&batch->handler_private.closure, call_next_op, batch,
199
295
  nullptr);
200
296
  GRPC_CALL_STACK_REF(call_->call_stack(), "flusher_batch");
201
- call_closures_.Add(&batch->handler_private.closure, GRPC_ERROR_NONE,
297
+ call_closures_.Add(&batch->handler_private.closure, absl::OkStatus(),
202
298
  "flusher_batch");
203
299
  }
204
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
+ }
205
305
  grpc_call_next_op(call_->elem(), release_[0]);
206
306
  GRPC_CALL_STACK_UNREF(call_->call_stack(), "flusher");
207
307
  }
208
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
+
209
929
  ///////////////////////////////////////////////////////////////////////////////
210
930
  // ClientCallData
211
931
 
@@ -214,28 +934,76 @@ struct ClientCallData::RecvInitialMetadata final {
214
934
  // Initial state; no op seen
215
935
  kInitial,
216
936
  // No op seen, but we have a latch that would like to modify it when we do
217
- kGotLatch,
937
+ kGotPipe,
218
938
  // Responded to trailing metadata prior to getting a recv_initial_metadata
219
939
  kRespondedToTrailingMetadataPriorToHook,
220
940
  // Hooked, no latch yet
221
- kHookedWaitingForLatch,
941
+ kHookedWaitingForPipe,
222
942
  // Hooked, latch seen
223
- kHookedAndGotLatch,
943
+ kHookedAndGotPipe,
224
944
  // Got the callback, haven't set latch yet
225
- kCompleteWaitingForLatch,
945
+ kCompleteWaitingForPipe,
226
946
  // Got the callback and got the latch
227
- kCompleteAndGotLatch,
947
+ kCompleteAndGotPipe,
228
948
  // Got the callback and set the latch
229
- kCompleteAndSetLatch,
949
+ kCompleteAndPushedToPipe,
230
950
  // Called the original callback
231
951
  kResponded,
952
+ // Called the original callback with an error: still need to set the latch
953
+ kRespondedButNeedToClosePipe,
232
954
  };
233
955
 
234
956
  State state = kInitial;
235
957
  grpc_closure* original_on_ready = nullptr;
236
958
  grpc_closure on_ready;
237
959
  grpc_metadata_batch* metadata = nullptr;
238
- 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
+ }
239
1007
  };
240
1008
 
241
1009
  class ClientCallData::PollContext {
@@ -253,38 +1021,79 @@ class ClientCallData::PollContext {
253
1021
  PollContext& operator=(const PollContext&) = delete;
254
1022
 
255
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
+ }
256
1029
  GPR_ASSERT(have_scoped_activity_);
257
1030
  repoll_ = false;
258
- 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
+ }
259
1046
  switch (self_->recv_initial_metadata_->state) {
260
1047
  case RecvInitialMetadata::kInitial:
261
- case RecvInitialMetadata::kGotLatch:
262
- case RecvInitialMetadata::kHookedWaitingForLatch:
263
- case RecvInitialMetadata::kHookedAndGotLatch:
264
- case RecvInitialMetadata::kCompleteWaitingForLatch:
1048
+ case RecvInitialMetadata::kGotPipe:
1049
+ case RecvInitialMetadata::kHookedWaitingForPipe:
1050
+ case RecvInitialMetadata::kHookedAndGotPipe:
1051
+ case RecvInitialMetadata::kCompleteWaitingForPipe:
265
1052
  case RecvInitialMetadata::kResponded:
266
1053
  case RecvInitialMetadata::kRespondedToTrailingMetadataPriorToHook:
267
1054
  break;
268
- 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:
269
1062
  self_->recv_initial_metadata_->state =
270
- RecvInitialMetadata::kCompleteAndSetLatch;
271
- self_->recv_initial_metadata_->server_initial_metadata_publisher->Set(
272
- 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());
273
1076
  ABSL_FALLTHROUGH_INTENDED;
274
- case RecvInitialMetadata::kCompleteAndSetLatch: {
275
- Poll<ServerMetadata**> p =
276
- self_->server_initial_metadata_latch()->Wait()();
277
- if (ServerMetadata*** ppp = absl::get_if<ServerMetadata**>(&p)) {
278
- ServerMetadata* md = **ppp;
279
- if (self_->recv_initial_metadata_->metadata != md) {
280
- *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();
281
1089
  }
282
1090
  self_->recv_initial_metadata_->state =
283
1091
  RecvInitialMetadata::kResponded;
1092
+ repoll_ = true;
284
1093
  flusher_->AddClosure(
285
- absl::exchange(self_->recv_initial_metadata_->original_on_ready,
286
- nullptr),
287
- GRPC_ERROR_NONE,
1094
+ std::exchange(self_->recv_initial_metadata_->original_on_ready,
1095
+ nullptr),
1096
+ absl::OkStatus(),
288
1097
  "wake_inside_combiner:recv_initial_metadata_ready");
289
1098
  }
290
1099
  } break;
@@ -299,98 +1108,109 @@ class ClientCallData::PollContext {
299
1108
  case SendInitialState::kForwarded: {
300
1109
  // Poll the promise once since we're waiting for it.
301
1110
  Poll<ServerMetadataHandle> poll = self_->promise_();
302
- if (auto* r = absl::get_if<ServerMetadataHandle>(&poll)) {
303
- auto* md = UnwrapMetadata(std::move(*r));
304
- 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
+ }
305
1129
  if (self_->recv_trailing_state_ == RecvTrailingState::kComplete) {
306
- if (self_->recv_trailing_metadata_ != md) {
1130
+ if (self_->recv_trailing_metadata_ != md.get()) {
307
1131
  *self_->recv_trailing_metadata_ = std::move(*md);
308
- } else {
309
- destroy_md = false;
310
1132
  }
311
1133
  self_->recv_trailing_state_ = RecvTrailingState::kResponded;
312
1134
  flusher_->AddClosure(
313
- absl::exchange(self_->original_recv_trailing_metadata_ready_,
314
- nullptr),
315
- GRPC_ERROR_NONE, "wake_inside_combiner:recv_trailing_ready:1");
1135
+ std::exchange(self_->original_recv_trailing_metadata_ready_,
1136
+ nullptr),
1137
+ absl::OkStatus(), "wake_inside_combiner:recv_trailing_ready:1");
316
1138
  if (self_->recv_initial_metadata_ != nullptr) {
317
1139
  switch (self_->recv_initial_metadata_->state) {
318
1140
  case RecvInitialMetadata::kInitial:
319
- case RecvInitialMetadata::kGotLatch:
1141
+ case RecvInitialMetadata::kGotPipe:
320
1142
  self_->recv_initial_metadata_->state = RecvInitialMetadata::
321
1143
  kRespondedToTrailingMetadataPriorToHook;
322
1144
  break;
323
1145
  case RecvInitialMetadata::
324
1146
  kRespondedToTrailingMetadataPriorToHook:
325
- 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
326
1152
  break;
327
- case RecvInitialMetadata::kHookedWaitingForLatch:
328
- case RecvInitialMetadata::kHookedAndGotLatch:
1153
+ case RecvInitialMetadata::kHookedWaitingForPipe:
1154
+ case RecvInitialMetadata::kHookedAndGotPipe:
329
1155
  case RecvInitialMetadata::kResponded:
330
- case RecvInitialMetadata::kCompleteAndGotLatch:
331
- case RecvInitialMetadata::kCompleteAndSetLatch:
1156
+ case RecvInitialMetadata::kCompleteAndGotPipe:
1157
+ case RecvInitialMetadata::kCompleteAndPushedToPipe:
332
1158
  break;
333
- case RecvInitialMetadata::kCompleteWaitingForLatch:
1159
+ case RecvInitialMetadata::kCompleteWaitingForPipe:
334
1160
  self_->recv_initial_metadata_->state =
335
1161
  RecvInitialMetadata::kResponded;
336
1162
  flusher_->AddClosure(
337
- absl::exchange(
1163
+ std::exchange(
338
1164
  self_->recv_initial_metadata_->original_on_ready,
339
1165
  nullptr),
340
- GRPC_ERROR_CANCELLED,
1166
+ absl::CancelledError(),
341
1167
  "wake_inside_combiner:recv_initial_metadata_ready");
342
1168
  }
343
1169
  }
344
1170
  } else {
345
- GPR_ASSERT(*md->get_pointer(GrpcStatusMetadata()) !=
346
- GRPC_STATUS_OK);
347
- grpc_error_handle error = grpc_error_set_int(
348
- GRPC_ERROR_CREATE_FROM_STATIC_STRING(
349
- "early return from promise based filter"),
350
- GRPC_ERROR_INT_GRPC_STATUS,
351
- *md->get_pointer(GrpcStatusMetadata()));
352
- if (auto* message = md->get_pointer(GrpcMessageMetadata())) {
353
- error = grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE,
354
- message->as_string_view());
355
- }
356
- GRPC_ERROR_UNREF(self_->cancelled_error_);
357
- self_->cancelled_error_ = GRPC_ERROR_REF(error);
1171
+ self_->cancelled_error_ = StatusFromMetadata(*md);
1172
+ GPR_ASSERT(!self_->cancelled_error_.ok());
358
1173
  if (self_->recv_initial_metadata_ != nullptr) {
359
1174
  switch (self_->recv_initial_metadata_->state) {
360
1175
  case RecvInitialMetadata::kInitial:
361
- case RecvInitialMetadata::kGotLatch:
1176
+ case RecvInitialMetadata::kGotPipe:
362
1177
  self_->recv_initial_metadata_->state = RecvInitialMetadata::
363
1178
  kRespondedToTrailingMetadataPriorToHook;
364
1179
  break;
365
- case RecvInitialMetadata::kHookedWaitingForLatch:
366
- case RecvInitialMetadata::kHookedAndGotLatch:
1180
+ case RecvInitialMetadata::kHookedWaitingForPipe:
1181
+ case RecvInitialMetadata::kHookedAndGotPipe:
367
1182
  case RecvInitialMetadata::kResponded:
368
1183
  break;
369
1184
  case RecvInitialMetadata::
370
1185
  kRespondedToTrailingMetadataPriorToHook:
371
- 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
372
1191
  break;
373
- case RecvInitialMetadata::kCompleteWaitingForLatch:
374
- case RecvInitialMetadata::kCompleteAndGotLatch:
375
- case RecvInitialMetadata::kCompleteAndSetLatch:
1192
+ case RecvInitialMetadata::kCompleteWaitingForPipe:
1193
+ case RecvInitialMetadata::kCompleteAndGotPipe:
1194
+ case RecvInitialMetadata::kCompleteAndPushedToPipe:
376
1195
  self_->recv_initial_metadata_->state =
377
1196
  RecvInitialMetadata::kResponded;
378
1197
  flusher_->AddClosure(
379
- absl::exchange(
1198
+ std::exchange(
380
1199
  self_->recv_initial_metadata_->original_on_ready,
381
1200
  nullptr),
382
- GRPC_ERROR_REF(error),
1201
+ self_->cancelled_error_,
383
1202
  "wake_inside_combiner:recv_initial_metadata_ready");
384
1203
  }
385
1204
  }
386
1205
  if (self_->send_initial_state_ == SendInitialState::kQueued) {
387
1206
  self_->send_initial_state_ = SendInitialState::kCancelled;
388
- self_->send_initial_metadata_batch_.CancelWith(error, flusher_);
1207
+ self_->send_initial_metadata_batch_.CancelWith(
1208
+ self_->cancelled_error_, flusher_);
389
1209
  } else {
390
1210
  GPR_ASSERT(
391
1211
  self_->recv_trailing_state_ == RecvTrailingState::kInitial ||
392
1212
  self_->recv_trailing_state_ == RecvTrailingState::kForwarded);
393
- self_->call_combiner()->Cancel(GRPC_ERROR_REF(error));
1213
+ self_->call_combiner()->Cancel(self_->cancelled_error_);
394
1214
  CapturedBatch b(grpc_make_transport_stream_op(GRPC_CLOSURE_CREATE(
395
1215
  [](void* p, grpc_error_handle) {
396
1216
  GRPC_CALL_COMBINER_STOP(static_cast<CallCombiner*>(p),
@@ -398,17 +1218,15 @@ class ClientCallData::PollContext {
398
1218
  },
399
1219
  self_->call_combiner(), nullptr)));
400
1220
  b->cancel_stream = true;
401
- b->payload->cancel_stream.cancel_error = error;
1221
+ b->payload->cancel_stream.cancel_error = self_->cancelled_error_;
402
1222
  b.ResumeWith(flusher_);
403
1223
  }
1224
+ self_->cancelling_metadata_ = std::move(md);
404
1225
  self_->recv_trailing_state_ = RecvTrailingState::kCancelled;
405
1226
  }
406
- if (destroy_md) {
407
- md->~grpc_metadata_batch();
408
- }
1227
+ self_->promise_ = ArenaPromise<ServerMetadataHandle>();
409
1228
  scoped_activity_.Destroy();
410
1229
  have_scoped_activity_ = false;
411
- self_->promise_ = ArenaPromise<ServerMetadataHandle>();
412
1230
  }
413
1231
  } break;
414
1232
  case SendInitialState::kInitial:
@@ -419,9 +1237,9 @@ class ClientCallData::PollContext {
419
1237
  if (self_->recv_trailing_state_ == RecvTrailingState::kComplete) {
420
1238
  self_->recv_trailing_state_ = RecvTrailingState::kResponded;
421
1239
  flusher_->AddClosure(
422
- absl::exchange(self_->original_recv_trailing_metadata_ready_,
423
- nullptr),
424
- GRPC_ERROR_NONE, "wake_inside_combiner:recv_trailing_ready:2");
1240
+ std::exchange(self_->original_recv_trailing_metadata_ready_,
1241
+ nullptr),
1242
+ absl::OkStatus(), "wake_inside_combiner:recv_trailing_ready:2");
425
1243
  }
426
1244
  break;
427
1245
  }
@@ -438,6 +1256,7 @@ class ClientCallData::PollContext {
438
1256
  auto run = [](void* p, grpc_error_handle) {
439
1257
  auto* next_poll = static_cast<NextPoll*>(p);
440
1258
  {
1259
+ ScopedContext ctx(next_poll->call_data);
441
1260
  Flusher flusher(next_poll->call_data);
442
1261
  next_poll->call_data->WakeInsideCombiner(&flusher);
443
1262
  }
@@ -446,12 +1265,12 @@ class ClientCallData::PollContext {
446
1265
  };
447
1266
  // Unique ptr --> release to suppress clang-tidy warnings about allocating
448
1267
  // in a destructor.
449
- auto* p = absl::make_unique<NextPoll>().release();
1268
+ auto* p = std::make_unique<NextPoll>().release();
450
1269
  p->call_stack = self_->call_stack();
451
1270
  p->call_data = self_;
452
1271
  GRPC_CALL_STACK_REF(self_->call_stack(), "re-poll");
453
1272
  GRPC_CLOSURE_INIT(p, run, p, nullptr);
454
- flusher_->AddClosure(p, GRPC_ERROR_NONE, "re-poll");
1273
+ flusher_->AddClosure(p, absl::OkStatus(), "re-poll");
455
1274
  }
456
1275
  }
457
1276
 
@@ -472,29 +1291,93 @@ class ClientCallData::PollContext {
472
1291
  ClientCallData::ClientCallData(grpc_call_element* elem,
473
1292
  const grpc_call_element_args* args,
474
1293
  uint8_t flags)
475
- : 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()) {
476
1304
  GRPC_CLOSURE_INIT(&recv_trailing_metadata_ready_,
477
1305
  RecvTrailingMetadataReadyCallback, this,
478
1306
  grpc_schedule_on_exec_ctx);
479
- if (server_initial_metadata_latch() != nullptr) {
1307
+ if (server_initial_metadata_pipe() != nullptr) {
480
1308
  recv_initial_metadata_ = arena()->New<RecvInitialMetadata>();
481
1309
  }
482
1310
  }
483
1311
 
484
1312
  ClientCallData::~ClientCallData() {
485
1313
  GPR_ASSERT(poll_ctx_ == nullptr);
486
- GRPC_ERROR_UNREF(cancelled_error_);
487
1314
  if (recv_initial_metadata_ != nullptr) {
488
1315
  recv_initial_metadata_->~RecvInitialMetadata();
489
1316
  }
490
1317
  }
491
1318
 
1319
+ std::string ClientCallData::DebugTag() const {
1320
+ return absl::StrFormat("PBF_CLIENT[%p]: [%s] ", this, elem()->filter->name);
1321
+ }
1322
+
492
1323
  // Activity implementation.
493
- void ClientCallData::ForceImmediateRepoll() {
1324
+ void ClientCallData::ForceImmediateRepoll(WakeupMask) {
494
1325
  GPR_ASSERT(poll_ctx_ != nullptr);
495
1326
  poll_ctx_->Repoll();
496
1327
  }
497
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
+
498
1381
  // Handle one grpc_transport_stream_op_batch
499
1382
  void ClientCallData::StartBatch(grpc_transport_stream_op_batch* b) {
500
1383
  // Fake out the activity based context.
@@ -502,6 +1385,11 @@ void ClientCallData::StartBatch(grpc_transport_stream_op_batch* b) {
502
1385
  CapturedBatch batch(b);
503
1386
  Flusher flusher(this);
504
1387
 
1388
+ if (grpc_trace_channel.enabled()) {
1389
+ gpr_log(GPR_INFO, "%s StartBatch %s", LogTag().c_str(),
1390
+ DebugString().c_str());
1391
+ }
1392
+
505
1393
  // If this is a cancel stream, cancel anything we have pending and propagate
506
1394
  // the cancellation.
507
1395
  if (batch->cancel_stream) {
@@ -509,9 +1397,10 @@ void ClientCallData::StartBatch(grpc_transport_stream_op_batch* b) {
509
1397
  !batch->send_trailing_metadata && !batch->send_message &&
510
1398
  !batch->recv_initial_metadata && !batch->recv_message &&
511
1399
  !batch->recv_trailing_metadata);
512
- 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();
513
1403
  if (is_last()) {
514
- GRPC_ERROR_UNREF(batch->payload->cancel_stream.cancel_error);
515
1404
  batch.CompleteWith(&flusher);
516
1405
  } else {
517
1406
  batch.ResumeWith(&flusher);
@@ -524,21 +1413,25 @@ void ClientCallData::StartBatch(grpc_transport_stream_op_batch* b) {
524
1413
  switch (recv_initial_metadata_->state) {
525
1414
  case RecvInitialMetadata::kInitial:
526
1415
  recv_initial_metadata_->state =
527
- RecvInitialMetadata::kHookedWaitingForLatch;
1416
+ RecvInitialMetadata::kHookedWaitingForPipe;
528
1417
  break;
529
- case RecvInitialMetadata::kGotLatch:
530
- recv_initial_metadata_->state = RecvInitialMetadata::kHookedAndGotLatch;
1418
+ case RecvInitialMetadata::kGotPipe:
1419
+ recv_initial_metadata_->state = RecvInitialMetadata::kHookedAndGotPipe;
531
1420
  break;
532
1421
  case RecvInitialMetadata::kRespondedToTrailingMetadataPriorToHook:
533
1422
  hook = false;
534
1423
  break;
535
- case RecvInitialMetadata::kHookedWaitingForLatch:
536
- case RecvInitialMetadata::kHookedAndGotLatch:
537
- case RecvInitialMetadata::kCompleteWaitingForLatch:
538
- case RecvInitialMetadata::kCompleteAndGotLatch:
539
- case RecvInitialMetadata::kCompleteAndSetLatch:
1424
+ case RecvInitialMetadata::kHookedWaitingForPipe:
1425
+ case RecvInitialMetadata::kHookedAndGotPipe:
1426
+ case RecvInitialMetadata::kCompleteWaitingForPipe:
1427
+ case RecvInitialMetadata::kCompleteAndGotPipe:
1428
+ case RecvInitialMetadata::kCompleteAndPushedToPipe:
540
1429
  case RecvInitialMetadata::kResponded:
541
- abort(); // unreachable
1430
+ case RecvInitialMetadata::kRespondedButNeedToClosePipe:
1431
+ Crash(absl::StrFormat(
1432
+ "ILLEGAL STATE: %s",
1433
+ RecvInitialMetadata::StateString(
1434
+ recv_initial_metadata_->state))); // unreachable
542
1435
  }
543
1436
  if (hook) {
544
1437
  auto cb = [](void* ptr, grpc_error_handle error) {
@@ -555,13 +1448,23 @@ void ClientCallData::StartBatch(grpc_transport_stream_op_batch* b) {
555
1448
  }
556
1449
  }
557
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
+
558
1461
  // send_initial_metadata: seeing this triggers the start of the promise part
559
1462
  // of this filter.
560
1463
  if (batch->send_initial_metadata) {
561
1464
  // If we're already cancelled, just terminate the batch.
562
1465
  if (send_initial_state_ == SendInitialState::kCancelled ||
563
1466
  recv_trailing_state_ == RecvTrailingState::kCancelled) {
564
- batch.CancelWith(GRPC_ERROR_REF(cancelled_error_), &flusher);
1467
+ batch.CancelWith(cancelled_error_, &flusher);
565
1468
  } else {
566
1469
  // Otherwise, we should not have seen a send_initial_metadata op yet.
567
1470
  GPR_ASSERT(send_initial_state_ == SendInitialState::kInitial);
@@ -576,35 +1479,43 @@ void ClientCallData::StartBatch(grpc_transport_stream_op_batch* b) {
576
1479
  send_initial_metadata_batch_ = batch;
577
1480
  // And kick start the promise.
578
1481
  StartPromise(&flusher);
1482
+ wake = false;
579
1483
  }
580
1484
  } else if (batch->recv_trailing_metadata) {
581
1485
  // recv_trailing_metadata *without* send_initial_metadata: hook it so we
582
1486
  // can respond to it, and push it down.
583
1487
  if (recv_trailing_state_ == RecvTrailingState::kCancelled) {
584
- batch.CancelWith(GRPC_ERROR_REF(cancelled_error_), &flusher);
1488
+ batch.CancelWith(cancelled_error_, &flusher);
585
1489
  } else {
586
1490
  GPR_ASSERT(recv_trailing_state_ == RecvTrailingState::kInitial);
587
1491
  recv_trailing_state_ = RecvTrailingState::kForwarded;
588
1492
  HookRecvTrailingMetadata(batch);
589
1493
  }
590
- } else if (!GRPC_ERROR_IS_NONE(cancelled_error_)) {
591
- 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();
592
1500
  }
593
1501
 
594
1502
  if (batch.is_captured()) {
595
1503
  if (!is_last()) {
596
1504
  batch.ResumeWith(&flusher);
597
1505
  } else {
598
- batch.CancelWith(GRPC_ERROR_CANCELLED, &flusher);
1506
+ batch.CancelWith(absl::CancelledError(), &flusher);
599
1507
  }
600
1508
  }
601
1509
  }
602
1510
 
603
1511
  // Handle cancellation.
604
- 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
+ }
605
1517
  // Track the latest reason for cancellation.
606
- GRPC_ERROR_UNREF(cancelled_error_);
607
- cancelled_error_ = GRPC_ERROR_REF(error);
1518
+ cancelled_error_ = error;
608
1519
  // Stop running the promise.
609
1520
  promise_ = ArenaPromise<ServerMetadataHandle>();
610
1521
  // If we have an op queued, fail that op.
@@ -614,50 +1525,41 @@ void ClientCallData::Cancel(grpc_error_handle error) {
614
1525
  if (recv_trailing_state_ == RecvTrailingState::kQueued) {
615
1526
  recv_trailing_state_ = RecvTrailingState::kCancelled;
616
1527
  }
617
- struct FailBatch : public grpc_closure {
618
- CapturedBatch batch;
619
- ClientCallData* call;
620
- };
621
- auto fail = [](void* p, grpc_error_handle error) {
622
- auto* f = static_cast<FailBatch*>(p);
623
- {
624
- Flusher flusher(f->call);
625
- f->batch.CancelWith(GRPC_ERROR_REF(error), &flusher);
626
- GRPC_CALL_STACK_UNREF(f->call->call_stack(), "cancel pending batch");
627
- }
628
- delete f;
629
- };
630
- auto* b = new FailBatch();
631
- GRPC_CLOSURE_INIT(b, fail, b, nullptr);
632
- b->batch = std::move(send_initial_metadata_batch_);
633
- b->call = this;
634
- GRPC_CALL_STACK_REF(call_stack(), "cancel pending batch");
635
- GRPC_CALL_COMBINER_START(call_combiner(), b,
636
- GRPC_ERROR_REF(cancelled_error_),
637
- "cancel pending batch");
1528
+ send_initial_metadata_batch_.CancelWith(error, flusher);
638
1529
  } else {
639
1530
  send_initial_state_ = SendInitialState::kCancelled;
640
1531
  }
641
1532
  if (recv_initial_metadata_ != nullptr) {
642
1533
  switch (recv_initial_metadata_->state) {
643
- case RecvInitialMetadata::kCompleteWaitingForLatch:
644
- case RecvInitialMetadata::kCompleteAndGotLatch:
645
- case RecvInitialMetadata::kCompleteAndSetLatch:
1534
+ case RecvInitialMetadata::kCompleteWaitingForPipe:
1535
+ case RecvInitialMetadata::kCompleteAndGotPipe:
1536
+ case RecvInitialMetadata::kCompleteAndPushedToPipe:
646
1537
  recv_initial_metadata_->state = RecvInitialMetadata::kResponded;
647
1538
  GRPC_CALL_COMBINER_START(
648
1539
  call_combiner(),
649
- absl::exchange(recv_initial_metadata_->original_on_ready, nullptr),
650
- GRPC_ERROR_REF(error), "propagate cancellation");
1540
+ std::exchange(recv_initial_metadata_->original_on_ready, nullptr),
1541
+ error, "propagate cancellation");
651
1542
  break;
652
1543
  case RecvInitialMetadata::kInitial:
653
- case RecvInitialMetadata::kGotLatch:
1544
+ case RecvInitialMetadata::kGotPipe:
654
1545
  case RecvInitialMetadata::kRespondedToTrailingMetadataPriorToHook:
655
- case RecvInitialMetadata::kHookedWaitingForLatch:
656
- case RecvInitialMetadata::kHookedAndGotLatch:
1546
+ case RecvInitialMetadata::kHookedWaitingForPipe:
1547
+ case RecvInitialMetadata::kHookedAndGotPipe:
657
1548
  case RecvInitialMetadata::kResponded:
658
1549
  break;
1550
+ case RecvInitialMetadata::kRespondedButNeedToClosePipe:
1551
+ Crash(absl::StrFormat(
1552
+ "ILLEGAL STATE: %s",
1553
+ RecvInitialMetadata::StateString(recv_initial_metadata_->state)));
1554
+ break;
659
1555
  }
660
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
+ }
661
1563
  }
662
1564
 
663
1565
  // Begin running the promise - which will ultimately take some initial
@@ -671,7 +1573,16 @@ void ClientCallData::StartPromise(Flusher* flusher) {
671
1573
  promise_ = filter->MakeCallPromise(
672
1574
  CallArgs{WrapMetadata(send_initial_metadata_batch_->payload
673
1575
  ->send_initial_metadata.send_initial_metadata),
674
- 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()},
675
1586
  [this](CallArgs call_args) {
676
1587
  return MakeNextPromise(std::move(call_args));
677
1588
  });
@@ -679,36 +1590,68 @@ void ClientCallData::StartPromise(Flusher* flusher) {
679
1590
  }
680
1591
 
681
1592
  void ClientCallData::RecvInitialMetadataReady(grpc_error_handle error) {
682
- ScopedContext context(this);
683
- switch (recv_initial_metadata_->state) {
684
- case RecvInitialMetadata::kHookedWaitingForLatch:
685
- recv_initial_metadata_->state =
686
- RecvInitialMetadata::kCompleteWaitingForLatch;
687
- break;
688
- case RecvInitialMetadata::kHookedAndGotLatch:
689
- recv_initial_metadata_->state = RecvInitialMetadata::kCompleteAndGotLatch;
690
- break;
691
- case RecvInitialMetadata::kInitial:
692
- case RecvInitialMetadata::kGotLatch:
693
- case RecvInitialMetadata::kCompleteWaitingForLatch:
694
- case RecvInitialMetadata::kCompleteAndGotLatch:
695
- case RecvInitialMetadata::kCompleteAndSetLatch:
696
- case RecvInitialMetadata::kResponded:
697
- case RecvInitialMetadata::kRespondedToTrailingMetadataPriorToHook:
698
- 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());
699
1598
  }
1599
+ ScopedContext context(this);
700
1600
  Flusher flusher(this);
701
- if (!GRPC_ERROR_IS_NONE(error)) {
702
- 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
+ }
703
1623
  flusher.AddClosure(
704
- absl::exchange(recv_initial_metadata_->original_on_ready, nullptr),
705
- GRPC_ERROR_REF(error), "propagate cancellation");
1624
+ std::exchange(recv_initial_metadata_->original_on_ready, nullptr),
1625
+ error, "propagate cancellation");
706
1626
  } else if (send_initial_state_ == SendInitialState::kCancelled ||
707
1627
  recv_trailing_state_ == RecvTrailingState::kResponded) {
708
1628
  recv_initial_metadata_->state = RecvInitialMetadata::kResponded;
709
1629
  flusher.AddClosure(
710
- absl::exchange(recv_initial_metadata_->original_on_ready, nullptr),
711
- GRPC_ERROR_REF(cancelled_error_), "propagate cancellation");
1630
+ std::exchange(recv_initial_metadata_->original_on_ready, nullptr),
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
+ }
712
1655
  }
713
1656
  WakeInsideCombiner(&flusher);
714
1657
  }
@@ -731,11 +1674,14 @@ void ClientCallData::HookRecvTrailingMetadata(CapturedBatch batch) {
731
1674
  // - return a wrapper around PollTrailingMetadata as the promise.
732
1675
  ArenaPromise<ServerMetadataHandle> ClientCallData::MakeNextPromise(
733
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
+ }
734
1681
  GPR_ASSERT(poll_ctx_ != nullptr);
735
1682
  GPR_ASSERT(send_initial_state_ == SendInitialState::kQueued);
736
1683
  send_initial_metadata_batch_->payload->send_initial_metadata
737
- .send_initial_metadata =
738
- UnwrapMetadata(std::move(call_args.client_initial_metadata));
1684
+ .send_initial_metadata = call_args.client_initial_metadata.get();
739
1685
  if (recv_initial_metadata_ != nullptr) {
740
1686
  // Call args should contain a latch for receiving initial metadata.
741
1687
  // It might be the one we passed in - in which case we know this filter
@@ -746,28 +1692,42 @@ ArenaPromise<ServerMetadataHandle> ClientCallData::MakeNextPromise(
746
1692
  call_args.server_initial_metadata;
747
1693
  switch (recv_initial_metadata_->state) {
748
1694
  case RecvInitialMetadata::kInitial:
749
- recv_initial_metadata_->state = RecvInitialMetadata::kGotLatch;
1695
+ recv_initial_metadata_->state = RecvInitialMetadata::kGotPipe;
750
1696
  break;
751
- case RecvInitialMetadata::kHookedWaitingForLatch:
752
- recv_initial_metadata_->state = RecvInitialMetadata::kHookedAndGotLatch;
1697
+ case RecvInitialMetadata::kHookedWaitingForPipe:
1698
+ recv_initial_metadata_->state = RecvInitialMetadata::kHookedAndGotPipe;
753
1699
  poll_ctx_->Repoll();
754
1700
  break;
755
- case RecvInitialMetadata::kCompleteWaitingForLatch:
1701
+ case RecvInitialMetadata::kCompleteWaitingForPipe:
756
1702
  recv_initial_metadata_->state =
757
- RecvInitialMetadata::kCompleteAndGotLatch;
1703
+ RecvInitialMetadata::kCompleteAndGotPipe;
758
1704
  poll_ctx_->Repoll();
759
1705
  break;
760
- case RecvInitialMetadata::kGotLatch:
761
- case RecvInitialMetadata::kHookedAndGotLatch:
762
- case RecvInitialMetadata::kCompleteAndGotLatch:
763
- case RecvInitialMetadata::kCompleteAndSetLatch:
1706
+ case RecvInitialMetadata::kGotPipe:
1707
+ case RecvInitialMetadata::kHookedAndGotPipe:
1708
+ case RecvInitialMetadata::kCompleteAndGotPipe:
1709
+ case RecvInitialMetadata::kCompleteAndPushedToPipe:
764
1710
  case RecvInitialMetadata::kResponded:
765
1711
  case RecvInitialMetadata::kRespondedToTrailingMetadataPriorToHook:
766
- abort(); // unreachable
1712
+ case RecvInitialMetadata::kRespondedButNeedToClosePipe:
1713
+ Crash(absl::StrFormat(
1714
+ "ILLEGAL STATE: %s",
1715
+ RecvInitialMetadata::StateString(
1716
+ recv_initial_metadata_->state))); // unreachable
767
1717
  }
768
1718
  } else {
769
1719
  GPR_ASSERT(call_args.server_initial_metadata == nullptr);
770
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
+ }
771
1731
  return ArenaPromise<ServerMetadataHandle>(
772
1732
  [this]() { return PollTrailingMetadata(); });
773
1733
  }
@@ -777,6 +1737,10 @@ ArenaPromise<ServerMetadataHandle> ClientCallData::MakeNextPromise(
777
1737
  // All polls: await receiving the trailing metadata, then return it to the
778
1738
  // application.
779
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
+ }
780
1744
  GPR_ASSERT(poll_ctx_ != nullptr);
781
1745
  if (send_initial_state_ == SendInitialState::kQueued) {
782
1746
  // First poll: pass the send_initial_metadata op down the stack.
@@ -811,7 +1775,8 @@ Poll<ServerMetadataHandle> ClientCallData::PollTrailingMetadata() {
811
1775
  case RecvTrailingState::kResponded:
812
1776
  // We've already responded to the caller: we can't do anything and we
813
1777
  // should never reach here.
814
- abort();
1778
+ Crash(absl::StrFormat("ILLEGAL STATE: %s",
1779
+ StateString(recv_trailing_state_)));
815
1780
  }
816
1781
  GPR_UNREACHABLE_CODE(return Pending{});
817
1782
  }
@@ -823,24 +1788,40 @@ void ClientCallData::RecvTrailingMetadataReadyCallback(
823
1788
 
824
1789
  void ClientCallData::RecvTrailingMetadataReady(grpc_error_handle error) {
825
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
+ }
826
1799
  // If we were cancelled prior to receiving this callback, we should simply
827
1800
  // forward the callback up with the same error.
828
1801
  if (recv_trailing_state_ == RecvTrailingState::kCancelled) {
1802
+ if (cancelling_metadata_.get() != nullptr) {
1803
+ *recv_trailing_metadata_ = std::move(*cancelling_metadata_);
1804
+ }
829
1805
  if (grpc_closure* call_closure =
830
- absl::exchange(original_recv_trailing_metadata_ready_, nullptr)) {
831
- flusher.AddClosure(call_closure, GRPC_ERROR_REF(error),
832
- "propagate failure");
1806
+ std::exchange(original_recv_trailing_metadata_ready_, nullptr)) {
1807
+ flusher.AddClosure(call_closure, error, "propagate failure");
833
1808
  }
834
1809
  return;
835
1810
  }
836
1811
  // If there was an error, we'll put that into the trailing metadata and
837
1812
  // proceed as if there was not.
838
- if (!GRPC_ERROR_IS_NONE(error)) {
1813
+ if (!error.ok()) {
839
1814
  SetStatusFromError(recv_trailing_metadata_, error);
840
1815
  }
841
1816
  // Record that we've got the callback.
842
1817
  GPR_ASSERT(recv_trailing_state_ == RecvTrailingState::kForwarded);
843
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
+ }
844
1825
  // Repoll the promise.
845
1826
  ScopedContext context(this);
846
1827
  WakeInsideCombiner(&flusher);
@@ -856,7 +1837,7 @@ void ClientCallData::SetStatusFromError(grpc_metadata_batch* metadata,
856
1837
  metadata->Set(GrpcStatusMetadata(), status_code);
857
1838
  metadata->Set(GrpcMessageMetadata(), Slice::FromCopiedString(status_details));
858
1839
  metadata->GetOrCreatePointer(GrpcStatusContext())
859
- ->emplace_back(grpc_error_std_string(error));
1840
+ ->emplace_back(StatusToString(error));
860
1841
  }
861
1842
 
862
1843
  // Wakeup and poll the promise if appropriate.
@@ -876,22 +1857,51 @@ void ClientCallData::OnWakeup() {
876
1857
  struct ServerCallData::SendInitialMetadata {
877
1858
  enum State {
878
1859
  kInitial,
879
- kGotLatch,
880
- kQueuedWaitingForLatch,
881
- kQueuedAndGotLatch,
882
- kQueuedAndSetLatch,
1860
+ kGotPipe,
1861
+ kQueuedWaitingForPipe,
1862
+ kQueuedAndGotPipe,
1863
+ kQueuedAndPushedToPipe,
883
1864
  kForwarded,
884
1865
  kCancelled,
885
1866
  };
886
1867
  State state = kInitial;
887
1868
  CapturedBatch batch;
888
- 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
+ }
889
1892
  };
890
1893
 
891
1894
  class ServerCallData::PollContext {
892
1895
  public:
893
- explicit PollContext(ServerCallData* self, Flusher* flusher)
894
- : 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
+ }
895
1905
  GPR_ASSERT(self_->poll_ctx_ == nullptr);
896
1906
  self_->poll_ctx_ = this;
897
1907
  scoped_activity_.Init(self_);
@@ -913,17 +1923,18 @@ class ServerCallData::PollContext {
913
1923
  auto* next_poll = static_cast<NextPoll*>(p);
914
1924
  {
915
1925
  Flusher flusher(next_poll->call_data);
1926
+ ScopedContext context(next_poll->call_data);
916
1927
  next_poll->call_data->WakeInsideCombiner(&flusher);
917
1928
  }
918
1929
  GRPC_CALL_STACK_UNREF(next_poll->call_stack, "re-poll");
919
1930
  delete next_poll;
920
1931
  };
921
- auto* p = absl::make_unique<NextPoll>().release();
1932
+ auto* p = std::make_unique<NextPoll>().release();
922
1933
  p->call_stack = self_->call_stack();
923
1934
  p->call_data = self_;
924
1935
  GRPC_CALL_STACK_REF(self_->call_stack(), "re-poll");
925
1936
  GRPC_CLOSURE_INIT(p, run, p, nullptr);
926
- flusher_->AddClosure(p, GRPC_ERROR_NONE, "re-poll");
1937
+ flusher_->AddClosure(p, absl::OkStatus(), "re-poll");
927
1938
  }
928
1939
  }
929
1940
 
@@ -936,27 +1947,78 @@ class ServerCallData::PollContext {
936
1947
  Flusher* const flusher_;
937
1948
  bool repoll_ = false;
938
1949
  bool have_scoped_activity_;
1950
+ GPR_NO_UNIQUE_ADDRESS DebugLocation created_;
939
1951
  };
940
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
+
941
1985
  ServerCallData::ServerCallData(grpc_call_element* elem,
942
1986
  const grpc_call_element_args* args,
943
1987
  uint8_t flags)
944
- : BaseCallData(elem, args, flags) {
945
- 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) {
946
1995
  send_initial_metadata_ = arena()->New<SendInitialMetadata>();
947
1996
  }
948
1997
  GRPC_CLOSURE_INIT(&recv_initial_metadata_ready_,
949
1998
  RecvInitialMetadataReadyCallback, this,
950
1999
  grpc_schedule_on_exec_ctx);
2000
+ GRPC_CLOSURE_INIT(&recv_trailing_metadata_ready_,
2001
+ RecvTrailingMetadataReadyCallback, this,
2002
+ grpc_schedule_on_exec_ctx);
951
2003
  }
952
2004
 
953
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
+ }
954
2013
  GPR_ASSERT(poll_ctx_ == nullptr);
955
- 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);
956
2018
  }
957
2019
 
958
2020
  // Activity implementation.
959
- void ServerCallData::ForceImmediateRepoll() {
2021
+ void ServerCallData::ForceImmediateRepoll(WakeupMask) {
960
2022
  GPR_ASSERT(poll_ctx_ != nullptr);
961
2023
  poll_ctx_->Repoll();
962
2024
  }
@@ -969,6 +2031,11 @@ void ServerCallData::StartBatch(grpc_transport_stream_op_batch* b) {
969
2031
  Flusher flusher(this);
970
2032
  bool wake = false;
971
2033
 
2034
+ if (grpc_trace_channel.enabled()) {
2035
+ gpr_log(GPR_INFO, "%s StartBatch: %s", LogTag().c_str(),
2036
+ DebugString().c_str());
2037
+ }
2038
+
972
2039
  // If this is a cancel stream, cancel anything we have pending and
973
2040
  // propagate the cancellation.
974
2041
  if (batch->cancel_stream) {
@@ -976,10 +2043,9 @@ void ServerCallData::StartBatch(grpc_transport_stream_op_batch* b) {
976
2043
  !batch->send_trailing_metadata && !batch->send_message &&
977
2044
  !batch->recv_initial_metadata && !batch->recv_message &&
978
2045
  !batch->recv_trailing_metadata);
979
- Cancel(GRPC_ERROR_REF(batch->payload->cancel_stream.cancel_error),
980
- &flusher);
2046
+ PollContext poll_ctx(this, &flusher);
2047
+ Completed(batch->payload->cancel_stream.cancel_error, &flusher);
981
2048
  if (is_last()) {
982
- GRPC_ERROR_UNREF(batch->payload->cancel_stream.cancel_error);
983
2049
  batch.CompleteWith(&flusher);
984
2050
  } else {
985
2051
  batch.ResumeWith(&flusher);
@@ -1005,43 +2071,89 @@ void ServerCallData::StartBatch(grpc_transport_stream_op_batch* b) {
1005
2071
  recv_initial_state_ = RecvInitialState::kForwarded;
1006
2072
  }
1007
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
+
1008
2084
  // send_initial_metadata
1009
2085
  if (send_initial_metadata_ != nullptr && batch->send_initial_metadata) {
1010
2086
  switch (send_initial_metadata_->state) {
1011
2087
  case SendInitialMetadata::kInitial:
1012
2088
  send_initial_metadata_->state =
1013
- SendInitialMetadata::kQueuedWaitingForLatch;
2089
+ SendInitialMetadata::kQueuedWaitingForPipe;
1014
2090
  break;
1015
- case SendInitialMetadata::kGotLatch:
1016
- send_initial_metadata_->state = SendInitialMetadata::kQueuedAndGotLatch;
2091
+ case SendInitialMetadata::kGotPipe:
2092
+ send_initial_metadata_->state = SendInitialMetadata::kQueuedAndGotPipe;
1017
2093
  break;
1018
2094
  case SendInitialMetadata::kCancelled:
1019
- batch.CancelWith(GRPC_ERROR_REF(cancelled_error_), &flusher);
2095
+ batch.CancelWith(
2096
+ cancelled_error_.ok() ? absl::CancelledError() : cancelled_error_,
2097
+ &flusher);
1020
2098
  break;
1021
- case SendInitialMetadata::kQueuedAndGotLatch:
1022
- case SendInitialMetadata::kQueuedWaitingForLatch:
1023
- case SendInitialMetadata::kQueuedAndSetLatch:
2099
+ case SendInitialMetadata::kQueuedAndGotPipe:
2100
+ case SendInitialMetadata::kQueuedWaitingForPipe:
2101
+ case SendInitialMetadata::kQueuedAndPushedToPipe:
1024
2102
  case SendInitialMetadata::kForwarded:
1025
- abort(); // not reachable
2103
+ Crash(absl::StrFormat(
2104
+ "ILLEGAL STATE: %s",
2105
+ SendInitialMetadata::StateString(
2106
+ send_initial_metadata_->state))); // not reachable
1026
2107
  }
1027
2108
  send_initial_metadata_->batch = batch;
1028
2109
  wake = true;
1029
2110
  }
1030
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
+
1031
2122
  // send_trailing_metadata
1032
2123
  if (batch.is_captured() && batch->send_trailing_metadata) {
1033
2124
  switch (send_trailing_state_) {
1034
2125
  case SendTrailingState::kInitial:
1035
2126
  send_trailing_metadata_batch_ = batch;
1036
- send_trailing_state_ = SendTrailingState::kQueued;
1037
- 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
+ }
1038
2144
  break;
1039
2145
  case SendTrailingState::kQueued:
2146
+ case SendTrailingState::kQueuedBehindSendMessage:
2147
+ case SendTrailingState::kQueuedButHaventClosedSends:
1040
2148
  case SendTrailingState::kForwarded:
1041
- abort(); // unreachable
2149
+ Crash(
2150
+ absl::StrFormat("ILLEGAL STATE: %s",
2151
+ StateString(send_trailing_state_))); // unreachable
1042
2152
  break;
1043
2153
  case SendTrailingState::kCancelled:
1044
- batch.CancelWith(GRPC_ERROR_REF(cancelled_error_), &flusher);
2154
+ batch.CancelWith(
2155
+ cancelled_error_.ok() ? absl::CancelledError() : cancelled_error_,
2156
+ &flusher);
1045
2157
  break;
1046
2158
  }
1047
2159
  }
@@ -1051,38 +2163,74 @@ void ServerCallData::StartBatch(grpc_transport_stream_op_batch* b) {
1051
2163
  }
1052
2164
 
1053
2165
  // Handle cancellation.
1054
- 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
+ }
1055
2178
  // Track the latest reason for cancellation.
1056
- GRPC_ERROR_UNREF(cancelled_error_);
1057
2179
  cancelled_error_ = error;
1058
2180
  // Stop running the promise.
1059
2181
  promise_ = ArenaPromise<ServerMetadataHandle>();
1060
- if (send_trailing_state_ == SendTrailingState::kQueued) {
1061
- send_trailing_state_ = SendTrailingState::kCancelled;
1062
- send_trailing_metadata_batch_.CancelWith(GRPC_ERROR_REF(error), flusher);
1063
- } else {
1064
- 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;
1065
2208
  }
1066
2209
  if (send_initial_metadata_ != nullptr) {
1067
2210
  switch (send_initial_metadata_->state) {
1068
2211
  case SendInitialMetadata::kInitial:
1069
- case SendInitialMetadata::kGotLatch:
2212
+ case SendInitialMetadata::kGotPipe:
1070
2213
  case SendInitialMetadata::kForwarded:
1071
2214
  case SendInitialMetadata::kCancelled:
1072
2215
  break;
1073
- case SendInitialMetadata::kQueuedWaitingForLatch:
1074
- case SendInitialMetadata::kQueuedAndGotLatch:
1075
- case SendInitialMetadata::kQueuedAndSetLatch:
1076
- send_initial_metadata_->batch.CancelWith(GRPC_ERROR_REF(error),
1077
- flusher);
2216
+ case SendInitialMetadata::kQueuedWaitingForPipe:
2217
+ case SendInitialMetadata::kQueuedAndGotPipe:
2218
+ case SendInitialMetadata::kQueuedAndPushedToPipe:
2219
+ send_initial_metadata_->batch.CancelWith(error, flusher);
1078
2220
  break;
1079
2221
  }
1080
2222
  send_initial_metadata_->state = SendInitialMetadata::kCancelled;
1081
2223
  }
1082
2224
  if (auto* closure =
1083
- absl::exchange(original_recv_initial_metadata_ready_, nullptr)) {
1084
- flusher->AddClosure(closure, GRPC_ERROR_REF(error),
1085
- "original_recv_initial_metadata");
2225
+ std::exchange(original_recv_initial_metadata_ready_, nullptr)) {
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);
1086
2234
  }
1087
2235
  }
1088
2236
 
@@ -1093,7 +2241,7 @@ void ServerCallData::Cancel(grpc_error_handle error, Flusher* flusher) {
1093
2241
  ArenaPromise<ServerMetadataHandle> ServerCallData::MakeNextPromise(
1094
2242
  CallArgs call_args) {
1095
2243
  GPR_ASSERT(recv_initial_state_ == RecvInitialState::kComplete);
1096
- GPR_ASSERT(UnwrapMetadata(std::move(call_args.client_initial_metadata)) ==
2244
+ GPR_ASSERT(std::move(call_args.client_initial_metadata).get() ==
1097
2245
  recv_initial_metadata_);
1098
2246
  forward_recv_initial_metadata_callback_ = true;
1099
2247
  if (send_initial_metadata_ != nullptr) {
@@ -1104,16 +2252,19 @@ ArenaPromise<ServerMetadataHandle> ServerCallData::MakeNextPromise(
1104
2252
  call_args.server_initial_metadata;
1105
2253
  switch (send_initial_metadata_->state) {
1106
2254
  case SendInitialMetadata::kInitial:
1107
- send_initial_metadata_->state = SendInitialMetadata::kGotLatch;
2255
+ send_initial_metadata_->state = SendInitialMetadata::kGotPipe;
1108
2256
  break;
1109
- case SendInitialMetadata::kGotLatch:
1110
- case SendInitialMetadata::kQueuedAndGotLatch:
1111
- case SendInitialMetadata::kQueuedAndSetLatch:
2257
+ case SendInitialMetadata::kGotPipe:
2258
+ case SendInitialMetadata::kQueuedAndGotPipe:
2259
+ case SendInitialMetadata::kQueuedAndPushedToPipe:
1112
2260
  case SendInitialMetadata::kForwarded:
1113
- abort(); // not reachable
2261
+ Crash(absl::StrFormat(
2262
+ "ILLEGAL STATE: %s",
2263
+ SendInitialMetadata::StateString(
2264
+ send_initial_metadata_->state))); // not reachable
1114
2265
  break;
1115
- case SendInitialMetadata::kQueuedWaitingForLatch:
1116
- send_initial_metadata_->state = SendInitialMetadata::kQueuedAndGotLatch;
2266
+ case SendInitialMetadata::kQueuedWaitingForPipe:
2267
+ send_initial_metadata_->state = SendInitialMetadata::kQueuedAndGotPipe;
1117
2268
  break;
1118
2269
  case SendInitialMetadata::kCancelled:
1119
2270
  break;
@@ -1121,6 +2272,16 @@ ArenaPromise<ServerMetadataHandle> ServerCallData::MakeNextPromise(
1121
2272
  } else {
1122
2273
  GPR_ASSERT(call_args.server_initial_metadata == nullptr);
1123
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
+ }
1124
2285
  return ArenaPromise<ServerMetadataHandle>(
1125
2286
  [this]() { return PollTrailingMetadata(); });
1126
2287
  }
@@ -1129,14 +2290,21 @@ ArenaPromise<ServerMetadataHandle> ServerCallData::MakeNextPromise(
1129
2290
  // All polls: await sending the trailing metadata, then foward it down the
1130
2291
  // stack.
1131
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
+ }
1132
2297
  switch (send_trailing_state_) {
1133
2298
  case SendTrailingState::kInitial:
2299
+ case SendTrailingState::kQueuedBehindSendMessage:
2300
+ case SendTrailingState::kQueuedButHaventClosedSends:
1134
2301
  return Pending{};
1135
2302
  case SendTrailingState::kQueued:
1136
2303
  return WrapMetadata(send_trailing_metadata_batch_->payload
1137
2304
  ->send_trailing_metadata.send_trailing_metadata);
1138
2305
  case SendTrailingState::kForwarded:
1139
- abort(); // unreachable
2306
+ Crash(absl::StrFormat("ILLEGAL STATE: %s",
2307
+ StateString(send_trailing_state_))); // unreachable
1140
2308
  case SendTrailingState::kCancelled:
1141
2309
  // We could translate cancelled_error to metadata and return it... BUT
1142
2310
  // we're not gonna be running much longer and the results going to be
@@ -1146,20 +2314,43 @@ Poll<ServerMetadataHandle> ServerCallData::PollTrailingMetadata() {
1146
2314
  GPR_UNREACHABLE_CODE(return Pending{});
1147
2315
  }
1148
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
+
1149
2336
  void ServerCallData::RecvInitialMetadataReadyCallback(void* arg,
1150
2337
  grpc_error_handle error) {
1151
- static_cast<ServerCallData*>(arg)->RecvInitialMetadataReady(error);
2338
+ static_cast<ServerCallData*>(arg)->RecvInitialMetadataReady(std::move(error));
1152
2339
  }
1153
2340
 
1154
2341
  void ServerCallData::RecvInitialMetadataReady(grpc_error_handle error) {
1155
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
+ }
1156
2347
  GPR_ASSERT(recv_initial_state_ == RecvInitialState::kForwarded);
1157
2348
  // If there was an error we just propagate that through
1158
- if (!GRPC_ERROR_IS_NONE(error)) {
2349
+ if (!error.ok()) {
1159
2350
  recv_initial_state_ = RecvInitialState::kResponded;
1160
2351
  flusher.AddClosure(
1161
- absl::exchange(original_recv_initial_metadata_ready_, nullptr),
1162
- GRPC_ERROR_REF(error), "propagate error");
2352
+ std::exchange(original_recv_initial_metadata_ready_, nullptr), error,
2353
+ "propagate error");
1163
2354
  return;
1164
2355
  }
1165
2356
  // Record that we've got the callback.
@@ -1169,95 +2360,216 @@ void ServerCallData::RecvInitialMetadataReady(grpc_error_handle error) {
1169
2360
  ScopedContext context(this);
1170
2361
  // Construct the promise.
1171
2362
  ChannelFilter* filter = static_cast<ChannelFilter*>(elem()->channel_data);
1172
- promise_ =
1173
- filter->MakeCallPromise(CallArgs{WrapMetadata(recv_initial_metadata_),
1174
- server_initial_metadata_latch()},
1175
- [this](CallArgs call_args) {
1176
- return MakeNextPromise(std::move(call_args));
1177
- });
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
+ });
1178
2380
  // Poll once.
1179
2381
  WakeInsideCombiner(&flusher);
1180
- if (auto* closure =
1181
- absl::exchange(original_recv_initial_metadata_ready_, nullptr)) {
1182
- flusher.AddClosure(closure, GRPC_ERROR_NONE,
1183
- "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");
1184
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());
1185
2403
  }
1186
2404
 
1187
2405
  // Wakeup and poll the promise if appropriate.
1188
2406
  void ServerCallData::WakeInsideCombiner(Flusher* flusher) {
1189
2407
  PollContext poll_ctx(this, flusher);
1190
- if (send_initial_metadata_ != nullptr &&
1191
- send_initial_metadata_->state ==
1192
- SendInitialMetadata::kQueuedAndGotLatch) {
1193
- send_initial_metadata_->state = SendInitialMetadata::kQueuedAndSetLatch;
1194
- send_initial_metadata_->server_initial_metadata_publisher->Set(
1195
- send_initial_metadata_->batch->payload->send_initial_metadata
1196
- .send_initial_metadata);
2408
+ if (grpc_trace_channel.enabled()) {
2409
+ gpr_log(GPR_INFO, "%s: WakeInsideCombiner %s", LogTag().c_str(),
2410
+ DebugString().c_str());
1197
2411
  }
1198
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
+ }
1199
2480
  if (promise_.has_value()) {
1200
2481
  Poll<ServerMetadataHandle> poll;
1201
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
+ }
1202
2498
  if (send_initial_metadata_ != nullptr &&
1203
2499
  send_initial_metadata_->state ==
1204
- SendInitialMetadata::kQueuedAndSetLatch) {
1205
- Poll<ServerMetadata**> p = server_initial_metadata_latch()->Wait()();
1206
- if (ServerMetadata*** ppp = absl::get_if<ServerMetadata**>(&p)) {
1207
- 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());
1208
2513
  if (send_initial_metadata_->batch->payload->send_initial_metadata
1209
- .send_initial_metadata != md) {
2514
+ .send_initial_metadata != md.get()) {
1210
2515
  *send_initial_metadata_->batch->payload->send_initial_metadata
1211
2516
  .send_initial_metadata = std::move(*md);
1212
2517
  }
1213
2518
  send_initial_metadata_->state = SendInitialMetadata::kForwarded;
2519
+ poll_ctx.Repoll();
1214
2520
  send_initial_metadata_->batch.ResumeWith(flusher);
1215
2521
  }
1216
2522
  }
1217
- if (auto* r = absl::get_if<ServerMetadataHandle>(&poll)) {
2523
+ if (auto* r = poll.value_if_ready()) {
1218
2524
  promise_ = ArenaPromise<ServerMetadataHandle>();
1219
- auto* md = UnwrapMetadata(std::move(*r));
1220
- 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
+ }
1221
2532
  switch (send_trailing_state_) {
2533
+ case SendTrailingState::kQueuedBehindSendMessage:
2534
+ case SendTrailingState::kQueuedButHaventClosedSends:
1222
2535
  case SendTrailingState::kQueued: {
1223
2536
  if (send_trailing_metadata_batch_->payload->send_trailing_metadata
1224
- .send_trailing_metadata != md) {
2537
+ .send_trailing_metadata != md.get()) {
1225
2538
  *send_trailing_metadata_batch_->payload->send_trailing_metadata
1226
2539
  .send_trailing_metadata = std::move(*md);
1227
- } else {
1228
- destroy_md = false;
1229
2540
  }
1230
2541
  send_trailing_metadata_batch_.ResumeWith(flusher);
1231
2542
  send_trailing_state_ = SendTrailingState::kForwarded;
1232
2543
  } break;
1233
2544
  case SendTrailingState::kForwarded:
1234
- abort(); // unreachable
2545
+ Crash(absl::StrFormat(
2546
+ "ILLEGAL STATE: %s",
2547
+ StateString(send_trailing_state_))); // unreachable
1235
2548
  break;
1236
2549
  case SendTrailingState::kInitial: {
1237
2550
  GPR_ASSERT(*md->get_pointer(GrpcStatusMetadata()) != GRPC_STATUS_OK);
1238
- grpc_error_handle error =
1239
- grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1240
- "early return from promise based filter"),
1241
- GRPC_ERROR_INT_GRPC_STATUS,
1242
- *md->get_pointer(GrpcStatusMetadata()));
1243
- if (auto* message = md->get_pointer(GrpcMessageMetadata())) {
1244
- error = grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE,
1245
- message->as_string_view());
1246
- }
1247
- Cancel(error, flusher);
2551
+ Completed(StatusFromMetadata(*md), flusher);
1248
2552
  } break;
1249
2553
  case SendTrailingState::kCancelled:
1250
2554
  // Nothing to do.
1251
2555
  break;
1252
2556
  }
1253
- if (destroy_md) {
1254
- md->~grpc_metadata_batch();
1255
- }
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");
1256
2564
  }
1257
2565
  }
1258
2566
  }
1259
2567
 
1260
- void ServerCallData::OnWakeup() { abort(); } // not implemented
2568
+ void ServerCallData::OnWakeup() {
2569
+ Flusher flusher(this);
2570
+ ScopedContext context(this);
2571
+ WakeInsideCombiner(&flusher);
2572
+ }
1261
2573
 
1262
2574
  } // namespace promise_filter_detail
1263
2575
  } // namespace grpc_core