grpc 1.50.0 → 1.56.0

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

Potentially problematic release.


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

Files changed (2554) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +453 -176
  3. data/include/grpc/byte_buffer.h +76 -1
  4. data/include/grpc/byte_buffer_reader.h +19 -1
  5. data/include/grpc/compression.h +2 -2
  6. data/include/grpc/event_engine/event_engine.h +83 -23
  7. data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -1
  8. data/include/grpc/event_engine/internal/slice_cast.h +67 -0
  9. data/include/grpc/event_engine/memory_allocator.h +1 -1
  10. data/include/grpc/event_engine/slice.h +24 -4
  11. data/include/grpc/event_engine/slice_buffer.h +44 -3
  12. data/include/grpc/fork.h +25 -1
  13. data/include/grpc/grpc.h +3 -13
  14. data/include/grpc/grpc_audit_logging.h +96 -0
  15. data/include/grpc/grpc_posix.h +1 -1
  16. data/include/grpc/grpc_security.h +4 -0
  17. data/include/grpc/impl/codegen/atm.h +3 -71
  18. data/include/grpc/impl/codegen/atm_gcc_atomic.h +3 -58
  19. data/include/grpc/impl/codegen/atm_gcc_sync.h +3 -59
  20. data/include/grpc/impl/codegen/atm_windows.h +3 -106
  21. data/include/grpc/impl/codegen/byte_buffer.h +4 -78
  22. data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -19
  23. data/include/grpc/impl/codegen/compression_types.h +3 -82
  24. data/include/grpc/impl/codegen/connectivity_state.h +3 -20
  25. data/include/grpc/impl/codegen/fork.h +4 -25
  26. data/include/grpc/impl/codegen/gpr_types.h +2 -34
  27. data/include/grpc/impl/codegen/grpc_types.h +3 -791
  28. data/include/grpc/impl/codegen/log.h +3 -86
  29. data/include/grpc/impl/codegen/port_platform.h +3 -758
  30. data/include/grpc/impl/codegen/propagation_bits.h +3 -28
  31. data/include/grpc/impl/codegen/slice.h +3 -106
  32. data/include/grpc/impl/codegen/status.h +4 -131
  33. data/include/grpc/impl/codegen/sync.h +3 -42
  34. data/include/grpc/impl/codegen/sync_abseil.h +3 -12
  35. data/include/grpc/impl/codegen/sync_custom.h +3 -14
  36. data/include/grpc/impl/codegen/sync_generic.h +3 -25
  37. data/include/grpc/impl/codegen/sync_posix.h +3 -28
  38. data/include/grpc/impl/codegen/sync_windows.h +3 -16
  39. data/include/grpc/impl/compression_types.h +109 -0
  40. data/include/grpc/impl/connectivity_state.h +47 -0
  41. data/include/grpc/impl/grpc_types.h +838 -0
  42. data/include/grpc/impl/propagation_bits.h +54 -0
  43. data/include/grpc/impl/slice_type.h +112 -0
  44. data/include/grpc/load_reporting.h +1 -1
  45. data/include/grpc/module.modulemap +7 -1
  46. data/include/grpc/slice.h +1 -1
  47. data/include/grpc/status.h +131 -1
  48. data/include/grpc/support/atm.h +70 -1
  49. data/include/grpc/support/atm_gcc_atomic.h +59 -1
  50. data/include/grpc/support/atm_gcc_sync.h +58 -1
  51. data/include/grpc/support/atm_windows.h +105 -1
  52. data/include/grpc/support/json.h +218 -0
  53. data/include/grpc/support/log.h +87 -1
  54. data/include/grpc/support/log_windows.h +1 -1
  55. data/include/grpc/support/port_platform.h +767 -1
  56. data/include/grpc/support/string_util.h +1 -1
  57. data/include/grpc/support/sync.h +35 -2
  58. data/include/grpc/support/sync_abseil.h +11 -1
  59. data/include/grpc/support/sync_custom.h +13 -1
  60. data/include/grpc/support/sync_generic.h +24 -1
  61. data/include/grpc/support/sync_posix.h +27 -1
  62. data/include/grpc/support/sync_windows.h +15 -1
  63. data/include/grpc/support/time.h +31 -6
  64. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +164 -0
  65. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +52 -0
  66. data/src/core/ext/filters/backend_metrics/backend_metric_provider.h +29 -0
  67. data/src/core/ext/filters/census/grpc_context.cc +17 -18
  68. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +28 -22
  69. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +5 -4
  70. data/src/core/ext/filters/channel_idle/idle_filter_state.h +4 -4
  71. data/src/core/ext/filters/client_channel/backend_metric.cc +12 -1
  72. data/src/core/ext/filters/client_channel/backend_metric.h +3 -3
  73. data/src/core/ext/filters/client_channel/backup_poller.cc +26 -35
  74. data/src/core/ext/filters/client_channel/backup_poller.h +24 -27
  75. data/src/core/ext/filters/client_channel/channel_connectivity.cc +51 -28
  76. data/src/core/ext/filters/client_channel/client_channel.cc +1014 -1016
  77. data/src/core/ext/filters/client_channel/client_channel.h +155 -187
  78. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +36 -37
  79. data/src/core/ext/filters/client_channel/client_channel_channelz.h +22 -22
  80. data/src/core/ext/filters/client_channel/client_channel_factory.cc +17 -17
  81. data/src/core/ext/filters/client_channel/client_channel_factory.h +3 -3
  82. data/src/core/ext/filters/client_channel/client_channel_internal.h +77 -0
  83. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +18 -18
  84. data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
  85. data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +26 -23
  86. data/src/core/ext/filters/client_channel/config_selector.h +25 -55
  87. data/src/core/ext/filters/client_channel/connector.h +9 -5
  88. data/src/core/ext/filters/client_channel/dynamic_filters.cc +28 -55
  89. data/src/core/ext/filters/client_channel/dynamic_filters.h +10 -11
  90. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +21 -21
  91. data/src/core/ext/filters/client_channel/http_proxy.cc +74 -42
  92. data/src/core/ext/filters/client_channel/http_proxy.h +21 -21
  93. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +3 -4
  94. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +3 -3
  95. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +29 -21
  96. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +7 -2
  97. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +3 -4
  98. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +66 -130
  99. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +40 -24
  100. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +156 -178
  101. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +26 -27
  102. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -1
  103. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +4 -6
  104. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +18 -20
  105. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +21 -22
  106. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +19 -20
  107. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +22 -23
  108. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +455 -0
  109. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.h +54 -0
  110. data/src/core/ext/filters/client_channel/lb_policy/health_check_client_internal.h +186 -0
  111. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +11 -94
  112. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +4 -4
  113. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric_internal.h +117 -0
  114. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +263 -242
  115. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +28 -7
  116. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +28 -26
  117. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +76 -112
  118. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +159 -168
  119. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +22 -5
  120. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +173 -171
  121. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +31 -25
  122. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +68 -31
  123. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +198 -0
  124. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.h +71 -0
  125. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +1002 -0
  126. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +76 -70
  127. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +103 -105
  128. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
  129. data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +15 -17
  130. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +3 -3
  131. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +34 -41
  132. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +76 -113
  133. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +111 -185
  134. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +814 -0
  135. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +67 -0
  136. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +363 -0
  137. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +21 -21
  138. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +9 -10
  139. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +59 -175
  140. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.h +30 -0
  141. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +42 -43
  142. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +22 -23
  143. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +92 -87
  144. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +153 -153
  145. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +54 -55
  146. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +18 -18
  147. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +18 -18
  148. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_plugin.cc +60 -0
  149. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_plugin.h +27 -0
  150. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +549 -0
  151. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.h +35 -0
  152. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.cc +97 -0
  153. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.h +32 -0
  154. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +20 -39
  155. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.h +24 -0
  156. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -3
  157. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +4 -4
  158. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +85 -223
  159. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +45 -36
  160. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +12 -15
  161. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -7
  162. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +280 -189
  163. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +19 -4
  164. data/src/core/ext/filters/client_channel/retry_filter.cc +200 -264
  165. data/src/core/ext/filters/client_channel/retry_filter.h +3 -3
  166. data/src/core/ext/filters/client_channel/retry_service_config.cc +195 -236
  167. data/src/core/ext/filters/client_channel/retry_service_config.h +23 -26
  168. data/src/core/ext/filters/client_channel/retry_throttle.cc +27 -29
  169. data/src/core/ext/filters/client_channel/retry_throttle.h +29 -28
  170. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +17 -47
  171. data/src/core/ext/filters/client_channel/subchannel.cc +133 -337
  172. data/src/core/ext/filters/client_channel/subchannel.h +23 -86
  173. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +3 -3
  174. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +21 -21
  175. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +36 -38
  176. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +11 -8
  177. data/src/core/ext/filters/deadline/deadline_filter.cc +73 -64
  178. data/src/core/ext/filters/deadline/deadline_filter.h +6 -10
  179. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +3 -2
  180. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +3 -7
  181. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
  182. data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +20 -12
  183. data/src/core/ext/filters/http/client/http_client_filter.cc +47 -43
  184. data/src/core/ext/filters/http/client/http_client_filter.h +20 -20
  185. data/src/core/ext/filters/http/client_authority_filter.cc +19 -19
  186. data/src/core/ext/filters/http/client_authority_filter.h +21 -21
  187. data/src/core/ext/filters/http/http_filters_plugin.cc +30 -57
  188. data/src/core/ext/filters/http/message_compress/compression_filter.cc +323 -0
  189. data/src/core/ext/filters/http/message_compress/compression_filter.h +139 -0
  190. data/src/core/ext/filters/http/server/http_server_filter.cc +54 -52
  191. data/src/core/ext/filters/http/server/http_server_filter.h +21 -21
  192. data/src/core/ext/filters/message_size/message_size_filter.cc +184 -297
  193. data/src/core/ext/filters/message_size/message_size_filter.h +72 -20
  194. data/src/core/ext/filters/rbac/rbac_filter.cc +16 -15
  195. data/src/core/ext/filters/rbac/rbac_filter.h +3 -3
  196. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +829 -538
  197. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +7 -6
  198. data/src/core/ext/filters/server_config_selector/server_config_selector.h +9 -11
  199. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +12 -16
  200. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +3 -3
  201. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +220 -0
  202. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +81 -0
  203. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +82 -0
  204. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +93 -0
  205. data/src/core/ext/gcp/metadata_query.cc +137 -0
  206. data/src/core/ext/gcp/metadata_query.h +87 -0
  207. data/src/core/ext/transport/chttp2/alpn/alpn.cc +18 -18
  208. data/src/core/ext/transport/chttp2/alpn/alpn.h +24 -24
  209. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +68 -67
  210. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +30 -24
  211. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +149 -149
  212. data/src/core/ext/transport/chttp2/server/chttp2_server.h +21 -21
  213. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +22 -22
  214. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +33 -33
  215. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +41 -37
  216. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +35 -31
  217. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +673 -455
  218. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +42 -22
  219. data/src/core/ext/transport/chttp2/transport/context_list_entry.h +70 -0
  220. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +0 -36
  221. data/src/core/ext/transport/chttp2/transport/decode_huff.h +38 -85
  222. data/src/core/ext/transport/chttp2/transport/flow_control.cc +130 -107
  223. data/src/core/ext/transport/chttp2/transport/flow_control.h +66 -39
  224. data/src/core/ext/transport/chttp2/transport/frame.h +21 -21
  225. data/src/core/ext/transport/chttp2/transport/frame_data.cc +35 -32
  226. data/src/core/ext/transport/chttp2/transport/frame_data.h +27 -27
  227. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +38 -36
  228. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +20 -20
  229. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +27 -31
  230. data/src/core/ext/transport/chttp2/transport/frame_ping.h +21 -24
  231. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +30 -25
  232. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +21 -21
  233. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +39 -37
  234. data/src/core/ext/transport/chttp2/transport/frame_settings.h +22 -22
  235. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +24 -21
  236. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +21 -21
  237. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +3 -3
  238. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +201 -353
  239. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +328 -164
  240. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +4 -1
  241. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +5 -3
  242. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +498 -744
  243. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +30 -26
  244. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +41 -37
  245. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +30 -22
  246. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +21 -19
  247. data/src/core/ext/transport/chttp2/transport/http2_settings.h +39 -37
  248. data/src/core/ext/transport/chttp2/transport/http_trace.cc +19 -0
  249. data/src/core/ext/transport/chttp2/transport/http_trace.h +24 -0
  250. data/src/core/ext/transport/chttp2/transport/huffsyms.cc +20 -20
  251. data/src/core/ext/transport/chttp2/transport/huffsyms.h +21 -21
  252. data/src/core/ext/transport/chttp2/transport/internal.h +220 -192
  253. data/src/core/ext/transport/chttp2/transport/parsing.cc +263 -109
  254. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +19 -19
  255. data/src/core/ext/transport/chttp2/transport/stream_map.cc +23 -23
  256. data/src/core/ext/transport/chttp2/transport/stream_map.h +33 -33
  257. data/src/core/ext/transport/chttp2/transport/varint.cc +19 -20
  258. data/src/core/ext/transport/chttp2/transport/varint.h +37 -34
  259. data/src/core/ext/transport/chttp2/transport/writing.cc +93 -72
  260. data/src/core/ext/transport/inproc/inproc_plugin.cc +17 -17
  261. data/src/core/ext/transport/inproc/inproc_transport.cc +143 -155
  262. data/src/core/ext/transport/inproc/inproc_transport.h +21 -21
  263. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +87 -52
  264. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +414 -181
  265. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +121 -59
  266. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +485 -219
  267. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +90 -55
  268. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +415 -188
  269. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +377 -194
  270. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1694 -666
  271. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +30 -17
  272. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +144 -47
  273. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +34 -21
  274. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +160 -62
  275. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +27 -14
  276. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +78 -38
  277. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +20 -11
  278. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +48 -26
  279. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +20 -11
  280. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +48 -26
  281. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +109 -62
  282. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +566 -244
  283. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +21 -12
  284. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +45 -30
  285. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +22 -19
  286. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +82 -29
  287. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +23 -16
  288. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +45 -30
  289. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +230 -143
  290. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +733 -404
  291. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +417 -258
  292. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1873 -867
  293. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -41
  294. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +286 -148
  295. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +537 -349
  296. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +2038 -1178
  297. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +21 -12
  298. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +45 -30
  299. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +89 -52
  300. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +347 -232
  301. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +264 -165
  302. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +888 -476
  303. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +154 -72
  304. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +603 -213
  305. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +22 -13
  306. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +50 -36
  307. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +380 -221
  308. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1168 -611
  309. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +166 -94
  310. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +666 -292
  311. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +18 -11
  312. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +37 -26
  313. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +21 -12
  314. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +45 -30
  315. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +30 -17
  316. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +144 -47
  317. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +274 -167
  318. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +789 -440
  319. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +222 -128
  320. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +1116 -485
  321. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +22 -13
  322. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +60 -37
  323. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +350 -208
  324. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +1088 -625
  325. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +44 -11
  326. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +175 -18
  327. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +34 -19
  328. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +118 -56
  329. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +48 -16
  330. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +189 -44
  331. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +31 -18
  332. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +143 -65
  333. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +22 -13
  334. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +51 -37
  335. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +78 -43
  336. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +265 -127
  337. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +147 -84
  338. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +454 -226
  339. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +115 -62
  340. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +559 -227
  341. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +18 -11
  342. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +35 -26
  343. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +187 -107
  344. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +969 -410
  345. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +172 -95
  346. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +864 -374
  347. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +49 -23
  348. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +182 -89
  349. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +39 -18
  350. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +74 -56
  351. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +28 -15
  352. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +71 -45
  353. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +131 -74
  354. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +489 -249
  355. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +135 -80
  356. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +505 -245
  357. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +257 -127
  358. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +1010 -387
  359. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +91 -41
  360. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +648 -183
  361. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +1301 -751
  362. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +5583 -2425
  363. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +49 -28
  364. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +164 -84
  365. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +228 -141
  366. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +738 -399
  367. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +20 -10
  368. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +53 -22
  369. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +21 -12
  370. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +45 -30
  371. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +32 -19
  372. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +70 -49
  373. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +27 -14
  374. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +110 -43
  375. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +46 -25
  376. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +259 -100
  377. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +21 -12
  378. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +49 -25
  379. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +18 -11
  380. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +35 -26
  381. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +42 -23
  382. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +108 -70
  383. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +7 -4
  384. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +21 -16
  385. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +43 -24
  386. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +110 -75
  387. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +30 -16
  388. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +100 -46
  389. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +16 -9
  390. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +73 -23
  391. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +60 -37
  392. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +150 -108
  393. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +74 -43
  394. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +357 -167
  395. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +44 -25
  396. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +114 -80
  397. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +42 -18
  398. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +253 -67
  399. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c +75 -0
  400. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +201 -0
  401. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +474 -289
  402. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +2156 -1037
  403. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c +53 -0
  404. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +107 -0
  405. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +69 -0
  406. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +246 -0
  407. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.c +138 -0
  408. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +499 -0
  409. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +36 -17
  410. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +144 -55
  411. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +18 -11
  412. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +35 -26
  413. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +7 -4
  414. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +15 -10
  415. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +184 -96
  416. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +907 -360
  417. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +56 -33
  418. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +150 -101
  419. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +188 -109
  420. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +827 -408
  421. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +32 -19
  422. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +109 -53
  423. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +10 -7
  424. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +18 -14
  425. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +300 -175
  426. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +1297 -511
  427. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +42 -23
  428. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +188 -75
  429. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +130 -83
  430. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +510 -238
  431. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +22 -13
  432. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +55 -34
  433. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +39 -26
  434. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +124 -68
  435. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.c +56 -0
  436. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.h +130 -0
  437. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +60 -26
  438. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +130 -51
  439. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +37 -20
  440. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +133 -63
  441. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +22 -13
  442. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +91 -40
  443. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +21 -12
  444. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +50 -32
  445. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +18 -11
  446. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +37 -26
  447. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +46 -27
  448. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +101 -70
  449. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.c +46 -0
  450. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.h +117 -0
  451. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +40 -23
  452. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +161 -75
  453. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +31 -18
  454. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +114 -56
  455. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +46 -29
  456. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +139 -91
  457. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +65 -42
  458. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +200 -121
  459. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +80 -45
  460. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +208 -131
  461. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +34 -21
  462. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +74 -53
  463. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +7 -4
  464. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +13 -8
  465. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +16 -9
  466. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +28 -18
  467. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +28 -15
  468. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +55 -34
  469. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +43 -22
  470. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +91 -53
  471. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +35 -20
  472. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +92 -57
  473. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.c +7 -4
  474. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +16 -9
  475. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +20 -11
  476. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +48 -26
  477. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +23 -14
  478. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +61 -41
  479. data/src/core/ext/upb-generated/google/api/annotations.upb.c +14 -11
  480. data/src/core/ext/upb-generated/google/api/annotations.upb.h +30 -20
  481. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +255 -154
  482. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +934 -450
  483. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +299 -180
  484. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +946 -483
  485. data/src/core/ext/upb-generated/google/api/http.upb.c +68 -35
  486. data/src/core/ext/upb-generated/google/api/http.upb.h +284 -120
  487. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +22 -13
  488. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +95 -37
  489. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +19 -10
  490. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +38 -22
  491. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +1018 -424
  492. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +3851 -1412
  493. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +19 -10
  494. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +38 -22
  495. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +10 -7
  496. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +18 -14
  497. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +62 -39
  498. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +207 -102
  499. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +19 -10
  500. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +38 -22
  501. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +90 -51
  502. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +157 -107
  503. data/src/core/ext/upb-generated/google/rpc/status.upb.c +22 -13
  504. data/src/core/ext/upb-generated/google/rpc/status.upb.h +95 -37
  505. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +59 -34
  506. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +154 -92
  507. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +43 -24
  508. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +118 -60
  509. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +250 -145
  510. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +919 -415
  511. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +34 -19
  512. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +76 -51
  513. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +25 -14
  514. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +45 -30
  515. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +144 -81
  516. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +405 -217
  517. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +51 -26
  518. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +153 -61
  519. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +173 -102
  520. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +855 -298
  521. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +68 -49
  522. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +155 -104
  523. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +26 -17
  524. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +55 -34
  525. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +12 -9
  526. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +31 -14
  527. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +26 -17
  528. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +55 -34
  529. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +23 -16
  530. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +45 -30
  531. data/src/core/ext/upb-generated/validate/validate.upb.c +845 -455
  532. data/src/core/ext/upb-generated/validate/validate.upb.h +4347 -1908
  533. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +68 -49
  534. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +155 -104
  535. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +26 -17
  536. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +55 -34
  537. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +12 -9
  538. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +31 -14
  539. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +65 -44
  540. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +137 -91
  541. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +23 -16
  542. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +45 -30
  543. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +16 -9
  544. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +28 -18
  545. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.c +56 -0
  546. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.h +122 -0
  547. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +37 -22
  548. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +96 -63
  549. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +26 -17
  550. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +52 -29
  551. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +21 -12
  552. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +45 -30
  553. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +23 -14
  554. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +62 -42
  555. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +44 -25
  556. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +169 -79
  557. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +27 -14
  558. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +65 -38
  559. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +86 -30
  560. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +223 -54
  561. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +21 -13
  562. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +89 -34
  563. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.c +53 -0
  564. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.h +107 -0
  565. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.c +75 -0
  566. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.h +270 -0
  567. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.c +39 -0
  568. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.h +78 -0
  569. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.c +78 -0
  570. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.h +289 -0
  571. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +162 -101
  572. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +501 -293
  573. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.c +160 -0
  574. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.h +740 -0
  575. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +24 -15
  576. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +53 -37
  577. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +40 -23
  578. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +161 -75
  579. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.c +82 -0
  580. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.h +240 -0
  581. data/src/core/ext/upb-generated/xds/type/v3/range.upb.c +85 -0
  582. data/src/core/ext/upb-generated/xds/type/v3/range.upb.h +246 -0
  583. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +21 -13
  584. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +45 -30
  585. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.c +1 -1
  586. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.h +6 -5
  587. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +55 -54
  588. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.h +6 -5
  589. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +1 -1
  590. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +6 -5
  591. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +35 -14
  592. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +16 -5
  593. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.c +1 -1
  594. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.h +6 -5
  595. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +1 -1
  596. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.h +6 -5
  597. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.c +1 -1
  598. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.h +6 -5
  599. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.c +1 -1
  600. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.h +6 -5
  601. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.c +1 -1
  602. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.h +6 -5
  603. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.c +1 -1
  604. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.h +6 -5
  605. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.c +1 -1
  606. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.h +6 -5
  607. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +1 -1
  608. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +6 -5
  609. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +1 -1
  610. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +6 -5
  611. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +1 -1
  612. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +6 -5
  613. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +252 -241
  614. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +6 -5
  615. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +1 -1
  616. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +6 -5
  617. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +233 -225
  618. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +6 -10
  619. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +1 -1
  620. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +6 -5
  621. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +1 -1
  622. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +6 -5
  623. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.c +1 -1
  624. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.h +6 -5
  625. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +96 -76
  626. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +11 -5
  627. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +1 -1
  628. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +6 -5
  629. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +95 -94
  630. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +6 -5
  631. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +13 -12
  632. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +11 -5
  633. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +1 -1
  634. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +6 -5
  635. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +1 -1
  636. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +6 -5
  637. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.c +1 -1
  638. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.h +6 -5
  639. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +1 -1
  640. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +6 -5
  641. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +82 -76
  642. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +6 -5
  643. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +1 -1
  644. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +6 -5
  645. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +193 -188
  646. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +6 -5
  647. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +32 -16
  648. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +11 -5
  649. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +1 -1
  650. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +6 -5
  651. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +8 -4
  652. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +11 -5
  653. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +1 -1
  654. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +6 -5
  655. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +1 -1
  656. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +6 -5
  657. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +1 -1
  658. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +6 -5
  659. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +72 -67
  660. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +6 -5
  661. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +1 -1
  662. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +6 -5
  663. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +1 -1
  664. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +6 -5
  665. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +141 -134
  666. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +21 -5
  667. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +1 -1
  668. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +6 -5
  669. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +55 -42
  670. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +6 -5
  671. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +1 -1
  672. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +6 -5
  673. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +1 -1
  674. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.h +6 -5
  675. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +1 -1
  676. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +6 -5
  677. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +1 -1
  678. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +6 -5
  679. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +167 -138
  680. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +16 -5
  681. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +82 -71
  682. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +11 -5
  683. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +772 -739
  684. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +16 -5
  685. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +1 -1
  686. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +6 -5
  687. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +1 -1
  688. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +6 -5
  689. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +17 -15
  690. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.h +6 -5
  691. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.c +1 -1
  692. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.h +6 -5
  693. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +1 -1
  694. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +6 -5
  695. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.c +1 -1
  696. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.h +6 -5
  697. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.c +1 -1
  698. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.h +6 -5
  699. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +7 -9
  700. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +6 -5
  701. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.c +1 -1
  702. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.h +6 -5
  703. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.c +1 -1
  704. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.h +6 -5
  705. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +1 -1
  706. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.h +6 -5
  707. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.c +1 -1
  708. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.h +6 -5
  709. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +21 -19
  710. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.h +6 -5
  711. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +1 -1
  712. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +6 -5
  713. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +1 -1
  714. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +6 -5
  715. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +1 -1
  716. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +6 -5
  717. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +1 -1
  718. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +6 -5
  719. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +54 -43
  720. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +6 -5
  721. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +60 -0
  722. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +41 -0
  723. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +382 -364
  724. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +6 -5
  725. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +50 -0
  726. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +36 -0
  727. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +1 -1
  728. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +6 -5
  729. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +138 -136
  730. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +6 -5
  731. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +1 -1
  732. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +6 -5
  733. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +151 -147
  734. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +6 -5
  735. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +1 -1
  736. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +6 -5
  737. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +6 -6
  738. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +6 -5
  739. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +17 -14
  740. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +6 -5
  741. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +6 -6
  742. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +6 -5
  743. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +12 -13
  744. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +6 -5
  745. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.c +1 -1
  746. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.h +6 -5
  747. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +1 -1
  748. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +6 -5
  749. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.c +48 -0
  750. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.h +36 -0
  751. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +13 -10
  752. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +11 -5
  753. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +1 -1
  754. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +6 -5
  755. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +1 -1
  756. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +6 -5
  757. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +1 -1
  758. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +6 -5
  759. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +1 -1
  760. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +6 -5
  761. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +15 -15
  762. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +6 -5
  763. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.c +40 -0
  764. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.h +41 -0
  765. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +1 -1
  766. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +6 -5
  767. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +1 -1
  768. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +6 -5
  769. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +1 -1
  770. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +6 -5
  771. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +1 -1
  772. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +6 -5
  773. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +1 -1
  774. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +6 -5
  775. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.c +1 -1
  776. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.h +6 -5
  777. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +1 -1
  778. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +6 -5
  779. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.c +1 -1
  780. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.h +6 -5
  781. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +1 -1
  782. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +6 -5
  783. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +1 -1
  784. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +6 -5
  785. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +1 -1
  786. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +6 -5
  787. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +11 -10
  788. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.h +6 -5
  789. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +1 -1
  790. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +6 -5
  791. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.c +1 -1
  792. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.h +6 -5
  793. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +1 -1
  794. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +6 -5
  795. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +1 -1
  796. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +6 -5
  797. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +1 -1
  798. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +6 -5
  799. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +1 -1
  800. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +6 -5
  801. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.c +1 -1
  802. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.h +6 -5
  803. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +1 -1
  804. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +6 -5
  805. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +329 -273
  806. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +11 -5
  807. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +1 -1
  808. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +6 -5
  809. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +1 -1
  810. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +6 -5
  811. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +1 -1
  812. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +6 -5
  813. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +1 -1
  814. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +6 -5
  815. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +1 -1
  816. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +6 -5
  817. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +1 -1
  818. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +6 -5
  819. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.c +1 -1
  820. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.h +6 -5
  821. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +1 -1
  822. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +6 -5
  823. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +1 -1
  824. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +6 -5
  825. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +1 -1
  826. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +6 -5
  827. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +1 -1
  828. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +6 -5
  829. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +1 -1
  830. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +6 -5
  831. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +1 -1
  832. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +6 -5
  833. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +1 -1
  834. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +6 -5
  835. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.c +1 -1
  836. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.h +6 -5
  837. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.c +1 -1
  838. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.h +6 -5
  839. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.c +1 -1
  840. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.h +6 -5
  841. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +1 -1
  842. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +6 -5
  843. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.c +1 -1
  844. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.h +6 -5
  845. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +1 -1
  846. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +6 -5
  847. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.c +45 -0
  848. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.h +36 -0
  849. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +1 -1
  850. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +6 -5
  851. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +1 -1
  852. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +6 -5
  853. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.c +1 -1
  854. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.h +6 -5
  855. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +1 -1
  856. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +6 -5
  857. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +1 -1
  858. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +6 -5
  859. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +1 -1
  860. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +6 -5
  861. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.c +43 -0
  862. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.h +36 -0
  863. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.c +51 -0
  864. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.h +41 -0
  865. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.c +36 -0
  866. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.h +36 -0
  867. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.c +55 -0
  868. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.h +41 -0
  869. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +10 -10
  870. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.h +6 -5
  871. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.c +71 -0
  872. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.h +61 -0
  873. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.c +1 -1
  874. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.h +6 -5
  875. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.c +1 -1
  876. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.h +6 -5
  877. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.c +60 -0
  878. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.h +41 -0
  879. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.c +36 -0
  880. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.h +46 -0
  881. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +5 -8
  882. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +6 -5
  883. data/src/core/ext/xds/certificate_provider_store.cc +8 -13
  884. data/src/core/ext/xds/certificate_provider_store.h +4 -4
  885. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +32 -46
  886. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +17 -12
  887. data/src/core/ext/xds/upb_utils.h +4 -4
  888. data/src/core/ext/xds/xds_api.cc +61 -113
  889. data/src/core/ext/xds/xds_api.h +13 -15
  890. data/src/core/ext/xds/xds_audit_logger_registry.cc +122 -0
  891. data/src/core/ext/xds/xds_audit_logger_registry.h +68 -0
  892. data/src/core/ext/xds/xds_bootstrap.cc +3 -3
  893. data/src/core/ext/xds/xds_bootstrap.h +3 -4
  894. data/src/core/ext/xds/xds_bootstrap_grpc.cc +37 -33
  895. data/src/core/ext/xds/xds_bootstrap_grpc.h +24 -4
  896. data/src/core/ext/xds/xds_certificate_provider.cc +22 -25
  897. data/src/core/ext/xds/xds_certificate_provider.h +4 -4
  898. data/src/core/ext/xds/xds_channel_args.h +3 -3
  899. data/src/core/ext/xds/xds_channel_stack_modifier.cc +1 -3
  900. data/src/core/ext/xds/xds_channel_stack_modifier.h +4 -4
  901. data/src/core/ext/xds/xds_client.cc +171 -104
  902. data/src/core/ext/xds/xds_client.h +17 -9
  903. data/src/core/ext/xds/xds_client_grpc.cc +30 -24
  904. data/src/core/ext/xds/xds_client_grpc.h +4 -4
  905. data/src/core/ext/xds/xds_client_stats.cc +46 -32
  906. data/src/core/ext/xds/xds_client_stats.h +46 -41
  907. data/src/core/ext/xds/xds_cluster.cc +358 -205
  908. data/src/core/ext/xds/xds_cluster.h +55 -39
  909. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +61 -74
  910. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +50 -26
  911. data/src/core/ext/xds/xds_common_types.cc +213 -141
  912. data/src/core/ext/xds/xds_common_types.h +22 -16
  913. data/src/core/ext/xds/xds_endpoint.cc +229 -132
  914. data/src/core/ext/xds/xds_endpoint.h +17 -12
  915. data/src/core/ext/xds/xds_health_status.cc +80 -0
  916. data/src/core/ext/xds/xds_health_status.h +109 -0
  917. data/src/core/ext/xds/xds_http_fault_filter.cc +68 -51
  918. data/src/core/ext/xds/xds_http_fault_filter.h +19 -26
  919. data/src/core/ext/xds/xds_http_filters.cc +65 -73
  920. data/src/core/ext/xds/xds_http_filters.h +76 -25
  921. data/src/core/ext/xds/xds_http_rbac_filter.cc +303 -272
  922. data/src/core/ext/xds/xds_http_rbac_filter.h +19 -21
  923. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +222 -0
  924. data/src/core/ext/xds/xds_http_stateful_session_filter.h +59 -0
  925. data/src/core/ext/xds/xds_lb_policy_registry.cc +211 -166
  926. data/src/core/ext/xds/xds_lb_policy_registry.h +13 -14
  927. data/src/core/ext/xds/xds_listener.cc +456 -420
  928. data/src/core/ext/xds/xds_listener.h +49 -51
  929. data/src/core/ext/xds/xds_resource_type.h +8 -16
  930. data/src/core/ext/xds/xds_resource_type_impl.h +13 -16
  931. data/src/core/ext/xds/xds_route_config.cc +566 -534
  932. data/src/core/ext/xds/xds_route_config.h +43 -32
  933. data/src/core/ext/xds/xds_routing.cc +4 -3
  934. data/src/core/ext/xds/xds_routing.h +5 -3
  935. data/src/core/ext/xds/xds_server_config_fetcher.cc +109 -106
  936. data/src/core/ext/xds/xds_transport.h +3 -3
  937. data/src/core/ext/xds/xds_transport_grpc.cc +10 -9
  938. data/src/core/ext/xds/xds_transport_grpc.h +4 -4
  939. data/src/core/lib/address_utils/parse_address.cc +30 -29
  940. data/src/core/lib/address_utils/parse_address.h +35 -35
  941. data/src/core/lib/address_utils/sockaddr_utils.cc +30 -28
  942. data/src/core/lib/address_utils/sockaddr_utils.h +36 -36
  943. data/src/core/lib/avl/avl.h +12 -7
  944. data/src/core/lib/backoff/backoff.cc +17 -17
  945. data/src/core/lib/backoff/backoff.h +20 -20
  946. data/src/core/lib/backoff/random_early_detection.cc +31 -0
  947. data/src/core/lib/backoff/random_early_detection.h +59 -0
  948. data/src/core/lib/channel/call_finalization.h +4 -4
  949. data/src/core/lib/channel/call_tracer.cc +51 -0
  950. data/src/core/lib/channel/call_tracer.h +106 -34
  951. data/src/core/lib/channel/channel_args.cc +100 -42
  952. data/src/core/lib/channel/channel_args.h +104 -49
  953. data/src/core/lib/channel/channel_args_preconditioning.h +4 -4
  954. data/src/core/lib/channel/channel_fwd.h +3 -3
  955. data/src/core/lib/channel/channel_stack.cc +60 -57
  956. data/src/core/lib/channel/channel_stack.h +148 -135
  957. data/src/core/lib/channel/channel_stack_builder.cc +21 -24
  958. data/src/core/lib/channel/channel_stack_builder.h +17 -9
  959. data/src/core/lib/channel/channel_stack_builder_impl.cc +56 -25
  960. data/src/core/lib/channel/channel_stack_builder_impl.h +5 -3
  961. data/src/core/lib/channel/channel_trace.cc +37 -34
  962. data/src/core/lib/channel/channel_trace.h +22 -22
  963. data/src/core/lib/channel/channelz.cc +181 -154
  964. data/src/core/lib/channel/channelz.h +71 -64
  965. data/src/core/lib/channel/channelz_registry.cc +41 -37
  966. data/src/core/lib/channel/channelz_registry.h +21 -21
  967. data/src/core/lib/channel/connected_channel.cc +764 -67
  968. data/src/core/lib/channel/connected_channel.h +20 -24
  969. data/src/core/lib/channel/context.h +33 -22
  970. data/src/core/lib/channel/promise_based_filter.cc +1591 -278
  971. data/src/core/lib/channel/promise_based_filter.h +486 -104
  972. data/src/core/lib/channel/server_call_tracer_filter.cc +110 -0
  973. data/src/core/lib/channel/status_util.cc +35 -17
  974. data/src/core/lib/channel/status_util.h +29 -22
  975. data/src/core/lib/compression/compression.cc +19 -19
  976. data/src/core/lib/compression/compression_internal.cc +38 -48
  977. data/src/core/lib/compression/compression_internal.h +25 -25
  978. data/src/core/lib/compression/message_compress.cc +26 -26
  979. data/src/core/lib/compression/message_compress.h +27 -27
  980. data/src/core/lib/config/config_vars.cc +153 -0
  981. data/src/core/lib/config/config_vars.h +127 -0
  982. data/src/core/lib/config/config_vars_non_generated.cc +51 -0
  983. data/src/core/lib/config/core_configuration.h +3 -3
  984. data/src/core/lib/config/load_config.cc +79 -0
  985. data/src/core/lib/config/load_config.h +55 -0
  986. data/src/core/lib/debug/event_log.cc +88 -0
  987. data/src/core/lib/debug/event_log.h +81 -0
  988. data/src/core/lib/debug/histogram_view.cc +69 -0
  989. data/src/core/lib/debug/histogram_view.h +37 -0
  990. data/src/core/lib/debug/stats.cc +39 -136
  991. data/src/core/lib/debug/stats.h +49 -55
  992. data/src/core/lib/debug/stats_data.cc +240 -88
  993. data/src/core/lib/debug/stats_data.h +295 -145
  994. data/src/core/lib/debug/trace.cc +56 -79
  995. data/src/core/lib/debug/trace.h +37 -54
  996. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +211 -0
  997. data/src/core/lib/event_engine/cf_engine/cf_engine.h +86 -0
  998. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +354 -0
  999. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +146 -0
  1000. data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +79 -0
  1001. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +5 -0
  1002. data/src/core/lib/event_engine/channel_args_endpoint_config.h +3 -3
  1003. data/src/core/lib/event_engine/common_closures.h +71 -0
  1004. data/src/core/lib/event_engine/default_event_engine.cc +56 -16
  1005. data/src/core/lib/event_engine/default_event_engine.h +44 -8
  1006. data/src/core/lib/event_engine/default_event_engine_factory.cc +16 -6
  1007. data/src/core/lib/event_engine/default_event_engine_factory.h +3 -3
  1008. data/src/core/lib/event_engine/event_engine.cc +60 -0
  1009. data/src/core/lib/event_engine/forkable.cc +11 -6
  1010. data/src/core/lib/event_engine/forkable.h +3 -3
  1011. data/src/core/lib/event_engine/handle_containers.h +12 -20
  1012. data/src/core/lib/event_engine/memory_allocator.cc +1 -1
  1013. data/src/core/lib/event_engine/memory_allocator_factory.h +47 -0
  1014. data/src/core/lib/event_engine/poller.h +13 -7
  1015. data/src/core/lib/event_engine/posix.h +162 -0
  1016. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +642 -0
  1017. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +139 -0
  1018. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +895 -0
  1019. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
  1020. data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
  1021. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +68 -0
  1022. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +33 -0
  1023. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
  1024. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
  1025. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +254 -0
  1026. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
  1027. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1338 -0
  1028. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +726 -0
  1029. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +523 -28
  1030. data/src/core/lib/event_engine/posix_engine/posix_engine.h +165 -27
  1031. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
  1032. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +292 -0
  1033. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +278 -0
  1034. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +379 -0
  1035. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +91 -0
  1036. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +867 -0
  1037. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +316 -0
  1038. data/src/core/lib/event_engine/posix_engine/timer.cc +49 -49
  1039. data/src/core/lib/event_engine/posix_engine/timer.h +90 -89
  1040. data/src/core/lib/event_engine/posix_engine/timer_heap.cc +27 -27
  1041. data/src/core/lib/event_engine/posix_engine/timer_heap.h +24 -24
  1042. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +76 -214
  1043. data/src/core/lib/event_engine/posix_engine/timer_manager.h +44 -72
  1044. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +332 -0
  1045. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +185 -0
  1046. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +127 -0
  1047. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
  1048. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +150 -0
  1049. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +45 -0
  1050. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
  1051. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
  1052. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
  1053. data/src/core/lib/event_engine/resolved_address.cc +21 -1
  1054. data/src/core/lib/event_engine/{executor/executor.h → resolved_address_internal.h} +11 -15
  1055. data/src/core/lib/event_engine/shim.cc +64 -0
  1056. data/src/core/lib/event_engine/{executor/threaded_executor.cc → shim.h} +10 -13
  1057. data/src/core/lib/event_engine/slice.cc +8 -7
  1058. data/src/core/lib/event_engine/slice_buffer.cc +2 -2
  1059. data/src/core/lib/event_engine/tcp_socket_utils.cc +389 -0
  1060. data/src/core/lib/event_engine/tcp_socket_utils.h +90 -0
  1061. data/src/core/lib/event_engine/thread_local.cc +29 -0
  1062. data/src/core/lib/event_engine/thread_local.h +32 -0
  1063. data/src/core/lib/event_engine/thread_pool/original_thread_pool.cc +256 -0
  1064. data/src/core/lib/event_engine/thread_pool/original_thread_pool.h +137 -0
  1065. data/src/core/lib/event_engine/thread_pool/thread_pool.h +50 -0
  1066. data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +40 -0
  1067. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +489 -0
  1068. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +249 -0
  1069. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +166 -0
  1070. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +108 -0
  1071. data/src/core/lib/event_engine/time_util.h +3 -3
  1072. data/src/core/lib/event_engine/trace.cc +7 -0
  1073. data/src/core/lib/event_engine/trace.h +22 -3
  1074. data/src/core/lib/event_engine/utils.cc +2 -2
  1075. data/src/core/lib/event_engine/utils.h +12 -4
  1076. data/src/core/lib/event_engine/windows/iocp.cc +39 -53
  1077. data/src/core/lib/event_engine/windows/iocp.h +7 -7
  1078. data/src/core/lib/event_engine/windows/win_socket.cc +69 -47
  1079. data/src/core/lib/event_engine/windows/win_socket.h +38 -29
  1080. data/src/core/lib/event_engine/windows/windows_endpoint.cc +379 -0
  1081. data/src/core/lib/event_engine/windows/windows_endpoint.h +120 -0
  1082. data/src/core/lib/event_engine/windows/windows_engine.cc +285 -33
  1083. data/src/core/lib/event_engine/windows/windows_engine.h +70 -26
  1084. data/src/core/lib/event_engine/windows/windows_listener.cc +370 -0
  1085. data/src/core/lib/event_engine/windows/windows_listener.h +156 -0
  1086. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +63 -0
  1087. data/src/core/lib/event_engine/work_queue/basic_work_queue.h +71 -0
  1088. data/src/core/lib/event_engine/work_queue/work_queue.h +62 -0
  1089. data/src/core/lib/experiments/config.cc +56 -17
  1090. data/src/core/lib/experiments/config.h +29 -3
  1091. data/src/core/lib/experiments/experiments.cc +92 -29
  1092. data/src/core/lib/experiments/experiments.h +101 -23
  1093. data/src/core/lib/gpr/alloc.cc +19 -17
  1094. data/src/core/lib/gpr/alloc.h +20 -20
  1095. data/src/core/lib/gpr/{log_android.cc → android/log.cc} +22 -20
  1096. data/src/core/lib/gpr/atm.cc +17 -17
  1097. data/src/core/lib/gpr/iphone/cpu.cc +44 -0
  1098. data/src/core/lib/gpr/{cpu_linux.cc → linux/cpu.cc} +28 -23
  1099. data/src/core/lib/gpr/{log_linux.cc → linux/log.cc} +24 -24
  1100. data/src/core/lib/gpr/log.cc +42 -47
  1101. data/src/core/lib/gpr/log_internal.h +55 -0
  1102. data/src/core/lib/gpr/{tmpfile_msys.cc → msys/tmpfile.cc} +21 -20
  1103. data/src/core/lib/gpr/{cpu_posix.cc → posix/cpu.cc} +23 -22
  1104. data/src/core/lib/gpr/{log_posix.cc → posix/log.cc} +20 -19
  1105. data/src/core/lib/gpr/{string_posix.cc → posix/string.cc} +24 -24
  1106. data/src/core/lib/gpr/{sync_posix.cc → posix/sync.cc} +23 -21
  1107. data/src/core/lib/gpr/{time_posix.cc → posix/time.cc} +40 -30
  1108. data/src/core/lib/gpr/{tmpfile_posix.cc → posix/tmpfile.cc} +22 -20
  1109. data/src/core/lib/gpr/spinlock.h +20 -20
  1110. data/src/core/lib/gpr/string.cc +25 -24
  1111. data/src/core/lib/gpr/string.h +61 -61
  1112. data/src/core/lib/gpr/sync.cc +25 -25
  1113. data/src/core/lib/gpr/sync_abseil.cc +37 -27
  1114. data/src/core/lib/gpr/time.cc +23 -21
  1115. data/src/core/lib/gpr/time_precise.cc +22 -22
  1116. data/src/core/lib/gpr/time_precise.h +20 -21
  1117. data/src/core/lib/gpr/tmpfile.h +24 -24
  1118. data/src/core/lib/gpr/useful.h +43 -30
  1119. data/src/core/{ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc → lib/gpr/windows/cpu.cc} +16 -11
  1120. data/src/core/lib/gpr/{log_windows.cc → windows/log.cc} +25 -24
  1121. data/src/core/lib/gpr/windows/string.cc +69 -0
  1122. data/src/core/lib/gpr/{string_util_windows.cc → windows/string_util.cc} +22 -22
  1123. data/src/core/lib/gpr/{sync_windows.cc → windows/sync.cc} +29 -27
  1124. data/src/core/lib/gpr/{time_windows.cc → windows/time.cc} +25 -22
  1125. data/src/core/lib/gpr/{tmpfile_windows.cc → windows/tmpfile.cc} +23 -22
  1126. data/src/core/lib/gpr/wrap_memcpy.cc +23 -23
  1127. data/src/core/lib/gprpp/atomic_utils.h +20 -20
  1128. data/src/core/lib/gprpp/bitset.h +27 -3
  1129. data/src/core/lib/gprpp/chunked_vector.h +3 -3
  1130. data/src/core/lib/gprpp/construct_destruct.h +3 -3
  1131. data/src/core/lib/gprpp/cpp_impl_of.h +3 -3
  1132. data/src/core/lib/gprpp/crash.cc +43 -0
  1133. data/src/core/lib/gprpp/crash.h +37 -0
  1134. data/src/core/lib/gprpp/debug_location.h +20 -23
  1135. data/src/core/lib/gprpp/dual_ref_counted.h +3 -3
  1136. data/src/core/lib/gprpp/env.h +23 -23
  1137. data/src/core/lib/gprpp/examine_stack.cc +17 -17
  1138. data/src/core/lib/gprpp/examine_stack.h +21 -21
  1139. data/src/core/lib/gprpp/fork.cc +49 -39
  1140. data/src/core/lib/gprpp/fork.h +29 -27
  1141. data/src/core/lib/gprpp/host_port.cc +28 -26
  1142. data/src/core/lib/gprpp/host_port.h +32 -31
  1143. data/src/core/lib/gprpp/{env_linux.cc → linux/env.cc} +21 -21
  1144. data/src/core/lib/gprpp/load_file.cc +75 -0
  1145. data/src/core/lib/gprpp/load_file.h +33 -0
  1146. data/src/core/lib/gprpp/manual_constructor.h +22 -21
  1147. data/src/core/lib/gprpp/match.h +3 -3
  1148. data/src/core/lib/gprpp/memory.h +21 -21
  1149. data/src/core/lib/gprpp/mpscq.cc +17 -17
  1150. data/src/core/lib/gprpp/mpscq.h +21 -21
  1151. data/src/core/lib/gprpp/no_destruct.h +4 -3
  1152. data/src/core/lib/gprpp/notification.h +3 -3
  1153. data/src/core/lib/gprpp/orphanable.h +25 -24
  1154. data/src/core/lib/gprpp/overload.h +3 -3
  1155. data/src/core/lib/gprpp/packed_table.h +3 -3
  1156. data/src/core/lib/gprpp/per_cpu.cc +33 -0
  1157. data/src/core/lib/gprpp/per_cpu.h +75 -0
  1158. data/src/core/lib/gprpp/posix/env.cc +47 -0
  1159. data/src/core/lib/gprpp/{stat_posix.cc → posix/stat.cc} +5 -4
  1160. data/src/core/lib/gprpp/{thd_posix.cc → posix/thd.cc} +75 -64
  1161. data/src/core/lib/gprpp/ref_counted.h +54 -55
  1162. data/src/core/lib/gprpp/ref_counted_ptr.h +22 -21
  1163. data/src/core/lib/gprpp/single_set_ptr.h +3 -3
  1164. data/src/core/lib/gprpp/sorted_pack.h +3 -3
  1165. data/src/core/lib/gprpp/stat.h +3 -3
  1166. data/src/core/lib/gprpp/status_helper.cc +6 -5
  1167. data/src/core/lib/gprpp/status_helper.h +4 -6
  1168. data/src/core/lib/gprpp/strerror.cc +43 -0
  1169. data/src/core/lib/gprpp/strerror.h +29 -0
  1170. data/src/core/lib/gprpp/sync.h +23 -23
  1171. data/src/core/lib/gprpp/table.h +4 -3
  1172. data/src/core/lib/gprpp/tchar.h +3 -3
  1173. data/src/core/lib/gprpp/thd.h +39 -23
  1174. data/src/core/lib/gprpp/time.cc +18 -10
  1175. data/src/core/lib/gprpp/time.h +16 -6
  1176. data/src/core/lib/gprpp/time_averaged_stats.cc +20 -20
  1177. data/src/core/lib/gprpp/time_averaged_stats.h +50 -50
  1178. data/src/core/lib/gprpp/time_util.h +4 -4
  1179. data/src/core/lib/gprpp/unique_type_name.h +21 -21
  1180. data/src/core/lib/gprpp/validation_errors.cc +8 -3
  1181. data/src/core/lib/gprpp/validation_errors.h +37 -13
  1182. data/src/core/lib/gprpp/{env_windows.cc → windows/env.cc} +18 -18
  1183. data/src/core/lib/gprpp/{stat_windows.cc → windows/stat.cc} +4 -2
  1184. data/src/core/lib/gprpp/{thd_windows.cc → windows/thd.cc} +28 -28
  1185. data/src/core/lib/gprpp/work_serializer.h +3 -3
  1186. data/src/core/lib/handshaker/proxy_mapper.h +21 -21
  1187. data/src/core/lib/handshaker/proxy_mapper_registry.cc +17 -17
  1188. data/src/core/lib/handshaker/proxy_mapper_registry.h +21 -21
  1189. data/src/core/lib/http/format_request.cc +19 -18
  1190. data/src/core/lib/http/format_request.h +20 -20
  1191. data/src/core/lib/http/httpcli.cc +58 -61
  1192. data/src/core/lib/http/httpcli.h +29 -29
  1193. data/src/core/lib/http/httpcli_security_connector.cc +22 -25
  1194. data/src/core/lib/http/httpcli_ssl_credentials.h +3 -3
  1195. data/src/core/lib/http/parser.cc +76 -87
  1196. data/src/core/lib/http/parser.h +35 -35
  1197. data/src/core/lib/iomgr/block_annotate.h +23 -23
  1198. data/src/core/lib/iomgr/buffer_list.cc +156 -136
  1199. data/src/core/lib/iomgr/buffer_list.h +122 -101
  1200. data/src/core/lib/iomgr/call_combiner.cc +32 -30
  1201. data/src/core/lib/iomgr/call_combiner.h +26 -27
  1202. data/src/core/lib/iomgr/cfstream_handle.cc +34 -37
  1203. data/src/core/lib/iomgr/cfstream_handle.h +25 -25
  1204. data/src/core/lib/iomgr/closure.cc +27 -0
  1205. data/src/core/lib/iomgr/closure.h +95 -48
  1206. data/src/core/lib/iomgr/combiner.cc +20 -19
  1207. data/src/core/lib/iomgr/combiner.h +20 -20
  1208. data/src/core/lib/iomgr/dualstack_socket_posix.cc +21 -21
  1209. data/src/core/lib/iomgr/dynamic_annotations.h +22 -22
  1210. data/src/core/lib/iomgr/endpoint.cc +17 -17
  1211. data/src/core/lib/iomgr/endpoint.h +49 -49
  1212. data/src/core/lib/iomgr/endpoint_cfstream.cc +58 -53
  1213. data/src/core/lib/iomgr/endpoint_cfstream.h +32 -32
  1214. data/src/core/lib/iomgr/endpoint_pair.h +22 -22
  1215. data/src/core/lib/iomgr/endpoint_pair_posix.cc +22 -21
  1216. data/src/core/lib/iomgr/endpoint_pair_windows.cc +29 -20
  1217. data/src/core/lib/iomgr/error.cc +49 -61
  1218. data/src/core/lib/iomgr/error.h +45 -176
  1219. data/src/core/lib/iomgr/error_cfstream.cc +18 -18
  1220. data/src/core/lib/iomgr/error_cfstream.h +21 -21
  1221. data/src/core/lib/iomgr/ev_apple.cc +33 -33
  1222. data/src/core/lib/iomgr/ev_apple.h +21 -21
  1223. data/src/core/lib/iomgr/ev_epoll1_linux.cc +218 -198
  1224. data/src/core/lib/iomgr/ev_epoll1_linux.h +20 -20
  1225. data/src/core/lib/iomgr/ev_poll_posix.cc +212 -205
  1226. data/src/core/lib/iomgr/ev_poll_posix.h +20 -20
  1227. data/src/core/lib/iomgr/ev_posix.cc +47 -79
  1228. data/src/core/lib/iomgr/ev_posix.h +88 -87
  1229. data/src/core/lib/iomgr/ev_windows.cc +18 -18
  1230. data/src/core/lib/iomgr/event_engine_shims/closure.cc +62 -0
  1231. data/src/core/lib/{event_engine/executor/threaded_executor.h → iomgr/event_engine_shims/closure.h} +11 -16
  1232. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +471 -0
  1233. data/src/core/lib/iomgr/event_engine_shims/endpoint.h +43 -0
  1234. data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +91 -0
  1235. data/src/core/lib/iomgr/event_engine_shims/tcp_client.h +44 -0
  1236. data/src/core/lib/iomgr/exec_ctx.cc +34 -34
  1237. data/src/core/lib/iomgr/exec_ctx.h +144 -144
  1238. data/src/core/lib/iomgr/executor.cc +21 -21
  1239. data/src/core/lib/iomgr/executor.h +27 -27
  1240. data/src/core/lib/iomgr/fork_posix.cc +29 -26
  1241. data/src/core/lib/iomgr/fork_windows.cc +21 -21
  1242. data/src/core/lib/iomgr/gethostname.h +20 -20
  1243. data/src/core/lib/iomgr/gethostname_fallback.cc +17 -17
  1244. data/src/core/lib/iomgr/gethostname_host_name_max.cc +17 -17
  1245. data/src/core/lib/iomgr/gethostname_sysconf.cc +17 -17
  1246. data/src/core/lib/iomgr/grpc_if_nametoindex.h +22 -22
  1247. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +20 -19
  1248. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +20 -19
  1249. data/src/core/lib/iomgr/internal_errqueue.cc +4 -2
  1250. data/src/core/lib/iomgr/internal_errqueue.h +83 -83
  1251. data/src/core/lib/iomgr/iocp_windows.cc +46 -24
  1252. data/src/core/lib/iomgr/iocp_windows.h +32 -21
  1253. data/src/core/lib/iomgr/iomgr.cc +23 -26
  1254. data/src/core/lib/iomgr/iomgr.h +35 -35
  1255. data/src/core/lib/iomgr/iomgr_fwd.h +3 -3
  1256. data/src/core/lib/iomgr/iomgr_internal.cc +17 -17
  1257. data/src/core/lib/iomgr/iomgr_internal.h +28 -28
  1258. data/src/core/lib/iomgr/iomgr_posix.cc +20 -20
  1259. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +21 -20
  1260. data/src/core/lib/iomgr/iomgr_windows.cc +32 -24
  1261. data/src/core/lib/iomgr/load_file.cc +24 -27
  1262. data/src/core/lib/iomgr/load_file.h +22 -22
  1263. data/src/core/lib/iomgr/lockfree_event.cc +114 -114
  1264. data/src/core/lib/iomgr/lockfree_event.h +23 -23
  1265. data/src/core/lib/iomgr/nameser.h +86 -86
  1266. data/src/core/lib/iomgr/polling_entity.cc +25 -21
  1267. data/src/core/lib/iomgr/polling_entity.h +29 -29
  1268. data/src/core/lib/iomgr/pollset.cc +17 -17
  1269. data/src/core/lib/iomgr/pollset.h +54 -54
  1270. data/src/core/lib/iomgr/pollset_set.cc +17 -17
  1271. data/src/core/lib/iomgr/pollset_set.h +25 -25
  1272. data/src/core/lib/iomgr/pollset_set_windows.cc +27 -27
  1273. data/src/core/lib/iomgr/pollset_set_windows.h +20 -20
  1274. data/src/core/lib/iomgr/pollset_windows.cc +33 -32
  1275. data/src/core/lib/iomgr/pollset_windows.h +24 -24
  1276. data/src/core/lib/iomgr/port.h +31 -31
  1277. data/src/core/lib/iomgr/python_util.h +24 -24
  1278. data/src/core/lib/iomgr/resolve_address.cc +26 -20
  1279. data/src/core/lib/iomgr/resolve_address.h +24 -25
  1280. data/src/core/lib/iomgr/resolve_address_impl.h +4 -4
  1281. data/src/core/lib/iomgr/resolve_address_posix.cc +35 -45
  1282. data/src/core/lib/iomgr/resolve_address_posix.h +4 -5
  1283. data/src/core/lib/iomgr/resolve_address_windows.cc +18 -20
  1284. data/src/core/lib/iomgr/resolve_address_windows.h +4 -5
  1285. data/src/core/lib/iomgr/resolved_address.h +3 -3
  1286. data/src/core/lib/iomgr/sockaddr.h +23 -23
  1287. data/src/core/lib/iomgr/sockaddr_posix.h +21 -21
  1288. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +18 -17
  1289. data/src/core/lib/iomgr/sockaddr_windows.h +21 -21
  1290. data/src/core/lib/iomgr/socket_factory_posix.cc +18 -18
  1291. data/src/core/lib/iomgr/socket_factory_posix.h +32 -32
  1292. data/src/core/lib/iomgr/socket_mutator.cc +19 -18
  1293. data/src/core/lib/iomgr/socket_mutator.h +39 -39
  1294. data/src/core/lib/iomgr/socket_utils.h +27 -27
  1295. data/src/core/lib/iomgr/socket_utils_common_posix.cc +87 -70
  1296. data/src/core/lib/iomgr/socket_utils_linux.cc +18 -17
  1297. data/src/core/lib/iomgr/socket_utils_posix.cc +25 -20
  1298. data/src/core/lib/iomgr/socket_utils_posix.h +84 -81
  1299. data/src/core/lib/iomgr/socket_utils_windows.cc +20 -19
  1300. data/src/core/lib/iomgr/socket_windows.cc +97 -42
  1301. data/src/core/lib/iomgr/socket_windows.h +68 -61
  1302. data/src/core/lib/iomgr/systemd_utils.cc +116 -0
  1303. data/src/core/lib/iomgr/systemd_utils.h +33 -0
  1304. data/src/core/lib/iomgr/tcp_client.cc +17 -17
  1305. data/src/core/lib/iomgr/tcp_client.h +28 -28
  1306. data/src/core/lib/iomgr/tcp_client_cfstream.cc +39 -31
  1307. data/src/core/lib/iomgr/tcp_client_posix.cc +86 -73
  1308. data/src/core/lib/iomgr/tcp_client_posix.h +45 -45
  1309. data/src/core/lib/iomgr/tcp_client_windows.cc +51 -42
  1310. data/src/core/lib/iomgr/tcp_posix.cc +270 -301
  1311. data/src/core/lib/iomgr/tcp_posix.h +29 -29
  1312. data/src/core/lib/iomgr/tcp_server.cc +30 -22
  1313. data/src/core/lib/iomgr/tcp_server.h +71 -65
  1314. data/src/core/lib/iomgr/tcp_server_posix.cc +373 -98
  1315. data/src/core/lib/iomgr/tcp_server_utils_posix.h +67 -54
  1316. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +90 -55
  1317. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +40 -40
  1318. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +19 -19
  1319. data/src/core/lib/iomgr/tcp_server_windows.cc +277 -119
  1320. data/src/core/lib/iomgr/tcp_windows.cc +121 -101
  1321. data/src/core/lib/iomgr/tcp_windows.h +34 -34
  1322. data/src/core/lib/iomgr/timer.cc +17 -17
  1323. data/src/core/lib/iomgr/timer.h +68 -68
  1324. data/src/core/lib/iomgr/timer_generic.cc +132 -138
  1325. data/src/core/lib/iomgr/timer_generic.h +21 -21
  1326. data/src/core/lib/iomgr/timer_heap.cc +25 -25
  1327. data/src/core/lib/iomgr/timer_heap.h +22 -22
  1328. data/src/core/lib/iomgr/timer_manager.cc +30 -29
  1329. data/src/core/lib/iomgr/timer_manager.h +27 -27
  1330. data/src/core/lib/iomgr/unix_sockets_posix.cc +20 -21
  1331. data/src/core/lib/iomgr/unix_sockets_posix.h +21 -21
  1332. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +19 -17
  1333. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +23 -21
  1334. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +23 -23
  1335. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +29 -26
  1336. data/src/core/lib/iomgr/wakeup_fd_pipe.h +20 -20
  1337. data/src/core/lib/iomgr/wakeup_fd_posix.cc +18 -18
  1338. data/src/core/lib/iomgr/wakeup_fd_posix.h +52 -52
  1339. data/src/core/lib/json/json.h +5 -221
  1340. data/src/core/lib/json/json_args.h +3 -3
  1341. data/src/core/lib/json/json_channel_args.h +42 -0
  1342. data/src/core/lib/json/json_object_loader.cc +39 -25
  1343. data/src/core/lib/json/json_object_loader.h +69 -21
  1344. data/src/core/lib/json/json_reader.cc +98 -70
  1345. data/src/core/lib/json/json_reader.h +34 -0
  1346. data/src/core/lib/json/json_util.cc +14 -19
  1347. data/src/core/lib/json/json_util.h +12 -11
  1348. data/src/core/lib/json/json_writer.cc +80 -81
  1349. data/src/core/{ext/xds/xds_resource_type.cc → lib/json/json_writer.h} +11 -11
  1350. data/src/core/lib/load_balancing/lb_policy.cc +36 -31
  1351. data/src/core/lib/load_balancing/lb_policy.h +32 -10
  1352. data/src/core/lib/load_balancing/lb_policy_factory.h +3 -3
  1353. data/src/core/lib/load_balancing/lb_policy_registry.cc +10 -8
  1354. data/src/core/lib/load_balancing/lb_policy_registry.h +3 -3
  1355. data/src/core/lib/load_balancing/subchannel_interface.h +9 -14
  1356. data/src/core/lib/matchers/matchers.cc +10 -9
  1357. data/src/core/lib/matchers/matchers.h +5 -4
  1358. data/src/core/lib/promise/activity.cc +43 -6
  1359. data/src/core/lib/promise/activity.h +143 -79
  1360. data/src/core/lib/promise/arena_promise.h +84 -54
  1361. data/src/core/lib/promise/cancel_callback.h +77 -0
  1362. data/src/core/lib/promise/context.h +17 -9
  1363. data/src/core/lib/promise/detail/basic_join.h +197 -0
  1364. data/src/core/lib/promise/detail/basic_seq.h +20 -45
  1365. data/src/core/lib/promise/detail/promise_factory.h +67 -14
  1366. data/src/core/lib/promise/detail/promise_like.h +3 -3
  1367. data/src/core/lib/promise/detail/status.h +31 -3
  1368. data/src/core/lib/promise/detail/switch.h +1455 -0
  1369. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +23 -15
  1370. data/src/core/lib/promise/for_each.h +176 -0
  1371. data/src/core/lib/promise/if.h +204 -0
  1372. data/src/core/lib/promise/interceptor_list.h +329 -0
  1373. data/src/core/lib/promise/latch.h +197 -23
  1374. data/src/core/lib/promise/loop.h +22 -16
  1375. data/src/core/lib/promise/map.h +12 -6
  1376. data/src/core/lib/promise/party.cc +304 -0
  1377. data/src/core/lib/promise/party.h +508 -0
  1378. data/src/core/lib/promise/pipe.h +762 -0
  1379. data/src/core/lib/promise/poll.h +177 -11
  1380. data/src/core/lib/promise/prioritized_race.h +95 -0
  1381. data/src/core/lib/promise/promise.h +6 -7
  1382. data/src/core/lib/promise/race.h +6 -9
  1383. data/src/core/lib/promise/seq.h +7 -8
  1384. data/src/core/lib/promise/sleep.cc +7 -5
  1385. data/src/core/lib/promise/sleep.h +4 -5
  1386. data/src/core/lib/promise/trace.cc +20 -0
  1387. data/src/core/lib/promise/trace.h +24 -0
  1388. data/src/core/lib/promise/try_join.h +82 -0
  1389. data/src/core/lib/promise/try_seq.h +14 -16
  1390. data/src/core/lib/resolver/resolver.cc +17 -17
  1391. data/src/core/lib/resolver/resolver.h +3 -3
  1392. data/src/core/lib/resolver/resolver_factory.h +4 -4
  1393. data/src/core/lib/resolver/resolver_registry.cc +15 -0
  1394. data/src/core/lib/resolver/resolver_registry.h +3 -3
  1395. data/src/core/lib/resolver/server_address.cc +19 -25
  1396. data/src/core/lib/resolver/server_address.h +22 -30
  1397. data/src/core/lib/resource_quota/api.cc +0 -1
  1398. data/src/core/lib/resource_quota/api.h +4 -4
  1399. data/src/core/lib/resource_quota/arena.cc +82 -20
  1400. data/src/core/lib/resource_quota/arena.h +287 -22
  1401. data/src/core/lib/resource_quota/memory_quota.cc +141 -44
  1402. data/src/core/lib/resource_quota/memory_quota.h +87 -26
  1403. data/src/core/lib/resource_quota/periodic_update.h +3 -3
  1404. data/src/core/lib/resource_quota/resource_quota.h +4 -4
  1405. data/src/core/lib/resource_quota/thread_quota.h +3 -3
  1406. data/src/core/lib/resource_quota/trace.h +3 -3
  1407. data/src/core/lib/security/authorization/audit_logging.cc +98 -0
  1408. data/src/core/lib/security/authorization/audit_logging.h +73 -0
  1409. data/src/core/lib/security/authorization/authorization_engine.h +3 -3
  1410. data/src/core/lib/security/authorization/authorization_policy_provider.h +4 -4
  1411. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +0 -1
  1412. data/src/core/lib/security/authorization/evaluate_args.h +3 -3
  1413. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +47 -4
  1414. data/src/core/lib/security/authorization/grpc_authorization_engine.h +21 -4
  1415. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +4 -2
  1416. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +3 -3
  1417. data/src/core/lib/security/authorization/matchers.cc +25 -22
  1418. data/src/core/lib/security/authorization/matchers.h +3 -3
  1419. data/src/core/lib/security/authorization/rbac_policy.cc +39 -7
  1420. data/src/core/lib/security/authorization/rbac_policy.h +22 -5
  1421. data/src/core/lib/security/authorization/stdout_logger.cc +75 -0
  1422. data/src/core/lib/security/authorization/stdout_logger.h +61 -0
  1423. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +11 -7
  1424. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +8 -18
  1425. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +17 -11
  1426. data/src/core/lib/security/context/security_context.cc +22 -23
  1427. data/src/core/lib/security/context/security_context.h +43 -33
  1428. data/src/core/lib/security/credentials/alts/alts_credentials.cc +17 -17
  1429. data/src/core/lib/security/credentials/alts/alts_credentials.h +53 -53
  1430. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +19 -19
  1431. data/src/core/lib/security/credentials/alts/check_gcp_environment.h +43 -43
  1432. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +17 -17
  1433. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +18 -17
  1434. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +18 -17
  1435. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +19 -19
  1436. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +18 -18
  1437. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +38 -39
  1438. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +18 -18
  1439. data/src/core/lib/security/credentials/call_creds_util.h +3 -3
  1440. data/src/core/lib/security/credentials/channel_creds_registry.h +3 -3
  1441. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +3 -4
  1442. data/src/core/lib/security/credentials/composite/composite_credentials.cc +22 -22
  1443. data/src/core/lib/security/credentials/composite/composite_credentials.h +23 -24
  1444. data/src/core/lib/security/credentials/credentials.cc +19 -18
  1445. data/src/core/lib/security/credentials/credentials.h +37 -36
  1446. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +113 -108
  1447. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +4 -3
  1448. data/src/core/lib/security/credentials/external/aws_request_signer.cc +5 -3
  1449. data/src/core/lib/security/credentials/external/aws_request_signer.h +3 -3
  1450. data/src/core/lib/security/credentials/external/external_account_credentials.cc +105 -115
  1451. data/src/core/lib/security/credentials/external/external_account_credentials.h +3 -3
  1452. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +39 -41
  1453. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +3 -3
  1454. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +51 -52
  1455. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +3 -3
  1456. data/src/core/lib/security/credentials/fake/fake_credentials.cc +20 -19
  1457. data/src/core/lib/security/credentials/fake/fake_credentials.h +37 -38
  1458. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +17 -17
  1459. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +72 -126
  1460. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +21 -22
  1461. data/src/core/lib/security/credentials/iam/iam_credentials.cc +19 -17
  1462. data/src/core/lib/security/credentials/iam/iam_credentials.h +20 -20
  1463. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +3 -3
  1464. data/src/core/lib/security/credentials/jwt/json_token.cc +43 -41
  1465. data/src/core/lib/security/credentials/jwt/json_token.h +35 -35
  1466. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +27 -22
  1467. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +22 -22
  1468. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +115 -113
  1469. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +46 -46
  1470. data/src/core/lib/security/credentials/local/local_credentials.cc +17 -17
  1471. data/src/core/lib/security/credentials/local/local_credentials.h +23 -23
  1472. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +80 -80
  1473. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +24 -23
  1474. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +24 -23
  1475. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +25 -25
  1476. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +19 -20
  1477. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +20 -20
  1478. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +20 -28
  1479. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +7 -14
  1480. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +44 -44
  1481. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +5 -3
  1482. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +1 -1
  1483. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +3 -3
  1484. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +18 -18
  1485. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +3 -3
  1486. data/src/core/lib/security/credentials/tls/tls_credentials.cc +18 -19
  1487. data/src/core/lib/security/credentials/tls/tls_credentials.h +21 -21
  1488. data/src/core/lib/security/credentials/tls/tls_utils.h +3 -3
  1489. data/src/core/lib/security/credentials/xds/xds_credentials.cc +1 -2
  1490. data/src/core/lib/security/credentials/xds/xds_credentials.h +3 -3
  1491. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +33 -43
  1492. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +43 -44
  1493. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +33 -41
  1494. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +22 -23
  1495. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  1496. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +5 -10
  1497. data/src/core/lib/security/security_connector/load_system_roots.h +20 -20
  1498. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +18 -18
  1499. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +24 -31
  1500. data/src/core/lib/security/security_connector/load_system_roots_supported.h +22 -23
  1501. data/src/core/lib/security/security_connector/local/local_security_connector.cc +30 -34
  1502. data/src/core/lib/security/security_connector/local/local_security_connector.h +42 -43
  1503. data/src/core/lib/security/security_connector/security_connector.cc +17 -17
  1504. data/src/core/lib/security/security_connector/security_connector.h +35 -36
  1505. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +35 -39
  1506. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +40 -41
  1507. data/src/core/lib/security/security_connector/ssl_utils.cc +48 -64
  1508. data/src/core/lib/security/security_connector/ssl_utils.h +35 -35
  1509. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +54 -48
  1510. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +21 -21
  1511. data/src/core/lib/security/transport/auth_filters.h +45 -23
  1512. data/src/core/lib/security/transport/client_auth_filter.cc +21 -21
  1513. data/src/core/lib/security/transport/secure_endpoint.cc +58 -58
  1514. data/src/core/lib/security/transport/secure_endpoint.h +25 -25
  1515. data/src/core/lib/security/transport/security_handshaker.cc +79 -70
  1516. data/src/core/lib/security/transport/security_handshaker.h +22 -22
  1517. data/src/core/lib/security/transport/server_auth_filter.cc +160 -274
  1518. data/src/core/lib/security/transport/tsi_error.cc +23 -20
  1519. data/src/core/lib/security/transport/tsi_error.h +20 -20
  1520. data/src/core/lib/security/util/json_util.cc +27 -27
  1521. data/src/core/lib/security/util/json_util.h +20 -20
  1522. data/src/core/lib/service_config/service_config.h +4 -4
  1523. data/src/core/lib/service_config/service_config_call_data.h +54 -19
  1524. data/src/core/lib/service_config/service_config_impl.cc +118 -158
  1525. data/src/core/lib/service_config/service_config_impl.h +16 -19
  1526. data/src/core/lib/service_config/service_config_parser.cc +14 -31
  1527. data/src/core/lib/service_config/service_config_parser.h +16 -12
  1528. data/src/core/lib/slice/b64.cc +26 -26
  1529. data/src/core/lib/slice/b64.h +32 -32
  1530. data/src/core/lib/slice/percent_encoding.cc +17 -17
  1531. data/src/core/lib/slice/percent_encoding.h +28 -28
  1532. data/src/core/lib/slice/slice.cc +48 -42
  1533. data/src/core/lib/slice/slice.h +59 -18
  1534. data/src/core/lib/slice/slice_buffer.cc +63 -59
  1535. data/src/core/lib/slice/slice_buffer.h +35 -4
  1536. data/src/core/lib/slice/slice_internal.h +34 -42
  1537. data/src/core/lib/slice/slice_refcount.cc +3 -18
  1538. data/src/core/lib/slice/slice_refcount.h +53 -18
  1539. data/src/core/lib/slice/slice_string_helpers.cc +17 -17
  1540. data/src/core/lib/slice/slice_string_helpers.h +21 -21
  1541. data/src/core/lib/surface/api_trace.cc +17 -17
  1542. data/src/core/lib/surface/api_trace.h +25 -25
  1543. data/src/core/lib/surface/builtins.cc +2 -0
  1544. data/src/core/lib/surface/builtins.h +3 -3
  1545. data/src/core/lib/surface/byte_buffer.cc +22 -23
  1546. data/src/core/lib/surface/byte_buffer_reader.cc +23 -23
  1547. data/src/core/lib/surface/call.cc +2297 -535
  1548. data/src/core/lib/surface/call.h +123 -42
  1549. data/src/core/lib/surface/call_details.cc +20 -21
  1550. data/src/core/lib/surface/call_log_batch.cc +19 -18
  1551. data/src/core/lib/surface/call_test_only.h +33 -33
  1552. data/src/core/lib/surface/call_trace.cc +123 -0
  1553. data/src/core/{ext/filters/http/message_compress/message_decompress_filter.h → lib/surface/call_trace.h} +10 -12
  1554. data/src/core/lib/surface/channel.cc +62 -67
  1555. data/src/core/lib/surface/channel.h +43 -35
  1556. data/src/core/lib/surface/channel_init.cc +17 -17
  1557. data/src/core/lib/surface/channel_init.h +20 -20
  1558. data/src/core/lib/surface/channel_ping.cc +19 -19
  1559. data/src/core/lib/surface/channel_stack_type.cc +21 -17
  1560. data/src/core/lib/surface/channel_stack_type.h +22 -20
  1561. data/src/core/lib/surface/completion_queue.cc +182 -194
  1562. data/src/core/lib/surface/completion_queue.h +36 -36
  1563. data/src/core/lib/surface/completion_queue_factory.cc +28 -28
  1564. data/src/core/lib/surface/completion_queue_factory.h +22 -22
  1565. data/src/core/lib/surface/event_string.cc +18 -17
  1566. data/src/core/lib/surface/event_string.h +22 -22
  1567. data/src/core/lib/surface/init.cc +30 -59
  1568. data/src/core/lib/surface/init.h +20 -20
  1569. data/src/core/lib/surface/init_internally.cc +1 -0
  1570. data/src/core/lib/surface/init_internally.h +12 -3
  1571. data/src/core/lib/surface/lame_client.cc +31 -26
  1572. data/src/core/lib/surface/lame_client.h +21 -21
  1573. data/src/core/lib/surface/metadata_array.cc +17 -18
  1574. data/src/core/lib/surface/server.cc +363 -111
  1575. data/src/core/lib/surface/server.h +10 -9
  1576. data/src/core/lib/surface/validate_metadata.cc +60 -60
  1577. data/src/core/lib/surface/validate_metadata.h +30 -21
  1578. data/src/core/lib/surface/version.cc +21 -21
  1579. data/src/core/lib/transport/batch_builder.cc +182 -0
  1580. data/src/core/lib/transport/batch_builder.h +480 -0
  1581. data/src/core/lib/transport/bdp_estimator.cc +24 -24
  1582. data/src/core/lib/transport/bdp_estimator.h +31 -28
  1583. data/src/core/lib/transport/connectivity_state.cc +19 -19
  1584. data/src/core/lib/transport/connectivity_state.h +22 -22
  1585. data/src/core/lib/transport/custom_metadata.h +30 -0
  1586. data/src/core/lib/transport/error_utils.cc +51 -45
  1587. data/src/core/lib/transport/error_utils.h +24 -24
  1588. data/src/core/lib/transport/handshaker.cc +60 -46
  1589. data/src/core/lib/transport/handshaker.h +47 -42
  1590. data/src/core/lib/transport/handshaker_factory.h +47 -21
  1591. data/src/core/lib/transport/handshaker_registry.cc +25 -19
  1592. data/src/core/lib/transport/handshaker_registry.h +23 -24
  1593. data/src/core/lib/transport/http2_errors.h +22 -22
  1594. data/src/core/lib/transport/http_connect_handshaker.cc +40 -41
  1595. data/src/core/lib/transport/http_connect_handshaker.h +21 -21
  1596. data/src/core/lib/transport/metadata_batch.cc +24 -7
  1597. data/src/core/lib/transport/metadata_batch.h +193 -53
  1598. data/src/core/lib/transport/metadata_compression_traits.h +67 -0
  1599. data/src/core/lib/transport/parsed_metadata.cc +2 -6
  1600. data/src/core/lib/transport/parsed_metadata.h +23 -12
  1601. data/src/core/lib/transport/pid_controller.cc +20 -20
  1602. data/src/core/lib/transport/pid_controller.h +27 -27
  1603. data/src/core/lib/transport/simple_slice_based_metadata.h +48 -0
  1604. data/src/core/lib/transport/status_conversion.cc +22 -22
  1605. data/src/core/lib/transport/status_conversion.h +22 -22
  1606. data/src/core/lib/transport/tcp_connect_handshaker.cc +15 -21
  1607. data/src/core/lib/transport/tcp_connect_handshaker.h +3 -3
  1608. data/src/core/lib/transport/timeout_encoding.cc +28 -23
  1609. data/src/core/lib/transport/timeout_encoding.h +20 -20
  1610. data/src/core/lib/transport/transport.cc +113 -43
  1611. data/src/core/lib/transport/transport.h +275 -210
  1612. data/src/core/lib/transport/transport_fwd.h +3 -3
  1613. data/src/core/lib/transport/transport_impl.h +53 -46
  1614. data/src/core/lib/transport/transport_op_string.cc +75 -63
  1615. data/src/core/lib/uri/uri_parser.cc +1 -1
  1616. data/src/core/lib/uri/uri_parser.h +3 -3
  1617. data/src/core/plugin_registry/grpc_plugin_registry.cc +34 -35
  1618. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +9 -14
  1619. data/src/core/tsi/alts/crypt/aes_gcm.cc +20 -20
  1620. data/src/core/tsi/alts/crypt/gsec.cc +26 -26
  1621. data/src/core/tsi/alts/crypt/gsec.h +336 -336
  1622. data/src/core/tsi/alts/frame_protector/alts_counter.cc +23 -23
  1623. data/src/core/tsi/alts/frame_protector/alts_counter.h +68 -68
  1624. data/src/core/tsi/alts/frame_protector/alts_crypter.cc +19 -19
  1625. data/src/core/tsi/alts/frame_protector/alts_crypter.h +209 -209
  1626. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +73 -71
  1627. data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +40 -40
  1628. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +18 -18
  1629. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +82 -83
  1630. data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +22 -22
  1631. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +22 -22
  1632. data/src/core/tsi/alts/frame_protector/frame_handler.cc +26 -25
  1633. data/src/core/tsi/alts/frame_protector/frame_handler.h +169 -169
  1634. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +98 -80
  1635. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +107 -102
  1636. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +18 -17
  1637. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +43 -44
  1638. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +38 -37
  1639. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +60 -60
  1640. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +23 -23
  1641. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +21 -20
  1642. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +38 -38
  1643. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +19 -19
  1644. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +105 -104
  1645. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +45 -44
  1646. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +40 -41
  1647. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +38 -36
  1648. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +35 -36
  1649. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +67 -68
  1650. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +32 -31
  1651. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +55 -56
  1652. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +54 -53
  1653. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +141 -142
  1654. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +58 -57
  1655. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +43 -44
  1656. data/src/core/tsi/fake_transport_security.cc +80 -79
  1657. data/src/core/tsi/fake_transport_security.h +33 -33
  1658. data/src/core/tsi/local_transport_security.cc +34 -33
  1659. data/src/core/tsi/local_transport_security.h +33 -33
  1660. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +9 -4
  1661. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +3 -3
  1662. data/src/core/tsi/ssl/session_cache/ssl_session.h +21 -21
  1663. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +19 -19
  1664. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +18 -17
  1665. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +22 -22
  1666. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +25 -20
  1667. data/src/core/tsi/ssl_transport_security.cc +256 -349
  1668. data/src/core/tsi/ssl_transport_security.h +206 -203
  1669. data/src/core/tsi/ssl_transport_security_utils.cc +250 -0
  1670. data/src/core/tsi/ssl_transport_security_utils.h +147 -0
  1671. data/src/core/tsi/ssl_types.h +27 -27
  1672. data/src/core/tsi/transport_security.cc +26 -26
  1673. data/src/core/tsi/transport_security.h +47 -47
  1674. data/src/core/tsi/transport_security_grpc.cc +20 -20
  1675. data/src/core/tsi/transport_security_grpc.h +41 -41
  1676. data/src/core/tsi/transport_security_interface.h +333 -333
  1677. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.clang +2 -0
  1678. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.gcc +7 -0
  1679. data/src/ruby/ext/grpc/ext-export.clang +0 -1
  1680. data/src/ruby/ext/grpc/ext-export.gcc +1 -2
  1681. data/src/ruby/ext/grpc/extconf.rb +55 -11
  1682. data/src/ruby/ext/grpc/rb_call.c +1 -0
  1683. data/src/ruby/ext/grpc/rb_channel.c +1 -0
  1684. data/src/ruby/ext/grpc/rb_channel_args.c +1 -0
  1685. data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
  1686. data/src/ruby/ext/grpc/rb_grpc.c +1 -0
  1687. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +38 -38
  1688. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +59 -59
  1689. data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
  1690. data/src/ruby/lib/grpc/version.rb +1 -1
  1691. data/src/ruby/pb/generate_proto_ruby.sh +0 -6
  1692. data/src/ruby/spec/channel_spec.rb +0 -43
  1693. data/src/ruby/spec/client_server_spec.rb +20 -8
  1694. data/src/ruby/spec/generic/active_call_spec.rb +12 -3
  1695. data/third_party/abseil-cpp/absl/algorithm/container.h +56 -57
  1696. data/third_party/abseil-cpp/absl/base/attributes.h +39 -19
  1697. data/third_party/abseil-cpp/absl/base/config.h +45 -4
  1698. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +3 -18
  1699. data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +55 -0
  1700. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +2 -1
  1701. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +3 -3
  1702. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +2 -2
  1703. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +1 -1
  1704. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +10 -6
  1705. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +23 -24
  1706. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -3
  1707. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +2 -6
  1708. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +4 -1
  1709. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +4 -4
  1710. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +14 -10
  1711. data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +9 -0
  1712. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -0
  1713. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -40
  1714. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +62 -0
  1715. data/third_party/abseil-cpp/absl/base/macros.h +4 -21
  1716. data/third_party/abseil-cpp/absl/base/optimization.h +58 -6
  1717. data/third_party/abseil-cpp/absl/base/options.h +1 -7
  1718. data/third_party/abseil-cpp/absl/base/policy_checks.h +15 -13
  1719. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  1720. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  1721. data/third_party/abseil-cpp/absl/container/fixed_array.h +7 -5
  1722. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +0 -7
  1723. data/third_party/abseil-cpp/absl/container/inlined_vector.h +66 -18
  1724. data/third_party/abseil-cpp/absl/container/internal/common.h +3 -3
  1725. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +132 -0
  1726. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +13 -1
  1727. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +4 -55
  1728. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +50 -5
  1729. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +14 -46
  1730. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +110 -32
  1731. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +155 -4
  1732. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +661 -341
  1733. data/third_party/abseil-cpp/absl/crc/crc32c.cc +99 -0
  1734. data/third_party/abseil-cpp/absl/crc/crc32c.h +183 -0
  1735. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +256 -0
  1736. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +57 -0
  1737. data/third_party/abseil-cpp/absl/crc/internal/crc.cc +468 -0
  1738. data/third_party/abseil-cpp/absl/crc/internal/crc.h +91 -0
  1739. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +269 -0
  1740. data/third_party/abseil-cpp/absl/crc/internal/crc32c.h +39 -0
  1741. data/third_party/abseil-cpp/absl/crc/internal/crc32c_inline.h +72 -0
  1742. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.cc +130 -0
  1743. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.h +159 -0
  1744. data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +179 -0
  1745. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy.h +119 -0
  1746. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_fallback.cc +75 -0
  1747. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_64.cc +434 -0
  1748. data/third_party/abseil-cpp/absl/crc/internal/crc_non_temporal_memcpy.cc +93 -0
  1749. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +725 -0
  1750. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +79 -0
  1751. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +180 -0
  1752. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +1 -1
  1753. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +67 -38
  1754. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +1 -1
  1755. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +12 -13
  1756. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +11 -9
  1757. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +1 -1
  1758. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +40 -85
  1759. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +5 -4
  1760. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +33 -8
  1761. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +3 -2
  1762. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +3 -2
  1763. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +118 -94
  1764. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +7 -6
  1765. data/third_party/abseil-cpp/absl/flags/commandlineflag.cc +34 -0
  1766. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +200 -0
  1767. data/third_party/abseil-cpp/absl/flags/config.h +68 -0
  1768. data/third_party/abseil-cpp/absl/flags/declare.h +73 -0
  1769. data/third_party/abseil-cpp/absl/flags/flag.cc +38 -0
  1770. data/third_party/abseil-cpp/absl/flags/flag.h +310 -0
  1771. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.cc +26 -0
  1772. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +68 -0
  1773. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +615 -0
  1774. data/third_party/abseil-cpp/absl/flags/internal/flag.h +800 -0
  1775. data/third_party/abseil-cpp/absl/flags/internal/flag_msvc.inc +116 -0
  1776. data/third_party/abseil-cpp/absl/flags/internal/path_util.h +62 -0
  1777. data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.cc +65 -0
  1778. data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.h +61 -0
  1779. data/third_party/abseil-cpp/absl/flags/internal/program_name.cc +60 -0
  1780. data/third_party/abseil-cpp/absl/flags/internal/program_name.h +50 -0
  1781. data/third_party/abseil-cpp/absl/flags/internal/registry.h +97 -0
  1782. data/third_party/abseil-cpp/absl/flags/internal/sequence_lock.h +187 -0
  1783. data/third_party/abseil-cpp/absl/flags/marshalling.cc +241 -0
  1784. data/third_party/abseil-cpp/absl/flags/marshalling.h +356 -0
  1785. data/third_party/abseil-cpp/absl/flags/reflection.cc +354 -0
  1786. data/third_party/abseil-cpp/absl/flags/reflection.h +90 -0
  1787. data/third_party/abseil-cpp/absl/flags/usage_config.cc +165 -0
  1788. data/third_party/abseil-cpp/absl/flags/usage_config.h +135 -0
  1789. data/third_party/abseil-cpp/absl/functional/any_invocable.h +5 -2
  1790. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +47 -26
  1791. data/third_party/abseil-cpp/absl/hash/internal/city.cc +10 -10
  1792. data/third_party/abseil-cpp/absl/hash/internal/hash.h +18 -4
  1793. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +3 -14
  1794. data/third_party/abseil-cpp/absl/memory/memory.h +26 -447
  1795. data/third_party/abseil-cpp/absl/meta/type_traits.h +104 -12
  1796. data/third_party/abseil-cpp/absl/numeric/bits.h +2 -3
  1797. data/third_party/abseil-cpp/absl/numeric/int128.cc +10 -8
  1798. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +14 -6
  1799. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
  1800. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +1 -1
  1801. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +2 -23
  1802. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +9 -9
  1803. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +2 -2
  1804. data/third_party/abseil-cpp/absl/random/random.h +6 -6
  1805. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +1 -0
  1806. data/third_party/abseil-cpp/absl/status/status.cc +19 -12
  1807. data/third_party/abseil-cpp/absl/status/status.h +2 -2
  1808. data/third_party/abseil-cpp/absl/strings/ascii.cc +5 -5
  1809. data/third_party/abseil-cpp/absl/strings/charconv.cc +534 -96
  1810. data/third_party/abseil-cpp/absl/strings/cord.cc +92 -40
  1811. data/third_party/abseil-cpp/absl/strings/cord.h +71 -80
  1812. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +8 -5
  1813. data/third_party/abseil-cpp/absl/strings/escaping.cc +73 -62
  1814. data/third_party/abseil-cpp/absl/strings/escaping.h +24 -19
  1815. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +14 -12
  1816. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +4 -4
  1817. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
  1818. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +330 -70
  1819. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +8 -4
  1820. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +26 -14
  1821. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +5 -5
  1822. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +9 -7
  1823. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +5 -4
  1824. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +7 -15
  1825. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +3 -3
  1826. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +8 -5
  1827. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +7 -7
  1828. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +4 -4
  1829. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +93 -0
  1830. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +34 -0
  1831. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +12 -10
  1832. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +7 -9
  1833. data/third_party/abseil-cpp/absl/strings/internal/has_absl_stringify.h +55 -0
  1834. data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +9 -6
  1835. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +14 -7
  1836. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +35 -10
  1837. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +113 -46
  1838. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +126 -29
  1839. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -2
  1840. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +4 -3
  1841. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +49 -287
  1842. data/third_party/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +351 -0
  1843. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +2 -1
  1844. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +4 -2
  1845. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +215 -181
  1846. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +10 -209
  1847. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +10 -101
  1848. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -1
  1849. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.cc +28 -0
  1850. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +57 -0
  1851. data/third_party/abseil-cpp/absl/strings/numbers.cc +34 -31
  1852. data/third_party/abseil-cpp/absl/strings/str_cat.cc +9 -6
  1853. data/third_party/abseil-cpp/absl/strings/str_cat.h +50 -3
  1854. data/third_party/abseil-cpp/absl/strings/str_format.h +71 -9
  1855. data/third_party/abseil-cpp/absl/strings/string_view.cc +6 -6
  1856. data/third_party/abseil-cpp/absl/strings/string_view.h +3 -10
  1857. data/third_party/abseil-cpp/absl/strings/substitute.cc +8 -6
  1858. data/third_party/abseil-cpp/absl/strings/substitute.h +46 -20
  1859. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +20 -17
  1860. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +37 -31
  1861. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +22 -8
  1862. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +104 -55
  1863. data/third_party/abseil-cpp/absl/synchronization/mutex.h +85 -46
  1864. data/third_party/abseil-cpp/absl/synchronization/notification.cc +0 -1
  1865. data/third_party/abseil-cpp/absl/synchronization/notification.h +0 -1
  1866. data/third_party/abseil-cpp/absl/time/civil_time.cc +26 -0
  1867. data/third_party/abseil-cpp/absl/time/civil_time.h +25 -0
  1868. data/third_party/abseil-cpp/absl/time/clock.cc +17 -11
  1869. data/third_party/abseil-cpp/absl/time/duration.cc +7 -7
  1870. data/third_party/abseil-cpp/absl/time/format.cc +2 -1
  1871. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1 -1
  1872. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +26 -5
  1873. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +7 -6
  1874. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +36 -35
  1875. data/third_party/abseil-cpp/absl/time/time.cc +2 -2
  1876. data/third_party/abseil-cpp/absl/time/time.h +253 -158
  1877. data/third_party/abseil-cpp/absl/types/internal/span.h +30 -19
  1878. data/third_party/abseil-cpp/absl/types/internal/variant.h +28 -40
  1879. data/third_party/abseil-cpp/absl/types/span.h +29 -7
  1880. data/third_party/boringssl-with-bazel/err_data.c +728 -712
  1881. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +177 -177
  1882. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +28 -55
  1883. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +21 -23
  1884. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c +20 -23
  1885. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +66 -185
  1886. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c +18 -21
  1887. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +356 -311
  1888. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +177 -196
  1889. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +146 -210
  1890. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +6 -9
  1891. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strex.c +346 -526
  1892. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +110 -131
  1893. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +130 -116
  1894. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +93 -60
  1895. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +93 -181
  1896. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +242 -305
  1897. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +41 -18
  1898. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +30 -33
  1899. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +36 -33
  1900. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +29 -26
  1901. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +135 -90
  1902. data/third_party/boringssl-with-bazel/src/crypto/asn1/posix_time.c +230 -0
  1903. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +797 -793
  1904. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +529 -526
  1905. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +114 -135
  1906. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +201 -207
  1907. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +21 -26
  1908. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +55 -68
  1909. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +2 -4
  1910. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +17 -11
  1911. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +37 -51
  1912. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +15 -9
  1913. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +13 -9
  1914. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +22 -19
  1915. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +5 -5
  1916. data/third_party/boringssl-with-bazel/src/crypto/bio/printf.c +0 -13
  1917. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -6
  1918. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +2 -0
  1919. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +40 -27
  1920. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c +10 -23
  1921. data/third_party/boringssl-with-bazel/src/crypto/buf/buf.c +2 -6
  1922. data/third_party/boringssl-with-bazel/src/crypto/bytestring/asn1_compat.c +2 -1
  1923. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +29 -28
  1924. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +161 -201
  1925. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +254 -39
  1926. data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +2 -2
  1927. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +0 -2
  1928. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +4 -4
  1929. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c +9 -8
  1930. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c +37 -75
  1931. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +8 -10
  1932. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/cipher → cipher_extra}/e_des.c +100 -78
  1933. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_null.c +1 -0
  1934. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc2.c +1 -0
  1935. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc4.c +2 -0
  1936. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +34 -37
  1937. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +22 -11
  1938. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +189 -13
  1939. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +6 -10
  1940. data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +0 -1
  1941. data/third_party/boringssl-with-bazel/src/crypto/conf/internal.h +12 -0
  1942. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_apple.c +74 -0
  1943. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_freebsd.c +62 -0
  1944. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-fuchsia.c → cpu_aarch64_fuchsia.c} +8 -7
  1945. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-linux.c → cpu_aarch64_linux.c} +6 -4
  1946. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.c +62 -0
  1947. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-win.c → cpu_aarch64_win.c} +4 -4
  1948. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm.c → cpu_arm.c} +1 -1
  1949. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_freebsd.c +55 -0
  1950. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm-linux.c → cpu_arm_linux.c} +11 -90
  1951. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm-linux.h → cpu_arm_linux.h} +0 -38
  1952. data/third_party/boringssl-with-bazel/src/crypto/{cpu-ppc64le.c → cpu_arm_openbsd.c} +10 -17
  1953. data/third_party/boringssl-with-bazel/src/crypto/{cpu-intel.c → cpu_intel.c} +1 -2
  1954. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +25 -20
  1955. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +22 -31
  1956. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +795 -795
  1957. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -5
  1958. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +17 -32
  1959. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/des → des}/des.c +232 -232
  1960. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/des → des}/internal.h +1 -1
  1961. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/dh_asn1.c +1 -0
  1962. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/params.c +232 -29
  1963. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +0 -3
  1964. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +43 -16
  1965. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +37 -7
  1966. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +3 -3
  1967. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +11 -36
  1968. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +229 -102
  1969. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +31 -7
  1970. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +1 -1
  1971. data/third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c +2 -4
  1972. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +83 -60
  1973. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +46 -12
  1974. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +3 -3
  1975. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c +25 -23
  1976. data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +43 -9
  1977. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +75 -44
  1978. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +19 -25
  1979. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +96 -45
  1980. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c +7 -8
  1981. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c +26 -23
  1982. data/third_party/boringssl-with-bazel/src/crypto/evp/p_hkdf.c +233 -0
  1983. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +6 -6
  1984. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c +42 -25
  1985. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c +4 -5
  1986. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c +35 -47
  1987. data/third_party/boringssl-with-bazel/src/crypto/evp/print.c +135 -244
  1988. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +2 -4
  1989. data/third_party/boringssl-with-bazel/src/crypto/evp/sign.c +15 -10
  1990. data/third_party/boringssl-with-bazel/src/crypto/ex_data.c +29 -15
  1991. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c +0 -2
  1992. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +13 -14
  1993. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +3 -13
  1994. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.c +13 -7
  1995. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +9 -7
  1996. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +36 -27
  1997. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +16 -26
  1998. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bytes.c +88 -60
  1999. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/cmp.c +4 -3
  2000. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/ctx.c +0 -2
  2001. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +1 -1
  2002. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div_extra.c +1 -1
  2003. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +99 -113
  2004. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +0 -1
  2005. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +5 -3
  2006. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/generic.c +112 -168
  2007. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +86 -31
  2008. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +11 -6
  2009. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +4 -5
  2010. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +4 -5
  2011. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +13 -0
  2012. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.c +13 -5
  2013. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c +19 -108
  2014. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h +19 -15
  2015. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.c +15 -16
  2016. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +22 -21
  2017. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/aead.c +3 -0
  2018. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +79 -19
  2019. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +102 -99
  2020. data/third_party/boringssl-with-bazel/src/crypto/{cipher_extra → fipsmodule/cipher}/e_aesccm.c +52 -46
  2021. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +39 -0
  2022. data/third_party/boringssl-with-bazel/src/crypto/{cmac → fipsmodule/cmac}/cmac.c +55 -11
  2023. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/check.c +2 -3
  2024. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +24 -6
  2025. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/internal.h +56 -0
  2026. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +5 -3
  2027. data/third_party/boringssl-with-bazel/src/crypto/{evp → fipsmodule/digestsign}/digestsign.c +51 -15
  2028. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +49 -49
  2029. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +92 -18
  2030. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +12 -12
  2031. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +108 -86
  2032. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +55 -25
  2033. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +55 -71
  2034. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64-table.h → p256-nistz-table.h} +1 -1
  2035. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64.c → p256-nistz.c} +72 -65
  2036. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64.h → p256-nistz.h} +5 -13
  2037. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +62 -51
  2038. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +1 -1
  2039. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +2 -8
  2040. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +12 -17
  2041. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +25 -26
  2042. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +13 -14
  2043. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +9 -1
  2044. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +44 -16
  2045. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +6 -0
  2046. data/third_party/boringssl-with-bazel/src/crypto/{hkdf → fipsmodule/hkdf}/hkdf.c +1 -1
  2047. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/hmac/hmac.c +52 -24
  2048. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +9 -23
  2049. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +1 -4
  2050. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +3 -8
  2051. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +170 -160
  2052. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +12 -14
  2053. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +69 -61
  2054. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -12
  2055. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +27 -28
  2056. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/ctrdrbg.c +31 -13
  2057. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +16 -8
  2058. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +3 -2
  2059. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +2 -2
  2060. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +9 -38
  2061. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +73 -59
  2062. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +22 -68
  2063. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +0 -1
  2064. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +43 -16
  2065. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +42 -314
  2066. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +244 -139
  2067. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +144 -205
  2068. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +41 -0
  2069. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +593 -421
  2070. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/internal.h +89 -0
  2071. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/service_indicator.c +334 -0
  2072. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +3 -12
  2073. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +2 -0
  2074. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +12 -8
  2075. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +14 -12
  2076. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +8 -0
  2077. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +52 -6
  2078. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +192 -18
  2079. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +65 -29
  2080. data/third_party/boringssl-with-bazel/src/crypto/internal.h +391 -18
  2081. data/third_party/boringssl-with-bazel/src/crypto/kyber/internal.h +91 -0
  2082. data/third_party/boringssl-with-bazel/src/crypto/kyber/keccak.c +204 -0
  2083. data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +833 -0
  2084. data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +13 -1
  2085. data/third_party/boringssl-with-bazel/src/crypto/mem.c +220 -13
  2086. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +19 -7
  2087. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +9 -4
  2088. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +81 -90
  2089. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +150 -245
  2090. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +633 -613
  2091. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c +17 -17
  2092. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +142 -149
  2093. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +99 -131
  2094. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_x509.c +0 -1
  2095. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_xaux.c +0 -1
  2096. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +0 -1
  2097. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +0 -3
  2098. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -66
  2099. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +31 -38
  2100. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +2 -1
  2101. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +18 -31
  2102. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +1 -0
  2103. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +8 -1
  2104. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +129 -5
  2105. data/third_party/boringssl-with-bazel/src/crypto/refcount_c11.c +0 -2
  2106. data/third_party/boringssl-with-bazel/src/crypto/{refcount_lock.c → refcount_no_threads.c} +6 -17
  2107. data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +89 -0
  2108. data/third_party/boringssl-with-bazel/src/crypto/{asn1/a_print.c → rsa_extra/internal.h} +15 -21
  2109. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_crypt.c +568 -0
  2110. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +8 -11
  2111. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +61 -27
  2112. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +10 -13
  2113. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +10 -13
  2114. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +128 -34
  2115. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +418 -133
  2116. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +116 -284
  2117. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +701 -87
  2118. data/third_party/boringssl-with-bazel/src/crypto/x509/a_digest.c +22 -24
  2119. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +63 -55
  2120. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +32 -34
  2121. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +32 -16
  2122. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +465 -704
  2123. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +285 -331
  2124. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +183 -178
  2125. data/third_party/boringssl-with-bazel/src/crypto/x509/i2d_pr.c +11 -15
  2126. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +68 -50
  2127. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +132 -151
  2128. data/third_party/boringssl-with-bazel/src/crypto/x509/policy.c +790 -0
  2129. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +95 -102
  2130. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +72 -57
  2131. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +12 -10
  2132. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +220 -254
  2133. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +52 -47
  2134. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +3 -4
  2135. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +136 -270
  2136. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +161 -327
  2137. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c +37 -33
  2138. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c +14 -31
  2139. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +55 -85
  2140. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +528 -616
  2141. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +129 -122
  2142. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +164 -181
  2143. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +132 -132
  2144. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +186 -203
  2145. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +64 -79
  2146. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +175 -160
  2147. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1864 -2050
  2148. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +380 -480
  2149. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +156 -163
  2150. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +266 -265
  2151. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +40 -15
  2152. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +59 -63
  2153. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +63 -67
  2154. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +114 -144
  2155. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +25 -26
  2156. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +329 -416
  2157. data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c +8 -7
  2158. data/third_party/boringssl-with-bazel/src/crypto/x509/x_info.c +30 -28
  2159. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +354 -370
  2160. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +37 -32
  2161. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +116 -119
  2162. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +36 -26
  2163. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +3 -4
  2164. data/third_party/boringssl-with-bazel/src/crypto/x509/x_spki.c +10 -13
  2165. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +3 -4
  2166. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +419 -261
  2167. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +113 -105
  2168. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +11 -15
  2169. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +79 -171
  2170. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +126 -131
  2171. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akeya.c +3 -4
  2172. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +465 -469
  2173. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bcons.c +56 -54
  2174. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +46 -49
  2175. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +294 -344
  2176. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +342 -365
  2177. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +429 -393
  2178. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +29 -24
  2179. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_extku.c +65 -59
  2180. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +125 -121
  2181. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +43 -42
  2182. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +120 -125
  2183. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_int.c +50 -20
  2184. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +228 -265
  2185. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +386 -389
  2186. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c +45 -32
  2187. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcons.c +57 -54
  2188. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pmaps.c +63 -67
  2189. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +130 -135
  2190. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +652 -691
  2191. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +90 -75
  2192. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1063 -1145
  2193. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +13 -11
  2194. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +28 -48
  2195. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +217 -191
  2196. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +26 -78
  2197. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +50 -14
  2198. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +29 -14
  2199. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -4
  2200. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +49 -17
  2201. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +99 -29
  2202. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +49 -60
  2203. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +2 -15
  2204. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +16 -200
  2205. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +34 -0
  2206. data/third_party/boringssl-with-bazel/src/include/openssl/ctrdrbg.h +82 -0
  2207. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +32 -30
  2208. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +7 -0
  2209. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +4 -0
  2210. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +48 -5
  2211. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +37 -8
  2212. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +1 -0
  2213. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +33 -5
  2214. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +25 -33
  2215. data/third_party/boringssl-with-bazel/src/include/openssl/ex_data.h +1 -1
  2216. data/third_party/boringssl-with-bazel/src/include/openssl/hmac.h +7 -0
  2217. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +69 -16
  2218. data/third_party/boringssl-with-bazel/src/include/openssl/kdf.h +91 -0
  2219. data/third_party/boringssl-with-bazel/src/include/openssl/kyber.h +128 -0
  2220. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +74 -8
  2221. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +7 -3
  2222. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +8 -1
  2223. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +1 -0
  2224. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +11 -18
  2225. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +8 -0
  2226. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +12 -1
  2227. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +98 -5
  2228. data/third_party/boringssl-with-bazel/src/include/openssl/service_indicator.h +96 -0
  2229. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +18 -21
  2230. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +285 -92
  2231. data/third_party/boringssl-with-bazel/src/include/openssl/ssl3.h +1 -6
  2232. data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +381 -287
  2233. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +9 -6
  2234. data/third_party/boringssl-with-bazel/src/include/openssl/time.h +41 -0
  2235. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +22 -7
  2236. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +57 -23
  2237. data/third_party/boringssl-with-bazel/src/include/openssl/type_check.h +0 -11
  2238. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +2075 -1407
  2239. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +242 -214
  2240. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +2 -2
  2241. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +6 -13
  2242. data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +17 -18
  2243. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +4 -5
  2244. data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +25 -33
  2245. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +45 -26
  2246. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +64 -35
  2247. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +198 -54
  2248. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +5 -5
  2249. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +53 -34
  2250. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +76 -44
  2251. data/third_party/boringssl-with-bazel/src/ssl/internal.h +200 -121
  2252. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +47 -12
  2253. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  2254. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +91 -75
  2255. data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +8 -10
  2256. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +47 -69
  2257. data/third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc +1 -0
  2258. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +5 -9
  2259. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +217 -226
  2260. data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +78 -101
  2261. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +106 -142
  2262. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +244 -35
  2263. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +167 -64
  2264. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +41 -32
  2265. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +27 -19
  2266. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +22 -6
  2267. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +15 -13
  2268. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +7 -44
  2269. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +7 -4
  2270. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +7 -23
  2271. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +25 -34
  2272. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +2 -2
  2273. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +16 -98
  2274. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +1241 -657
  2275. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +751 -398
  2276. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_msvc.h +1281 -0
  2277. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +3551 -1938
  2278. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +1272 -487
  2279. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64_msvc.h +2002 -0
  2280. data/third_party/cares/cares/include/ares.h +23 -1
  2281. data/third_party/cares/cares/{src/lib → include}/ares_nameser.h +9 -7
  2282. data/third_party/cares/cares/include/ares_rules.h +2 -2
  2283. data/third_party/cares/cares/include/ares_version.h +3 -3
  2284. data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +266 -0
  2285. data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +240 -0
  2286. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +49 -80
  2287. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +37 -43
  2288. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +12 -4
  2289. data/third_party/cares/cares/src/lib/ares_data.c +16 -0
  2290. data/third_party/cares/cares/src/lib/ares_data.h +7 -0
  2291. data/third_party/cares/cares/src/lib/ares_destroy.c +8 -0
  2292. data/third_party/cares/cares/src/lib/ares_expand_name.c +17 -6
  2293. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +1 -0
  2294. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +156 -78
  2295. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +130 -326
  2296. data/third_party/cares/cares/src/lib/ares_init.c +97 -485
  2297. data/third_party/cares/cares/src/lib/ares_library_init.c +2 -89
  2298. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +23 -142
  2299. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +22 -142
  2300. data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +184 -0
  2301. data/third_party/cares/cares/src/lib/ares_private.h +30 -16
  2302. data/third_party/cares/cares/src/lib/ares_process.c +55 -16
  2303. data/third_party/cares/cares/src/lib/ares_query.c +1 -35
  2304. data/third_party/cares/cares/src/lib/ares_rand.c +279 -0
  2305. data/third_party/cares/cares/src/lib/ares_send.c +5 -7
  2306. data/third_party/cares/cares/src/lib/ares_strdup.c +12 -19
  2307. data/third_party/cares/cares/src/lib/ares_strsplit.c +44 -128
  2308. data/third_party/cares/cares/src/lib/ares_strsplit.h +9 -10
  2309. data/third_party/cares/cares/src/lib/inet_net_pton.c +78 -116
  2310. data/third_party/cares/cares/src/tools/ares_getopt.h +53 -0
  2311. data/third_party/re2/re2/bitstate.cc +3 -3
  2312. data/third_party/re2/re2/dfa.cc +13 -13
  2313. data/third_party/re2/re2/nfa.cc +4 -4
  2314. data/third_party/re2/re2/onepass.cc +2 -2
  2315. data/third_party/re2/re2/prefilter_tree.cc +27 -59
  2316. data/third_party/re2/re2/prefilter_tree.h +3 -2
  2317. data/third_party/re2/re2/prog.cc +11 -2
  2318. data/third_party/re2/re2/prog.h +17 -5
  2319. data/third_party/re2/re2/re2.cc +6 -11
  2320. data/third_party/re2/re2/re2.h +1 -1
  2321. data/third_party/re2/re2/regexp.cc +1 -2
  2322. data/third_party/re2/re2/stringpiece.h +10 -7
  2323. data/third_party/re2/re2/unicode_casefold.cc +25 -11
  2324. data/third_party/re2/re2/unicode_groups.cc +319 -151
  2325. data/third_party/re2/re2/walker-inl.h +3 -2
  2326. data/third_party/re2/util/mutex.h +4 -4
  2327. data/third_party/upb/upb/{table_internal.h → alloc.h} +6 -6
  2328. data/third_party/upb/upb/arena.h +4 -193
  2329. data/third_party/upb/upb/array.h +4 -51
  2330. data/third_party/upb/upb/base/descriptor_constants.h +104 -0
  2331. data/third_party/upb/upb/base/log2.h +57 -0
  2332. data/third_party/upb/upb/{status.c → base/status.c} +2 -7
  2333. data/third_party/upb/upb/base/status.h +66 -0
  2334. data/third_party/upb/upb/base/string_view.h +75 -0
  2335. data/third_party/upb/upb/{array.c → collections/array.c} +67 -36
  2336. data/third_party/upb/upb/collections/array.h +85 -0
  2337. data/third_party/upb/upb/collections/array_internal.h +135 -0
  2338. data/third_party/upb/upb/{map.c → collections/map.c} +53 -26
  2339. data/third_party/upb/upb/collections/map.h +135 -0
  2340. data/third_party/upb/upb/collections/map_gencode_util.h +78 -0
  2341. data/third_party/upb/upb/collections/map_internal.h +170 -0
  2342. data/third_party/upb/upb/collections/map_sorter.c +166 -0
  2343. data/third_party/upb/upb/collections/map_sorter_internal.h +109 -0
  2344. data/third_party/upb/upb/{message_value.h → collections/message_value.h} +12 -13
  2345. data/third_party/upb/upb/decode.h +3 -62
  2346. data/third_party/upb/upb/def.h +4 -384
  2347. data/third_party/upb/upb/def.hpp +3 -411
  2348. data/third_party/upb/upb/encode.h +3 -48
  2349. data/third_party/upb/upb/extension_registry.h +3 -52
  2350. data/third_party/upb/upb/{table.c → hash/common.c} +52 -110
  2351. data/third_party/upb/upb/hash/common.h +199 -0
  2352. data/third_party/upb/upb/hash/int_table.h +102 -0
  2353. data/third_party/upb/upb/hash/str_table.h +161 -0
  2354. data/third_party/upb/upb/{json_decode.c → json/decode.c} +63 -98
  2355. data/third_party/upb/upb/json/decode.h +52 -0
  2356. data/third_party/upb/upb/{json_encode.c → json/encode.c} +69 -45
  2357. data/third_party/upb/upb/json/encode.h +70 -0
  2358. data/third_party/upb/upb/json_decode.h +4 -15
  2359. data/third_party/upb/upb/json_encode.h +4 -33
  2360. data/third_party/upb/upb/lex/atoi.c +68 -0
  2361. data/third_party/upb/upb/lex/atoi.h +53 -0
  2362. data/third_party/upb/upb/{upb.c → lex/round_trip.c} +2 -11
  2363. data/third_party/upb/upb/{internal/upb.h → lex/round_trip.h} +17 -30
  2364. data/third_party/upb/upb/lex/strtod.c +97 -0
  2365. data/third_party/upb/upb/lex/strtod.h +46 -0
  2366. data/third_party/upb/upb/lex/unicode.c +57 -0
  2367. data/third_party/upb/upb/lex/unicode.h +77 -0
  2368. data/third_party/upb/upb/map.h +4 -85
  2369. data/third_party/upb/upb/mem/alloc.c +47 -0
  2370. data/third_party/upb/upb/mem/alloc.h +98 -0
  2371. data/third_party/upb/upb/mem/arena.c +367 -0
  2372. data/third_party/upb/upb/mem/arena.h +160 -0
  2373. data/third_party/upb/upb/mem/arena_internal.h +114 -0
  2374. data/third_party/upb/upb/message/accessors.c +68 -0
  2375. data/third_party/upb/upb/message/accessors.h +379 -0
  2376. data/third_party/upb/upb/message/accessors_internal.h +325 -0
  2377. data/third_party/upb/upb/message/extension_internal.h +83 -0
  2378. data/third_party/upb/upb/message/internal.h +135 -0
  2379. data/third_party/upb/upb/message/message.c +180 -0
  2380. data/third_party/upb/upb/message/message.h +69 -0
  2381. data/third_party/upb/upb/mini_table/common.c +128 -0
  2382. data/third_party/upb/upb/mini_table/common.h +170 -0
  2383. data/third_party/upb/upb/mini_table/common_internal.h +111 -0
  2384. data/third_party/upb/upb/{mini_table.c → mini_table/decode.c} +513 -533
  2385. data/third_party/upb/upb/mini_table/decode.h +179 -0
  2386. data/third_party/upb/upb/mini_table/encode.c +300 -0
  2387. data/third_party/upb/upb/mini_table/encode_internal.h +111 -0
  2388. data/third_party/upb/upb/{mini_table.hpp → mini_table/encode_internal.hpp} +32 -8
  2389. data/third_party/upb/upb/mini_table/enum_internal.h +88 -0
  2390. data/third_party/upb/upb/mini_table/extension_internal.h +47 -0
  2391. data/third_party/upb/upb/{extension_registry.c → mini_table/extension_registry.c} +27 -24
  2392. data/third_party/upb/upb/mini_table/extension_registry.h +104 -0
  2393. data/third_party/upb/upb/mini_table/field_internal.h +192 -0
  2394. data/third_party/upb/upb/mini_table/file_internal.h +47 -0
  2395. data/third_party/upb/upb/mini_table/message_internal.h +136 -0
  2396. data/third_party/upb/upb/mini_table/sub_internal.h +38 -0
  2397. data/third_party/upb/upb/mini_table/types.h +40 -0
  2398. data/third_party/upb/upb/mini_table.h +4 -157
  2399. data/third_party/upb/upb/msg.h +3 -38
  2400. data/third_party/upb/upb/port/atomic.h +101 -0
  2401. data/third_party/upb/upb/{port_def.inc → port/def.inc} +94 -27
  2402. data/third_party/upb/upb/{port_undef.inc → port/undef.inc} +13 -3
  2403. data/third_party/upb/upb/{internal → port}/vsnprintf_compat.h +5 -7
  2404. data/third_party/upb/upb/reflection/common.h +67 -0
  2405. data/third_party/upb/upb/reflection/def.h +42 -0
  2406. data/third_party/upb/upb/reflection/def.hpp +610 -0
  2407. data/third_party/upb/upb/reflection/def_builder.c +357 -0
  2408. data/third_party/upb/upb/reflection/def_builder_internal.h +157 -0
  2409. data/third_party/upb/upb/reflection/def_pool.c +462 -0
  2410. data/third_party/upb/upb/reflection/def_pool.h +108 -0
  2411. data/third_party/upb/upb/reflection/def_pool_internal.h +77 -0
  2412. data/third_party/upb/upb/reflection/def_type.c +50 -0
  2413. data/third_party/upb/upb/reflection/def_type.h +81 -0
  2414. data/third_party/upb/upb/reflection/desc_state.c +53 -0
  2415. data/third_party/upb/upb/reflection/desc_state_internal.h +64 -0
  2416. data/third_party/upb/upb/reflection/enum_def.c +310 -0
  2417. data/third_party/upb/upb/reflection/enum_def.h +80 -0
  2418. data/third_party/upb/upb/reflection/enum_def_internal.h +56 -0
  2419. data/third_party/upb/upb/reflection/enum_reserved_range.c +84 -0
  2420. data/third_party/upb/upb/reflection/enum_reserved_range.h +51 -0
  2421. data/third_party/upb/upb/reflection/enum_reserved_range_internal.h +55 -0
  2422. data/third_party/upb/upb/reflection/enum_value_def.c +144 -0
  2423. data/third_party/upb/upb/reflection/enum_value_def.h +57 -0
  2424. data/third_party/upb/upb/reflection/enum_value_def_internal.h +57 -0
  2425. data/third_party/upb/upb/reflection/extension_range.c +93 -0
  2426. data/third_party/upb/upb/reflection/extension_range.h +55 -0
  2427. data/third_party/upb/upb/reflection/extension_range_internal.h +54 -0
  2428. data/third_party/upb/upb/reflection/field_def.c +930 -0
  2429. data/third_party/upb/upb/reflection/field_def.h +91 -0
  2430. data/third_party/upb/upb/reflection/field_def_internal.h +76 -0
  2431. data/third_party/upb/upb/reflection/file_def.c +370 -0
  2432. data/third_party/upb/upb/reflection/file_def.h +77 -0
  2433. data/third_party/upb/upb/reflection/file_def_internal.h +57 -0
  2434. data/third_party/upb/upb/reflection/message.c +233 -0
  2435. data/third_party/upb/upb/reflection/message.h +102 -0
  2436. data/third_party/upb/upb/reflection/message.hpp +37 -0
  2437. data/third_party/upb/upb/reflection/message_def.c +718 -0
  2438. data/third_party/upb/upb/reflection/message_def.h +174 -0
  2439. data/third_party/upb/upb/reflection/message_def_internal.h +63 -0
  2440. data/third_party/upb/upb/reflection/message_reserved_range.c +81 -0
  2441. data/third_party/upb/upb/reflection/message_reserved_range.h +51 -0
  2442. data/third_party/upb/upb/reflection/message_reserved_range_internal.h +55 -0
  2443. data/third_party/upb/upb/reflection/method_def.c +124 -0
  2444. data/third_party/upb/upb/reflection/method_def.h +59 -0
  2445. data/third_party/upb/upb/reflection/method_def_internal.h +53 -0
  2446. data/third_party/upb/upb/reflection/oneof_def.c +226 -0
  2447. data/third_party/upb/upb/reflection/oneof_def.h +66 -0
  2448. data/third_party/upb/upb/reflection/oneof_def_internal.h +57 -0
  2449. data/third_party/upb/upb/reflection/service_def.c +128 -0
  2450. data/third_party/upb/upb/reflection/service_def.h +60 -0
  2451. data/third_party/upb/upb/reflection/service_def_internal.h +53 -0
  2452. data/third_party/upb/upb/reflection.h +4 -78
  2453. data/third_party/upb/upb/reflection.hpp +3 -7
  2454. data/third_party/upb/upb/status.h +4 -34
  2455. data/third_party/upb/upb/{collections.h → string_view.h} +7 -7
  2456. data/third_party/upb/upb/{text_encode.c → text/encode.c} +74 -70
  2457. data/third_party/upb/upb/text/encode.h +69 -0
  2458. data/third_party/upb/upb/text_encode.h +4 -32
  2459. data/third_party/upb/upb/upb.h +6 -151
  2460. data/third_party/upb/upb/upb.hpp +10 -18
  2461. data/third_party/upb/upb/wire/common.h +44 -0
  2462. data/third_party/upb/upb/wire/common_internal.h +50 -0
  2463. data/third_party/upb/upb/wire/decode.c +1343 -0
  2464. data/third_party/upb/upb/wire/decode.h +108 -0
  2465. data/third_party/upb/upb/{decode_fast.c → wire/decode_fast.c} +184 -225
  2466. data/third_party/upb/upb/{decode_fast.h → wire/decode_fast.h} +21 -7
  2467. data/third_party/upb/upb/{internal/decode.h → wire/decode_internal.h} +44 -92
  2468. data/third_party/upb/upb/{encode.c → wire/encode.c} +114 -95
  2469. data/third_party/upb/upb/wire/encode.h +92 -0
  2470. data/third_party/upb/upb/wire/eps_copy_input_stream.c +39 -0
  2471. data/third_party/upb/upb/wire/eps_copy_input_stream.h +425 -0
  2472. data/third_party/upb/upb/wire/reader.c +67 -0
  2473. data/third_party/upb/upb/wire/reader.h +227 -0
  2474. data/third_party/upb/upb/wire/swap_internal.h +63 -0
  2475. data/third_party/upb/upb/wire/types.h +41 -0
  2476. data/third_party/{upb/third_party/utf8_range → utf8_range}/range2-neon.c +1 -1
  2477. data/third_party/{upb/third_party/utf8_range → utf8_range}/utf8_range.h +12 -0
  2478. data/third_party/zlib/compress.c +3 -3
  2479. data/third_party/zlib/crc32.c +21 -12
  2480. data/third_party/zlib/deflate.c +112 -106
  2481. data/third_party/zlib/deflate.h +2 -2
  2482. data/third_party/zlib/gzlib.c +1 -1
  2483. data/third_party/zlib/gzread.c +3 -5
  2484. data/third_party/zlib/gzwrite.c +1 -1
  2485. data/third_party/zlib/infback.c +10 -7
  2486. data/third_party/zlib/inflate.c +5 -2
  2487. data/third_party/zlib/inftrees.c +2 -2
  2488. data/third_party/zlib/inftrees.h +1 -1
  2489. data/third_party/zlib/trees.c +61 -62
  2490. data/third_party/zlib/uncompr.c +2 -2
  2491. data/third_party/zlib/zconf.h +16 -3
  2492. data/third_party/zlib/zlib.h +10 -10
  2493. data/third_party/zlib/zutil.c +9 -7
  2494. data/third_party/zlib/zutil.h +1 -0
  2495. metadata +509 -152
  2496. data/include/grpc/impl/codegen/gpr_slice.h +0 -71
  2497. data/src/core/ext/filters/client_channel/health/health_check_client.cc +0 -176
  2498. data/src/core/ext/filters/client_channel/health/health_check_client.h +0 -43
  2499. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +0 -30
  2500. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -188
  2501. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -187
  2502. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +0 -332
  2503. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -52
  2504. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -322
  2505. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +0 -62
  2506. data/src/core/ext/transport/chttp2/transport/context_list.cc +0 -71
  2507. data/src/core/ext/transport/chttp2/transport/context_list.h +0 -54
  2508. data/src/core/lib/event_engine/socket_notifier.h +0 -55
  2509. data/src/core/lib/event_engine/thread_pool.cc +0 -195
  2510. data/src/core/lib/event_engine/thread_pool.h +0 -114
  2511. data/src/core/lib/gpr/cpu_iphone.cc +0 -44
  2512. data/src/core/lib/gpr/cpu_windows.cc +0 -33
  2513. data/src/core/lib/gpr/murmur_hash.cc +0 -82
  2514. data/src/core/lib/gpr/murmur_hash.h +0 -29
  2515. data/src/core/lib/gpr/string_windows.cc +0 -69
  2516. data/src/core/lib/gpr/tls.h +0 -156
  2517. data/src/core/lib/gprpp/env_posix.cc +0 -47
  2518. data/src/core/lib/gprpp/global_config.h +0 -93
  2519. data/src/core/lib/gprpp/global_config_custom.h +0 -29
  2520. data/src/core/lib/gprpp/global_config_env.cc +0 -139
  2521. data/src/core/lib/gprpp/global_config_env.h +0 -133
  2522. data/src/core/lib/gprpp/global_config_generic.h +0 -40
  2523. data/src/core/lib/promise/call_push_pull.h +0 -148
  2524. data/src/core/lib/promise/intra_activity_waiter.h +0 -49
  2525. data/src/core/lib/security/security_connector/ssl_utils_config.cc +0 -32
  2526. data/src/core/lib/security/security_connector/ssl_utils_config.h +0 -30
  2527. data/src/core/lib/slice/slice_api.cc +0 -39
  2528. data/src/core/lib/slice/slice_buffer_api.cc +0 -35
  2529. data/src/core/lib/slice/slice_refcount_base.h +0 -60
  2530. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +0 -195
  2531. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c +0 -236
  2532. data/third_party/boringssl-with-bazel/src/crypto/asn1/charmap.h +0 -15
  2533. data/third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c +0 -206
  2534. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1-altivec.c +0 -361
  2535. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +0 -287
  2536. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +0 -132
  2537. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +0 -155
  2538. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +0 -131
  2539. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +0 -189
  2540. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +0 -843
  2541. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +0 -289
  2542. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcia.c +0 -57
  2543. data/third_party/cares/cares/src/lib/ares_library_init.h +0 -43
  2544. data/third_party/upb/upb/arena.c +0 -277
  2545. data/third_party/upb/upb/decode.c +0 -1221
  2546. data/third_party/upb/upb/def.c +0 -3269
  2547. data/third_party/upb/upb/internal/table.h +0 -385
  2548. data/third_party/upb/upb/msg.c +0 -368
  2549. data/third_party/upb/upb/msg_internal.h +0 -837
  2550. data/third_party/upb/upb/reflection.c +0 -323
  2551. /data/src/ruby/ext/grpc/{ext-export-truffleruby.clang → ext-export-truffleruby-with-ruby-abi-version.clang} +0 -0
  2552. /data/src/ruby/ext/grpc/{ext-export-truffleruby.gcc → ext-export-truffleruby-with-ruby-abi-version.gcc} +0 -0
  2553. /data/third_party/{upb/third_party/utf8_range → utf8_range}/naive.c +0 -0
  2554. /data/third_party/{upb/third_party/utf8_range → utf8_range}/range2-sse.c +0 -0
