grpc 1.48.0 → 1.56.0

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

Potentially problematic release.


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

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