@@ -24,10 +24,11 @@
24
24
  #include <algorithm>
25
25
  #include <functional>
26
26
  #include <new>
27
- #include <set>
27
+ #include <type_traits>
28
+ #include <utility>
28
29
  #include <vector>
29
30
 
30
- #include "absl/memory/memory.h"
31
+ #include "absl/cleanup/cleanup.h"
31
32
  #include "absl/status/status.h"
32
33
  #include "absl/status/statusor.h"
33
34
  #include "absl/strings/cord.h"
@@ -38,21 +39,24 @@
38
39
  #include "absl/types/optional.h"
39
40
  #include "absl/types/variant.h"
40
41
 
41
- #include <grpc/impl/codegen/gpr_types.h>
42
+ #include <grpc/event_engine/event_engine.h>
42
43
  #include <grpc/slice.h>
43
44
  #include <grpc/status.h>
45
+ #include <grpc/support/json.h>
44
46
  #include <grpc/support/log.h>
45
47
  #include <grpc/support/string_util.h>
48
+ #include <grpc/support/time.h>
46
49
 
47
50
  #include "src/core/ext/filters/client_channel/backend_metric.h"
48
51
  #include "src/core/ext/filters/client_channel/backup_poller.h"
49
52
  #include "src/core/ext/filters/client_channel/client_channel_channelz.h"
53
+ #include "src/core/ext/filters/client_channel/client_channel_internal.h"
54
+ #include "src/core/ext/filters/client_channel/client_channel_service_config.h"
50
55
  #include "src/core/ext/filters/client_channel/config_selector.h"
51
56
  #include "src/core/ext/filters/client_channel/dynamic_filters.h"
52
57
  #include "src/core/ext/filters/client_channel/global_subchannel_pool.h"
53
58
  #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
54
59
  #include "src/core/ext/filters/client_channel/local_subchannel_pool.h"
55
- #include "src/core/ext/filters/client_channel/resolver_result_parsing.h"
56
60
  #include "src/core/ext/filters/client_channel/retry_filter.h"
57
61
  #include "src/core/ext/filters/client_channel/subchannel.h"
58
62
  #include "src/core/ext/filters/client_channel/subchannel_interface_internal.h"
@@ -65,7 +69,9 @@
65
69
  #include "src/core/lib/debug/trace.h"
66
70
  #include "src/core/lib/gpr/useful.h"
67
71
  #include "src/core/lib/gprpp/debug_location.h"
72
+ #include "src/core/lib/gprpp/status_helper.h"
68
73
  #include "src/core/lib/gprpp/sync.h"
74
+ #include "src/core/lib/gprpp/unique_type_name.h"
69
75
  #include "src/core/lib/gprpp/work_serializer.h"
70
76
  #include "src/core/lib/handshaker/proxy_mapper_registry.h"
71
77
  #include "src/core/lib/iomgr/exec_ctx.h"
@@ -78,8 +84,8 @@
78
84
  #include "src/core/lib/resolver/server_address.h"
79
85
  #include "src/core/lib/service_config/service_config_call_data.h"
80
86
  #include "src/core/lib/service_config/service_config_impl.h"
87
+ #include "src/core/lib/slice/slice.h"
81
88
  #include "src/core/lib/slice/slice_internal.h"
82
- #include "src/core/lib/slice/slice_refcount.h"
83
89
  #include "src/core/lib/surface/channel.h"
84
90
  #include "src/core/lib/transport/connectivity_state.h"
85
91
  #include "src/core/lib/transport/error_utils.h"
@@ -89,9 +95,6 @@
89
95
  // Client channel filter
90
96
  //
91
97
 
92
- #define GRPC_ARG_HEALTH_CHECK_SERVICE_NAME \
93
- "grpc.internal.health_check_service_name"
94
-
95
98
  namespace grpc_core {
96
99
 
97
100
  using internal::ClientChannelMethodParsedConfig;
@@ -105,6 +108,75 @@ TraceFlag grpc_client_channel_lb_call_trace(false, "client_channel_lb_call");
105
108
  //
106
109
 
107
110
  class ClientChannel::CallData {
111
+ public:
112
+ // Removes the call from the channel's list of calls queued
113
+ // for name resolution.
114
+ void RemoveCallFromResolverQueuedCallsLocked()
115
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::resolution_mu_);
116
+
117
+ // Called by the channel for each queued call when a new resolution
118
+ // result becomes available.
119
+ virtual void RetryCheckResolutionLocked()
120
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::resolution_mu_) = 0;
121
+
122
+ RefCountedPtr<DynamicFilters> dynamic_filters() const {
123
+ return dynamic_filters_;
124
+ }
125
+
126
+ protected:
127
+ CallData() = default;
128
+ virtual ~CallData() = default;
129
+
130
+ // Checks whether a resolver result is available. The following
131
+ // outcomes are possible:
132
+ // - No resolver result is available yet. The call will be queued and
133
+ // absl::nullopt will be returned. Later, when a resolver result
134
+ // becomes available, RetryCheckResolutionLocked() will be called.
135
+ // - The resolver has returned a transient failure. If the call is
136
+ // not wait_for_ready, a non-OK status will be returned. (If the
137
+ // call *is* wait_for_ready, it will be queued instead.)
138
+ // - There is a valid resolver result. The service config will be
139
+ // stored in the call context and an OK status will be returned.
140
+ absl::optional<absl::Status> CheckResolution(bool was_queued);
141
+
142
+ private:
143
+ // Accessors for data stored in the subclass.
144
+ virtual ClientChannel* chand() const = 0;
145
+ virtual Arena* arena() const = 0;
146
+ virtual grpc_polling_entity* pollent() const = 0;
147
+ virtual grpc_metadata_batch* send_initial_metadata() = 0;
148
+ virtual grpc_call_context_element* call_context() const = 0;
149
+
150
+ // Helper function for CheckResolution(). Returns true if the call
151
+ // can continue (i.e., there is a valid resolution result, or there is
152
+ // an invalid resolution result but the call is not wait_for_ready).
153
+ bool CheckResolutionLocked(
154
+ absl::StatusOr<RefCountedPtr<ConfigSelector>>* config_selector)
155
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::resolution_mu_);
156
+
157
+ // Adds the call to the channel's list of calls queued for name resolution.
158
+ void AddCallToResolverQueuedCallsLocked()
159
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::resolution_mu_);
160
+
161
+ // Called when adding the call to the resolver queue.
162
+ virtual void OnAddToQueueLocked()
163
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::resolution_mu_) {}
164
+
165
+ // Applies service config to the call. Must be invoked once we know
166
+ // that the resolver has returned results to the channel.
167
+ // If an error is returned, the error indicates the status with which
168
+ // the call should be failed.
169
+ grpc_error_handle ApplyServiceConfigToCallLocked(
170
+ const absl::StatusOr<RefCountedPtr<ConfigSelector>>& config_selector);
171
+
172
+ // Called to reset the deadline based on the service config obtained
173
+ // from the resolver.
174
+ virtual void ResetDeadline(Duration timeout) = 0;
175
+
176
+ RefCountedPtr<DynamicFilters> dynamic_filters_;
177
+ };
178
+
179
+ class ClientChannel::FilterBasedCallData : public ClientChannel::CallData {
108
180
  public:
109
181
  static grpc_error_handle Init(grpc_call_element* elem,
110
182
  const grpc_call_element_args* args);
@@ -115,31 +187,33 @@ class ClientChannel::CallData {
115
187
  grpc_call_element* elem, grpc_transport_stream_op_batch* batch);
116
188
  static void SetPollent(grpc_call_element* elem, grpc_polling_entity* pollent);
117
189
 
118
- // Invoked by channel for queued calls when name resolution is completed.
119
- static void CheckResolution(void* arg, grpc_error_handle error);
120
- // Helper function for applying the service config to a call while
121
- // holding ClientChannel::resolution_mu_.
122
- // Returns true if the service config has been applied to the call, in which
123
- // case the caller must invoke ResolutionDone() or AsyncResolutionDone()
124
- // with the returned error.
125
- bool CheckResolutionLocked(grpc_call_element* elem, grpc_error_handle* error)
126
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::resolution_mu_);
127
- // Schedules a callback to continue processing the call once
128
- // resolution is complete. The callback will not run until after this
129
- // method returns.
130
- void AsyncResolutionDone(grpc_call_element* elem, grpc_error_handle error);
131
-
132
190
  private:
133
191
  class ResolverQueuedCallCanceller;
134
192
 
135
- CallData(grpc_call_element* elem, const ClientChannel& chand,
136
- const grpc_call_element_args& args);
137
- ~CallData();
193
+ FilterBasedCallData(grpc_call_element* elem,
194
+ const grpc_call_element_args& args);
195
+ ~FilterBasedCallData() override;
196
+
197
+ grpc_call_element* elem() const { return deadline_state_.elem; }
198
+ grpc_call_stack* owning_call() const { return deadline_state_.call_stack; }
199
+ CallCombiner* call_combiner() const { return deadline_state_.call_combiner; }
200
+
201
+ ClientChannel* chand() const override {
202
+ return static_cast<ClientChannel*>(elem()->channel_data);
203
+ }
204
+ Arena* arena() const override { return deadline_state_.arena; }
205
+ grpc_polling_entity* pollent() const override { return pollent_; }
206
+ grpc_metadata_batch* send_initial_metadata() override {
207
+ return pending_batches_[0]
208
+ ->payload->send_initial_metadata.send_initial_metadata;
209
+ }
210
+ grpc_call_context_element* call_context() const override {
211
+ return call_context_;
212
+ }
138
213
 
139
214
  // Returns the index into pending_batches_ to be used for batch.
140
215
  static size_t GetBatchIndex(grpc_transport_stream_op_batch* batch);
141
- void PendingBatchesAdd(grpc_call_element* elem,
142
- grpc_transport_stream_op_batch* batch);
216
+ void PendingBatchesAdd(grpc_transport_stream_op_batch* batch);
143
217
  static void FailPendingBatchInCallCombiner(void* arg,
144
218
  grpc_error_handle error);
145
219
  // A predicate type and some useful implementations for PendingBatchesFail().
@@ -159,71 +233,55 @@ class ClientChannel::CallData {
159
233
  // If yield_call_combiner_predicate returns true, assumes responsibility for
160
234
  // yielding the call combiner.
161
235
  void PendingBatchesFail(
162
- grpc_call_element* elem, grpc_error_handle error,
236
+ grpc_error_handle error,
163
237
  YieldCallCombinerPredicate yield_call_combiner_predicate);
164
238
  static void ResumePendingBatchInCallCombiner(void* arg,
165
239
  grpc_error_handle ignored);
166
- // Resumes all pending batches on lb_call_.
167
- void PendingBatchesResume(grpc_call_element* elem);
240
+ // Resumes all pending batches on dynamic_call_.
241
+ void PendingBatchesResume();
168
242
 
169
- // Applies service config to the call. Must be invoked once we know
170
- // that the resolver has returned results to the channel.
171
- // If an error is returned, the error indicates the status with which
172
- // the call should be failed.
173
- grpc_error_handle ApplyServiceConfigToCallLocked(
174
- grpc_call_element* elem, grpc_metadata_batch* initial_metadata)
175
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::resolution_mu_);
176
- // Invoked when the resolver result is applied to the caller, on both
177
- // success or failure.
178
- static void ResolutionDone(void* arg, grpc_error_handle error);
179
- // Removes the call (if present) from the channel's list of calls queued
180
- // for name resolution.
181
- void MaybeRemoveCallFromResolverQueuedCallsLocked(grpc_call_element* elem)
243
+ // Called to check for a resolution result, both when the call is
244
+ // initially started and when it is queued and the channel gets a new
245
+ // resolution result.
246
+ void TryCheckResolution(bool was_queued);
247
+
248
+ void OnAddToQueueLocked() override
182
249
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::resolution_mu_);
183
- // Adds the call (if not already present) to the channel's list of
184
- // calls queued for name resolution.
185
- void MaybeAddCallToResolverQueuedCallsLocked(grpc_call_element* elem)
250
+
251
+ void RetryCheckResolutionLocked() override
186
252
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::resolution_mu_);
187
253
 
188
- static void RecvTrailingMetadataReadyForConfigSelectorCommitCallback(
189
- void* arg, grpc_error_handle error);
254
+ void ResetDeadline(Duration timeout) override {
255
+ const Timestamp per_method_deadline =
256
+ Timestamp::FromCycleCounterRoundUp(call_start_time_) + timeout;
257
+ if (per_method_deadline < deadline_) {
258
+ deadline_ = per_method_deadline;
259
+ grpc_deadline_state_reset(&deadline_state_, deadline_);
260
+ }
261
+ }
190
262
 
191
- void CreateDynamicCall(grpc_call_element* elem);
263
+ void CreateDynamicCall();
192
264
 
193
- // State for handling deadlines.
194
- // The code in deadline_filter.c requires this to be the first field.
195
- // TODO(roth): This is slightly sub-optimal in that grpc_deadline_state
196
- // and this struct both independently store pointers to the call stack
197
- // and call combiner. If/when we have time, find a way to avoid this
198
- // without breaking the grpc_deadline_state abstraction.
199
- grpc_deadline_state deadline_state_;
265
+ static void RecvTrailingMetadataReadyForConfigSelectorCommitCallback(
266
+ void* arg, grpc_error_handle error);
200
267
 
201
268
  grpc_slice path_; // Request path.
269
+ grpc_call_context_element* call_context_;
202
270
  gpr_cycle_counter call_start_time_;
203
271
  Timestamp deadline_;
204
- Arena* arena_;
205
- grpc_call_stack* owning_call_;
206
- CallCombiner* call_combiner_;
207
- grpc_call_context_element* call_context_;
208
272
 
209
- grpc_polling_entity* pollent_ = nullptr;
273
+ // State for handling deadlines.
274
+ grpc_deadline_state deadline_state_;
210
275
 
211
- grpc_closure resolution_done_closure_;
276
+ grpc_polling_entity* pollent_ = nullptr;
212
277
 
213
278
  // Accessed while holding ClientChannel::resolution_mu_.
214
- bool service_config_applied_ ABSL_GUARDED_BY(&ClientChannel::resolution_mu_) =
215
- false;
216
- bool queued_pending_resolver_result_
217
- ABSL_GUARDED_BY(&ClientChannel::resolution_mu_) = false;
218
- ClientChannel::ResolverQueuedCall resolver_queued_call_
219
- ABSL_GUARDED_BY(&ClientChannel::resolution_mu_);
220
279
  ResolverQueuedCallCanceller* resolver_call_canceller_
221
280
  ABSL_GUARDED_BY(&ClientChannel::resolution_mu_) = nullptr;
222
281
 
223
282
  grpc_closure* original_recv_trailing_metadata_ready_ = nullptr;
224
283
  grpc_closure recv_trailing_metadata_ready_;
225
284
 
226
- RefCountedPtr<DynamicFilters> dynamic_filters_;
227
285
  RefCountedPtr<DynamicFilters::Call> dynamic_call_;
228
286
 
229
287
  // Batches are added to this list when received from above.
@@ -234,7 +292,7 @@ class ClientChannel::CallData {
234
292
  grpc_transport_stream_op_batch* pending_batches_[MAX_PENDING_BATCHES] = {};
235
293
 
236
294
  // Set when we get a cancel_stream op.
237
- grpc_error_handle cancel_error_ = GRPC_ERROR_NONE;
295
+ grpc_error_handle cancel_error_;
238
296
  };
239
297
 
240
298
  //
@@ -242,13 +300,13 @@ class ClientChannel::CallData {
242
300
  //
243
301
 
244
302
  const grpc_channel_filter ClientChannel::kFilterVtable = {
245
- ClientChannel::CallData::StartTransportStreamOpBatch,
303
+ ClientChannel::FilterBasedCallData::StartTransportStreamOpBatch,
246
304
  nullptr,
247
305
  ClientChannel::StartTransportOp,
248
- sizeof(ClientChannel::CallData),
249
- ClientChannel::CallData::Init,
250
- ClientChannel::CallData::SetPollent,
251
- ClientChannel::CallData::Destroy,
306
+ sizeof(ClientChannel::FilterBasedCallData),
307
+ ClientChannel::FilterBasedCallData::Init,
308
+ ClientChannel::FilterBasedCallData::SetPollent,
309
+ ClientChannel::FilterBasedCallData::Destroy,
252
310
  sizeof(ClientChannel),
253
311
  ClientChannel::Init,
254
312
  grpc_channel_stack_no_post_init,
@@ -274,7 +332,7 @@ class DynamicTerminationFilter {
274
332
  GPR_ASSERT(args->is_last);
275
333
  GPR_ASSERT(elem->filter == &kFilterVtable);
276
334
  new (elem->channel_data) DynamicTerminationFilter(args->channel_args);
277
- return GRPC_ERROR_NONE;
335
+ return absl::OkStatus();
278
336
  }
279
337
 
280
338
  static void Destroy(grpc_channel_element* elem) {
@@ -289,9 +347,8 @@ class DynamicTerminationFilter {
289
347
  const grpc_channel_info* /*info*/) {}
290
348
 
291
349
  private:
292
- explicit DynamicTerminationFilter(const grpc_channel_args* args)
293
- : chand_(grpc_channel_args_find_pointer<ClientChannel>(
294
- args, GRPC_ARG_CLIENT_CHANNEL)) {}
350
+ explicit DynamicTerminationFilter(const ChannelArgs& args)
351
+ : chand_(args.GetObject<ClientChannel>()) {}
295
352
 
296
353
  ClientChannel* chand_;
297
354
  };
@@ -301,7 +358,7 @@ class DynamicTerminationFilter::CallData {
301
358
  static grpc_error_handle Init(grpc_call_element* elem,
302
359
  const grpc_call_element_args* args) {
303
360
  new (elem->call_data) CallData(*args);
304
- return GRPC_ERROR_NONE;
361
+ return absl::OkStatus();
305
362
  }
306
363
 
307
364
  static void Destroy(grpc_call_element* elem,
@@ -317,7 +374,7 @@ class DynamicTerminationFilter::CallData {
317
374
  subchannel_call->SetAfterCallStackDestroy(then_schedule_closure);
318
375
  } else {
319
376
  // TODO(yashkt) : This can potentially be a Closure::Run
320
- ExecCtx::Run(DEBUG_LOCATION, then_schedule_closure, GRPC_ERROR_NONE);
377
+ ExecCtx::Run(DEBUG_LOCATION, then_schedule_closure, absl::OkStatus());
321
378
  }
322
379
  }
323
380
 
@@ -341,7 +398,7 @@ class DynamicTerminationFilter::CallData {
341
398
  calld->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
342
399
  calld->lb_call_ = client_channel->CreateLoadBalancedCall(
343
400
  args, pollent, nullptr,
344
- service_config_call_data->call_dispatch_controller(),
401
+ [service_config_call_data]() { service_config_call_data->Commit(); },
345
402
  /*is_transparent_retry=*/false);
346
403
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
347
404
  gpr_log(GPR_INFO,
@@ -352,14 +409,14 @@ class DynamicTerminationFilter::CallData {
352
409
 
353
410
  private:
354
411
  explicit CallData(const grpc_call_element_args& args)
355
- : path_(grpc_slice_ref_internal(args.path)),
412
+ : path_(CSliceRef(args.path)),
356
413
  deadline_(args.deadline),
357
414
  arena_(args.arena),
358
415
  owning_call_(args.call_stack),
359
416
  call_combiner_(args.call_combiner),
360
417
  call_context_(args.context) {}
361
418
 
362
- ~CallData() { grpc_slice_unref_internal(path_); }
419
+ ~CallData() { CSliceUnref(path_); }
363
420
 
364
421
  grpc_slice path_; // Request path.
365
422
  Timestamp deadline_;
@@ -368,7 +425,7 @@ class DynamicTerminationFilter::CallData {
368
425
  CallCombiner* call_combiner_;
369
426
  grpc_call_context_element* call_context_;
370
427
 
371
- OrphanablePtr<ClientChannel::LoadBalancedCall> lb_call_;
428
+ OrphanablePtr<ClientChannel::FilterBasedLoadBalancedCall> lb_call_;
372
429
  };
373
430
 
374
431
  const grpc_channel_filter DynamicTerminationFilter::kFilterVtable = {
@@ -420,8 +477,8 @@ class ClientChannel::ResolverResultHandler : public Resolver::ResultHandler {
420
477
  //
421
478
 
422
479
  // This class is a wrapper for Subchannel that hides details of the
423
- // channel's implementation (such as the health check service name and
424
- // connected subchannel) from the LB policy API.
480
+ // channel's implementation (such as the connected subchannel) from the
481
+ // LB policy API.
425
482
  //
426
483
  // Note that no synchronization is needed here, because even if the
427
484
  // underlying subchannel is shared between channels, this wrapper will only
@@ -429,14 +486,12 @@ class ClientChannel::ResolverResultHandler : public Resolver::ResultHandler {
429
486
  // control plane work_serializer.
430
487
  class ClientChannel::SubchannelWrapper : public SubchannelInterface {
431
488
  public:
432
- SubchannelWrapper(ClientChannel* chand, RefCountedPtr<Subchannel> subchannel,
433
- absl::optional<std::string> health_check_service_name)
489
+ SubchannelWrapper(ClientChannel* chand, RefCountedPtr<Subchannel> subchannel)
434
490
  : SubchannelInterface(GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)
435
491
  ? "SubchannelWrapper"
436
492
  : nullptr),
437
493
  chand_(chand),
438
- subchannel_(std::move(subchannel)),
439
- health_check_service_name_(std::move(health_check_service_name)) {
494
+ subchannel_(std::move(subchannel)) {
440
495
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
441
496
  gpr_log(GPR_INFO,
442
497
  "chand=%p: creating subchannel wrapper %p for subchannel %p",
@@ -489,7 +544,6 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
489
544
  watcher_wrapper = new WatcherWrapper(std::move(watcher),
490
545
  Ref(DEBUG_LOCATION, "WatcherWrapper"));
491
546
  subchannel_->WatchConnectivityState(
492
- health_check_service_name_,
493
547
  RefCountedPtr<Subchannel::ConnectivityStateWatcherInterface>(
494
548
  watcher_wrapper));
495
549
  }
@@ -498,8 +552,7 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
498
552
  override ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
499
553
  auto it = watcher_map_.find(watcher);
500
554
  GPR_ASSERT(it != watcher_map_.end());
501
- subchannel_->CancelConnectivityStateWatch(health_check_service_name_,
502
- it->second);
555
+ subchannel_->CancelConnectivityStateWatch(it->second);
503
556
  watcher_map_.erase(it);
504
557
  }
505
558
 
@@ -520,27 +573,23 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
520
573
  data_watchers_.push_back(std::move(internal_watcher));
521
574
  }
522
575
 
523
- ChannelArgs channel_args() override { return subchannel_->channel_args(); }
524
-
525
576
  void ThrottleKeepaliveTime(int new_keepalive_time) {
526
577
  subchannel_->ThrottleKeepaliveTime(new_keepalive_time);
527
578
  }
528
579
 
529
580
  private:
530
- // Subchannel and SubchannelInterface have different interfaces for
531
- // their respective ConnectivityStateWatcherInterface classes.
532
- // The one in Subchannel updates the ConnectedSubchannel along with
533
- // the state, whereas the one in SubchannelInterface does not expose
534
- // the ConnectedSubchannel.
535
- //
536
- // This wrapper provides a bridge between the two. It implements
537
- // Subchannel::ConnectivityStateWatcherInterface and wraps
581
+ // This wrapper provides a bridge between the internal Subchannel API
582
+ // and the SubchannelInterface API that we expose to LB policies.
583
+ // It implements Subchannel::ConnectivityStateWatcherInterface and wraps
538
584
  // the instance of SubchannelInterface::ConnectivityStateWatcherInterface
539
585
  // that was passed in by the LB policy. We pass an instance of this
540
586
  // class to the underlying Subchannel, and when we get updates from
541
587
  // the subchannel, we pass those on to the wrapped watcher to return
542
- // the update to the LB policy. This allows us to set the connected
543
- // subchannel before passing the result back to the LB policy.
588
+ // the update to the LB policy.
589
+ //
590
+ // This class handles things like hopping into the WorkSerializer
591
+ // before passing notifications to the LB policy and propagating
592
+ // keepalive information betwen subchannels.
544
593
  class WatcherWrapper : public Subchannel::ConnectivityStateWatcherInterface {
545
594
  public:
546
595
  WatcherWrapper(
@@ -559,7 +608,8 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
559
608
  DEBUG_LOCATION);
560
609
  }
561
610
 
562
- void OnConnectivityStateChange() override {
611
+ void OnConnectivityStateChange(grpc_connectivity_state state,
612
+ const absl::Status& status) override {
563
613
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
564
614
  gpr_log(GPR_INFO,
565
615
  "chand=%p: connectivity change for subchannel wrapper %p "
@@ -568,41 +618,33 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
568
618
  }
569
619
  Ref().release(); // ref owned by lambda
570
620
  parent_->chand_->work_serializer_->Run(
571
- [this]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(
621
+ [this, state, status]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(
572
622
  *parent_->chand_->work_serializer_) {
573
- ApplyUpdateInControlPlaneWorkSerializer();
623
+ ApplyUpdateInControlPlaneWorkSerializer(state, status);
574
624
  Unref();
575
625
  },
576
626
  DEBUG_LOCATION);
577
627
  }
578
628
 
579
629
  grpc_pollset_set* interested_parties() override {
580
- SubchannelInterface::ConnectivityStateWatcherInterface* watcher =
581
- watcher_.get();
582
- if (watcher_ == nullptr) watcher = replacement_->watcher_.get();
583
- return watcher->interested_parties();
584
- }
585
-
586
- WatcherWrapper* MakeReplacement() {
587
- auto* replacement = new WatcherWrapper(std::move(watcher_), parent_);
588
- replacement_ = replacement;
589
- return replacement;
630
+ return watcher_->interested_parties();
590
631
  }
591
632
 
592
633
  private:
593
- void ApplyUpdateInControlPlaneWorkSerializer()
634
+ void ApplyUpdateInControlPlaneWorkSerializer(grpc_connectivity_state state,
635
+ const absl::Status& status)
594
636
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(*parent_->chand_->work_serializer_) {
595
637
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
596
638
  gpr_log(GPR_INFO,
597
639
  "chand=%p: processing connectivity change in work serializer "
598
- "for subchannel wrapper %p subchannel %p "
599
- "watcher=%p",
640
+ "for subchannel wrapper %p subchannel %p watcher=%p "
641
+ "state=%s status=%s",
600
642
  parent_->chand_, parent_.get(), parent_->subchannel_.get(),
601
- watcher_.get());
643
+ watcher_.get(), ConnectivityStateName(state),
644
+ status.ToString().c_str());
602
645
  }
603
- ConnectivityStateChange state_change = PopConnectivityStateChange();
604
646
  absl::optional<absl::Cord> keepalive_throttling =
605
- state_change.status.GetPayload(kKeepaliveThrottlingKey);
647
+ status.GetPayload(kKeepaliveThrottlingKey);
606
648
  if (keepalive_throttling.has_value()) {
607
649
  int new_keepalive_time = -1;
608
650
  if (absl::SimpleAtoi(std::string(keepalive_throttling.value()),
@@ -627,30 +669,22 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
627
669
  std::string(keepalive_throttling.value()).c_str());
628
670
  }
629
671
  }
630
- // Ignore update if the parent WatcherWrapper has been replaced
631
- // since this callback was scheduled.
632
- if (watcher_ != nullptr) {
633
- // Propagate status only in state TF.
634
- // We specifically want to avoid propagating the status for
635
- // state IDLE that the real subchannel gave us only for the
636
- // purpose of keepalive propagation.
637
- if (state_change.state != GRPC_CHANNEL_TRANSIENT_FAILURE) {
638
- state_change.status = absl::OkStatus();
639
- }
640
- watcher_->OnConnectivityStateChange(state_change.state,
641
- state_change.status);
642
- }
672
+ // Propagate status only in state TF.
673
+ // We specifically want to avoid propagating the status for
674
+ // state IDLE that the real subchannel gave us only for the
675
+ // purpose of keepalive propagation.
676
+ watcher_->OnConnectivityStateChange(
677
+ state,
678
+ state == GRPC_CHANNEL_TRANSIENT_FAILURE ? status : absl::OkStatus());
643
679
  }
644
680
 
645
681
  std::unique_ptr<SubchannelInterface::ConnectivityStateWatcherInterface>
646
682
  watcher_;
647
683
  RefCountedPtr<SubchannelWrapper> parent_;
648
- WatcherWrapper* replacement_ = nullptr;
649
684
  };
650
685
 
651
686
  ClientChannel* chand_;
652
687
  RefCountedPtr<Subchannel> subchannel_;
653
- absl::optional<std::string> health_check_service_name_;
654
688
  // Maps from the address of the watcher passed to us by the LB policy
655
689
  // to the address of the WrapperWatcher that we passed to the underlying
656
690
  // subchannel. This is needed so that when the LB policy calls
@@ -733,7 +767,7 @@ void ClientChannel::ExternalConnectivityWatcher::Notify(
733
767
  chand_, on_complete_, /*cancel=*/false);
734
768
  // Report new state to the user.
735
769
  *state_ = state;
736
- ExecCtx::Run(DEBUG_LOCATION, on_complete_, GRPC_ERROR_NONE);
770
+ ExecCtx::Run(DEBUG_LOCATION, on_complete_, absl::OkStatus());
737
771
  // Hop back into the work_serializer to clean up.
738
772
  // Not needed in state SHUTDOWN, because the tracker will
739
773
  // automatically remove all watchers in that case.
@@ -756,7 +790,7 @@ void ClientChannel::ExternalConnectivityWatcher::Cancel() {
756
790
  std::memory_order_relaxed)) {
757
791
  return; // Already done.
758
792
  }
759
- ExecCtx::Run(DEBUG_LOCATION, on_complete_, GRPC_ERROR_CANCELLED);
793
+ ExecCtx::Run(DEBUG_LOCATION, on_complete_, absl::CancelledError());
760
794
  // Hop back into the work_serializer to clean up.
761
795
  // Note: The callback takes a ref in case the ref inside the state tracker
762
796
  // gets removed before the callback runs via a SHUTDOWN notification.
@@ -770,7 +804,7 @@ void ClientChannel::ExternalConnectivityWatcher::Cancel() {
770
804
  }
771
805
 
772
806
  void ClientChannel::ExternalConnectivityWatcher::AddWatcherLocked() {
773
- Closure::Run(DEBUG_LOCATION, watcher_timer_init_, GRPC_ERROR_NONE);
807
+ Closure::Run(DEBUG_LOCATION, watcher_timer_init_, absl::OkStatus());
774
808
  // Add new watcher. Pass the ref of the object from creation to OrphanablePtr.
775
809
  chand_->state_tracker_.AddWatcher(
776
810
  initial_state_, OrphanablePtr<ConnectivityStateWatcherInterface>(this));
@@ -863,13 +897,6 @@ class ClientChannel::ClientChannelControlHelper
863
897
  ServerAddress address, const ChannelArgs& args) override
864
898
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
865
899
  if (chand_->resolver_ == nullptr) return nullptr; // Shutting down.
866
- // Determine health check service name.
867
- absl::optional<std::string> health_check_service_name;
868
- if (!args.GetBool(GRPC_ARG_INHIBIT_HEALTH_CHECKING).value_or(false)) {
869
- health_check_service_name =
870
- args.GetOwnedString(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME);
871
- }
872
- // Construct channel args for subchannel.
873
900
  ChannelArgs subchannel_args = ClientChannel::MakeSubchannelArgs(
874
901
  args, address.args(), chand_->subchannel_pool_,
875
902
  chand_->default_authority_);
@@ -881,17 +908,15 @@ class ClientChannel::ClientChannelControlHelper
881
908
  // Make sure the subchannel has updated keepalive time.
882
909
  subchannel->ThrottleKeepaliveTime(chand_->keepalive_time_);
883
910
  // Create and return wrapper for the subchannel.
884
- return MakeRefCounted<SubchannelWrapper>(
885
- chand_, std::move(subchannel), std::move(health_check_service_name));
911
+ return MakeRefCounted<SubchannelWrapper>(chand_, std::move(subchannel));
886
912
  }
887
913
 
888
- void UpdateState(
889
- grpc_connectivity_state state, const absl::Status& status,
890
- std::unique_ptr<LoadBalancingPolicy::SubchannelPicker> picker) override
891
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
914
+ void UpdateState(grpc_connectivity_state state, const absl::Status& status,
915
+ RefCountedPtr<LoadBalancingPolicy::SubchannelPicker> picker)
916
+ override ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
892
917
  if (chand_->resolver_ == nullptr) return; // Shutting down.
893
918
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
894
- const char* extra = GRPC_ERROR_IS_NONE(chand_->disconnect_error_)
919
+ const char* extra = chand_->disconnect_error_.ok()
895
920
  ? ""
896
921
  : " (ignoring -- channel shutting down)";
897
922
  gpr_log(GPR_INFO, "chand=%p: update: state=%s status=(%s) picker=%p%s",
@@ -899,7 +924,7 @@ class ClientChannel::ClientChannelControlHelper
899
924
  picker.get(), extra);
900
925
  }
901
926
  // Do update only if not shutting down.
902
- if (GRPC_ERROR_IS_NONE(chand_->disconnect_error_)) {
927
+ if (chand_->disconnect_error_.ok()) {
903
928
  chand_->UpdateStateAndPickerLocked(state, status, "helper",
904
929
  std::move(picker));
905
930
  }
@@ -918,6 +943,10 @@ class ClientChannel::ClientChannelControlHelper
918
943
  return chand_->default_authority_;
919
944
  }
920
945
 
946
+ grpc_event_engine::experimental::EventEngine* GetEventEngine() override {
947
+ return chand_->owning_stack_->EventEngine();
948
+ }
949
+
921
950
  void AddTraceEvent(TraceSeverity severity, absl::string_view message) override
922
951
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
923
952
  if (chand_->resolver_ == nullptr) return; // Shutting down.
@@ -954,7 +983,7 @@ grpc_error_handle ClientChannel::Init(grpc_channel_element* elem,
954
983
  grpc_channel_element_args* args) {
955
984
  GPR_ASSERT(args->is_last);
956
985
  GPR_ASSERT(elem->filter == &kFilterVtable);
957
- grpc_error_handle error = GRPC_ERROR_NONE;
986
+ grpc_error_handle error;
958
987
  new (elem->channel_data) ClientChannel(args, &error);
959
988
  return error;
960
989
  }
@@ -978,7 +1007,7 @@ RefCountedPtr<SubchannelPoolInterface> GetSubchannelPool(
978
1007
 
979
1008
  ClientChannel::ClientChannel(grpc_channel_element_args* args,
980
1009
  grpc_error_handle* error)
981
- : channel_args_(ChannelArgs::FromC(args->channel_args)),
1010
+ : channel_args_(args->channel_args),
982
1011
  deadline_checking_enabled_(grpc_deadline_checking_enabled(channel_args_)),
983
1012
  owning_stack_(args->channel_stack),
984
1013
  client_channel_factory_(channel_args_.GetObject<ClientChannelFactory>()),
@@ -997,7 +1026,7 @@ ClientChannel::ClientChannel(grpc_channel_element_args* args,
997
1026
  grpc_client_channel_start_backup_polling(interested_parties_);
998
1027
  // Check client channel factory.
999
1028
  if (client_channel_factory_ == nullptr) {
1000
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1029
+ *error = GRPC_ERROR_CREATE(
1001
1030
  "Missing client channel factory in args for client channel filter");
1002
1031
  return;
1003
1032
  }
@@ -1006,7 +1035,7 @@ ClientChannel::ClientChannel(grpc_channel_element_args* args,
1006
1035
  absl::optional<absl::string_view> service_config_json =
1007
1036
  channel_args_.GetString(GRPC_ARG_SERVICE_CONFIG);
1008
1037
  if (!service_config_json.has_value()) service_config_json = "{}";
1009
- *error = GRPC_ERROR_NONE;
1038
+ *error = absl::OkStatus();
1010
1039
  auto service_config =
1011
1040
  ServiceConfigImpl::Create(channel_args_, *service_config_json);
1012
1041
  if (!service_config.ok()) {
@@ -1018,7 +1047,7 @@ ClientChannel::ClientChannel(grpc_channel_element_args* args,
1018
1047
  absl::optional<std::string> server_uri =
1019
1048
  channel_args_.GetOwnedString(GRPC_ARG_SERVER_URI);
1020
1049
  if (!server_uri.has_value()) {
1021
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1050
+ *error = GRPC_ERROR_CREATE(
1022
1051
  "target URI channel arg missing or wrong type in client channel "
1023
1052
  "filter");
1024
1053
  return;
@@ -1031,7 +1060,7 @@ ClientChannel::ClientChannel(grpc_channel_element_args* args,
1031
1060
  // resolver creation will succeed later.
1032
1061
  if (!CoreConfiguration::Get().resolver_registry().IsValidTarget(
1033
1062
  uri_to_resolve_)) {
1034
- *error = GRPC_ERROR_CREATE_FROM_CPP_STRING(
1063
+ *error = GRPC_ERROR_CREATE(
1035
1064
  absl::StrCat("the target uri is not valid: ", uri_to_resolve_));
1036
1065
  return;
1037
1066
  }
@@ -1056,7 +1085,7 @@ ClientChannel::ClientChannel(grpc_channel_element_args* args,
1056
1085
  default_authority_ = std::move(*default_authority);
1057
1086
  }
1058
1087
  // Success.
1059
- *error = GRPC_ERROR_NONE;
1088
+ *error = absl::OkStatus();
1060
1089
  }
1061
1090
 
1062
1091
  ClientChannel::~ClientChannel() {
@@ -1067,18 +1096,17 @@ ClientChannel::~ClientChannel() {
1067
1096
  // Stop backup polling.
1068
1097
  grpc_client_channel_stop_backup_polling(interested_parties_);
1069
1098
  grpc_pollset_set_destroy(interested_parties_);
1070
- GRPC_ERROR_UNREF(disconnect_error_);
1071
1099
  }
1072
1100
 
1073
- OrphanablePtr<ClientChannel::LoadBalancedCall>
1101
+ OrphanablePtr<ClientChannel::FilterBasedLoadBalancedCall>
1074
1102
  ClientChannel::CreateLoadBalancedCall(
1075
1103
  const grpc_call_element_args& args, grpc_polling_entity* pollent,
1076
1104
  grpc_closure* on_call_destruction_complete,
1077
- ConfigSelector::CallDispatchController* call_dispatch_controller,
1078
- bool is_transparent_retry) {
1079
- return OrphanablePtr<LoadBalancedCall>(args.arena->New<LoadBalancedCall>(
1080
- this, args, pollent, on_call_destruction_complete,
1081
- call_dispatch_controller, is_transparent_retry));
1105
+ absl::AnyInvocable<void()> on_commit, bool is_transparent_retry) {
1106
+ return OrphanablePtr<FilterBasedLoadBalancedCall>(
1107
+ args.arena->New<FilterBasedLoadBalancedCall>(
1108
+ this, args, pollent, on_call_destruction_complete,
1109
+ std::move(on_commit), is_transparent_retry));
1082
1110
  }
1083
1111
 
1084
1112
  ChannelArgs ClientChannel::MakeSubchannelArgs(
@@ -1104,6 +1132,14 @@ ChannelArgs ClientChannel::MakeSubchannelArgs(
1104
1132
  .Remove(GRPC_ARG_CHANNELZ_CHANNEL_NODE);
1105
1133
  }
1106
1134
 
1135
+ void ClientChannel::ReprocessQueuedResolverCalls() {
1136
+ for (CallData* calld : resolver_queued_calls_) {
1137
+ calld->RemoveCallFromResolverQueuedCallsLocked();
1138
+ calld->RetryCheckResolutionLocked();
1139
+ }
1140
+ resolver_queued_calls_.clear();
1141
+ }
1142
+
1107
1143
  namespace {
1108
1144
 
1109
1145
  RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
@@ -1144,9 +1180,9 @@ RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
1144
1180
  // above.
1145
1181
  if (!policy_name.has_value()) policy_name = "pick_first";
1146
1182
  // Now that we have the policy name, construct an empty config for it.
1147
- Json config_json = Json::Array{Json::Object{
1148
- {std::string(*policy_name), Json::Object{}},
1149
- }};
1183
+ Json config_json = Json::FromArray({Json::FromObject({
1184
+ {std::string(*policy_name), Json::FromObject({})},
1185
+ })});
1150
1186
  auto lb_policy_config =
1151
1187
  CoreConfiguration::Get().lb_policy_registry().ParseLoadBalancingConfig(
1152
1188
  config_json);
@@ -1310,28 +1346,16 @@ void ClientChannel::OnResolverErrorLocked(absl::Status status) {
1310
1346
  // result, then we continue to let it set the connectivity state.
1311
1347
  // Otherwise, we go into TRANSIENT_FAILURE.
1312
1348
  if (lb_policy_ == nullptr) {
1313
- grpc_error_handle error = absl_status_to_grpc_error(status);
1349
+ // Update connectivity state.
1350
+ UpdateStateLocked(GRPC_CHANNEL_TRANSIENT_FAILURE, status,
1351
+ "resolver failure");
1314
1352
  {
1315
1353
  MutexLock lock(&resolution_mu_);
1316
1354
  // Update resolver transient failure.
1317
1355
  resolver_transient_failure_error_ =
1318
1356
  MaybeRewriteIllegalStatusCode(status, "resolver");
1319
- // Process calls that were queued waiting for the resolver result.
1320
- for (ResolverQueuedCall* call = resolver_queued_calls_; call != nullptr;
1321
- call = call->next) {
1322
- grpc_call_element* elem = call->elem;
1323
- CallData* calld = static_cast<CallData*>(elem->call_data);
1324
- grpc_error_handle error = GRPC_ERROR_NONE;
1325
- if (calld->CheckResolutionLocked(elem, &error)) {
1326
- calld->AsyncResolutionDone(elem, error);
1327
- }
1328
- }
1357
+ ReprocessQueuedResolverCalls();
1329
1358
  }
1330
- GRPC_ERROR_UNREF(error);
1331
- // Update connectivity state.
1332
- UpdateStateAndPickerLocked(
1333
- GRPC_CHANNEL_TRANSIENT_FAILURE, status, "resolver failure",
1334
- absl::make_unique<LoadBalancingPolicy::TransientFailurePicker>(status));
1335
1359
  }
1336
1360
  }
1337
1361
 
@@ -1368,10 +1392,18 @@ absl::Status ClientChannel::CreateOrUpdateLbPolicyLocked(
1368
1392
  // Creates a new LB policy.
1369
1393
  OrphanablePtr<LoadBalancingPolicy> ClientChannel::CreateLbPolicyLocked(
1370
1394
  const ChannelArgs& args) {
1395
+ // The LB policy will start in state CONNECTING but will not
1396
+ // necessarily send us an update synchronously, so set state to
1397
+ // CONNECTING (in case the resolver had previously failed and put the
1398
+ // channel into TRANSIENT_FAILURE) and make sure we have a queueing picker.
1399
+ UpdateStateAndPickerLocked(
1400
+ GRPC_CHANNEL_CONNECTING, absl::Status(), "started resolving",
1401
+ MakeRefCounted<LoadBalancingPolicy::QueuePicker>(nullptr));
1402
+ // Now create the LB policy.
1371
1403
  LoadBalancingPolicy::Args lb_policy_args;
1372
1404
  lb_policy_args.work_serializer = work_serializer_;
1373
1405
  lb_policy_args.channel_control_helper =
1374
- absl::make_unique<ClientChannelControlHelper>(this);
1406
+ std::make_unique<ClientChannelControlHelper>(this);
1375
1407
  lb_policy_args.args = args;
1376
1408
  OrphanablePtr<LoadBalancingPolicy> lb_policy =
1377
1409
  MakeOrphanable<ChildPolicyHandler>(std::move(lb_policy_args),
@@ -1385,30 +1417,6 @@ OrphanablePtr<LoadBalancingPolicy> ClientChannel::CreateLbPolicyLocked(
1385
1417
  return lb_policy;
1386
1418
  }
1387
1419
 
1388
- void ClientChannel::AddResolverQueuedCall(ResolverQueuedCall* call,
1389
- grpc_polling_entity* pollent) {
1390
- // Add call to queued calls list.
1391
- call->next = resolver_queued_calls_;
1392
- resolver_queued_calls_ = call;
1393
- // Add call's pollent to channel's interested_parties, so that I/O
1394
- // can be done under the call's CQ.
1395
- grpc_polling_entity_add_to_pollset_set(pollent, interested_parties_);
1396
- }
1397
-
1398
- void ClientChannel::RemoveResolverQueuedCall(ResolverQueuedCall* to_remove,
1399
- grpc_polling_entity* pollent) {
1400
- // Remove call's pollent from channel's interested_parties.
1401
- grpc_polling_entity_del_from_pollset_set(pollent, interested_parties_);
1402
- // Remove from queued calls list.
1403
- for (ResolverQueuedCall** call = &resolver_queued_calls_; *call != nullptr;
1404
- call = &(*call)->next) {
1405
- if (*call == to_remove) {
1406
- *call = to_remove->next;
1407
- return;
1408
- }
1409
- }
1410
- }
1411
-
1412
1420
  void ClientChannel::UpdateServiceConfigInControlPlaneLocked(
1413
1421
  RefCountedPtr<ServiceConfig> service_config,
1414
1422
  RefCountedPtr<ConfigSelector> config_selector, std::string lb_policy_name) {
@@ -1446,8 +1454,8 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
1446
1454
  config_selector =
1447
1455
  MakeRefCounted<DefaultConfigSelector>(saved_service_config_);
1448
1456
  }
1449
- ChannelArgs new_args = config_selector->ModifyChannelArgs(
1450
- channel_args_.SetObject(this).SetObject(service_config));
1457
+ ChannelArgs new_args =
1458
+ channel_args_.SetObject(this).SetObject(service_config);
1451
1459
  bool enable_retries =
1452
1460
  !new_args.WantMinimalStack() &&
1453
1461
  new_args.GetBool(GRPC_ARG_ENABLE_RETRIES).value_or(true);
@@ -1460,7 +1468,7 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
1460
1468
  filters.push_back(&DynamicTerminationFilter::kFilterVtable);
1461
1469
  }
1462
1470
  RefCountedPtr<DynamicFilters> dynamic_filters =
1463
- DynamicFilters::Create(new_args.ToC().get(), std::move(filters));
1471
+ DynamicFilters::Create(new_args, std::move(filters));
1464
1472
  GPR_ASSERT(dynamic_filters != nullptr);
1465
1473
  // Grab data plane lock to update service config.
1466
1474
  //
@@ -1475,25 +1483,8 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
1475
1483
  service_config_.swap(service_config);
1476
1484
  config_selector_.swap(config_selector);
1477
1485
  dynamic_filters_.swap(dynamic_filters);
1478
- // Process calls that were queued waiting for the resolver result.
1479
- for (ResolverQueuedCall* call = resolver_queued_calls_; call != nullptr;
1480
- call = call->next) {
1481
- // If there are a lot of queued calls here, resuming them all may cause us
1482
- // to stay inside C-core for a long period of time. All of that work would
1483
- // be done using the same ExecCtx instance and therefore the same cached
1484
- // value of "now". The longer it takes to finish all of this work and exit
1485
- // from C-core, the more stale the cached value of "now" may become. This
1486
- // can cause problems whereby (e.g.) we calculate a timer deadline based
1487
- // on the stale value, which results in the timer firing too early. To
1488
- // avoid this, we invalidate the cached value for each call we process.
1489
- ExecCtx::Get()->InvalidateNow();
1490
- grpc_call_element* elem = call->elem;
1491
- CallData* calld = static_cast<CallData*>(elem->call_data);
1492
- grpc_error_handle error = GRPC_ERROR_NONE;
1493
- if (calld->CheckResolutionLocked(elem, &error)) {
1494
- calld->AsyncResolutionDone(elem, error);
1495
- }
1496
- }
1486
+ // Re-process queued calls asynchronously.
1487
+ ReprocessQueuedResolverCalls();
1497
1488
  }
1498
1489
  // Old values will be unreffed after lock is released when they go out
1499
1490
  // of scope.
@@ -1501,17 +1492,17 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
1501
1492
 
1502
1493
  void ClientChannel::CreateResolverLocked() {
1503
1494
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1504
- gpr_log(GPR_INFO, "chand=%p: starting name resolution", this);
1495
+ gpr_log(GPR_INFO, "chand=%p: starting name resolution for %s", this,
1496
+ uri_to_resolve_.c_str());
1505
1497
  }
1506
1498
  resolver_ = CoreConfiguration::Get().resolver_registry().CreateResolver(
1507
- uri_to_resolve_.c_str(), channel_args_, interested_parties_,
1508
- work_serializer_, absl::make_unique<ResolverResultHandler>(this));
1499
+ uri_to_resolve_, channel_args_, interested_parties_, work_serializer_,
1500
+ std::make_unique<ResolverResultHandler>(this));
1509
1501
  // Since the validity of the args was checked when the channel was created,
1510
1502
  // CreateResolver() must return a non-null result.
1511
1503
  GPR_ASSERT(resolver_ != nullptr);
1512
- UpdateStateAndPickerLocked(
1513
- GRPC_CHANNEL_CONNECTING, absl::Status(), "started resolving",
1514
- absl::make_unique<LoadBalancingPolicy::QueuePicker>(nullptr));
1504
+ UpdateStateLocked(GRPC_CHANNEL_CONNECTING, absl::Status(),
1505
+ "started resolving");
1515
1506
  resolver_->StartLocked();
1516
1507
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1517
1508
  gpr_log(GPR_INFO, "chand=%p: created resolver=%p", this, resolver_.get());
@@ -1525,24 +1516,7 @@ void ClientChannel::DestroyResolverAndLbPolicyLocked() {
1525
1516
  resolver_.get());
1526
1517
  }
1527
1518
  resolver_.reset();
1528
- if (lb_policy_ != nullptr) {
1529
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1530
- gpr_log(GPR_INFO, "chand=%p: shutting down lb_policy=%p", this,
1531
- lb_policy_.get());
1532
- }
1533
- grpc_pollset_set_del_pollset_set(lb_policy_->interested_parties(),
1534
- interested_parties_);
1535
- lb_policy_.reset();
1536
- }
1537
- }
1538
- }
1539
-
1540
- void ClientChannel::UpdateStateAndPickerLocked(
1541
- grpc_connectivity_state state, const absl::Status& status,
1542
- const char* reason,
1543
- std::unique_ptr<LoadBalancingPolicy::SubchannelPicker> picker) {
1544
- // Special case for IDLE and SHUTDOWN states.
1545
- if (picker == nullptr || state == GRPC_CHANNEL_SHUTDOWN) {
1519
+ // Clear resolution state.
1546
1520
  saved_service_config_.reset();
1547
1521
  saved_config_selector_.reset();
1548
1522
  // Acquire resolution lock to update config selector and associated state.
@@ -1558,8 +1532,22 @@ void ClientChannel::UpdateStateAndPickerLocked(
1558
1532
  config_selector_to_unref = std::move(config_selector_);
1559
1533
  dynamic_filters_to_unref = std::move(dynamic_filters_);
1560
1534
  }
1535
+ // Clear LB policy if set.
1536
+ if (lb_policy_ != nullptr) {
1537
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1538
+ gpr_log(GPR_INFO, "chand=%p: shutting down lb_policy=%p", this,
1539
+ lb_policy_.get());
1540
+ }
1541
+ grpc_pollset_set_del_pollset_set(lb_policy_->interested_parties(),
1542
+ interested_parties_);
1543
+ lb_policy_.reset();
1544
+ }
1561
1545
  }
1562
- // Update connectivity state.
1546
+ }
1547
+
1548
+ void ClientChannel::UpdateStateLocked(grpc_connectivity_state state,
1549
+ const absl::Status& status,
1550
+ const char* reason) {
1563
1551
  state_tracker_.SetState(state, status, reason);
1564
1552
  if (channelz_node_ != nullptr) {
1565
1553
  channelz_node_->SetConnectivityState(state);
@@ -1569,30 +1557,24 @@ void ClientChannel::UpdateStateAndPickerLocked(
1569
1557
  channelz::ChannelNode::GetChannelConnectivityStateChangeString(
1570
1558
  state)));
1571
1559
  }
1572
- // Grab data plane lock to update the picker.
1573
- {
1574
- MutexLock lock(&data_plane_mu_);
1575
- // Swap out the picker.
1576
- // Note: Original value will be destroyed after the lock is released.
1577
- picker_.swap(picker);
1578
- // Re-process queued picks.
1579
- for (LbQueuedCall* call = lb_queued_calls_; call != nullptr;
1580
- call = call->next) {
1581
- // If there are a lot of queued calls here, resuming them all may cause us
1582
- // to stay inside C-core for a long period of time. All of that work would
1583
- // be done using the same ExecCtx instance and therefore the same cached
1584
- // value of "now". The longer it takes to finish all of this work and exit
1585
- // from C-core, the more stale the cached value of "now" may become. This
1586
- // can cause problems whereby (e.g.) we calculate a timer deadline based
1587
- // on the stale value, which results in the timer firing too early. To
1588
- // avoid this, we invalidate the cached value for each call we process.
1589
- ExecCtx::Get()->InvalidateNow();
1590
- grpc_error_handle error = GRPC_ERROR_NONE;
1591
- if (call->lb_call->PickSubchannelLocked(&error)) {
1592
- call->lb_call->AsyncPickDone(error);
1593
- }
1594
- }
1560
+ }
1561
+
1562
+ void ClientChannel::UpdateStateAndPickerLocked(
1563
+ grpc_connectivity_state state, const absl::Status& status,
1564
+ const char* reason,
1565
+ RefCountedPtr<LoadBalancingPolicy::SubchannelPicker> picker) {
1566
+ UpdateStateLocked(state, status, reason);
1567
+ // Grab the LB lock to update the picker and trigger reprocessing of the
1568
+ // queued picks.
1569
+ // Old picker will be unreffed after releasing the lock.
1570
+ MutexLock lock(&lb_mu_);
1571
+ picker_.swap(picker);
1572
+ // Reprocess queued picks.
1573
+ for (LoadBalancedCall* call : lb_queued_calls_) {
1574
+ call->RemoveCallFromLbQueuedCallsLocked();
1575
+ call->RetryPickLocked();
1595
1576
  }
1577
+ lb_queued_calls_.clear();
1596
1578
  }
1597
1579
 
1598
1580
  namespace {
@@ -1631,11 +1613,11 @@ T HandlePickResult(
1631
1613
 
1632
1614
  grpc_error_handle ClientChannel::DoPingLocked(grpc_transport_op* op) {
1633
1615
  if (state_tracker_.state() != GRPC_CHANNEL_READY) {
1634
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING("channel not connected");
1616
+ return GRPC_ERROR_CREATE("channel not connected");
1635
1617
  }
1636
1618
  LoadBalancingPolicy::PickResult result;
1637
1619
  {
1638
- MutexLock lock(&data_plane_mu_);
1620
+ MutexLock lock(&lb_mu_);
1639
1621
  result = picker_->Pick(LoadBalancingPolicy::PickArgs());
1640
1622
  }
1641
1623
  return HandlePickResult<grpc_error_handle>(
@@ -1648,16 +1630,15 @@ grpc_error_handle ClientChannel::DoPingLocked(grpc_transport_op* op) {
1648
1630
  RefCountedPtr<ConnectedSubchannel> connected_subchannel =
1649
1631
  subchannel->connected_subchannel();
1650
1632
  if (connected_subchannel == nullptr) {
1651
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1652
- "LB pick for ping not connected");
1633
+ return GRPC_ERROR_CREATE("LB pick for ping not connected");
1653
1634
  }
1654
1635
  connected_subchannel->Ping(op->send_ping.on_initiate,
1655
1636
  op->send_ping.on_ack);
1656
- return GRPC_ERROR_NONE;
1637
+ return absl::OkStatus();
1657
1638
  },
1658
1639
  // Queue pick.
1659
1640
  [](LoadBalancingPolicy::PickResult::Queue* /*queue_pick*/) {
1660
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING("LB picker queued call");
1641
+ return GRPC_ERROR_CREATE("LB picker queued call");
1661
1642
  },
1662
1643
  // Fail pick.
1663
1644
  [](LoadBalancingPolicy::PickResult::Fail* fail_pick) {
@@ -1681,9 +1662,8 @@ void ClientChannel::StartTransportOpLocked(grpc_transport_op* op) {
1681
1662
  // Ping.
1682
1663
  if (op->send_ping.on_initiate != nullptr || op->send_ping.on_ack != nullptr) {
1683
1664
  grpc_error_handle error = DoPingLocked(op);
1684
- if (!GRPC_ERROR_IS_NONE(error)) {
1685
- ExecCtx::Run(DEBUG_LOCATION, op->send_ping.on_initiate,
1686
- GRPC_ERROR_REF(error));
1665
+ if (!error.ok()) {
1666
+ ExecCtx::Run(DEBUG_LOCATION, op->send_ping.on_initiate, error);
1687
1667
  ExecCtx::Run(DEBUG_LOCATION, op->send_ping.on_ack, error);
1688
1668
  }
1689
1669
  op->bind_pollset = nullptr;
@@ -1697,34 +1677,40 @@ void ClientChannel::StartTransportOpLocked(grpc_transport_op* op) {
1697
1677
  }
1698
1678
  }
1699
1679
  // Disconnect or enter IDLE.
1700
- if (!GRPC_ERROR_IS_NONE(op->disconnect_with_error)) {
1680
+ if (!op->disconnect_with_error.ok()) {
1701
1681
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1702
1682
  gpr_log(GPR_INFO, "chand=%p: disconnect_with_error: %s", this,
1703
- grpc_error_std_string(op->disconnect_with_error).c_str());
1683
+ StatusToString(op->disconnect_with_error).c_str());
1704
1684
  }
1705
1685
  DestroyResolverAndLbPolicyLocked();
1706
1686
  intptr_t value;
1707
1687
  if (grpc_error_get_int(op->disconnect_with_error,
1708
- GRPC_ERROR_INT_CHANNEL_CONNECTIVITY_STATE, &value) &&
1688
+ StatusIntProperty::ChannelConnectivityState,
1689
+ &value) &&
1709
1690
  static_cast<grpc_connectivity_state>(value) == GRPC_CHANNEL_IDLE) {
1710
- if (GRPC_ERROR_IS_NONE(disconnect_error_)) {
1691
+ if (disconnect_error_.ok()) { // Ignore if we're shutting down.
1711
1692
  // Enter IDLE state.
1712
1693
  UpdateStateAndPickerLocked(GRPC_CHANNEL_IDLE, absl::Status(),
1713
1694
  "channel entering IDLE", nullptr);
1695
+ // TODO(roth): Do we need to check for any queued picks here, in
1696
+ // case there's a race condition in the client_idle filter?
1697
+ // And maybe also check for calls in the resolver queue?
1714
1698
  }
1715
- GRPC_ERROR_UNREF(op->disconnect_with_error);
1716
1699
  } else {
1717
1700
  // Disconnect.
1718
- GPR_ASSERT(GRPC_ERROR_IS_NONE(disconnect_error_));
1701
+ GPR_ASSERT(disconnect_error_.ok());
1719
1702
  disconnect_error_ = op->disconnect_with_error;
1720
1703
  UpdateStateAndPickerLocked(
1721
1704
  GRPC_CHANNEL_SHUTDOWN, absl::Status(), "shutdown from API",
1722
- absl::make_unique<LoadBalancingPolicy::TransientFailurePicker>(
1705
+ MakeRefCounted<LoadBalancingPolicy::TransientFailurePicker>(
1723
1706
  grpc_error_to_absl_status(op->disconnect_with_error)));
1707
+ // TODO(roth): If this happens when we're still waiting for a
1708
+ // resolver result, we need to trigger failures for all calls in
1709
+ // the resolver queue here.
1724
1710
  }
1725
1711
  }
1726
1712
  GRPC_CHANNEL_STACK_UNREF(owning_stack_, "start_transport_op");
1727
- ExecCtx::Run(DEBUG_LOCATION, op->on_consumed, GRPC_ERROR_NONE);
1713
+ ExecCtx::Run(DEBUG_LOCATION, op->on_consumed, absl::OkStatus());
1728
1714
  }
1729
1715
 
1730
1716
  void ClientChannel::StartTransportOp(grpc_channel_element* elem,
@@ -1757,30 +1743,6 @@ void ClientChannel::GetChannelInfo(grpc_channel_element* elem,
1757
1743
  }
1758
1744
  }
1759
1745
 
1760
- void ClientChannel::AddLbQueuedCall(LbQueuedCall* call,
1761
- grpc_polling_entity* pollent) {
1762
- // Add call to queued picks list.
1763
- call->next = lb_queued_calls_;
1764
- lb_queued_calls_ = call;
1765
- // Add call's pollent to channel's interested_parties, so that I/O
1766
- // can be done under the call's CQ.
1767
- grpc_polling_entity_add_to_pollset_set(pollent, interested_parties_);
1768
- }
1769
-
1770
- void ClientChannel::RemoveLbQueuedCall(LbQueuedCall* to_remove,
1771
- grpc_polling_entity* pollent) {
1772
- // Remove call's pollent from channel's interested_parties.
1773
- grpc_polling_entity_del_from_pollset_set(pollent, interested_parties_);
1774
- // Remove from queued picks list.
1775
- for (LbQueuedCall** call = &lb_queued_calls_; *call != nullptr;
1776
- call = &(*call)->next) {
1777
- if (*call == to_remove) {
1778
- *call = to_remove->next;
1779
- return;
1780
- }
1781
- }
1782
- }
1783
-
1784
1746
  void ClientChannel::TryToConnectLocked() {
1785
1747
  if (lb_policy_ != nullptr) {
1786
1748
  lb_policy_->ExitIdleLocked();
@@ -1821,77 +1783,226 @@ void ClientChannel::RemoveConnectivityWatcher(
1821
1783
  // CallData implementation
1822
1784
  //
1823
1785
 
1824
- ClientChannel::CallData::CallData(grpc_call_element* elem,
1825
- const ClientChannel& chand,
1826
- const grpc_call_element_args& args)
1827
- : deadline_state_(elem, args,
1828
- GPR_LIKELY(chand.deadline_checking_enabled_)
1829
- ? args.deadline
1830
- : Timestamp::InfFuture()),
1831
- path_(grpc_slice_ref_internal(args.path)),
1786
+ void ClientChannel::CallData::RemoveCallFromResolverQueuedCallsLocked() {
1787
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
1788
+ gpr_log(GPR_INFO,
1789
+ "chand=%p calld=%p: removing from resolver queued picks list",
1790
+ chand(), this);
1791
+ }
1792
+ // Remove call's pollent from channel's interested_parties.
1793
+ grpc_polling_entity_del_from_pollset_set(pollent(),
1794
+ chand()->interested_parties_);
1795
+ // Note: There's no need to actually remove the call from the queue
1796
+ // here, because that will be done in
1797
+ // ResolverQueuedCallCanceller::CancelLocked() or
1798
+ // ClientChannel::ReprocessQueuedResolverCalls().
1799
+ }
1800
+
1801
+ void ClientChannel::CallData::AddCallToResolverQueuedCallsLocked() {
1802
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
1803
+ gpr_log(GPR_INFO, "chand=%p calld=%p: adding to resolver queued picks list",
1804
+ chand(), this);
1805
+ }
1806
+ // Add call's pollent to channel's interested_parties, so that I/O
1807
+ // can be done under the call's CQ.
1808
+ grpc_polling_entity_add_to_pollset_set(pollent(),
1809
+ chand()->interested_parties_);
1810
+ // Add to queue.
1811
+ chand()->resolver_queued_calls_.insert(this);
1812
+ OnAddToQueueLocked();
1813
+ }
1814
+
1815
+ grpc_error_handle ClientChannel::CallData::ApplyServiceConfigToCallLocked(
1816
+ const absl::StatusOr<RefCountedPtr<ConfigSelector>>& config_selector) {
1817
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
1818
+ gpr_log(GPR_INFO, "chand=%p calld=%p: applying service config to call",
1819
+ chand(), this);
1820
+ }
1821
+ if (!config_selector.ok()) return config_selector.status();
1822
+ // Create a ClientChannelServiceConfigCallData for the call. This stores
1823
+ // a ref to the ServiceConfig and caches the right set of parsed configs
1824
+ // to use for the call. The ClientChannelServiceConfigCallData will store
1825
+ // itself in the call context, so that it can be accessed by filters
1826
+ // below us in the stack, and it will be cleaned up when the call ends.
1827
+ auto* service_config_call_data =
1828
+ arena()->New<ClientChannelServiceConfigCallData>(arena(), call_context());
1829
+ // Use the ConfigSelector to determine the config for the call.
1830
+ absl::Status call_config_status =
1831
+ (*config_selector)
1832
+ ->GetCallConfig(
1833
+ {send_initial_metadata(), arena(), service_config_call_data});
1834
+ if (!call_config_status.ok()) {
1835
+ return absl_status_to_grpc_error(
1836
+ MaybeRewriteIllegalStatusCode(call_config_status, "ConfigSelector"));
1837
+ }
1838
+ // Apply our own method params to the call.
1839
+ auto* method_params = static_cast<ClientChannelMethodParsedConfig*>(
1840
+ service_config_call_data->GetMethodParsedConfig(
1841
+ chand()->service_config_parser_index_));
1842
+ if (method_params != nullptr) {
1843
+ // If the deadline from the service config is shorter than the one
1844
+ // from the client API, reset the deadline timer.
1845
+ if (chand()->deadline_checking_enabled_ &&
1846
+ method_params->timeout() != Duration::Zero()) {
1847
+ ResetDeadline(method_params->timeout());
1848
+ }
1849
+ // If the service config set wait_for_ready and the application
1850
+ // did not explicitly set it, use the value from the service config.
1851
+ auto* wait_for_ready =
1852
+ send_initial_metadata()->GetOrCreatePointer(WaitForReady());
1853
+ if (method_params->wait_for_ready().has_value() &&
1854
+ !wait_for_ready->explicitly_set) {
1855
+ wait_for_ready->value = method_params->wait_for_ready().value();
1856
+ }
1857
+ }
1858
+ return absl::OkStatus();
1859
+ }
1860
+
1861
+ absl::optional<absl::Status> ClientChannel::CallData::CheckResolution(
1862
+ bool was_queued) {
1863
+ // Check if we have a resolver result to use.
1864
+ absl::StatusOr<RefCountedPtr<ConfigSelector>> config_selector;
1865
+ {
1866
+ MutexLock lock(&chand()->resolution_mu_);
1867
+ bool result_ready = CheckResolutionLocked(&config_selector);
1868
+ // If no result is available, queue the call.
1869
+ if (!result_ready) {
1870
+ AddCallToResolverQueuedCallsLocked();
1871
+ return absl::nullopt;
1872
+ }
1873
+ }
1874
+ // We have a result. Apply service config to call.
1875
+ grpc_error_handle error = ApplyServiceConfigToCallLocked(config_selector);
1876
+ // ConfigSelector must be unreffed inside the WorkSerializer.
1877
+ if (config_selector.ok()) {
1878
+ chand()->work_serializer_->Run(
1879
+ [config_selector = std::move(*config_selector)]() mutable {
1880
+ config_selector.reset();
1881
+ },
1882
+ DEBUG_LOCATION);
1883
+ }
1884
+ // Handle errors.
1885
+ if (!error.ok()) {
1886
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
1887
+ gpr_log(GPR_INFO,
1888
+ "chand=%p calld=%p: error applying config to call: error=%s",
1889
+ chand(), this, StatusToString(error).c_str());
1890
+ }
1891
+ return error;
1892
+ }
1893
+ // If the call was queued, add trace annotation.
1894
+ if (was_queued) {
1895
+ auto* call_tracer = static_cast<CallTracerAnnotationInterface*>(
1896
+ call_context()[GRPC_CONTEXT_CALL_TRACER_ANNOTATION_INTERFACE].value);
1897
+ if (call_tracer != nullptr) {
1898
+ call_tracer->RecordAnnotation("Delayed name resolution complete.");
1899
+ }
1900
+ }
1901
+ return absl::OkStatus();
1902
+ }
1903
+
1904
+ bool ClientChannel::CallData::CheckResolutionLocked(
1905
+ absl::StatusOr<RefCountedPtr<ConfigSelector>>* config_selector) {
1906
+ // If we don't yet have a resolver result, we need to queue the call
1907
+ // until we get one.
1908
+ if (GPR_UNLIKELY(!chand()->received_service_config_data_)) {
1909
+ // If the resolver returned transient failure before returning the
1910
+ // first service config, fail any non-wait_for_ready calls.
1911
+ absl::Status resolver_error = chand()->resolver_transient_failure_error_;
1912
+ if (!resolver_error.ok() &&
1913
+ !send_initial_metadata()->GetOrCreatePointer(WaitForReady())->value) {
1914
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
1915
+ gpr_log(GPR_INFO, "chand=%p calld=%p: resolution failed, failing call",
1916
+ chand(), this);
1917
+ }
1918
+ *config_selector = absl_status_to_grpc_error(resolver_error);
1919
+ return true;
1920
+ }
1921
+ // Either the resolver has not yet returned a result, or it has
1922
+ // returned transient failure but the call is wait_for_ready. In
1923
+ // either case, queue the call.
1924
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
1925
+ gpr_log(GPR_INFO, "chand=%p calld=%p: no resolver result yet", chand(),
1926
+ this);
1927
+ }
1928
+ return false;
1929
+ }
1930
+ // Result found.
1931
+ *config_selector = chand()->config_selector_;
1932
+ dynamic_filters_ = chand()->dynamic_filters_;
1933
+ return true;
1934
+ }
1935
+
1936
+ //
1937
+ // FilterBasedCallData implementation
1938
+ //
1939
+
1940
+ ClientChannel::FilterBasedCallData::FilterBasedCallData(
1941
+ grpc_call_element* elem, const grpc_call_element_args& args)
1942
+ : path_(CSliceRef(args.path)),
1943
+ call_context_(args.context),
1832
1944
  call_start_time_(args.start_time),
1833
1945
  deadline_(args.deadline),
1834
- arena_(args.arena),
1835
- owning_call_(args.call_stack),
1836
- call_combiner_(args.call_combiner),
1837
- call_context_(args.context) {
1946
+ deadline_state_(elem, args,
1947
+ GPR_LIKELY(static_cast<ClientChannel*>(elem->channel_data)
1948
+ ->deadline_checking_enabled_)
1949
+ ? args.deadline
1950
+ : Timestamp::InfFuture()) {
1838
1951
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
1839
- gpr_log(GPR_INFO, "chand=%p calld=%p: created call", &chand, this);
1952
+ gpr_log(GPR_INFO, "chand=%p calld=%p: created call", chand(), this);
1840
1953
  }
1841
1954
  }
1842
1955
 
1843
- ClientChannel::CallData::~CallData() {
1844
- grpc_slice_unref_internal(path_);
1845
- GRPC_ERROR_UNREF(cancel_error_);
1956
+ ClientChannel::FilterBasedCallData::~FilterBasedCallData() {
1957
+ CSliceUnref(path_);
1846
1958
  // Make sure there are no remaining pending batches.
1847
1959
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
1848
1960
  GPR_ASSERT(pending_batches_[i] == nullptr);
1849
1961
  }
1850
1962
  }
1851
1963
 
1852
- grpc_error_handle ClientChannel::CallData::Init(
1964
+ grpc_error_handle ClientChannel::FilterBasedCallData::Init(
1853
1965
  grpc_call_element* elem, const grpc_call_element_args* args) {
1854
- ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
1855
- new (elem->call_data) CallData(elem, *chand, *args);
1856
- return GRPC_ERROR_NONE;
1966
+ new (elem->call_data) FilterBasedCallData(elem, *args);
1967
+ return absl::OkStatus();
1857
1968
  }
1858
1969
 
1859
- void ClientChannel::CallData::Destroy(
1970
+ void ClientChannel::FilterBasedCallData::Destroy(
1860
1971
  grpc_call_element* elem, const grpc_call_final_info* /*final_info*/,
1861
1972
  grpc_closure* then_schedule_closure) {
1862
- CallData* calld = static_cast<CallData*>(elem->call_data);
1973
+ auto* calld = static_cast<FilterBasedCallData*>(elem->call_data);
1863
1974
  RefCountedPtr<DynamicFilters::Call> dynamic_call =
1864
1975
  std::move(calld->dynamic_call_);
1865
- calld->~CallData();
1976
+ calld->~FilterBasedCallData();
1866
1977
  if (GPR_LIKELY(dynamic_call != nullptr)) {
1867
1978
  dynamic_call->SetAfterCallStackDestroy(then_schedule_closure);
1868
1979
  } else {
1869
1980
  // TODO(yashkt) : This can potentially be a Closure::Run
1870
- ExecCtx::Run(DEBUG_LOCATION, then_schedule_closure, GRPC_ERROR_NONE);
1981
+ ExecCtx::Run(DEBUG_LOCATION, then_schedule_closure, absl::OkStatus());
1871
1982
  }
1872
1983
  }
1873
1984
 
1874
- void ClientChannel::CallData::StartTransportStreamOpBatch(
1985
+ void ClientChannel::FilterBasedCallData::StartTransportStreamOpBatch(
1875
1986
  grpc_call_element* elem, grpc_transport_stream_op_batch* batch) {
1876
- CallData* calld = static_cast<CallData*>(elem->call_data);
1987
+ auto* calld = static_cast<FilterBasedCallData*>(elem->call_data);
1877
1988
  ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
1878
1989
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace) &&
1879
1990
  !GRPC_TRACE_FLAG_ENABLED(grpc_trace_channel)) {
1880
1991
  gpr_log(GPR_INFO, "chand=%p calld=%p: batch started from above: %s", chand,
1881
- calld, grpc_transport_stream_op_batch_string(batch).c_str());
1992
+ calld, grpc_transport_stream_op_batch_string(batch, false).c_str());
1882
1993
  }
1883
1994
  if (GPR_LIKELY(chand->deadline_checking_enabled_)) {
1884
- grpc_deadline_state_client_start_transport_stream_op_batch(elem, batch);
1995
+ grpc_deadline_state_client_start_transport_stream_op_batch(
1996
+ &calld->deadline_state_, batch);
1885
1997
  }
1886
- // Intercept recv_trailing_metadata to call CallDispatchController::Commit(),
1887
- // in case we wind up failing the call before we get down to the retry
1888
- // or LB call layer.
1998
+ // Intercept recv_trailing_metadata to commit the call, in case we wind up
1999
+ // failing the call before we get down to the retry or LB call layer.
1889
2000
  if (batch->recv_trailing_metadata) {
1890
2001
  calld->original_recv_trailing_metadata_ready_ =
1891
2002
  batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready;
1892
2003
  GRPC_CLOSURE_INIT(&calld->recv_trailing_metadata_ready_,
1893
2004
  RecvTrailingMetadataReadyForConfigSelectorCommitCallback,
1894
- elem, nullptr);
2005
+ calld, nullptr);
1895
2006
  batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready =
1896
2007
  &calld->recv_trailing_metadata_ready_;
1897
2008
  }
@@ -1909,15 +2020,14 @@ void ClientChannel::CallData::StartTransportStreamOpBatch(
1909
2020
  // We do not yet have a dynamic call.
1910
2021
  //
1911
2022
  // If we've previously been cancelled, immediately fail any new batches.
1912
- if (GPR_UNLIKELY(!GRPC_ERROR_IS_NONE(calld->cancel_error_))) {
2023
+ if (GPR_UNLIKELY(!calld->cancel_error_.ok())) {
1913
2024
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
1914
2025
  gpr_log(GPR_INFO, "chand=%p calld=%p: failing batch with error: %s",
1915
- chand, calld,
1916
- grpc_error_std_string(calld->cancel_error_).c_str());
2026
+ chand, calld, StatusToString(calld->cancel_error_).c_str());
1917
2027
  }
1918
2028
  // Note: This will release the call combiner.
1919
2029
  grpc_transport_stream_op_batch_finish_with_failure(
1920
- batch, GRPC_ERROR_REF(calld->cancel_error_), calld->call_combiner_);
2030
+ batch, calld->cancel_error_, calld->call_combiner());
1921
2031
  return;
1922
2032
  }
1923
2033
  // Handle cancellation.
@@ -1927,23 +2037,20 @@ void ClientChannel::CallData::StartTransportStreamOpBatch(
1927
2037
  // cancelled before any batches are passed down (e.g., if the deadline
1928
2038
  // is in the past when the call starts), we can return the right
1929
2039
  // error to the caller when the first batch does get passed down.
1930
- GRPC_ERROR_UNREF(calld->cancel_error_);
1931
- calld->cancel_error_ =
1932
- GRPC_ERROR_REF(batch->payload->cancel_stream.cancel_error);
2040
+ calld->cancel_error_ = batch->payload->cancel_stream.cancel_error;
1933
2041
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
1934
2042
  gpr_log(GPR_INFO, "chand=%p calld=%p: recording cancel_error=%s", chand,
1935
- calld, grpc_error_std_string(calld->cancel_error_).c_str());
2043
+ calld, StatusToString(calld->cancel_error_).c_str());
1936
2044
  }
1937
2045
  // Fail all pending batches.
1938
- calld->PendingBatchesFail(elem, GRPC_ERROR_REF(calld->cancel_error_),
1939
- NoYieldCallCombiner);
2046
+ calld->PendingBatchesFail(calld->cancel_error_, NoYieldCallCombiner);
1940
2047
  // Note: This will release the call combiner.
1941
2048
  grpc_transport_stream_op_batch_finish_with_failure(
1942
- batch, GRPC_ERROR_REF(calld->cancel_error_), calld->call_combiner_);
2049
+ batch, calld->cancel_error_, calld->call_combiner());
1943
2050
  return;
1944
2051
  }
1945
2052
  // Add the batch to the pending list.
1946
- calld->PendingBatchesAdd(elem, batch);
2053
+ calld->PendingBatchesAdd(batch);
1947
2054
  // For batches containing a send_initial_metadata op, acquire the
1948
2055
  // channel's resolution mutex to apply the service config to the call,
1949
2056
  // after which we will create a dynamic call.
@@ -1954,7 +2061,23 @@ void ClientChannel::CallData::StartTransportStreamOpBatch(
1954
2061
  "config",
1955
2062
  chand, calld);
1956
2063
  }
1957
- CheckResolution(elem, GRPC_ERROR_NONE);
2064
+ // If we're still in IDLE, we need to start resolving.
2065
+ if (GPR_UNLIKELY(chand->CheckConnectivityState(false) ==
2066
+ GRPC_CHANNEL_IDLE)) {
2067
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2068
+ gpr_log(GPR_INFO, "chand=%p calld=%p: triggering exit idle", chand,
2069
+ calld);
2070
+ }
2071
+ // Bounce into the control plane work serializer to start resolving.
2072
+ GRPC_CHANNEL_STACK_REF(chand->owning_stack_, "ExitIdle");
2073
+ chand->work_serializer_->Run(
2074
+ [chand]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand->work_serializer_) {
2075
+ chand->CheckConnectivityState(/*try_to_connect=*/true);
2076
+ GRPC_CHANNEL_STACK_UNREF(chand->owning_stack_, "ExitIdle");
2077
+ },
2078
+ DEBUG_LOCATION);
2079
+ }
2080
+ calld->TryCheckResolution(/*was_queued=*/false);
1958
2081
  } else {
1959
2082
  // For all other batches, release the call combiner.
1960
2083
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
@@ -1962,26 +2085,21 @@ void ClientChannel::CallData::StartTransportStreamOpBatch(
1962
2085
  "chand=%p calld=%p: saved batch, yielding call combiner", chand,
1963
2086
  calld);
1964
2087
  }
1965
- GRPC_CALL_COMBINER_STOP(calld->call_combiner_,
2088
+ GRPC_CALL_COMBINER_STOP(calld->call_combiner(),
1966
2089
  "batch does not include send_initial_metadata");
1967
2090
  }
1968
2091
  }
1969
2092
 
1970
- void ClientChannel::CallData::SetPollent(grpc_call_element* elem,
1971
- grpc_polling_entity* pollent) {
1972
- CallData* calld = static_cast<CallData*>(elem->call_data);
2093
+ void ClientChannel::FilterBasedCallData::SetPollent(
2094
+ grpc_call_element* elem, grpc_polling_entity* pollent) {
2095
+ auto* calld = static_cast<FilterBasedCallData*>(elem->call_data);
1973
2096
  calld->pollent_ = pollent;
1974
2097
  }
1975
2098
 
1976
- //
1977
- // pending_batches management
1978
- //
1979
-
1980
- size_t ClientChannel::CallData::GetBatchIndex(
2099
+ size_t ClientChannel::FilterBasedCallData::GetBatchIndex(
1981
2100
  grpc_transport_stream_op_batch* batch) {
1982
2101
  // Note: It is important the send_initial_metadata be the first entry
1983
- // here, since the code in ApplyServiceConfigToCallLocked() and
1984
- // CheckResolutionLocked() assumes it will be.
2102
+ // here, since the code in CheckResolution() assumes it will be.
1985
2103
  if (batch->send_initial_metadata) return 0;
1986
2104
  if (batch->send_message) return 1;
1987
2105
  if (batch->send_trailing_metadata) return 2;
@@ -1992,14 +2110,13 @@ size_t ClientChannel::CallData::GetBatchIndex(
1992
2110
  }
1993
2111
 
1994
2112
  // This is called via the call combiner, so access to calld is synchronized.
1995
- void ClientChannel::CallData::PendingBatchesAdd(
1996
- grpc_call_element* elem, grpc_transport_stream_op_batch* batch) {
1997
- ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
2113
+ void ClientChannel::FilterBasedCallData::PendingBatchesAdd(
2114
+ grpc_transport_stream_op_batch* batch) {
1998
2115
  const size_t idx = GetBatchIndex(batch);
1999
2116
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2000
2117
  gpr_log(GPR_INFO,
2001
- "chand=%p calld=%p: adding pending batch at index %" PRIuPTR, chand,
2002
- this, idx);
2118
+ "chand=%p calld=%p: adding pending batch at index %" PRIuPTR,
2119
+ chand(), this, idx);
2003
2120
  }
2004
2121
  grpc_transport_stream_op_batch*& pending = pending_batches_[idx];
2005
2122
  GPR_ASSERT(pending == nullptr);
@@ -2007,21 +2124,22 @@ void ClientChannel::CallData::PendingBatchesAdd(
2007
2124
  }
2008
2125
 
2009
2126
  // This is called via the call combiner, so access to calld is synchronized.
2010
- void ClientChannel::CallData::FailPendingBatchInCallCombiner(
2127
+ void ClientChannel::FilterBasedCallData::FailPendingBatchInCallCombiner(
2011
2128
  void* arg, grpc_error_handle error) {
2012
2129
  grpc_transport_stream_op_batch* batch =
2013
2130
  static_cast<grpc_transport_stream_op_batch*>(arg);
2014
- CallData* calld = static_cast<CallData*>(batch->handler_private.extra_arg);
2131
+ auto* calld =
2132
+ static_cast<FilterBasedCallData*>(batch->handler_private.extra_arg);
2015
2133
  // Note: This will release the call combiner.
2016
- grpc_transport_stream_op_batch_finish_with_failure(
2017
- batch, GRPC_ERROR_REF(error), calld->call_combiner_);
2134
+ grpc_transport_stream_op_batch_finish_with_failure(batch, error,
2135
+ calld->call_combiner());
2018
2136
  }
2019
2137
 
2020
2138
  // This is called via the call combiner, so access to calld is synchronized.
2021
- void ClientChannel::CallData::PendingBatchesFail(
2022
- grpc_call_element* elem, grpc_error_handle error,
2139
+ void ClientChannel::FilterBasedCallData::PendingBatchesFail(
2140
+ grpc_error_handle error,
2023
2141
  YieldCallCombinerPredicate yield_call_combiner_predicate) {
2024
- GPR_ASSERT(!GRPC_ERROR_IS_NONE(error));
2142
+ GPR_ASSERT(!error.ok());
2025
2143
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2026
2144
  size_t num_batches = 0;
2027
2145
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
@@ -2029,8 +2147,7 @@ void ClientChannel::CallData::PendingBatchesFail(
2029
2147
  }
2030
2148
  gpr_log(GPR_INFO,
2031
2149
  "chand=%p calld=%p: failing %" PRIuPTR " pending batches: %s",
2032
- elem->channel_data, this, num_batches,
2033
- grpc_error_std_string(error).c_str());
2150
+ chand(), this, num_batches, StatusToString(error).c_str());
2034
2151
  }
2035
2152
  CallCombinerClosureList closures;
2036
2153
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
@@ -2040,34 +2157,31 @@ void ClientChannel::CallData::PendingBatchesFail(
2040
2157
  GRPC_CLOSURE_INIT(&batch->handler_private.closure,
2041
2158
  FailPendingBatchInCallCombiner, batch,
2042
2159
  grpc_schedule_on_exec_ctx);
2043
- closures.Add(&batch->handler_private.closure, GRPC_ERROR_REF(error),
2160
+ closures.Add(&batch->handler_private.closure, error,
2044
2161
  "PendingBatchesFail");
2045
2162
  batch = nullptr;
2046
2163
  }
2047
2164
  }
2048
2165
  if (yield_call_combiner_predicate(closures)) {
2049
- closures.RunClosures(call_combiner_);
2166
+ closures.RunClosures(call_combiner());
2050
2167
  } else {
2051
- closures.RunClosuresWithoutYielding(call_combiner_);
2168
+ closures.RunClosuresWithoutYielding(call_combiner());
2052
2169
  }
2053
- GRPC_ERROR_UNREF(error);
2054
2170
  }
2055
2171
 
2056
2172
  // This is called via the call combiner, so access to calld is synchronized.
2057
- void ClientChannel::CallData::ResumePendingBatchInCallCombiner(
2173
+ void ClientChannel::FilterBasedCallData::ResumePendingBatchInCallCombiner(
2058
2174
  void* arg, grpc_error_handle /*ignored*/) {
2059
2175
  grpc_transport_stream_op_batch* batch =
2060
2176
  static_cast<grpc_transport_stream_op_batch*>(arg);
2061
- auto* elem =
2062
- static_cast<grpc_call_element*>(batch->handler_private.extra_arg);
2063
- auto* calld = static_cast<CallData*>(elem->call_data);
2177
+ auto* calld =
2178
+ static_cast<FilterBasedCallData*>(batch->handler_private.extra_arg);
2064
2179
  // Note: This will release the call combiner.
2065
2180
  calld->dynamic_call_->StartTransportStreamOpBatch(batch);
2066
2181
  }
2067
2182
 
2068
2183
  // This is called via the call combiner, so access to calld is synchronized.
2069
- void ClientChannel::CallData::PendingBatchesResume(grpc_call_element* elem) {
2070
- ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
2184
+ void ClientChannel::FilterBasedCallData::PendingBatchesResume() {
2071
2185
  // Retries not enabled; send down batches as-is.
2072
2186
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2073
2187
  size_t num_batches = 0;
@@ -2077,325 +2191,162 @@ void ClientChannel::CallData::PendingBatchesResume(grpc_call_element* elem) {
2077
2191
  gpr_log(GPR_INFO,
2078
2192
  "chand=%p calld=%p: starting %" PRIuPTR
2079
2193
  " pending batches on dynamic_call=%p",
2080
- chand, this, num_batches, dynamic_call_.get());
2194
+ chand(), this, num_batches, dynamic_call_.get());
2081
2195
  }
2082
2196
  CallCombinerClosureList closures;
2083
2197
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
2084
2198
  grpc_transport_stream_op_batch*& batch = pending_batches_[i];
2085
2199
  if (batch != nullptr) {
2086
- batch->handler_private.extra_arg = elem;
2200
+ batch->handler_private.extra_arg = this;
2087
2201
  GRPC_CLOSURE_INIT(&batch->handler_private.closure,
2088
2202
  ResumePendingBatchInCallCombiner, batch, nullptr);
2089
- closures.Add(&batch->handler_private.closure, GRPC_ERROR_NONE,
2203
+ closures.Add(&batch->handler_private.closure, absl::OkStatus(),
2090
2204
  "resuming pending batch from client channel call");
2091
2205
  batch = nullptr;
2092
2206
  }
2093
2207
  }
2094
2208
  // Note: This will release the call combiner.
2095
- closures.RunClosures(call_combiner_);
2209
+ closures.RunClosures(call_combiner());
2096
2210
  }
2097
2211
 
2098
- //
2099
- // name resolution
2100
- //
2101
-
2102
2212
  // A class to handle the call combiner cancellation callback for a
2103
2213
  // queued pick.
2104
- class ClientChannel::CallData::ResolverQueuedCallCanceller {
2214
+ class ClientChannel::FilterBasedCallData::ResolverQueuedCallCanceller {
2105
2215
  public:
2106
- explicit ResolverQueuedCallCanceller(grpc_call_element* elem) : elem_(elem) {
2107
- auto* calld = static_cast<CallData*>(elem->call_data);
2108
- GRPC_CALL_STACK_REF(calld->owning_call_, "ResolverQueuedCallCanceller");
2216
+ explicit ResolverQueuedCallCanceller(FilterBasedCallData* calld)
2217
+ : calld_(calld) {
2218
+ GRPC_CALL_STACK_REF(calld->owning_call(), "ResolverQueuedCallCanceller");
2109
2219
  GRPC_CLOSURE_INIT(&closure_, &CancelLocked, this,
2110
2220
  grpc_schedule_on_exec_ctx);
2111
- calld->call_combiner_->SetNotifyOnCancel(&closure_);
2221
+ calld->call_combiner()->SetNotifyOnCancel(&closure_);
2112
2222
  }
2113
2223
 
2114
2224
  private:
2115
2225
  static void CancelLocked(void* arg, grpc_error_handle error) {
2116
2226
  auto* self = static_cast<ResolverQueuedCallCanceller*>(arg);
2117
- auto* chand = static_cast<ClientChannel*>(self->elem_->channel_data);
2118
- auto* calld = static_cast<CallData*>(self->elem_->call_data);
2227
+ auto* calld = self->calld_;
2228
+ auto* chand = calld->chand();
2119
2229
  {
2120
2230
  MutexLock lock(&chand->resolution_mu_);
2121
2231
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2122
2232
  gpr_log(GPR_INFO,
2123
2233
  "chand=%p calld=%p: cancelling resolver queued pick: "
2124
2234
  "error=%s self=%p calld->resolver_pick_canceller=%p",
2125
- chand, calld, grpc_error_std_string(error).c_str(), self,
2235
+ chand, calld, StatusToString(error).c_str(), self,
2126
2236
  calld->resolver_call_canceller_);
2127
2237
  }
2128
- if (calld->resolver_call_canceller_ == self &&
2129
- !GRPC_ERROR_IS_NONE(error)) {
2238
+ if (calld->resolver_call_canceller_ == self && !error.ok()) {
2130
2239
  // Remove pick from list of queued picks.
2131
- calld->MaybeRemoveCallFromResolverQueuedCallsLocked(self->elem_);
2240
+ calld->RemoveCallFromResolverQueuedCallsLocked();
2241
+ chand->resolver_queued_calls_.erase(calld);
2132
2242
  // Fail pending batches on the call.
2133
- calld->PendingBatchesFail(self->elem_, GRPC_ERROR_REF(error),
2243
+ calld->PendingBatchesFail(error,
2134
2244
  YieldCallCombinerIfPendingBatchesFound);
2135
2245
  }
2136
2246
  }
2137
- GRPC_CALL_STACK_UNREF(calld->owning_call_, "ResolvingQueuedCallCanceller");
2247
+ GRPC_CALL_STACK_UNREF(calld->owning_call(), "ResolvingQueuedCallCanceller");
2138
2248
  delete self;
2139
2249
  }
2140
2250
 
2141
- grpc_call_element* elem_;
2251
+ FilterBasedCallData* calld_;
2142
2252
  grpc_closure closure_;
2143
2253
  };
2144
2254
 
2145
- void ClientChannel::CallData::MaybeRemoveCallFromResolverQueuedCallsLocked(
2146
- grpc_call_element* elem) {
2147
- if (!queued_pending_resolver_result_) return;
2148
- auto* chand = static_cast<ClientChannel*>(elem->channel_data);
2149
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2150
- gpr_log(GPR_INFO,
2151
- "chand=%p calld=%p: removing from resolver queued picks list",
2152
- chand, this);
2255
+ void ClientChannel::FilterBasedCallData::TryCheckResolution(bool was_queued) {
2256
+ auto result = CheckResolution(was_queued);
2257
+ if (result.has_value()) {
2258
+ if (!result->ok()) {
2259
+ PendingBatchesFail(*result, YieldCallCombiner);
2260
+ return;
2261
+ }
2262
+ CreateDynamicCall();
2153
2263
  }
2154
- chand->RemoveResolverQueuedCall(&resolver_queued_call_, pollent_);
2155
- queued_pending_resolver_result_ = false;
2156
- // Lame the call combiner canceller.
2157
- resolver_call_canceller_ = nullptr;
2158
2264
  }
2159
2265
 
2160
- void ClientChannel::CallData::MaybeAddCallToResolverQueuedCallsLocked(
2161
- grpc_call_element* elem) {
2162
- if (queued_pending_resolver_result_) return;
2163
- auto* chand = static_cast<ClientChannel*>(elem->channel_data);
2164
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2165
- gpr_log(GPR_INFO, "chand=%p calld=%p: adding to resolver queued picks list",
2166
- chand, this);
2167
- }
2168
- queued_pending_resolver_result_ = true;
2169
- resolver_queued_call_.elem = elem;
2170
- chand->AddResolverQueuedCall(&resolver_queued_call_, pollent_);
2266
+ void ClientChannel::FilterBasedCallData::OnAddToQueueLocked() {
2171
2267
  // Register call combiner cancellation callback.
2172
- resolver_call_canceller_ = new ResolverQueuedCallCanceller(elem);
2268
+ resolver_call_canceller_ = new ResolverQueuedCallCanceller(this);
2173
2269
  }
2174
2270
 
2175
- grpc_error_handle ClientChannel::CallData::ApplyServiceConfigToCallLocked(
2176
- grpc_call_element* elem, grpc_metadata_batch* initial_metadata) {
2177
- ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
2271
+ void ClientChannel::FilterBasedCallData::RetryCheckResolutionLocked() {
2272
+ // Lame the call combiner canceller.
2273
+ resolver_call_canceller_ = nullptr;
2274
+ // Do an async callback to resume call processing, so that we're not
2275
+ // doing it while holding the channel's resolution mutex.
2276
+ chand()->owning_stack_->EventEngine()->Run([this]() {
2277
+ ApplicationCallbackExecCtx application_exec_ctx;
2278
+ ExecCtx exec_ctx;
2279
+ TryCheckResolution(/*was_queued=*/true);
2280
+ });
2281
+ }
2282
+
2283
+ void ClientChannel::FilterBasedCallData::CreateDynamicCall() {
2284
+ DynamicFilters::Call::Args args = {dynamic_filters(), pollent_, path_,
2285
+ call_start_time_, deadline_, arena(),
2286
+ call_context_, call_combiner()};
2287
+ grpc_error_handle error;
2288
+ DynamicFilters* channel_stack = args.channel_stack.get();
2178
2289
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2179
- gpr_log(GPR_INFO, "chand=%p calld=%p: applying service config to call",
2180
- chand, this);
2181
- }
2182
- ConfigSelector* config_selector = chand->config_selector_.get();
2183
- if (config_selector != nullptr) {
2184
- // Use the ConfigSelector to determine the config for the call.
2185
- ConfigSelector::CallConfig call_config =
2186
- config_selector->GetCallConfig({&path_, initial_metadata, arena_});
2187
- if (!call_config.status.ok()) {
2188
- return absl_status_to_grpc_error(MaybeRewriteIllegalStatusCode(
2189
- std::move(call_config.status), "ConfigSelector"));
2190
- }
2191
- // Create a ClientChannelServiceConfigCallData for the call. This stores
2192
- // a ref to the ServiceConfig and caches the right set of parsed configs
2193
- // to use for the call. The ClientChannelServiceConfigCallData will store
2194
- // itself in the call context, so that it can be accessed by filters
2195
- // below us in the stack, and it will be cleaned up when the call ends.
2196
- auto* service_config_call_data =
2197
- arena_->New<ClientChannelServiceConfigCallData>(
2198
- std::move(call_config.service_config), call_config.method_configs,
2199
- std::move(call_config.call_attributes),
2200
- call_config.call_dispatch_controller, call_context_);
2201
- // Apply our own method params to the call.
2202
- auto* method_params = static_cast<ClientChannelMethodParsedConfig*>(
2203
- service_config_call_data->GetMethodParsedConfig(
2204
- chand->service_config_parser_index_));
2205
- if (method_params != nullptr) {
2206
- // If the deadline from the service config is shorter than the one
2207
- // from the client API, reset the deadline timer.
2208
- if (chand->deadline_checking_enabled_ &&
2209
- method_params->timeout() != Duration::Zero()) {
2210
- const Timestamp per_method_deadline =
2211
- Timestamp::FromCycleCounterRoundUp(call_start_time_) +
2212
- method_params->timeout();
2213
- if (per_method_deadline < deadline_) {
2214
- deadline_ = per_method_deadline;
2215
- grpc_deadline_state_reset(elem, deadline_);
2216
- }
2217
- }
2218
- // If the service config set wait_for_ready and the application
2219
- // did not explicitly set it, use the value from the service config.
2220
- auto* wait_for_ready =
2221
- pending_batches_[0]
2222
- ->payload->send_initial_metadata.send_initial_metadata
2223
- ->GetOrCreatePointer(WaitForReady());
2224
- if (method_params->wait_for_ready().has_value() &&
2225
- !wait_for_ready->explicitly_set) {
2226
- wait_for_ready->value = method_params->wait_for_ready().value();
2227
- }
2290
+ gpr_log(
2291
+ GPR_INFO,
2292
+ "chand=%p calld=%p: creating dynamic call stack on channel_stack=%p",
2293
+ chand(), this, channel_stack);
2294
+ }
2295
+ dynamic_call_ = channel_stack->CreateCall(std::move(args), &error);
2296
+ if (!error.ok()) {
2297
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2298
+ gpr_log(GPR_INFO,
2299
+ "chand=%p calld=%p: failed to create dynamic call: error=%s",
2300
+ chand(), this, StatusToString(error).c_str());
2228
2301
  }
2229
- // Set the dynamic filter stack.
2230
- dynamic_filters_ = chand->dynamic_filters_;
2302
+ PendingBatchesFail(error, YieldCallCombiner);
2303
+ return;
2231
2304
  }
2232
- return GRPC_ERROR_NONE;
2305
+ PendingBatchesResume();
2233
2306
  }
2234
2307
 
2235
- void ClientChannel::CallData::
2308
+ void ClientChannel::FilterBasedCallData::
2236
2309
  RecvTrailingMetadataReadyForConfigSelectorCommitCallback(
2237
2310
  void* arg, grpc_error_handle error) {
2238
- auto* elem = static_cast<grpc_call_element*>(arg);
2239
- auto* chand = static_cast<ClientChannel*>(elem->channel_data);
2240
- auto* calld = static_cast<CallData*>(elem->call_data);
2311
+ auto* calld = static_cast<FilterBasedCallData*>(arg);
2312
+ auto* chand = calld->chand();
2241
2313
  auto* service_config_call_data =
2242
2314
  static_cast<ClientChannelServiceConfigCallData*>(
2243
- calld->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
2315
+ calld->call_context()[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
2244
2316
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2245
2317
  gpr_log(GPR_INFO,
2246
2318
  "chand=%p calld=%p: got recv_trailing_metadata_ready: error=%s "
2247
2319
  "service_config_call_data=%p",
2248
- chand, calld, grpc_error_std_string(error).c_str(),
2320
+ chand, calld, StatusToString(error).c_str(),
2249
2321
  service_config_call_data);
2250
2322
  }
2251
2323
  if (service_config_call_data != nullptr) {
2252
- service_config_call_data->call_dispatch_controller()->Commit();
2324
+ service_config_call_data->Commit();
2253
2325
  }
2254
2326
  // Chain to original callback.
2255
2327
  Closure::Run(DEBUG_LOCATION, calld->original_recv_trailing_metadata_ready_,
2256
- GRPC_ERROR_REF(error));
2257
- }
2258
-
2259
- void ClientChannel::CallData::AsyncResolutionDone(grpc_call_element* elem,
2260
- grpc_error_handle error) {
2261
- // TODO(roth): Does this callback need to hold a ref to the call stack?
2262
- GRPC_CLOSURE_INIT(&resolution_done_closure_, ResolutionDone, elem, nullptr);
2263
- ExecCtx::Run(DEBUG_LOCATION, &resolution_done_closure_, error);
2328
+ error);
2264
2329
  }
2265
2330
 
2266
- void ClientChannel::CallData::ResolutionDone(void* arg,
2267
- grpc_error_handle error) {
2268
- grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
2269
- ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
2270
- CallData* calld = static_cast<CallData*>(elem->call_data);
2271
- if (!GRPC_ERROR_IS_NONE(error)) {
2272
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2273
- gpr_log(GPR_INFO,
2274
- "chand=%p calld=%p: error applying config to call: error=%s",
2275
- chand, calld, grpc_error_std_string(error).c_str());
2276
- }
2277
- calld->PendingBatchesFail(elem, GRPC_ERROR_REF(error), YieldCallCombiner);
2278
- return;
2279
- }
2280
- calld->CreateDynamicCall(elem);
2281
- }
2331
+ //
2332
+ // ClientChannel::LoadBalancedCall::LbCallState
2333
+ //
2282
2334
 
2283
- void ClientChannel::CallData::CheckResolution(void* arg,
2284
- grpc_error_handle error) {
2285
- grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
2286
- CallData* calld = static_cast<CallData*>(elem->call_data);
2287
- ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
2288
- bool resolution_complete;
2289
- {
2290
- MutexLock lock(&chand->resolution_mu_);
2291
- resolution_complete = calld->CheckResolutionLocked(elem, &error);
2292
- }
2293
- if (resolution_complete) {
2294
- ResolutionDone(elem, error);
2295
- GRPC_ERROR_UNREF(error);
2296
- }
2297
- }
2335
+ class ClientChannel::LoadBalancedCall::LbCallState
2336
+ : public ClientChannelLbCallState {
2337
+ public:
2338
+ explicit LbCallState(LoadBalancedCall* lb_call) : lb_call_(lb_call) {}
2298
2339
 
2299
- bool ClientChannel::CallData::CheckResolutionLocked(grpc_call_element* elem,
2300
- grpc_error_handle* error) {
2301
- ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
2302
- // If we're still in IDLE, we need to start resolving.
2303
- if (GPR_UNLIKELY(chand->CheckConnectivityState(false) == GRPC_CHANNEL_IDLE)) {
2304
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2305
- gpr_log(GPR_INFO, "chand=%p calld=%p: triggering exit idle", chand, this);
2306
- }
2307
- // Bounce into the control plane work serializer to start resolving,
2308
- // in case we are still in IDLE state. Since we are holding on to the
2309
- // resolution mutex here, we offload it on the ExecCtx so that we don't
2310
- // deadlock with ourselves.
2311
- GRPC_CHANNEL_STACK_REF(chand->owning_stack_, "CheckResolutionLocked");
2312
- ExecCtx::Run(
2313
- DEBUG_LOCATION,
2314
- GRPC_CLOSURE_CREATE(
2315
- [](void* arg, grpc_error_handle /*error*/) {
2316
- auto* chand = static_cast<ClientChannel*>(arg);
2317
- chand->work_serializer_->Run(
2318
- [chand]()
2319
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand->work_serializer_) {
2320
- chand->CheckConnectivityState(/*try_to_connect=*/true);
2321
- GRPC_CHANNEL_STACK_UNREF(chand->owning_stack_,
2322
- "CheckResolutionLocked");
2323
- },
2324
- DEBUG_LOCATION);
2325
- },
2326
- chand, nullptr),
2327
- GRPC_ERROR_NONE);
2328
- }
2329
- // Get send_initial_metadata batch and flags.
2330
- auto& send_initial_metadata =
2331
- pending_batches_[0]->payload->send_initial_metadata;
2332
- grpc_metadata_batch* initial_metadata_batch =
2333
- send_initial_metadata.send_initial_metadata;
2334
- // If we don't yet have a resolver result, we need to queue the call
2335
- // until we get one.
2336
- if (GPR_UNLIKELY(!chand->received_service_config_data_)) {
2337
- // If the resolver returned transient failure before returning the
2338
- // first service config, fail any non-wait_for_ready calls.
2339
- absl::Status resolver_error = chand->resolver_transient_failure_error_;
2340
- if (!resolver_error.ok() &&
2341
- !initial_metadata_batch->GetOrCreatePointer(WaitForReady())->value) {
2342
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2343
- gpr_log(GPR_INFO, "chand=%p calld=%p: resolution failed, failing call",
2344
- chand, this);
2345
- }
2346
- MaybeRemoveCallFromResolverQueuedCallsLocked(elem);
2347
- *error = absl_status_to_grpc_error(resolver_error);
2348
- return true;
2349
- }
2350
- // Either the resolver has not yet returned a result, or it has
2351
- // returned transient failure but the call is wait_for_ready. In
2352
- // either case, queue the call.
2353
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2354
- gpr_log(GPR_INFO, "chand=%p calld=%p: queuing to wait for resolution",
2355
- chand, this);
2356
- }
2357
- MaybeAddCallToResolverQueuedCallsLocked(elem);
2358
- return false;
2359
- }
2360
- // Apply service config to call if not yet applied.
2361
- if (GPR_LIKELY(!service_config_applied_)) {
2362
- service_config_applied_ = true;
2363
- *error = ApplyServiceConfigToCallLocked(elem, initial_metadata_batch);
2364
- }
2365
- MaybeRemoveCallFromResolverQueuedCallsLocked(elem);
2366
- return true;
2367
- }
2340
+ void* Alloc(size_t size) override { return lb_call_->arena()->Alloc(size); }
2368
2341
 
2369
- void ClientChannel::CallData::CreateDynamicCall(grpc_call_element* elem) {
2370
- auto* chand = static_cast<ClientChannel*>(elem->channel_data);
2371
- DynamicFilters::Call::Args args = {std::move(dynamic_filters_),
2372
- pollent_,
2373
- path_,
2374
- call_start_time_,
2375
- deadline_,
2376
- arena_,
2377
- call_context_,
2378
- call_combiner_};
2379
- grpc_error_handle error = GRPC_ERROR_NONE;
2380
- DynamicFilters* channel_stack = args.channel_stack.get();
2381
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2382
- gpr_log(
2383
- GPR_INFO,
2384
- "chand=%p calld=%p: creating dynamic call stack on channel_stack=%p",
2385
- chand, this, channel_stack);
2386
- }
2387
- dynamic_call_ = channel_stack->CreateCall(std::move(args), &error);
2388
- if (!GRPC_ERROR_IS_NONE(error)) {
2389
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2390
- gpr_log(GPR_INFO,
2391
- "chand=%p calld=%p: failed to create dynamic call: error=%s",
2392
- chand, this, grpc_error_std_string(error).c_str());
2393
- }
2394
- PendingBatchesFail(elem, error, YieldCallCombiner);
2395
- return;
2396
- }
2397
- PendingBatchesResume(elem);
2398
- }
2342
+ // Internal API to allow first-party LB policies to access per-call
2343
+ // attributes set by the ConfigSelector.
2344
+ ServiceConfigCallData::CallAttributeInterface* GetCallAttribute(
2345
+ UniqueTypeName type) const override;
2346
+
2347
+ private:
2348
+ LoadBalancedCall* lb_call_;
2349
+ };
2399
2350
 
2400
2351
  //
2401
2352
  // ClientChannel::LoadBalancedCall::Metadata
@@ -2476,15 +2427,12 @@ class ClientChannel::LoadBalancedCall::Metadata
2476
2427
  // ClientChannel::LoadBalancedCall::LbCallState
2477
2428
  //
2478
2429
 
2479
- absl::string_view
2430
+ ServiceConfigCallData::CallAttributeInterface*
2480
2431
  ClientChannel::LoadBalancedCall::LbCallState::GetCallAttribute(
2481
- UniqueTypeName type) {
2432
+ UniqueTypeName type) const {
2482
2433
  auto* service_config_call_data = static_cast<ServiceConfigCallData*>(
2483
- lb_call_->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
2484
- auto& call_attributes = service_config_call_data->call_attributes();
2485
- auto it = call_attributes.find(type);
2486
- if (it == call_attributes.end()) return absl::string_view();
2487
- return it->second;
2434
+ lb_call_->call_context()[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
2435
+ return service_config_call_data->GetCallAttribute(type);
2488
2436
  }
2489
2437
 
2490
2438
  //
@@ -2494,15 +2442,16 @@ ClientChannel::LoadBalancedCall::LbCallState::GetCallAttribute(
2494
2442
  class ClientChannel::LoadBalancedCall::BackendMetricAccessor
2495
2443
  : public LoadBalancingPolicy::BackendMetricAccessor {
2496
2444
  public:
2497
- explicit BackendMetricAccessor(LoadBalancedCall* lb_call)
2498
- : lb_call_(lb_call) {}
2445
+ BackendMetricAccessor(LoadBalancedCall* lb_call,
2446
+ grpc_metadata_batch* recv_trailing_metadata)
2447
+ : lb_call_(lb_call), recv_trailing_metadata_(recv_trailing_metadata) {}
2499
2448
 
2500
2449
  const BackendMetricData* GetBackendMetricData() override {
2501
2450
  if (lb_call_->backend_metric_data_ == nullptr &&
2502
- lb_call_->recv_trailing_metadata_ != nullptr) {
2503
- if (const auto* md = lb_call_->recv_trailing_metadata_->get_pointer(
2451
+ recv_trailing_metadata_ != nullptr) {
2452
+ if (const auto* md = recv_trailing_metadata_->get_pointer(
2504
2453
  EndpointLoadMetricsBinMetadata())) {
2505
- BackendMetricAllocator allocator(lb_call_->arena_);
2454
+ BackendMetricAllocator allocator(lb_call_->arena());
2506
2455
  lb_call_->backend_metric_data_ =
2507
2456
  ParseBackendMetricData(md->as_string_view(), &allocator);
2508
2457
  }
@@ -2528,6 +2477,7 @@ class ClientChannel::LoadBalancedCall::BackendMetricAccessor
2528
2477
  };
2529
2478
 
2530
2479
  LoadBalancedCall* lb_call_;
2480
+ grpc_metadata_batch* recv_trailing_metadata_;
2531
2481
  };
2532
2482
 
2533
2483
  //
@@ -2536,78 +2486,301 @@ class ClientChannel::LoadBalancedCall::BackendMetricAccessor
2536
2486
 
2537
2487
  namespace {
2538
2488
 
2539
- CallTracer::CallAttemptTracer* GetCallAttemptTracer(
2489
+ ClientCallTracer::CallAttemptTracer* CreateCallAttemptTracer(
2540
2490
  grpc_call_context_element* context, bool is_transparent_retry) {
2541
- auto* call_tracer =
2542
- static_cast<CallTracer*>(context[GRPC_CONTEXT_CALL_TRACER].value);
2491
+ auto* call_tracer = static_cast<ClientCallTracer*>(
2492
+ context[GRPC_CONTEXT_CALL_TRACER_ANNOTATION_INTERFACE].value);
2543
2493
  if (call_tracer == nullptr) return nullptr;
2544
- return call_tracer->StartNewAttempt(is_transparent_retry);
2494
+ auto* tracer = call_tracer->StartNewAttempt(is_transparent_retry);
2495
+ context[GRPC_CONTEXT_CALL_TRACER].value = tracer;
2496
+ return tracer;
2545
2497
  }
2546
2498
 
2547
2499
  } // namespace
2548
2500
 
2549
2501
  ClientChannel::LoadBalancedCall::LoadBalancedCall(
2550
- ClientChannel* chand, const grpc_call_element_args& args,
2551
- grpc_polling_entity* pollent, grpc_closure* on_call_destruction_complete,
2552
- ConfigSelector::CallDispatchController* call_dispatch_controller,
2553
- bool is_transparent_retry)
2502
+ ClientChannel* chand, grpc_call_context_element* call_context,
2503
+ absl::AnyInvocable<void()> on_commit, bool is_transparent_retry)
2554
2504
  : InternallyRefCounted(
2555
2505
  GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)
2556
2506
  ? "LoadBalancedCall"
2557
2507
  : nullptr),
2558
2508
  chand_(chand),
2559
- path_(grpc_slice_ref_internal(args.path)),
2560
- deadline_(args.deadline),
2561
- arena_(args.arena),
2562
- owning_call_(args.call_stack),
2563
- call_combiner_(args.call_combiner),
2564
- call_context_(args.context),
2565
- pollent_(pollent),
2566
- on_call_destruction_complete_(on_call_destruction_complete),
2567
- call_dispatch_controller_(call_dispatch_controller),
2568
- call_attempt_tracer_(
2569
- GetCallAttemptTracer(args.context, is_transparent_retry)) {
2509
+ on_commit_(std::move(on_commit)) {
2510
+ CreateCallAttemptTracer(call_context, is_transparent_retry);
2570
2511
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2571
2512
  gpr_log(GPR_INFO, "chand=%p lb_call=%p: created", chand_, this);
2572
2513
  }
2573
2514
  }
2574
2515
 
2575
2516
  ClientChannel::LoadBalancedCall::~LoadBalancedCall() {
2576
- GRPC_ERROR_UNREF(cancel_error_);
2577
- GRPC_ERROR_UNREF(failure_error_);
2578
2517
  if (backend_metric_data_ != nullptr) {
2579
2518
  backend_metric_data_->BackendMetricData::~BackendMetricData();
2580
2519
  }
2520
+ }
2521
+
2522
+ void ClientChannel::LoadBalancedCall::Orphan() {
2523
+ // Compute latency and report it to the tracer.
2524
+ if (call_attempt_tracer() != nullptr) {
2525
+ gpr_timespec latency =
2526
+ gpr_cycle_counter_sub(gpr_get_cycle_counter(), lb_call_start_time_);
2527
+ call_attempt_tracer()->RecordEnd(latency);
2528
+ }
2529
+ Unref();
2530
+ }
2531
+
2532
+ void ClientChannel::LoadBalancedCall::RecordCallCompletion(
2533
+ absl::Status status, grpc_metadata_batch* recv_trailing_metadata,
2534
+ grpc_transport_stream_stats* transport_stream_stats,
2535
+ absl::string_view peer_address) {
2536
+ // If we have a tracer, notify it.
2537
+ if (call_attempt_tracer() != nullptr) {
2538
+ call_attempt_tracer()->RecordReceivedTrailingMetadata(
2539
+ status, recv_trailing_metadata, transport_stream_stats);
2540
+ }
2541
+ // If the LB policy requested a callback for trailing metadata, invoke
2542
+ // the callback.
2543
+ if (lb_subchannel_call_tracker_ != nullptr) {
2544
+ Metadata trailing_metadata(recv_trailing_metadata);
2545
+ BackendMetricAccessor backend_metric_accessor(this, recv_trailing_metadata);
2546
+ LoadBalancingPolicy::SubchannelCallTrackerInterface::FinishArgs args = {
2547
+ peer_address, status, &trailing_metadata, &backend_metric_accessor};
2548
+ lb_subchannel_call_tracker_->Finish(args);
2549
+ lb_subchannel_call_tracker_.reset();
2550
+ }
2551
+ }
2552
+
2553
+ void ClientChannel::LoadBalancedCall::RemoveCallFromLbQueuedCallsLocked() {
2554
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2555
+ gpr_log(GPR_INFO, "chand=%p lb_call=%p: removing from queued picks list",
2556
+ chand_, this);
2557
+ }
2558
+ // Remove pollset_set linkage.
2559
+ grpc_polling_entity_del_from_pollset_set(pollent(),
2560
+ chand_->interested_parties_);
2561
+ // Note: There's no need to actually remove the call from the queue
2562
+ // here, beacuse that will be done in either
2563
+ // LbQueuedCallCanceller::CancelLocked() or
2564
+ // in ClientChannel::UpdateStateAndPickerLocked().
2565
+ }
2566
+
2567
+ void ClientChannel::LoadBalancedCall::AddCallToLbQueuedCallsLocked() {
2568
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2569
+ gpr_log(GPR_INFO, "chand=%p lb_call=%p: adding to queued picks list",
2570
+ chand_, this);
2571
+ }
2572
+ // Add call's pollent to channel's interested_parties, so that I/O
2573
+ // can be done under the call's CQ.
2574
+ grpc_polling_entity_add_to_pollset_set(pollent(),
2575
+ chand_->interested_parties_);
2576
+ // Add to queue.
2577
+ chand_->lb_queued_calls_.insert(this);
2578
+ OnAddToQueueLocked();
2579
+ }
2580
+
2581
+ absl::optional<absl::Status> ClientChannel::LoadBalancedCall::PickSubchannel(
2582
+ bool was_queued) {
2583
+ // We may accumulate multiple pickers here, because if a picker says
2584
+ // to queue the call, we check again to see if the picker has been
2585
+ // updated before we queue it.
2586
+ // We need to unref pickers in the WorkSerializer.
2587
+ std::vector<RefCountedPtr<LoadBalancingPolicy::SubchannelPicker>> pickers;
2588
+ auto cleanup = absl::MakeCleanup([&]() {
2589
+ chand_->work_serializer_->Run(
2590
+ [pickers = std::move(pickers)]() mutable {
2591
+ for (auto& picker : pickers) {
2592
+ picker.reset(DEBUG_LOCATION, "PickSubchannel");
2593
+ }
2594
+ },
2595
+ DEBUG_LOCATION);
2596
+ });
2597
+ // Grab mutex and take a ref to the picker.
2598
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2599
+ gpr_log(GPR_INFO, "chand=%p lb_call=%p: grabbing LB mutex to get picker",
2600
+ chand_, this);
2601
+ }
2602
+ {
2603
+ MutexLock lock(&chand_->lb_mu_);
2604
+ pickers.emplace_back(chand_->picker_);
2605
+ }
2606
+ while (true) {
2607
+ // Do pick.
2608
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2609
+ gpr_log(GPR_INFO, "chand=%p lb_call=%p: performing pick with picker=%p",
2610
+ chand_, this, pickers.back().get());
2611
+ }
2612
+ grpc_error_handle error;
2613
+ bool pick_complete = PickSubchannelImpl(pickers.back().get(), &error);
2614
+ if (!pick_complete) {
2615
+ MutexLock lock(&chand_->lb_mu_);
2616
+ // If picker has been swapped out since we grabbed it, try again.
2617
+ if (chand_->picker_ != pickers.back()) {
2618
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2619
+ gpr_log(GPR_INFO,
2620
+ "chand=%p lb_call=%p: pick not complete, but picker changed",
2621
+ chand_, this);
2622
+ }
2623
+ pickers.emplace_back(chand_->picker_);
2624
+ continue;
2625
+ }
2626
+ // Otherwise queue the pick to try again later when we get a new picker.
2627
+ AddCallToLbQueuedCallsLocked();
2628
+ return absl::nullopt;
2629
+ }
2630
+ // Pick is complete.
2631
+ // If it was queued, add a trace annotation.
2632
+ if (was_queued && call_attempt_tracer() != nullptr) {
2633
+ call_attempt_tracer()->RecordAnnotation("Delayed LB pick complete.");
2634
+ }
2635
+ // If the pick failed, fail the call.
2636
+ if (!error.ok()) {
2637
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2638
+ gpr_log(GPR_INFO,
2639
+ "chand=%p lb_call=%p: failed to pick subchannel: error=%s",
2640
+ chand_, this, StatusToString(error).c_str());
2641
+ }
2642
+ return error;
2643
+ }
2644
+ // Pick succeeded.
2645
+ Commit();
2646
+ return absl::OkStatus();
2647
+ }
2648
+ }
2649
+
2650
+ bool ClientChannel::LoadBalancedCall::PickSubchannelImpl(
2651
+ LoadBalancingPolicy::SubchannelPicker* picker, grpc_error_handle* error) {
2652
+ GPR_ASSERT(connected_subchannel_ == nullptr);
2653
+ // Perform LB pick.
2654
+ LoadBalancingPolicy::PickArgs pick_args;
2655
+ Slice* path = send_initial_metadata()->get_pointer(HttpPathMetadata());
2656
+ GPR_ASSERT(path != nullptr);
2657
+ pick_args.path = path->as_string_view();
2658
+ LbCallState lb_call_state(this);
2659
+ pick_args.call_state = &lb_call_state;
2660
+ Metadata initial_metadata(send_initial_metadata());
2661
+ pick_args.initial_metadata = &initial_metadata;
2662
+ auto result = picker->Pick(pick_args);
2663
+ return HandlePickResult<bool>(
2664
+ &result,
2665
+ // CompletePick
2666
+ [this](LoadBalancingPolicy::PickResult::Complete* complete_pick) {
2667
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2668
+ gpr_log(GPR_INFO,
2669
+ "chand=%p lb_call=%p: LB pick succeeded: subchannel=%p",
2670
+ chand_, this, complete_pick->subchannel.get());
2671
+ }
2672
+ GPR_ASSERT(complete_pick->subchannel != nullptr);
2673
+ // Grab a ref to the connected subchannel while we're still
2674
+ // holding the data plane mutex.
2675
+ SubchannelWrapper* subchannel =
2676
+ static_cast<SubchannelWrapper*>(complete_pick->subchannel.get());
2677
+ connected_subchannel_ = subchannel->connected_subchannel();
2678
+ // If the subchannel has no connected subchannel (e.g., if the
2679
+ // subchannel has moved out of state READY but the LB policy hasn't
2680
+ // yet seen that change and given us a new picker), then just
2681
+ // queue the pick. We'll try again as soon as we get a new picker.
2682
+ if (connected_subchannel_ == nullptr) {
2683
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2684
+ gpr_log(GPR_INFO,
2685
+ "chand=%p lb_call=%p: subchannel returned by LB picker "
2686
+ "has no connected subchannel; queueing pick",
2687
+ chand_, this);
2688
+ }
2689
+ return false;
2690
+ }
2691
+ lb_subchannel_call_tracker_ =
2692
+ std::move(complete_pick->subchannel_call_tracker);
2693
+ if (lb_subchannel_call_tracker_ != nullptr) {
2694
+ lb_subchannel_call_tracker_->Start();
2695
+ }
2696
+ return true;
2697
+ },
2698
+ // QueuePick
2699
+ [this](LoadBalancingPolicy::PickResult::Queue* /*queue_pick*/) {
2700
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2701
+ gpr_log(GPR_INFO, "chand=%p lb_call=%p: LB pick queued", chand_,
2702
+ this);
2703
+ }
2704
+ return false;
2705
+ },
2706
+ // FailPick
2707
+ [this, &error](LoadBalancingPolicy::PickResult::Fail* fail_pick) {
2708
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2709
+ gpr_log(GPR_INFO, "chand=%p lb_call=%p: LB pick failed: %s", chand_,
2710
+ this, fail_pick->status.ToString().c_str());
2711
+ }
2712
+ // If wait_for_ready is false, then the error indicates the RPC
2713
+ // attempt's final status.
2714
+ if (!send_initial_metadata()
2715
+ ->GetOrCreatePointer(WaitForReady())
2716
+ ->value) {
2717
+ *error = absl_status_to_grpc_error(MaybeRewriteIllegalStatusCode(
2718
+ std::move(fail_pick->status), "LB pick"));
2719
+ return true;
2720
+ }
2721
+ // If wait_for_ready is true, then queue to retry when we get a new
2722
+ // picker.
2723
+ return false;
2724
+ },
2725
+ // DropPick
2726
+ [this, &error](LoadBalancingPolicy::PickResult::Drop* drop_pick) {
2727
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2728
+ gpr_log(GPR_INFO, "chand=%p lb_call=%p: LB pick dropped: %s", chand_,
2729
+ this, drop_pick->status.ToString().c_str());
2730
+ }
2731
+ *error = grpc_error_set_int(
2732
+ absl_status_to_grpc_error(MaybeRewriteIllegalStatusCode(
2733
+ std::move(drop_pick->status), "LB drop")),
2734
+ StatusIntProperty::kLbPolicyDrop, 1);
2735
+ return true;
2736
+ });
2737
+ }
2738
+
2739
+ //
2740
+ // ClientChannel::FilterBasedLoadBalancedCall
2741
+ //
2742
+
2743
+ ClientChannel::FilterBasedLoadBalancedCall::FilterBasedLoadBalancedCall(
2744
+ ClientChannel* chand, const grpc_call_element_args& args,
2745
+ grpc_polling_entity* pollent, grpc_closure* on_call_destruction_complete,
2746
+ absl::AnyInvocable<void()> on_commit, bool is_transparent_retry)
2747
+ : LoadBalancedCall(chand, args.context, std::move(on_commit),
2748
+ is_transparent_retry),
2749
+ deadline_(args.deadline),
2750
+ arena_(args.arena),
2751
+ call_context_(args.context),
2752
+ owning_call_(args.call_stack),
2753
+ call_combiner_(args.call_combiner),
2754
+ pollent_(pollent),
2755
+ on_call_destruction_complete_(on_call_destruction_complete) {}
2756
+
2757
+ ClientChannel::FilterBasedLoadBalancedCall::~FilterBasedLoadBalancedCall() {
2581
2758
  // Make sure there are no remaining pending batches.
2582
2759
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
2583
2760
  GPR_ASSERT(pending_batches_[i] == nullptr);
2584
2761
  }
2585
2762
  if (on_call_destruction_complete_ != nullptr) {
2586
2763
  ExecCtx::Run(DEBUG_LOCATION, on_call_destruction_complete_,
2587
- GRPC_ERROR_NONE);
2764
+ absl::OkStatus());
2588
2765
  }
2589
2766
  }
2590
2767
 
2591
- void ClientChannel::LoadBalancedCall::Orphan() {
2768
+ void ClientChannel::FilterBasedLoadBalancedCall::Orphan() {
2592
2769
  // If the recv_trailing_metadata op was never started, then notify
2593
2770
  // about call completion here, as best we can. We assume status
2594
2771
  // CANCELLED in this case.
2595
2772
  if (recv_trailing_metadata_ == nullptr) {
2596
- RecordCallCompletion(absl::CancelledError("call cancelled"));
2597
- }
2598
- // Compute latency and report it to the tracer.
2599
- if (call_attempt_tracer_ != nullptr) {
2600
- gpr_timespec latency =
2601
- gpr_cycle_counter_sub(gpr_get_cycle_counter(), lb_call_start_time_);
2602
- call_attempt_tracer_->RecordEnd(latency);
2773
+ RecordCallCompletion(absl::CancelledError("call cancelled"), nullptr,
2774
+ nullptr, "");
2603
2775
  }
2604
- Unref();
2776
+ // Delegate to parent.
2777
+ LoadBalancedCall::Orphan();
2605
2778
  }
2606
2779
 
2607
- size_t ClientChannel::LoadBalancedCall::GetBatchIndex(
2780
+ size_t ClientChannel::FilterBasedLoadBalancedCall::GetBatchIndex(
2608
2781
  grpc_transport_stream_op_batch* batch) {
2609
2782
  // Note: It is important the send_initial_metadata be the first entry
2610
- // here, since the code in PickSubchannelLocked() assumes it will be.
2783
+ // here, since the code in PickSubchannelImpl() assumes it will be.
2611
2784
  if (batch->send_initial_metadata) return 0;
2612
2785
  if (batch->send_message) return 1;
2613
2786
  if (batch->send_trailing_metadata) return 2;
@@ -2618,35 +2791,35 @@ size_t ClientChannel::LoadBalancedCall::GetBatchIndex(
2618
2791
  }
2619
2792
 
2620
2793
  // This is called via the call combiner, so access to calld is synchronized.
2621
- void ClientChannel::LoadBalancedCall::PendingBatchesAdd(
2794
+ void ClientChannel::FilterBasedLoadBalancedCall::PendingBatchesAdd(
2622
2795
  grpc_transport_stream_op_batch* batch) {
2623
2796
  const size_t idx = GetBatchIndex(batch);
2624
2797
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2625
2798
  gpr_log(GPR_INFO,
2626
2799
  "chand=%p lb_call=%p: adding pending batch at index %" PRIuPTR,
2627
- chand_, this, idx);
2800
+ chand(), this, idx);
2628
2801
  }
2629
2802
  GPR_ASSERT(pending_batches_[idx] == nullptr);
2630
2803
  pending_batches_[idx] = batch;
2631
2804
  }
2632
2805
 
2633
2806
  // This is called via the call combiner, so access to calld is synchronized.
2634
- void ClientChannel::LoadBalancedCall::FailPendingBatchInCallCombiner(
2807
+ void ClientChannel::FilterBasedLoadBalancedCall::FailPendingBatchInCallCombiner(
2635
2808
  void* arg, grpc_error_handle error) {
2636
2809
  grpc_transport_stream_op_batch* batch =
2637
2810
  static_cast<grpc_transport_stream_op_batch*>(arg);
2638
- auto* self = static_cast<LoadBalancedCall*>(batch->handler_private.extra_arg);
2811
+ auto* self = static_cast<FilterBasedLoadBalancedCall*>(
2812
+ batch->handler_private.extra_arg);
2639
2813
  // Note: This will release the call combiner.
2640
- grpc_transport_stream_op_batch_finish_with_failure(
2641
- batch, GRPC_ERROR_REF(error), self->call_combiner_);
2814
+ grpc_transport_stream_op_batch_finish_with_failure(batch, error,
2815
+ self->call_combiner_);
2642
2816
  }
2643
2817
 
2644
2818
  // This is called via the call combiner, so access to calld is synchronized.
2645
- void ClientChannel::LoadBalancedCall::PendingBatchesFail(
2819
+ void ClientChannel::FilterBasedLoadBalancedCall::PendingBatchesFail(
2646
2820
  grpc_error_handle error,
2647
2821
  YieldCallCombinerPredicate yield_call_combiner_predicate) {
2648
- GPR_ASSERT(!GRPC_ERROR_IS_NONE(error));
2649
- GRPC_ERROR_UNREF(failure_error_);
2822
+ GPR_ASSERT(!error.ok());
2650
2823
  failure_error_ = error;
2651
2824
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2652
2825
  size_t num_batches = 0;
@@ -2655,7 +2828,7 @@ void ClientChannel::LoadBalancedCall::PendingBatchesFail(
2655
2828
  }
2656
2829
  gpr_log(GPR_INFO,
2657
2830
  "chand=%p lb_call=%p: failing %" PRIuPTR " pending batches: %s",
2658
- chand_, this, num_batches, grpc_error_std_string(error).c_str());
2831
+ chand(), this, num_batches, StatusToString(error).c_str());
2659
2832
  }
2660
2833
  CallCombinerClosureList closures;
2661
2834
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
@@ -2665,7 +2838,7 @@ void ClientChannel::LoadBalancedCall::PendingBatchesFail(
2665
2838
  GRPC_CLOSURE_INIT(&batch->handler_private.closure,
2666
2839
  FailPendingBatchInCallCombiner, batch,
2667
2840
  grpc_schedule_on_exec_ctx);
2668
- closures.Add(&batch->handler_private.closure, GRPC_ERROR_REF(error),
2841
+ closures.Add(&batch->handler_private.closure, error,
2669
2842
  "PendingBatchesFail");
2670
2843
  batch = nullptr;
2671
2844
  }
@@ -2678,8 +2851,8 @@ void ClientChannel::LoadBalancedCall::PendingBatchesFail(
2678
2851
  }
2679
2852
 
2680
2853
  // This is called via the call combiner, so access to calld is synchronized.
2681
- void ClientChannel::LoadBalancedCall::ResumePendingBatchInCallCombiner(
2682
- void* arg, grpc_error_handle /*ignored*/) {
2854
+ void ClientChannel::FilterBasedLoadBalancedCall::
2855
+ ResumePendingBatchInCallCombiner(void* arg, grpc_error_handle /*ignored*/) {
2683
2856
  grpc_transport_stream_op_batch* batch =
2684
2857
  static_cast<grpc_transport_stream_op_batch*>(arg);
2685
2858
  SubchannelCall* subchannel_call =
@@ -2689,7 +2862,7 @@ void ClientChannel::LoadBalancedCall::ResumePendingBatchInCallCombiner(
2689
2862
  }
2690
2863
 
2691
2864
  // This is called via the call combiner, so access to calld is synchronized.
2692
- void ClientChannel::LoadBalancedCall::PendingBatchesResume() {
2865
+ void ClientChannel::FilterBasedLoadBalancedCall::PendingBatchesResume() {
2693
2866
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2694
2867
  size_t num_batches = 0;
2695
2868
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
@@ -2698,7 +2871,7 @@ void ClientChannel::LoadBalancedCall::PendingBatchesResume() {
2698
2871
  gpr_log(GPR_INFO,
2699
2872
  "chand=%p lb_call=%p: starting %" PRIuPTR
2700
2873
  " pending batches on subchannel_call=%p",
2701
- chand_, this, num_batches, subchannel_call_.get());
2874
+ chand(), this, num_batches, subchannel_call_.get());
2702
2875
  }
2703
2876
  CallCombinerClosureList closures;
2704
2877
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
@@ -2708,7 +2881,7 @@ void ClientChannel::LoadBalancedCall::PendingBatchesResume() {
2708
2881
  GRPC_CLOSURE_INIT(&batch->handler_private.closure,
2709
2882
  ResumePendingBatchInCallCombiner, batch,
2710
2883
  grpc_schedule_on_exec_ctx);
2711
- closures.Add(&batch->handler_private.closure, GRPC_ERROR_NONE,
2884
+ closures.Add(&batch->handler_private.closure, absl::OkStatus(),
2712
2885
  "resuming pending batch from LB call");
2713
2886
  batch = nullptr;
2714
2887
  }
@@ -2717,38 +2890,30 @@ void ClientChannel::LoadBalancedCall::PendingBatchesResume() {
2717
2890
  closures.RunClosures(call_combiner_);
2718
2891
  }
2719
2892
 
2720
- void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
2893
+ void ClientChannel::FilterBasedLoadBalancedCall::StartTransportStreamOpBatch(
2721
2894
  grpc_transport_stream_op_batch* batch) {
2722
2895
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace) ||
2723
2896
  GRPC_TRACE_FLAG_ENABLED(grpc_trace_channel)) {
2724
2897
  gpr_log(GPR_INFO,
2725
2898
  "chand=%p lb_call=%p: batch started from above: %s, "
2726
- "call_attempt_tracer_=%p",
2727
- chand_, this, grpc_transport_stream_op_batch_string(batch).c_str(),
2728
- call_attempt_tracer_);
2899
+ "call_attempt_tracer()=%p",
2900
+ chand(), this,
2901
+ grpc_transport_stream_op_batch_string(batch, false).c_str(),
2902
+ call_attempt_tracer());
2729
2903
  }
2730
2904
  // Handle call tracing.
2731
- if (call_attempt_tracer_ != nullptr) {
2905
+ if (call_attempt_tracer() != nullptr) {
2732
2906
  // Record send ops in tracer.
2733
2907
  if (batch->cancel_stream) {
2734
- call_attempt_tracer_->RecordCancel(
2735
- GRPC_ERROR_REF(batch->payload->cancel_stream.cancel_error));
2908
+ call_attempt_tracer()->RecordCancel(
2909
+ batch->payload->cancel_stream.cancel_error);
2736
2910
  }
2737
2911
  if (batch->send_initial_metadata) {
2738
- call_attempt_tracer_->RecordSendInitialMetadata(
2912
+ call_attempt_tracer()->RecordSendInitialMetadata(
2739
2913
  batch->payload->send_initial_metadata.send_initial_metadata);
2740
- peer_string_ = batch->payload->send_initial_metadata.peer_string;
2741
- original_send_initial_metadata_on_complete_ = batch->on_complete;
2742
- GRPC_CLOSURE_INIT(&send_initial_metadata_on_complete_,
2743
- SendInitialMetadataOnComplete, this, nullptr);
2744
- batch->on_complete = &send_initial_metadata_on_complete_;
2745
- }
2746
- if (batch->send_message) {
2747
- call_attempt_tracer_->RecordSendMessage(
2748
- *batch->payload->send_message.send_message);
2749
2914
  }
2750
2915
  if (batch->send_trailing_metadata) {
2751
- call_attempt_tracer_->RecordSendTrailingMetadata(
2916
+ call_attempt_tracer()->RecordSendTrailingMetadata(
2752
2917
  batch->payload->send_trailing_metadata.send_trailing_metadata);
2753
2918
  }
2754
2919
  // Intercept recv ops.
@@ -2762,13 +2927,6 @@ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
2762
2927
  batch->payload->recv_initial_metadata.recv_initial_metadata_ready =
2763
2928
  &recv_initial_metadata_ready_;
2764
2929
  }
2765
- if (batch->recv_message) {
2766
- recv_message_ = batch->payload->recv_message.recv_message;
2767
- original_recv_message_ready_ =
2768
- batch->payload->recv_message.recv_message_ready;
2769
- GRPC_CLOSURE_INIT(&recv_message_ready_, RecvMessageReady, this, nullptr);
2770
- batch->payload->recv_message.recv_message_ready = &recv_message_ready_;
2771
- }
2772
2930
  }
2773
2931
  // Intercept recv_trailing_metadata even if there is no call tracer,
2774
2932
  // since we may need to notify the LB policy about trailing metadata.
@@ -2792,7 +2950,7 @@ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
2792
2950
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2793
2951
  gpr_log(GPR_INFO,
2794
2952
  "chand=%p lb_call=%p: starting batch on subchannel_call=%p",
2795
- chand_, this, subchannel_call_.get());
2953
+ chand(), this, subchannel_call_.get());
2796
2954
  }
2797
2955
  subchannel_call_->StartTransportStreamOpBatch(batch);
2798
2956
  return;
@@ -2800,14 +2958,14 @@ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
2800
2958
  // We do not yet have a subchannel call.
2801
2959
  //
2802
2960
  // If we've previously been cancelled, immediately fail any new batches.
2803
- if (GPR_UNLIKELY(!GRPC_ERROR_IS_NONE(cancel_error_))) {
2961
+ if (GPR_UNLIKELY(!cancel_error_.ok())) {
2804
2962
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2805
2963
  gpr_log(GPR_INFO, "chand=%p lb_call=%p: failing batch with error: %s",
2806
- chand_, this, grpc_error_std_string(cancel_error_).c_str());
2964
+ chand(), this, StatusToString(cancel_error_).c_str());
2807
2965
  }
2808
2966
  // Note: This will release the call combiner.
2809
- grpc_transport_stream_op_batch_finish_with_failure(
2810
- batch, GRPC_ERROR_REF(cancel_error_), call_combiner_);
2967
+ grpc_transport_stream_op_batch_finish_with_failure(batch, cancel_error_,
2968
+ call_combiner_);
2811
2969
  return;
2812
2970
  }
2813
2971
  // Handle cancellation.
@@ -2817,107 +2975,73 @@ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
2817
2975
  // cancelled before any batches are passed down (e.g., if the deadline
2818
2976
  // is in the past when the call starts), we can return the right
2819
2977
  // error to the caller when the first batch does get passed down.
2820
- GRPC_ERROR_UNREF(cancel_error_);
2821
- cancel_error_ = GRPC_ERROR_REF(batch->payload->cancel_stream.cancel_error);
2978
+ cancel_error_ = batch->payload->cancel_stream.cancel_error;
2822
2979
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2823
2980
  gpr_log(GPR_INFO, "chand=%p lb_call=%p: recording cancel_error=%s",
2824
- chand_, this, grpc_error_std_string(cancel_error_).c_str());
2981
+ chand(), this, StatusToString(cancel_error_).c_str());
2825
2982
  }
2826
2983
  // Fail all pending batches.
2827
- PendingBatchesFail(GRPC_ERROR_REF(cancel_error_), NoYieldCallCombiner);
2984
+ PendingBatchesFail(cancel_error_, NoYieldCallCombiner);
2828
2985
  // Note: This will release the call combiner.
2829
- grpc_transport_stream_op_batch_finish_with_failure(
2830
- batch, GRPC_ERROR_REF(cancel_error_), call_combiner_);
2986
+ grpc_transport_stream_op_batch_finish_with_failure(batch, cancel_error_,
2987
+ call_combiner_);
2831
2988
  return;
2832
2989
  }
2833
2990
  // Add the batch to the pending list.
2834
2991
  PendingBatchesAdd(batch);
2835
2992
  // For batches containing a send_initial_metadata op, acquire the
2836
- // channel's data plane mutex to pick a subchannel.
2993
+ // channel's LB mutex to pick a subchannel.
2837
2994
  if (GPR_LIKELY(batch->send_initial_metadata)) {
2838
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2839
- gpr_log(GPR_INFO,
2840
- "chand=%p lb_call=%p: grabbing data plane mutex to perform pick",
2841
- chand_, this);
2842
- }
2843
- PickSubchannel(this, GRPC_ERROR_NONE);
2995
+ TryPick(/*was_queued=*/false);
2844
2996
  } else {
2845
2997
  // For all other batches, release the call combiner.
2846
2998
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2847
2999
  gpr_log(GPR_INFO,
2848
3000
  "chand=%p lb_call=%p: saved batch, yielding call combiner",
2849
- chand_, this);
3001
+ chand(), this);
2850
3002
  }
2851
3003
  GRPC_CALL_COMBINER_STOP(call_combiner_,
2852
3004
  "batch does not include send_initial_metadata");
2853
3005
  }
2854
3006
  }
2855
3007
 
2856
- void ClientChannel::LoadBalancedCall::SendInitialMetadataOnComplete(
2857
- void* arg, grpc_error_handle error) {
2858
- auto* self = static_cast<LoadBalancedCall*>(arg);
2859
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2860
- gpr_log(GPR_INFO,
2861
- "chand=%p lb_call=%p: got on_complete for send_initial_metadata: "
2862
- "error=%s",
2863
- self->chand_, self, grpc_error_std_string(error).c_str());
2864
- }
2865
- self->call_attempt_tracer_->RecordOnDoneSendInitialMetadata(
2866
- self->peer_string_);
2867
- Closure::Run(DEBUG_LOCATION,
2868
- self->original_send_initial_metadata_on_complete_,
2869
- GRPC_ERROR_REF(error));
2870
- }
2871
-
2872
- void ClientChannel::LoadBalancedCall::RecvInitialMetadataReady(
3008
+ void ClientChannel::FilterBasedLoadBalancedCall::RecvInitialMetadataReady(
2873
3009
  void* arg, grpc_error_handle error) {
2874
- auto* self = static_cast<LoadBalancedCall*>(arg);
3010
+ auto* self = static_cast<FilterBasedLoadBalancedCall*>(arg);
2875
3011
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2876
3012
  gpr_log(GPR_INFO,
2877
3013
  "chand=%p lb_call=%p: got recv_initial_metadata_ready: error=%s",
2878
- self->chand_, self, grpc_error_std_string(error).c_str());
3014
+ self->chand(), self, StatusToString(error).c_str());
2879
3015
  }
2880
- if (GRPC_ERROR_IS_NONE(error)) {
3016
+ if (error.ok()) {
2881
3017
  // recv_initial_metadata_flags is not populated for clients
2882
- self->call_attempt_tracer_->RecordReceivedInitialMetadata(
2883
- self->recv_initial_metadata_, 0 /* recv_initial_metadata_flags */);
3018
+ self->call_attempt_tracer()->RecordReceivedInitialMetadata(
3019
+ self->recv_initial_metadata_);
3020
+ auto* peer_string = self->recv_initial_metadata_->get_pointer(PeerString());
3021
+ if (peer_string != nullptr) self->peer_string_ = peer_string->Ref();
2884
3022
  }
2885
3023
  Closure::Run(DEBUG_LOCATION, self->original_recv_initial_metadata_ready_,
2886
- GRPC_ERROR_REF(error));
2887
- }
2888
-
2889
- void ClientChannel::LoadBalancedCall::RecvMessageReady(
2890
- void* arg, grpc_error_handle error) {
2891
- auto* self = static_cast<LoadBalancedCall*>(arg);
2892
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2893
- gpr_log(GPR_INFO, "chand=%p lb_call=%p: got recv_message_ready: error=%s",
2894
- self->chand_, self, grpc_error_std_string(error).c_str());
2895
- }
2896
- if (self->recv_message_->has_value()) {
2897
- self->call_attempt_tracer_->RecordReceivedMessage(**self->recv_message_);
2898
- }
2899
- Closure::Run(DEBUG_LOCATION, self->original_recv_message_ready_,
2900
- GRPC_ERROR_REF(error));
3024
+ error);
2901
3025
  }
2902
3026
 
2903
- void ClientChannel::LoadBalancedCall::RecvTrailingMetadataReady(
3027
+ void ClientChannel::FilterBasedLoadBalancedCall::RecvTrailingMetadataReady(
2904
3028
  void* arg, grpc_error_handle error) {
2905
- auto* self = static_cast<LoadBalancedCall*>(arg);
3029
+ auto* self = static_cast<FilterBasedLoadBalancedCall*>(arg);
2906
3030
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2907
3031
  gpr_log(GPR_INFO,
2908
3032
  "chand=%p lb_call=%p: got recv_trailing_metadata_ready: error=%s "
2909
- "call_attempt_tracer_=%p lb_subchannel_call_tracker_=%p "
3033
+ "call_attempt_tracer()=%p lb_subchannel_call_tracker_=%p "
2910
3034
  "failure_error_=%s",
2911
- self->chand_, self, grpc_error_std_string(error).c_str(),
2912
- self->call_attempt_tracer_, self->lb_subchannel_call_tracker_.get(),
2913
- grpc_error_std_string(self->failure_error_).c_str());
3035
+ self->chand(), self, StatusToString(error).c_str(),
3036
+ self->call_attempt_tracer(), self->lb_subchannel_call_tracker(),
3037
+ StatusToString(self->failure_error_).c_str());
2914
3038
  }
2915
3039
  // Check if we have a tracer or an LB callback to invoke.
2916
- if (self->call_attempt_tracer_ != nullptr ||
2917
- self->lb_subchannel_call_tracker_ != nullptr) {
3040
+ if (self->call_attempt_tracer() != nullptr ||
3041
+ self->lb_subchannel_call_tracker() != nullptr) {
2918
3042
  // Get the call's status.
2919
3043
  absl::Status status;
2920
- if (!GRPC_ERROR_IS_NONE(error)) {
3044
+ if (!error.ok()) {
2921
3045
  // Get status from error.
2922
3046
  grpc_status_code code;
2923
3047
  std::string message;
@@ -2937,63 +3061,22 @@ void ClientChannel::LoadBalancedCall::RecvTrailingMetadataReady(
2937
3061
  status = absl::Status(static_cast<absl::StatusCode>(code), message);
2938
3062
  }
2939
3063
  }
2940
- self->RecordCallCompletion(status);
3064
+ absl::string_view peer_string;
3065
+ if (self->peer_string_.has_value()) {
3066
+ peer_string = self->peer_string_->as_string_view();
3067
+ }
3068
+ self->RecordCallCompletion(status, self->recv_trailing_metadata_,
3069
+ self->transport_stream_stats_, peer_string);
2941
3070
  }
2942
3071
  // Chain to original callback.
2943
- if (!GRPC_ERROR_IS_NONE(self->failure_error_)) {
3072
+ if (!self->failure_error_.ok()) {
2944
3073
  error = self->failure_error_;
2945
- self->failure_error_ = GRPC_ERROR_NONE;
2946
- } else {
2947
- error = GRPC_ERROR_REF(error);
3074
+ self->failure_error_ = absl::OkStatus();
2948
3075
  }
2949
3076
  Closure::Run(DEBUG_LOCATION, self->original_recv_trailing_metadata_ready_,
2950
3077
  error);
2951
3078
  }
2952
3079
 
2953
- void ClientChannel::LoadBalancedCall::RecordCallCompletion(
2954
- absl::Status status) {
2955
- // If we have a tracer, notify it.
2956
- if (call_attempt_tracer_ != nullptr) {
2957
- call_attempt_tracer_->RecordReceivedTrailingMetadata(
2958
- status, recv_trailing_metadata_, transport_stream_stats_);
2959
- }
2960
- // If the LB policy requested a callback for trailing metadata, invoke
2961
- // the callback.
2962
- if (lb_subchannel_call_tracker_ != nullptr) {
2963
- Metadata trailing_metadata(recv_trailing_metadata_);
2964
- BackendMetricAccessor backend_metric_accessor(this);
2965
- LoadBalancingPolicy::SubchannelCallTrackerInterface::FinishArgs args = {
2966
- status, &trailing_metadata, &backend_metric_accessor};
2967
- lb_subchannel_call_tracker_->Finish(args);
2968
- lb_subchannel_call_tracker_.reset();
2969
- }
2970
- }
2971
-
2972
- void ClientChannel::LoadBalancedCall::CreateSubchannelCall() {
2973
- SubchannelCall::Args call_args = {
2974
- std::move(connected_subchannel_), pollent_, path_.Ref(), /*start_time=*/0,
2975
- deadline_, arena_,
2976
- // TODO(roth): When we implement hedging support, we will probably
2977
- // need to use a separate call context for each subchannel call.
2978
- call_context_, call_combiner_};
2979
- grpc_error_handle error = GRPC_ERROR_NONE;
2980
- subchannel_call_ = SubchannelCall::Create(std::move(call_args), &error);
2981
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2982
- gpr_log(GPR_INFO,
2983
- "chand=%p lb_call=%p: create subchannel_call=%p: error=%s", chand_,
2984
- this, subchannel_call_.get(), grpc_error_std_string(error).c_str());
2985
- }
2986
- if (on_call_destruction_complete_ != nullptr) {
2987
- subchannel_call_->SetAfterCallStackDestroy(on_call_destruction_complete_);
2988
- on_call_destruction_complete_ = nullptr;
2989
- }
2990
- if (GPR_UNLIKELY(!GRPC_ERROR_IS_NONE(error))) {
2991
- PendingBatchesFail(error, YieldCallCombiner);
2992
- } else {
2993
- PendingBatchesResume();
2994
- }
2995
- }
2996
-
2997
3080
  // A class to handle the call combiner cancellation callback for a
2998
3081
  // queued pick.
2999
3082
  // TODO(roth): When we implement hedging support, we won't be able to
@@ -3001,9 +3084,10 @@ void ClientChannel::LoadBalancedCall::CreateSubchannelCall() {
3001
3084
  // because there may be multiple LB picks happening in parallel.
3002
3085
  // Instead, we will probably need to maintain a list in the CallData
3003
3086
  // object of pending LB picks to be cancelled when the closure runs.
3004
- class ClientChannel::LoadBalancedCall::LbQueuedCallCanceller {
3087
+ class ClientChannel::FilterBasedLoadBalancedCall::LbQueuedCallCanceller {
3005
3088
  public:
3006
- explicit LbQueuedCallCanceller(RefCountedPtr<LoadBalancedCall> lb_call)
3089
+ explicit LbQueuedCallCanceller(
3090
+ RefCountedPtr<FilterBasedLoadBalancedCall> lb_call)
3007
3091
  : lb_call_(std::move(lb_call)) {
3008
3092
  GRPC_CALL_STACK_REF(lb_call_->owning_call_, "LbQueuedCallCanceller");
3009
3093
  GRPC_CLOSURE_INIT(&closure_, &CancelLocked, this, nullptr);
@@ -3014,195 +3098,109 @@ class ClientChannel::LoadBalancedCall::LbQueuedCallCanceller {
3014
3098
  static void CancelLocked(void* arg, grpc_error_handle error) {
3015
3099
  auto* self = static_cast<LbQueuedCallCanceller*>(arg);
3016
3100
  auto* lb_call = self->lb_call_.get();
3017
- auto* chand = lb_call->chand_;
3101
+ auto* chand = lb_call->chand();
3018
3102
  {
3019
- MutexLock lock(&chand->data_plane_mu_);
3103
+ MutexLock lock(&chand->lb_mu_);
3020
3104
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3021
3105
  gpr_log(GPR_INFO,
3022
3106
  "chand=%p lb_call=%p: cancelling queued pick: "
3023
3107
  "error=%s self=%p calld->pick_canceller=%p",
3024
- chand, lb_call, grpc_error_std_string(error).c_str(), self,
3108
+ chand, lb_call, StatusToString(error).c_str(), self,
3025
3109
  lb_call->lb_call_canceller_);
3026
3110
  }
3027
- if (lb_call->lb_call_canceller_ == self && !GRPC_ERROR_IS_NONE(error)) {
3028
- lb_call->call_dispatch_controller_->Commit();
3111
+ if (lb_call->lb_call_canceller_ == self && !error.ok()) {
3112
+ lb_call->Commit();
3029
3113
  // Remove pick from list of queued picks.
3030
- lb_call->MaybeRemoveCallFromLbQueuedCallsLocked();
3114
+ lb_call->RemoveCallFromLbQueuedCallsLocked();
3115
+ // Remove from queued picks list.
3116
+ chand->lb_queued_calls_.erase(lb_call);
3031
3117
  // Fail pending batches on the call.
3032
- lb_call->PendingBatchesFail(GRPC_ERROR_REF(error),
3118
+ lb_call->PendingBatchesFail(error,
3033
3119
  YieldCallCombinerIfPendingBatchesFound);
3034
3120
  }
3035
3121
  }
3036
- GRPC_CALL_STACK_UNREF(lb_call->owning_call_, "LbQueuedCallCanceller");
3122
+ // Unref lb_call before unreffing the call stack, since unreffing
3123
+ // the call stack may destroy the arena in which lb_call is allocated.
3124
+ auto* owning_call = lb_call->owning_call_;
3125
+ self->lb_call_.reset();
3126
+ GRPC_CALL_STACK_UNREF(owning_call, "LbQueuedCallCanceller");
3037
3127
  delete self;
3038
3128
  }
3039
3129
 
3040
- RefCountedPtr<LoadBalancedCall> lb_call_;
3130
+ RefCountedPtr<FilterBasedLoadBalancedCall> lb_call_;
3041
3131
  grpc_closure closure_;
3042
3132
  };
3043
3133
 
3044
- void ClientChannel::LoadBalancedCall::MaybeRemoveCallFromLbQueuedCallsLocked() {
3045
- if (!queued_pending_lb_pick_) return;
3046
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3047
- gpr_log(GPR_INFO, "chand=%p lb_call=%p: removing from queued picks list",
3048
- chand_, this);
3134
+ void ClientChannel::FilterBasedLoadBalancedCall::TryPick(bool was_queued) {
3135
+ auto result = PickSubchannel(was_queued);
3136
+ if (result.has_value()) {
3137
+ if (!result->ok()) {
3138
+ PendingBatchesFail(*result, YieldCallCombiner);
3139
+ return;
3140
+ }
3141
+ CreateSubchannelCall();
3049
3142
  }
3050
- chand_->RemoveLbQueuedCall(&queued_call_, pollent_);
3051
- queued_pending_lb_pick_ = false;
3052
- // Lame the call combiner canceller.
3053
- lb_call_canceller_ = nullptr;
3054
3143
  }
3055
3144
 
3056
- void ClientChannel::LoadBalancedCall::MaybeAddCallToLbQueuedCallsLocked() {
3057
- if (queued_pending_lb_pick_) return;
3058
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3059
- gpr_log(GPR_INFO, "chand=%p lb_call=%p: adding to queued picks list",
3060
- chand_, this);
3061
- }
3062
- queued_pending_lb_pick_ = true;
3063
- queued_call_.lb_call = this;
3064
- chand_->AddLbQueuedCall(&queued_call_, pollent_);
3145
+ void ClientChannel::FilterBasedLoadBalancedCall::OnAddToQueueLocked() {
3065
3146
  // Register call combiner cancellation callback.
3066
3147
  lb_call_canceller_ = new LbQueuedCallCanceller(Ref());
3067
3148
  }
3068
3149
 
3069
- void ClientChannel::LoadBalancedCall::AsyncPickDone(grpc_error_handle error) {
3070
- // TODO(roth): Does this callback need to hold a ref to LoadBalancedCall?
3071
- GRPC_CLOSURE_INIT(&pick_closure_, PickDone, this, grpc_schedule_on_exec_ctx);
3072
- ExecCtx::Run(DEBUG_LOCATION, &pick_closure_, error);
3073
- }
3074
-
3075
- void ClientChannel::LoadBalancedCall::PickDone(void* arg,
3076
- grpc_error_handle error) {
3077
- auto* self = static_cast<LoadBalancedCall*>(arg);
3078
- if (!GRPC_ERROR_IS_NONE(error)) {
3079
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3080
- gpr_log(GPR_INFO,
3081
- "chand=%p lb_call=%p: failed to pick subchannel: error=%s",
3082
- self->chand_, self, grpc_error_std_string(error).c_str());
3083
- }
3084
- self->PendingBatchesFail(GRPC_ERROR_REF(error), YieldCallCombiner);
3085
- return;
3150
+ void ClientChannel::FilterBasedLoadBalancedCall::RetryPickLocked() {
3151
+ // Lame the call combiner canceller.
3152
+ lb_call_canceller_ = nullptr;
3153
+ // Do an async callback to resume call processing, so that we're not
3154
+ // doing it while holding the channel's LB mutex.
3155
+ // TODO(roth): We should really be using EventEngine::Run() here
3156
+ // instead of ExecCtx::Run(). Unfortunately, doing that seems to cause
3157
+ // a flaky TSAN failure for reasons that I do not fully understand.
3158
+ // However, given that we are working toward eliminating this code as
3159
+ // part of the promise conversion, it doesn't seem worth further
3160
+ // investigation right now.
3161
+ ExecCtx::Run(DEBUG_LOCATION, NewClosure([this](grpc_error_handle) {
3162
+ // If there are a lot of queued calls here, resuming them
3163
+ // all may cause us to stay inside C-core for a long period
3164
+ // of time. All of that work would be done using the same
3165
+ // ExecCtx instance and therefore the same cached value of
3166
+ // "now". The longer it takes to finish all of this work
3167
+ // and exit from C-core, the more stale the cached value of
3168
+ // "now" may become. This can cause problems whereby (e.g.)
3169
+ // we calculate a timer deadline based on the stale value,
3170
+ // which results in the timer firing too early. To avoid
3171
+ // this, we invalidate the cached value for each call we
3172
+ // process.
3173
+ ExecCtx::Get()->InvalidateNow();
3174
+ TryPick(/*was_queued=*/true);
3175
+ }),
3176
+ absl::OkStatus());
3177
+ }
3178
+
3179
+ void ClientChannel::FilterBasedLoadBalancedCall::CreateSubchannelCall() {
3180
+ Slice* path = send_initial_metadata()->get_pointer(HttpPathMetadata());
3181
+ GPR_ASSERT(path != nullptr);
3182
+ SubchannelCall::Args call_args = {
3183
+ connected_subchannel()->Ref(), pollent_, path->Ref(), /*start_time=*/0,
3184
+ deadline_, arena_,
3185
+ // TODO(roth): When we implement hedging support, we will probably
3186
+ // need to use a separate call context for each subchannel call.
3187
+ call_context_, call_combiner_};
3188
+ grpc_error_handle error;
3189
+ subchannel_call_ = SubchannelCall::Create(std::move(call_args), &error);
3190
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3191
+ gpr_log(GPR_INFO,
3192
+ "chand=%p lb_call=%p: create subchannel_call=%p: error=%s", chand(),
3193
+ this, subchannel_call_.get(), StatusToString(error).c_str());
3086
3194
  }
3087
- self->call_dispatch_controller_->Commit();
3088
- self->CreateSubchannelCall();
3089
- }
3090
-
3091
- void ClientChannel::LoadBalancedCall::PickSubchannel(void* arg,
3092
- grpc_error_handle error) {
3093
- auto* self = static_cast<LoadBalancedCall*>(arg);
3094
- bool pick_complete;
3095
- {
3096
- MutexLock lock(&self->chand_->data_plane_mu_);
3097
- pick_complete = self->PickSubchannelLocked(&error);
3195
+ if (on_call_destruction_complete_ != nullptr) {
3196
+ subchannel_call_->SetAfterCallStackDestroy(on_call_destruction_complete_);
3197
+ on_call_destruction_complete_ = nullptr;
3098
3198
  }
3099
- if (pick_complete) {
3100
- PickDone(self, error);
3101
- GRPC_ERROR_UNREF(error);
3199
+ if (GPR_UNLIKELY(!error.ok())) {
3200
+ PendingBatchesFail(error, YieldCallCombiner);
3201
+ } else {
3202
+ PendingBatchesResume();
3102
3203
  }
3103
3204
  }
3104
3205
 
3105
- bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
3106
- grpc_error_handle* error) {
3107
- GPR_ASSERT(connected_subchannel_ == nullptr);
3108
- GPR_ASSERT(subchannel_call_ == nullptr);
3109
- // Grab initial metadata.
3110
- auto& send_initial_metadata =
3111
- pending_batches_[0]->payload->send_initial_metadata;
3112
- grpc_metadata_batch* initial_metadata_batch =
3113
- send_initial_metadata.send_initial_metadata;
3114
- // Perform LB pick.
3115
- LoadBalancingPolicy::PickArgs pick_args;
3116
- pick_args.path = path_.as_string_view();
3117
- LbCallState lb_call_state(this);
3118
- pick_args.call_state = &lb_call_state;
3119
- Metadata initial_metadata(initial_metadata_batch);
3120
- pick_args.initial_metadata = &initial_metadata;
3121
- auto result = chand_->picker_->Pick(pick_args);
3122
- return HandlePickResult<bool>(
3123
- &result,
3124
- // CompletePick
3125
- [this](LoadBalancingPolicy::PickResult::Complete* complete_pick)
3126
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_) {
3127
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3128
- gpr_log(GPR_INFO,
3129
- "chand=%p lb_call=%p: LB pick succeeded: subchannel=%p",
3130
- chand_, this, complete_pick->subchannel.get());
3131
- }
3132
- GPR_ASSERT(complete_pick->subchannel != nullptr);
3133
- // Grab a ref to the connected subchannel while we're still
3134
- // holding the data plane mutex.
3135
- SubchannelWrapper* subchannel = static_cast<SubchannelWrapper*>(
3136
- complete_pick->subchannel.get());
3137
- connected_subchannel_ = subchannel->connected_subchannel();
3138
- // If the subchannel has no connected subchannel (e.g., if the
3139
- // subchannel has moved out of state READY but the LB policy hasn't
3140
- // yet seen that change and given us a new picker), then just
3141
- // queue the pick. We'll try again as soon as we get a new picker.
3142
- if (connected_subchannel_ == nullptr) {
3143
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3144
- gpr_log(GPR_INFO,
3145
- "chand=%p lb_call=%p: subchannel returned by LB picker "
3146
- "has no connected subchannel; queueing pick",
3147
- chand_, this);
3148
- }
3149
- MaybeAddCallToLbQueuedCallsLocked();
3150
- return false;
3151
- }
3152
- lb_subchannel_call_tracker_ =
3153
- std::move(complete_pick->subchannel_call_tracker);
3154
- if (lb_subchannel_call_tracker_ != nullptr) {
3155
- lb_subchannel_call_tracker_->Start();
3156
- }
3157
- MaybeRemoveCallFromLbQueuedCallsLocked();
3158
- return true;
3159
- },
3160
- // QueuePick
3161
- [this](LoadBalancingPolicy::PickResult::Queue* /*queue_pick*/)
3162
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_) {
3163
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3164
- gpr_log(GPR_INFO, "chand=%p lb_call=%p: LB pick queued", chand_,
3165
- this);
3166
- }
3167
- MaybeAddCallToLbQueuedCallsLocked();
3168
- return false;
3169
- },
3170
- // FailPick
3171
- [this, initial_metadata_batch,
3172
- &error](LoadBalancingPolicy::PickResult::Fail* fail_pick)
3173
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_) {
3174
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3175
- gpr_log(GPR_INFO, "chand=%p lb_call=%p: LB pick failed: %s",
3176
- chand_, this, fail_pick->status.ToString().c_str());
3177
- }
3178
- // If wait_for_ready is false, then the error indicates the RPC
3179
- // attempt's final status.
3180
- if (!initial_metadata_batch->GetOrCreatePointer(WaitForReady())
3181
- ->value) {
3182
- *error = absl_status_to_grpc_error(MaybeRewriteIllegalStatusCode(
3183
- std::move(fail_pick->status), "LB pick"));
3184
- MaybeRemoveCallFromLbQueuedCallsLocked();
3185
- return true;
3186
- }
3187
- // If wait_for_ready is true, then queue to retry when we get a new
3188
- // picker.
3189
- MaybeAddCallToLbQueuedCallsLocked();
3190
- return false;
3191
- },
3192
- // DropPick
3193
- [this, &error](LoadBalancingPolicy::PickResult::Drop* drop_pick)
3194
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_) {
3195
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3196
- gpr_log(GPR_INFO, "chand=%p lb_call=%p: LB pick dropped: %s",
3197
- chand_, this, drop_pick->status.ToString().c_str());
3198
- }
3199
- *error = grpc_error_set_int(
3200
- absl_status_to_grpc_error(MaybeRewriteIllegalStatusCode(
3201
- std::move(drop_pick->status), "LB drop")),
3202
- GRPC_ERROR_INT_LB_POLICY_DROP, 1);
3203
- MaybeRemoveCallFromLbQueuedCallsLocked();
3204
- return true;
3205
- });
3206
- }
3207
-
3208
3206
  } // namespace grpc_core