grpc 1.62.0 → 1.64.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1761) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +463 -2007
  3. data/include/grpc/byte_buffer.h +1 -2
  4. data/include/grpc/census.h +1 -2
  5. data/include/grpc/compression.h +1 -2
  6. data/include/grpc/credentials.h +1222 -0
  7. data/include/grpc/event_engine/endpoint_config.h +2 -2
  8. data/include/grpc/event_engine/event_engine.h +4 -2
  9. data/include/grpc/event_engine/extensible.h +2 -2
  10. data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -2
  11. data/include/grpc/event_engine/memory_allocator.h +1 -2
  12. data/include/grpc/event_engine/memory_request.h +2 -2
  13. data/include/grpc/event_engine/slice.h +1 -2
  14. data/include/grpc/event_engine/slice_buffer.h +1 -2
  15. data/include/grpc/grpc.h +8 -8
  16. data/include/grpc/grpc_audit_logging.h +1 -2
  17. data/include/grpc/grpc_crl_provider.h +3 -2
  18. data/include/grpc/grpc_cronet.h +1 -2
  19. data/include/grpc/grpc_posix.h +1 -2
  20. data/include/grpc/grpc_security.h +1 -1173
  21. data/include/grpc/impl/call.h +1 -2
  22. data/include/grpc/impl/channel_arg_names.h +4 -3
  23. data/include/grpc/impl/grpc_types.h +1 -2
  24. data/include/grpc/impl/slice_type.h +2 -2
  25. data/include/grpc/module.modulemap +2 -0
  26. data/include/grpc/slice.h +1 -2
  27. data/include/grpc/slice_buffer.h +1 -2
  28. data/include/grpc/support/alloc.h +2 -2
  29. data/include/grpc/support/json.h +2 -2
  30. data/include/grpc/support/log.h +3 -3
  31. data/include/grpc/support/metrics.h +51 -0
  32. data/include/grpc/support/string_util.h +0 -1
  33. data/include/grpc/support/sync.h +0 -1
  34. data/include/grpc/support/sync_abseil.h +0 -1
  35. data/include/grpc/support/sync_custom.h +0 -1
  36. data/include/grpc/support/sync_generic.h +1 -2
  37. data/include/grpc/support/sync_posix.h +1 -2
  38. data/include/grpc/support/time.h +2 -2
  39. data/src/core/{lib/channel → channelz}/channel_trace.cc +56 -62
  40. data/src/core/{lib/channel → channelz}/channel_trace.h +21 -19
  41. data/src/core/{lib/channel → channelz}/channelz.cc +68 -6
  42. data/src/core/{lib/channel → channelz}/channelz.h +54 -12
  43. data/src/core/{lib/channel → channelz}/channelz_registry.cc +7 -6
  44. data/src/core/{lib/channel → channelz}/channelz_registry.h +7 -7
  45. data/src/core/client_channel/client_channel_filter.cc +106 -100
  46. data/src/core/client_channel/client_channel_filter.h +8 -18
  47. data/src/core/client_channel/client_channel_internal.h +4 -3
  48. data/src/core/client_channel/client_channel_service_config.h +5 -4
  49. data/src/core/client_channel/config_selector.h +5 -4
  50. data/src/core/client_channel/connector.h +1 -1
  51. data/src/core/client_channel/dynamic_filters.cc +3 -2
  52. data/src/core/client_channel/dynamic_filters.h +1 -1
  53. data/src/core/client_channel/local_subchannel_pool.cc +5 -3
  54. data/src/core/client_channel/retry_filter.cc +1 -1
  55. data/src/core/client_channel/retry_filter.h +4 -3
  56. data/src/core/client_channel/retry_filter_legacy_call_data.cc +6 -5
  57. data/src/core/client_channel/retry_filter_legacy_call_data.h +9 -9
  58. data/src/core/client_channel/retry_service_config.h +3 -3
  59. data/src/core/client_channel/retry_throttle.h +3 -2
  60. data/src/core/client_channel/subchannel.cc +15 -14
  61. data/src/core/client_channel/subchannel.h +7 -8
  62. data/src/core/client_channel/subchannel_pool_interface.h +1 -1
  63. data/src/core/client_channel/subchannel_stream_client.cc +6 -8
  64. data/src/core/client_channel/subchannel_stream_client.h +2 -2
  65. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +7 -52
  66. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +2 -14
  67. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +27 -25
  68. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +10 -11
  69. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +8 -9
  70. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +4 -4
  71. data/src/core/ext/filters/http/client/http_client_filter.cc +5 -4
  72. data/src/core/ext/filters/http/client/http_client_filter.h +5 -5
  73. data/src/core/ext/filters/http/client_authority_filter.cc +4 -3
  74. data/src/core/ext/filters/http/client_authority_filter.h +5 -4
  75. data/src/core/ext/filters/http/http_filters_plugin.cc +15 -35
  76. data/src/core/ext/filters/http/message_compress/compression_filter.cc +17 -15
  77. data/src/core/ext/filters/http/message_compress/compression_filter.h +10 -9
  78. data/src/core/ext/filters/http/server/http_server_filter.cc +3 -3
  79. data/src/core/ext/filters/http/server/http_server_filter.h +5 -5
  80. data/src/core/ext/filters/message_size/message_size_filter.cc +24 -28
  81. data/src/core/ext/filters/message_size/message_size_filter.h +8 -6
  82. data/src/core/ext/filters/rbac/rbac_filter.cc +5 -7
  83. data/src/core/ext/filters/rbac/rbac_filter.h +5 -5
  84. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +2 -2
  85. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +12 -12
  86. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +3 -2
  87. data/src/core/ext/gcp/metadata_query.cc +4 -3
  88. data/src/core/ext/gcp/metadata_query.h +2 -2
  89. data/src/core/ext/transport/chttp2/alpn/alpn.cc +4 -3
  90. data/src/core/ext/transport/chttp2/alpn/alpn.h +2 -2
  91. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +17 -22
  92. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +2 -3
  93. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +48 -11
  94. data/src/core/ext/transport/chttp2/server/chttp2_server.h +3 -3
  95. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +6 -6
  96. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +1 -2
  97. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +8 -7
  98. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -2
  99. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +80 -128
  100. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +25 -7
  101. data/src/core/ext/transport/chttp2/transport/context_list_entry.h +15 -12
  102. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +2 -2
  103. data/src/core/ext/transport/chttp2/transport/decode_huff.h +2 -2
  104. data/src/core/ext/transport/chttp2/transport/flow_control.cc +4 -4
  105. data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -4
  106. data/src/core/ext/transport/chttp2/transport/frame.cc +4 -4
  107. data/src/core/ext/transport/chttp2/transport/frame.h +2 -2
  108. data/src/core/ext/transport/chttp2/transport/frame_data.cc +3 -3
  109. data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -2
  110. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +5 -5
  111. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +1 -2
  112. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +3 -3
  113. data/src/core/ext/transport/chttp2/transport/frame_ping.h +1 -2
  114. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +3 -3
  115. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +1 -2
  116. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +1 -2
  117. data/src/core/ext/transport/chttp2/transport/frame_settings.h +1 -2
  118. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -4
  119. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +1 -2
  120. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +2 -2
  121. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +4 -3
  122. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +1 -2
  123. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +10 -9
  124. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +2 -2
  125. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +4 -3
  126. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +3 -3
  127. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -73
  128. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +1 -4
  129. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +5 -5
  130. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +2 -2
  131. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +2 -2
  132. data/src/core/ext/transport/chttp2/transport/http2_settings.h +2 -2
  133. data/src/core/ext/transport/chttp2/transport/http_trace.cc +2 -2
  134. data/src/core/ext/transport/chttp2/transport/huffsyms.cc +2 -2
  135. data/src/core/ext/transport/chttp2/transport/internal.h +7 -7
  136. data/src/core/ext/transport/chttp2/transport/max_concurrent_streams_policy.cc +4 -3
  137. data/src/core/ext/transport/chttp2/transport/max_concurrent_streams_policy.h +2 -2
  138. data/src/core/ext/transport/chttp2/transport/parsing.cc +19 -24
  139. data/src/core/ext/transport/chttp2/transport/ping_abuse_policy.cc +1 -2
  140. data/src/core/ext/transport/chttp2/transport/ping_abuse_policy.h +2 -2
  141. data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +3 -3
  142. data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +1 -2
  143. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +1 -2
  144. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +2 -2
  145. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +7 -6
  146. data/src/core/ext/transport/chttp2/transport/varint.cc +2 -2
  147. data/src/core/ext/transport/chttp2/transport/varint.h +4 -3
  148. data/src/core/ext/transport/chttp2/transport/write_size_policy.cc +4 -3
  149. data/src/core/ext/transport/chttp2/transport/write_size_policy.h +2 -2
  150. data/src/core/ext/transport/chttp2/transport/writing.cc +69 -53
  151. data/src/core/ext/transport/inproc/inproc_transport.cc +18 -16
  152. data/src/core/ext/transport/inproc/inproc_transport.h +1 -2
  153. data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +16 -16
  154. data/src/core/ext/transport/inproc/legacy_inproc_transport.h +1 -2
  155. data/src/core/ext/upb-gen/envoy/admin/v3/certs.upb.h +243 -230
  156. data/src/core/ext/upb-gen/envoy/admin/v3/certs.upb_minitable.c +42 -48
  157. data/src/core/ext/upb-gen/envoy/admin/v3/clusters.upb.h +289 -265
  158. data/src/core/ext/upb-gen/envoy/admin/v3/clusters.upb_minitable.c +62 -70
  159. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump.upb.h +238 -226
  160. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump.upb_minitable.c +42 -50
  161. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump_shared.upb.h +937 -882
  162. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump_shared.upb_minitable.c +182 -208
  163. data/src/core/ext/upb-gen/envoy/admin/v3/init_dump.upb.h +77 -76
  164. data/src/core/ext/upb-gen/envoy/admin/v3/init_dump.upb_minitable.c +9 -9
  165. data/src/core/ext/upb-gen/envoy/admin/v3/listeners.upb.h +86 -84
  166. data/src/core/ext/upb-gen/envoy/admin/v3/listeners.upb_minitable.c +13 -13
  167. data/src/core/ext/upb-gen/envoy/admin/v3/memory.upb.h +49 -42
  168. data/src/core/ext/upb-gen/envoy/admin/v3/memory.upb_minitable.c +13 -13
  169. data/src/core/ext/upb-gen/envoy/admin/v3/metrics.upb.h +28 -24
  170. data/src/core/ext/upb-gen/envoy/admin/v3/metrics.upb_minitable.c +7 -7
  171. data/src/core/ext/upb-gen/envoy/admin/v3/mutex_stats.upb.h +28 -24
  172. data/src/core/ext/upb-gen/envoy/admin/v3/mutex_stats.upb_minitable.c +7 -7
  173. data/src/core/ext/upb-gen/envoy/admin/v3/server_info.upb.h +357 -318
  174. data/src/core/ext/upb-gen/envoy/admin/v3/server_info.upb_minitable.c +86 -86
  175. data/src/core/ext/upb-gen/envoy/admin/v3/tap.upb.h +23 -20
  176. data/src/core/ext/upb-gen/envoy/admin/v3/tap.upb_minitable.c +5 -7
  177. data/src/core/ext/upb-gen/envoy/annotations/deprecation.upb.h +40 -32
  178. data/src/core/ext/upb-gen/envoy/annotations/deprecation.upb_minitable.c +4 -4
  179. data/src/core/ext/upb-gen/envoy/annotations/resource.upb.h +24 -20
  180. data/src/core/ext/upb-gen/envoy/annotations/resource.upb_minitable.c +4 -4
  181. data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb.h +517 -473
  182. data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb_minitable.c +105 -125
  183. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb.h +1207 -1108
  184. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb_minitable.c +261 -289
  185. data/src/core/ext/upb-gen/envoy/config/cluster/v3/circuit_breaker.upb.h +163 -152
  186. data/src/core/ext/upb-gen/envoy/config/cluster/v3/circuit_breaker.upb_minitable.c +29 -43
  187. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb.h +1265 -1137
  188. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb_minitable.c +276 -346
  189. data/src/core/ext/upb-gen/envoy/config/cluster/v3/filter.upb.h +32 -28
  190. data/src/core/ext/upb-gen/envoy/config/cluster/v3/filter.upb_minitable.c +7 -9
  191. data/src/core/ext/upb-gen/envoy/config/cluster/v3/outlier_detection.upb.h +212 -188
  192. data/src/core/ext/upb-gen/envoy/config/cluster/v3/outlier_detection.upb_minitable.c +53 -69
  193. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb.h +564 -508
  194. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb_minitable.c +123 -131
  195. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb.h +340 -309
  196. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb_minitable.c +69 -83
  197. data/src/core/ext/upb-gen/envoy/config/core/v3/backoff.upb.h +25 -22
  198. data/src/core/ext/upb-gen/envoy/config/core/v3/backoff.upb_minitable.c +5 -11
  199. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb.h +786 -688
  200. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb_minitable.c +171 -189
  201. data/src/core/ext/upb-gen/envoy/config/core/v3/config_source.upb.h +367 -343
  202. data/src/core/ext/upb-gen/envoy/config/core/v3/config_source.upb_minitable.c +72 -80
  203. data/src/core/ext/upb-gen/envoy/config/core/v3/event_service_config.upb.h +19 -16
  204. data/src/core/ext/upb-gen/envoy/config/core/v3/event_service_config.upb_minitable.c +4 -4
  205. data/src/core/ext/upb-gen/envoy/config/core/v3/extension.upb.h +23 -20
  206. data/src/core/ext/upb-gen/envoy/config/core/v3/extension.upb_minitable.c +5 -7
  207. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_method_list.upb.h +77 -76
  208. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_method_list.upb_minitable.c +9 -9
  209. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb.h +539 -471
  210. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb_minitable.c +125 -141
  211. data/src/core/ext/upb-gen/envoy/config/core/v3/health_check.upb.h +672 -632
  212. data/src/core/ext/upb-gen/envoy/config/core/v3/health_check.upb_minitable.c +137 -137
  213. data/src/core/ext/upb-gen/envoy/config/core/v3/http_service.upb.h +44 -43
  214. data/src/core/ext/upb-gen/envoy/config/core/v3/http_service.upb_minitable.c +7 -7
  215. data/src/core/ext/upb-gen/envoy/config/core/v3/http_uri.upb.h +35 -30
  216. data/src/core/ext/upb-gen/envoy/config/core/v3/http_uri.upb_minitable.c +8 -8
  217. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb.h +713 -637
  218. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb_minitable.c +166 -208
  219. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb.h +65 -61
  220. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb_minitable.c +10 -12
  221. data/src/core/ext/upb-gen/envoy/config/core/v3/resolver.upb.h +65 -61
  222. data/src/core/ext/upb-gen/envoy/config/core/v3/resolver.upb_minitable.c +11 -13
  223. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb.h +91 -83
  224. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb_minitable.c +17 -17
  225. data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb.h +102 -93
  226. data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb_minitable.c +22 -22
  227. data/src/core/ext/upb-gen/envoy/config/core/v3/udp_socket_config.upb.h +25 -22
  228. data/src/core/ext/upb-gen/envoy/config/core/v3/udp_socket_config.upb_minitable.c +5 -11
  229. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb.h +162 -145
  230. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb_minitable.c +32 -40
  231. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb.h +314 -287
  232. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb_minitable.c +70 -74
  233. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/load_report.upb.h +330 -309
  234. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/load_report.upb_minitable.c +66 -66
  235. data/src/core/ext/upb-gen/envoy/config/listener/v3/api_listener.upb.h +16 -14
  236. data/src/core/ext/upb-gen/envoy/config/listener/v3/api_listener.upb_minitable.c +3 -7
  237. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb.h +516 -478
  238. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb_minitable.c +110 -120
  239. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb.h +495 -468
  240. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb_minitable.c +89 -101
  241. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb.h +88 -78
  242. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb_minitable.c +19 -37
  243. data/src/core/ext/upb-gen/envoy/config/listener/v3/udp_listener_config.upb.h +41 -36
  244. data/src/core/ext/upb-gen/envoy/config/listener/v3/udp_listener_config.upb_minitable.c +8 -26
  245. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb.h +46 -40
  246. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb_minitable.c +13 -13
  247. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb.h +307 -279
  248. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb_minitable.c +60 -64
  249. data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb.h +382 -358
  250. data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb_minitable.c +70 -70
  251. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb.h +540 -490
  252. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb_minitable.c +122 -136
  253. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb.h +339 -327
  254. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb_minitable.c +48 -70
  255. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb.h +3407 -3145
  256. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb_minitable.c +700 -752
  257. data/src/core/ext/upb-gen/envoy/config/route/v3/scoped_route.upb.h +100 -91
  258. data/src/core/ext/upb-gen/envoy/config/route/v3/scoped_route.upb_minitable.c +20 -20
  259. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb.h +472 -430
  260. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb_minitable.c +102 -116
  261. data/src/core/ext/upb-gen/envoy/config/trace/v3/datadog.upb.h +28 -24
  262. data/src/core/ext/upb-gen/envoy/config/trace/v3/datadog.upb_minitable.c +7 -7
  263. data/src/core/ext/upb-gen/envoy/config/trace/v3/dynamic_ot.upb.h +23 -20
  264. data/src/core/ext/upb-gen/envoy/config/trace/v3/dynamic_ot.upb_minitable.c +5 -7
  265. data/src/core/ext/upb-gen/envoy/config/trace/v3/http_tracer.upb.h +42 -36
  266. data/src/core/ext/upb-gen/envoy/config/trace/v3/http_tracer.upb_minitable.c +9 -13
  267. data/src/core/ext/upb-gen/envoy/config/trace/v3/lightstep.upb.h +58 -55
  268. data/src/core/ext/upb-gen/envoy/config/trace/v3/lightstep.upb_minitable.c +9 -13
  269. data/src/core/ext/upb-gen/envoy/config/trace/v3/opencensus.upb.h +146 -136
  270. data/src/core/ext/upb-gen/envoy/config/trace/v3/opencensus.upb_minitable.c +30 -30
  271. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb.h +69 -65
  272. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb_minitable.c +15 -15
  273. data/src/core/ext/upb-gen/envoy/config/trace/v3/service.upb.h +16 -14
  274. data/src/core/ext/upb-gen/envoy/config/trace/v3/service.upb_minitable.c +3 -7
  275. data/src/core/ext/upb-gen/envoy/config/trace/v3/skywalking.upb.h +67 -58
  276. data/src/core/ext/upb-gen/envoy/config/trace/v3/skywalking.upb_minitable.c +14 -24
  277. data/src/core/ext/upb-gen/envoy/config/trace/v3/xray.upb.h +64 -56
  278. data/src/core/ext/upb-gen/envoy/config/trace/v3/xray.upb_minitable.c +14 -20
  279. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb.h +58 -50
  280. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb_minitable.c +16 -16
  281. data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb.h +986 -832
  282. data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb_minitable.c +269 -281
  283. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +35 -35
  284. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb_minitable.c +3 -3
  285. data/src/core/ext/upb-gen/envoy/extensions/filters/common/fault/v3/fault.upb.h +102 -88
  286. data/src/core/ext/upb-gen/envoy/extensions/filters/common/fault/v3/fault.upb_minitable.c +25 -25
  287. data/src/core/ext/upb-gen/envoy/extensions/filters/http/fault/v3/fault.upb.h +224 -204
  288. data/src/core/ext/upb-gen/envoy/extensions/filters/http/fault/v3/fault.upb_minitable.c +46 -62
  289. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +66 -58
  290. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb_minitable.c +14 -24
  291. data/src/core/ext/upb-gen/envoy/extensions/filters/http/router/v3/router.upb.h +160 -153
  292. data/src/core/ext/upb-gen/envoy/extensions/filters/http/router/v3/router.upb_minitable.c +28 -30
  293. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +51 -44
  294. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb_minitable.c +12 -12
  295. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1349 -1230
  296. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.c +293 -309
  297. data/src/core/ext/upb-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +16 -14
  298. data/src/core/ext/upb-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb_minitable.c +3 -7
  299. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +61 -54
  300. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb_minitable.c +13 -23
  301. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +124 -108
  302. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb_minitable.c +29 -37
  303. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb.h +14 -12
  304. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb_minitable.c +3 -3
  305. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +66 -58
  306. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb_minitable.c +20 -20
  307. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +16 -14
  308. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb_minitable.c +3 -7
  309. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb.h +518 -493
  310. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb_minitable.c +82 -108
  311. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +92 -80
  312. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.c +23 -29
  313. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +497 -457
  314. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb_minitable.c +110 -124
  315. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +58 -55
  316. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.c +9 -11
  317. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +206 -185
  318. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +48 -64
  319. data/src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb.h +7 -6
  320. data/src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb_minitable.c +1 -1
  321. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb.h +766 -710
  322. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb_minitable.c +140 -150
  323. data/src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb.h +102 -98
  324. data/src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb_minitable.c +17 -17
  325. data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb.h +310 -288
  326. data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb_minitable.c +67 -67
  327. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb.h +30 -26
  328. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb_minitable.c +8 -8
  329. data/src/core/ext/upb-gen/envoy/type/http/v3/path_transformation.upb.h +77 -71
  330. data/src/core/ext/upb-gen/envoy/type/http/v3/path_transformation.upb_minitable.c +13 -13
  331. data/src/core/ext/upb-gen/envoy/type/matcher/v3/filter_state.upb.h +26 -22
  332. data/src/core/ext/upb-gen/envoy/type/matcher/v3/filter_state.upb_minitable.c +6 -6
  333. data/src/core/ext/upb-gen/envoy/type/matcher/v3/http_inputs.upb.h +70 -60
  334. data/src/core/ext/upb-gen/envoy/type/matcher/v3/http_inputs.upb_minitable.c +15 -15
  335. data/src/core/ext/upb-gen/envoy/type/matcher/v3/metadata.upb.h +77 -71
  336. data/src/core/ext/upb-gen/envoy/type/matcher/v3/metadata.upb_minitable.c +14 -14
  337. data/src/core/ext/upb-gen/envoy/type/matcher/v3/node.upb.h +44 -43
  338. data/src/core/ext/upb-gen/envoy/type/matcher/v3/node.upb_minitable.c +7 -7
  339. data/src/core/ext/upb-gen/envoy/type/matcher/v3/number.upb.h +28 -24
  340. data/src/core/ext/upb-gen/envoy/type/matcher/v3/number.upb_minitable.c +6 -6
  341. data/src/core/ext/upb-gen/envoy/type/matcher/v3/path.upb.h +19 -16
  342. data/src/core/ext/upb-gen/envoy/type/matcher/v3/path.upb_minitable.c +4 -4
  343. data/src/core/ext/upb-gen/envoy/type/matcher/v3/regex.upb.h +65 -56
  344. data/src/core/ext/upb-gen/envoy/type/matcher/v3/regex.upb_minitable.c +15 -19
  345. data/src/core/ext/upb-gen/envoy/type/matcher/v3/status_code_input.upb.h +14 -12
  346. data/src/core/ext/upb-gen/envoy/type/matcher/v3/status_code_input.upb_minitable.c +2 -2
  347. data/src/core/ext/upb-gen/envoy/type/matcher/v3/string.upb.h +97 -89
  348. data/src/core/ext/upb-gen/envoy/type/matcher/v3/string.upb_minitable.c +18 -18
  349. data/src/core/ext/upb-gen/envoy/type/matcher/v3/struct.upb.h +63 -59
  350. data/src/core/ext/upb-gen/envoy/type/matcher/v3/struct.upb_minitable.c +10 -10
  351. data/src/core/ext/upb-gen/envoy/type/matcher/v3/value.upb.h +134 -121
  352. data/src/core/ext/upb-gen/envoy/type/matcher/v3/value.upb_minitable.c +29 -29
  353. data/src/core/ext/upb-gen/envoy/type/metadata/v3/metadata.upb.h +135 -121
  354. data/src/core/ext/upb-gen/envoy/type/metadata/v3/metadata.upb_minitable.c +26 -26
  355. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb.h +141 -122
  356. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb_minitable.c +37 -37
  357. data/src/core/ext/upb-gen/envoy/type/v3/hash_policy.upb.h +49 -42
  358. data/src/core/ext/upb-gen/envoy/type/v3/hash_policy.upb_minitable.c +11 -11
  359. data/src/core/ext/upb-gen/envoy/type/v3/http_status.upb.h +14 -12
  360. data/src/core/ext/upb-gen/envoy/type/v3/http_status.upb_minitable.c +3 -3
  361. data/src/core/ext/upb-gen/envoy/type/v3/percent.upb.h +35 -30
  362. data/src/core/ext/upb-gen/envoy/type/v3/percent.upb_minitable.c +8 -8
  363. data/src/core/ext/upb-gen/envoy/type/v3/range.upb.h +63 -54
  364. data/src/core/ext/upb-gen/envoy/type/v3/range.upb_minitable.c +15 -15
  365. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_strategy.upb.h +58 -50
  366. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_strategy.upb_minitable.c +14 -14
  367. data/src/core/ext/upb-gen/envoy/type/v3/semantic_version.upb.h +28 -24
  368. data/src/core/ext/upb-gen/envoy/type/v3/semantic_version.upb_minitable.c +7 -7
  369. data/src/core/ext/upb-gen/envoy/type/v3/token_bucket.upb.h +32 -28
  370. data/src/core/ext/upb-gen/envoy/type/v3/token_bucket.upb_minitable.c +7 -9
  371. data/src/core/ext/upb-gen/google/api/annotations.upb.h +10 -8
  372. data/src/core/ext/upb-gen/google/api/annotations.upb_minitable.c +1 -1
  373. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb.h +581 -524
  374. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb_minitable.c +118 -146
  375. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb.h +616 -544
  376. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb_minitable.c +136 -152
  377. data/src/core/ext/upb-gen/google/api/http.upb.h +176 -162
  378. data/src/core/ext/upb-gen/google/api/http.upb_minitable.c +34 -34
  379. data/src/core/ext/upb-gen/google/api/httpbody.upb.h +49 -47
  380. data/src/core/ext/upb-gen/google/api/httpbody.upb_minitable.c +8 -8
  381. data/src/core/ext/upb-gen/google/protobuf/any.upb.h +21 -18
  382. data/src/core/ext/upb-gen/google/protobuf/any.upb_minitable.c +5 -5
  383. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb.h +2456 -2358
  384. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.c +367 -486
  385. data/src/core/ext/upb-gen/google/protobuf/duration.upb.h +21 -18
  386. data/src/core/ext/upb-gen/google/protobuf/duration.upb_minitable.c +5 -5
  387. data/src/core/ext/upb-gen/google/protobuf/empty.upb.h +7 -6
  388. data/src/core/ext/upb-gen/google/protobuf/empty.upb_minitable.c +1 -1
  389. data/src/core/ext/upb-gen/google/protobuf/struct.upb.h +134 -116
  390. data/src/core/ext/upb-gen/google/protobuf/struct.upb_minitable.c +27 -29
  391. data/src/core/ext/upb-gen/google/protobuf/timestamp.upb.h +21 -18
  392. data/src/core/ext/upb-gen/google/protobuf/timestamp.upb_minitable.c +5 -5
  393. data/src/core/ext/upb-gen/google/protobuf/wrappers.upb.h +126 -108
  394. data/src/core/ext/upb-gen/google/protobuf/wrappers.upb_minitable.c +27 -27
  395. data/src/core/ext/upb-gen/google/rpc/status.upb.h +49 -47
  396. data/src/core/ext/upb-gen/google/rpc/status.upb_minitable.c +8 -8
  397. data/src/core/ext/upb-gen/opencensus/proto/trace/v1/trace_config.upb.h +107 -92
  398. data/src/core/ext/upb-gen/opencensus/proto/trace/v1/trace_config.upb_minitable.c +27 -27
  399. data/src/core/ext/upb-gen/src/proto/grpc/gcp/altscontext.upb.h +77 -61
  400. data/src/core/ext/upb-gen/src/proto/grpc/gcp/altscontext.upb_minitable.c +21 -21
  401. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb.h +577 -518
  402. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.c +121 -127
  403. data/src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb.h +46 -40
  404. data/src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb_minitable.c +10 -16
  405. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb.h +28 -24
  406. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb_minitable.c +6 -6
  407. data/src/core/ext/upb-gen/src/proto/grpc/lb/v1/load_balancer.upb.h +265 -238
  408. data/src/core/ext/upb-gen/src/proto/grpc/lb/v1/load_balancer.upb_minitable.c +57 -63
  409. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls.upb.h +96 -82
  410. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls.upb_minitable.c +19 -19
  411. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls_config.upb.h +496 -466
  412. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls_config.upb_minitable.c +81 -85
  413. data/src/core/ext/upb-gen/udpa/annotations/migrate.upb.h +99 -82
  414. data/src/core/ext/upb-gen/udpa/annotations/migrate.upb_minitable.c +16 -16
  415. data/src/core/ext/upb-gen/udpa/annotations/security.upb.h +31 -26
  416. data/src/core/ext/upb-gen/udpa/annotations/security.upb_minitable.c +6 -6
  417. data/src/core/ext/upb-gen/udpa/annotations/sensitive.upb.h +10 -8
  418. data/src/core/ext/upb-gen/udpa/annotations/sensitive.upb_minitable.c +1 -1
  419. data/src/core/ext/upb-gen/udpa/annotations/status.upb.h +31 -26
  420. data/src/core/ext/upb-gen/udpa/annotations/status.upb_minitable.c +6 -6
  421. data/src/core/ext/upb-gen/udpa/annotations/versioning.upb.h +24 -20
  422. data/src/core/ext/upb-gen/udpa/annotations/versioning.upb_minitable.c +4 -4
  423. data/src/core/ext/upb-gen/validate/validate.upb.h +2620 -2458
  424. data/src/core/ext/upb-gen/validate/validate.upb_minitable.c +363 -507
  425. data/src/core/ext/upb-gen/xds/annotations/v3/migrate.upb.h +99 -82
  426. data/src/core/ext/upb-gen/xds/annotations/v3/migrate.upb_minitable.c +16 -16
  427. data/src/core/ext/upb-gen/xds/annotations/v3/security.upb.h +31 -26
  428. data/src/core/ext/upb-gen/xds/annotations/v3/security.upb_minitable.c +6 -6
  429. data/src/core/ext/upb-gen/xds/annotations/v3/sensitive.upb.h +10 -8
  430. data/src/core/ext/upb-gen/xds/annotations/v3/sensitive.upb_minitable.c +1 -1
  431. data/src/core/ext/upb-gen/xds/annotations/v3/status.upb.h +93 -78
  432. data/src/core/ext/upb-gen/xds/annotations/v3/status.upb_minitable.c +17 -17
  433. data/src/core/ext/upb-gen/xds/annotations/v3/versioning.upb.h +24 -20
  434. data/src/core/ext/upb-gen/xds/annotations/v3/versioning.upb_minitable.c +4 -4
  435. data/src/core/ext/upb-gen/xds/core/v3/authority.upb.h +14 -12
  436. data/src/core/ext/upb-gen/xds/core/v3/authority.upb_minitable.c +3 -3
  437. data/src/core/ext/upb-gen/xds/core/v3/cidr.upb.h +23 -20
  438. data/src/core/ext/upb-gen/xds/core/v3/cidr.upb_minitable.c +5 -7
  439. data/src/core/ext/upb-gen/xds/core/v3/collection_entry.upb.h +58 -50
  440. data/src/core/ext/upb-gen/xds/core/v3/collection_entry.upb_minitable.c +15 -15
  441. data/src/core/ext/upb-gen/xds/core/v3/context_params.upb.h +33 -23
  442. data/src/core/ext/upb-gen/xds/core/v3/context_params.upb_minitable.c +8 -8
  443. data/src/core/ext/upb-gen/xds/core/v3/extension.upb.h +23 -20
  444. data/src/core/ext/upb-gen/xds/core/v3/extension.upb_minitable.c +5 -7
  445. data/src/core/ext/upb-gen/xds/core/v3/resource.upb.h +32 -28
  446. data/src/core/ext/upb-gen/xds/core/v3/resource.upb_minitable.c +9 -9
  447. data/src/core/ext/upb-gen/xds/core/v3/resource_locator.upb.h +103 -93
  448. data/src/core/ext/upb-gen/xds/core/v3/resource_locator.upb_minitable.c +21 -21
  449. data/src/core/ext/upb-gen/xds/core/v3/resource_name.upb.h +37 -32
  450. data/src/core/ext/upb-gen/xds/core/v3/resource_name.upb_minitable.c +9 -13
  451. data/src/core/ext/upb-gen/xds/data/orca/v3/orca_load_report.upb.h +127 -93
  452. data/src/core/ext/upb-gen/xds/data/orca/v3/orca_load_report.upb_minitable.c +34 -34
  453. data/src/core/ext/upb-gen/xds/service/orca/v3/orca.upb.h +44 -43
  454. data/src/core/ext/upb-gen/xds/service/orca/v3/orca.upb_minitable.c +6 -6
  455. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb.h +23 -20
  456. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb_minitable.c +6 -6
  457. data/src/core/ext/upb-gen/xds/type/matcher/v3/domain.upb.h +79 -78
  458. data/src/core/ext/upb-gen/xds/type/matcher/v3/domain.upb_minitable.c +9 -11
  459. data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb.h +7 -6
  460. data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb_minitable.c +1 -1
  461. data/src/core/ext/upb-gen/xds/type/matcher/v3/ip.upb.h +86 -84
  462. data/src/core/ext/upb-gen/xds/type/matcher/v3/ip.upb_minitable.c +13 -13
  463. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb.h +324 -285
  464. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb_minitable.c +74 -82
  465. data/src/core/ext/upb-gen/xds/type/matcher/v3/range.upb.h +237 -234
  466. data/src/core/ext/upb-gen/xds/type/matcher/v3/range.upb_minitable.c +30 -36
  467. data/src/core/ext/upb-gen/xds/type/matcher/v3/regex.upb.h +33 -28
  468. data/src/core/ext/upb-gen/xds/type/matcher/v3/regex.upb_minitable.c +7 -7
  469. data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb.h +97 -89
  470. data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb_minitable.c +18 -18
  471. data/src/core/ext/upb-gen/xds/type/v3/cel.upb.h +53 -46
  472. data/src/core/ext/upb-gen/xds/type/v3/cel.upb_minitable.c +12 -18
  473. data/src/core/ext/upb-gen/xds/type/v3/range.upb.h +63 -54
  474. data/src/core/ext/upb-gen/xds/type/v3/range.upb_minitable.c +15 -15
  475. data/src/core/ext/upb-gen/xds/type/v3/typed_struct.upb.h +23 -20
  476. data/src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.c +5 -7
  477. data/src/core/ext/upbdefs-gen/envoy/admin/v3/certs.upbdefs.h +2 -5
  478. data/src/core/ext/upbdefs-gen/envoy/admin/v3/clusters.upbdefs.h +2 -5
  479. data/src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump.upbdefs.h +2 -5
  480. data/src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump_shared.upbdefs.h +2 -5
  481. data/src/core/ext/upbdefs-gen/envoy/admin/v3/init_dump.upbdefs.h +2 -5
  482. data/src/core/ext/upbdefs-gen/envoy/admin/v3/listeners.upbdefs.h +2 -5
  483. data/src/core/ext/upbdefs-gen/envoy/admin/v3/memory.upbdefs.h +2 -5
  484. data/src/core/ext/upbdefs-gen/envoy/admin/v3/metrics.upbdefs.h +2 -5
  485. data/src/core/ext/upbdefs-gen/envoy/admin/v3/mutex_stats.upbdefs.h +2 -5
  486. data/src/core/ext/upbdefs-gen/envoy/admin/v3/server_info.upbdefs.h +2 -5
  487. data/src/core/ext/upbdefs-gen/envoy/admin/v3/tap.upbdefs.h +2 -5
  488. data/src/core/ext/upbdefs-gen/envoy/annotations/deprecation.upbdefs.h +2 -5
  489. data/src/core/ext/upbdefs-gen/envoy/annotations/resource.upbdefs.h +2 -5
  490. data/src/core/ext/upbdefs-gen/envoy/config/accesslog/v3/accesslog.upbdefs.h +2 -5
  491. data/src/core/ext/upbdefs-gen/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +2 -5
  492. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +2 -5
  493. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/cluster.upbdefs.h +2 -5
  494. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/filter.upbdefs.h +2 -5
  495. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/outlier_detection.upbdefs.h +2 -5
  496. data/src/core/ext/upbdefs-gen/envoy/config/common/matcher/v3/matcher.upbdefs.h +2 -5
  497. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/address.upbdefs.h +2 -5
  498. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/backoff.upbdefs.h +2 -5
  499. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/base.upbdefs.h +2 -5
  500. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/config_source.upbdefs.h +2 -5
  501. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/event_service_config.upbdefs.h +2 -5
  502. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/extension.upbdefs.h +2 -5
  503. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/grpc_method_list.upbdefs.h +2 -5
  504. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/grpc_service.upbdefs.h +2 -5
  505. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/health_check.upbdefs.h +2 -5
  506. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/http_service.upbdefs.h +2 -5
  507. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/http_uri.upbdefs.h +2 -5
  508. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/protocol.upbdefs.h +2 -5
  509. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/proxy_protocol.upbdefs.h +2 -5
  510. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/resolver.upbdefs.h +2 -5
  511. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/socket_option.upbdefs.h +2 -5
  512. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/substitution_format_string.upbdefs.h +2 -5
  513. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/udp_socket_config.upbdefs.h +2 -5
  514. data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint.upbdefs.h +2 -5
  515. data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +2 -5
  516. data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/load_report.upbdefs.h +2 -5
  517. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/api_listener.upbdefs.h +2 -5
  518. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener.upbdefs.h +2 -5
  519. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener_components.upbdefs.h +2 -5
  520. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/quic_config.upbdefs.h +2 -5
  521. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/udp_listener_config.upbdefs.h +2 -5
  522. data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/metrics_service.upbdefs.h +2 -5
  523. data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/stats.upbdefs.h +2 -5
  524. data/src/core/ext/upbdefs-gen/envoy/config/overload/v3/overload.upbdefs.h +2 -5
  525. data/src/core/ext/upbdefs-gen/envoy/config/rbac/v3/rbac.upbdefs.h +2 -5
  526. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route.upbdefs.h +2 -5
  527. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route_components.upbdefs.h +2 -5
  528. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/scoped_route.upbdefs.h +2 -5
  529. data/src/core/ext/upbdefs-gen/envoy/config/tap/v3/common.upbdefs.h +2 -5
  530. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/datadog.upbdefs.h +2 -5
  531. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/dynamic_ot.upbdefs.h +2 -5
  532. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/http_tracer.upbdefs.h +2 -5
  533. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/lightstep.upbdefs.h +2 -5
  534. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/opencensus.upbdefs.h +2 -5
  535. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/opentelemetry.upbdefs.h +2 -5
  536. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/service.upbdefs.h +2 -5
  537. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/skywalking.upbdefs.h +2 -5
  538. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/trace.upbdefs.h +2 -5
  539. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/xray.upbdefs.h +2 -5
  540. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/zipkin.upbdefs.h +2 -5
  541. data/src/core/ext/upbdefs-gen/envoy/data/accesslog/v3/accesslog.upbdefs.h +2 -5
  542. data/src/core/ext/upbdefs-gen/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +2 -5
  543. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +2 -5
  544. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +2 -5
  545. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +2 -5
  546. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/router/v3/router.upbdefs.h +2 -5
  547. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +2 -5
  548. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +2 -5
  549. data/src/core/ext/upbdefs-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +2 -5
  550. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +2 -5
  551. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +2 -5
  552. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +2 -5
  553. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +2 -5
  554. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +2 -5
  555. data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h +2 -5
  556. data/src/core/ext/upbdefs-gen/envoy/service/discovery/v3/ads.upbdefs.h +2 -5
  557. data/src/core/ext/upbdefs-gen/envoy/service/discovery/v3/discovery.upbdefs.h +2 -5
  558. data/src/core/ext/upbdefs-gen/envoy/service/load_stats/v3/lrs.upbdefs.h +2 -5
  559. data/src/core/ext/upbdefs-gen/envoy/service/status/v3/csds.upbdefs.h +2 -5
  560. data/src/core/ext/upbdefs-gen/envoy/type/http/v3/cookie.upbdefs.h +2 -5
  561. data/src/core/ext/upbdefs-gen/envoy/type/http/v3/path_transformation.upbdefs.h +2 -5
  562. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/filter_state.upbdefs.h +2 -5
  563. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/http_inputs.upbdefs.h +2 -5
  564. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/metadata.upbdefs.h +2 -5
  565. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/node.upbdefs.h +2 -5
  566. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/number.upbdefs.h +2 -5
  567. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/path.upbdefs.h +2 -5
  568. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/regex.upbdefs.h +2 -5
  569. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/status_code_input.upbdefs.h +2 -5
  570. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/string.upbdefs.h +2 -5
  571. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/struct.upbdefs.h +2 -5
  572. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/value.upbdefs.h +2 -5
  573. data/src/core/ext/upbdefs-gen/envoy/type/metadata/v3/metadata.upbdefs.h +2 -5
  574. data/src/core/ext/upbdefs-gen/envoy/type/tracing/v3/custom_tag.upbdefs.h +2 -5
  575. data/src/core/ext/upbdefs-gen/envoy/type/v3/hash_policy.upbdefs.h +2 -5
  576. data/src/core/ext/upbdefs-gen/envoy/type/v3/http.upbdefs.h +2 -5
  577. data/src/core/ext/upbdefs-gen/envoy/type/v3/http_status.upbdefs.h +2 -5
  578. data/src/core/ext/upbdefs-gen/envoy/type/v3/percent.upbdefs.h +2 -5
  579. data/src/core/ext/upbdefs-gen/envoy/type/v3/range.upbdefs.h +2 -5
  580. data/src/core/ext/upbdefs-gen/envoy/type/v3/ratelimit_strategy.upbdefs.h +2 -5
  581. data/src/core/ext/upbdefs-gen/envoy/type/v3/ratelimit_unit.upbdefs.h +2 -5
  582. data/src/core/ext/upbdefs-gen/envoy/type/v3/semantic_version.upbdefs.h +2 -5
  583. data/src/core/ext/upbdefs-gen/envoy/type/v3/token_bucket.upbdefs.h +2 -5
  584. data/src/core/ext/upbdefs-gen/google/api/annotations.upbdefs.h +2 -5
  585. data/src/core/ext/upbdefs-gen/google/api/expr/v1alpha1/checked.upbdefs.h +2 -5
  586. data/src/core/ext/upbdefs-gen/google/api/expr/v1alpha1/syntax.upbdefs.h +2 -5
  587. data/src/core/ext/upbdefs-gen/google/api/http.upbdefs.h +2 -5
  588. data/src/core/ext/upbdefs-gen/google/api/httpbody.upbdefs.h +2 -5
  589. data/src/core/ext/upbdefs-gen/google/protobuf/any.upbdefs.h +2 -5
  590. data/src/core/ext/upbdefs-gen/google/protobuf/descriptor.upbdefs.c +385 -384
  591. data/src/core/ext/upbdefs-gen/google/protobuf/descriptor.upbdefs.h +2 -5
  592. data/src/core/ext/upbdefs-gen/google/protobuf/duration.upbdefs.h +2 -5
  593. data/src/core/ext/upbdefs-gen/google/protobuf/empty.upbdefs.h +2 -5
  594. data/src/core/ext/upbdefs-gen/google/protobuf/struct.upbdefs.h +2 -5
  595. data/src/core/ext/upbdefs-gen/google/protobuf/timestamp.upbdefs.h +2 -5
  596. data/src/core/ext/upbdefs-gen/google/protobuf/wrappers.upbdefs.h +2 -5
  597. data/src/core/ext/upbdefs-gen/google/rpc/status.upbdefs.h +2 -5
  598. data/src/core/ext/upbdefs-gen/opencensus/proto/trace/v1/trace_config.upbdefs.h +2 -5
  599. data/src/core/ext/upbdefs-gen/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +2 -5
  600. data/src/core/ext/upbdefs-gen/udpa/annotations/migrate.upbdefs.h +2 -5
  601. data/src/core/ext/upbdefs-gen/udpa/annotations/security.upbdefs.h +2 -5
  602. data/src/core/ext/upbdefs-gen/udpa/annotations/sensitive.upbdefs.h +2 -5
  603. data/src/core/ext/upbdefs-gen/udpa/annotations/status.upbdefs.h +2 -5
  604. data/src/core/ext/upbdefs-gen/udpa/annotations/versioning.upbdefs.h +2 -5
  605. data/src/core/ext/upbdefs-gen/validate/validate.upbdefs.h +2 -5
  606. data/src/core/ext/upbdefs-gen/xds/annotations/v3/migrate.upbdefs.h +2 -5
  607. data/src/core/ext/upbdefs-gen/xds/annotations/v3/security.upbdefs.h +2 -5
  608. data/src/core/ext/upbdefs-gen/xds/annotations/v3/sensitive.upbdefs.h +2 -5
  609. data/src/core/ext/upbdefs-gen/xds/annotations/v3/status.upbdefs.h +2 -5
  610. data/src/core/ext/upbdefs-gen/xds/annotations/v3/versioning.upbdefs.h +2 -5
  611. data/src/core/ext/upbdefs-gen/xds/core/v3/authority.upbdefs.h +2 -5
  612. data/src/core/ext/upbdefs-gen/xds/core/v3/cidr.upbdefs.h +2 -5
  613. data/src/core/ext/upbdefs-gen/xds/core/v3/collection_entry.upbdefs.h +2 -5
  614. data/src/core/ext/upbdefs-gen/xds/core/v3/context_params.upbdefs.h +2 -5
  615. data/src/core/ext/upbdefs-gen/xds/core/v3/extension.upbdefs.h +2 -5
  616. data/src/core/ext/upbdefs-gen/xds/core/v3/resource.upbdefs.h +2 -5
  617. data/src/core/ext/upbdefs-gen/xds/core/v3/resource_locator.upbdefs.h +2 -5
  618. data/src/core/ext/upbdefs-gen/xds/core/v3/resource_name.upbdefs.h +2 -5
  619. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/cel.upbdefs.h +2 -5
  620. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/domain.upbdefs.h +2 -5
  621. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/http_inputs.upbdefs.h +2 -5
  622. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/ip.upbdefs.h +2 -5
  623. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/matcher.upbdefs.h +2 -5
  624. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/range.upbdefs.h +2 -5
  625. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/regex.upbdefs.h +2 -5
  626. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/string.upbdefs.h +2 -5
  627. data/src/core/ext/upbdefs-gen/xds/type/v3/cel.upbdefs.h +2 -5
  628. data/src/core/ext/upbdefs-gen/xds/type/v3/range.upbdefs.h +2 -5
  629. data/src/core/ext/upbdefs-gen/xds/type/v3/typed_struct.upbdefs.h +2 -5
  630. data/src/core/handshaker/endpoint_info/endpoint_info_handshaker.cc +80 -0
  631. data/src/core/handshaker/endpoint_info/endpoint_info_handshaker.h +37 -0
  632. data/src/core/{lib/transport → handshaker}/handshaker.cc +8 -6
  633. data/src/core/{lib/transport → handshaker}/handshaker.h +4 -5
  634. data/src/core/{lib/transport → handshaker}/handshaker_factory.h +20 -5
  635. data/src/core/{lib/transport → handshaker}/handshaker_registry.cc +3 -3
  636. data/src/core/{lib/transport → handshaker}/handshaker_registry.h +6 -6
  637. data/src/core/{lib/transport → handshaker/http_connect}/http_connect_handshaker.cc +5 -6
  638. data/src/core/{lib/transport → handshaker/http_connect}/http_connect_handshaker.h +3 -3
  639. data/src/core/{client_channel → handshaker/http_connect}/http_proxy_mapper.cc +9 -10
  640. data/src/core/{client_channel → handshaker/http_connect}/http_proxy_mapper.h +7 -7
  641. data/src/core/{lib/handshaker → handshaker}/proxy_mapper.h +5 -5
  642. data/src/core/{lib/handshaker → handshaker}/proxy_mapper_registry.cc +3 -3
  643. data/src/core/{lib/handshaker → handshaker}/proxy_mapper_registry.h +6 -6
  644. data/src/core/{lib/security/transport → handshaker/security}/secure_endpoint.cc +5 -5
  645. data/src/core/{lib/security/transport → handshaker/security}/secure_endpoint.h +4 -5
  646. data/src/core/{lib/security/transport → handshaker/security}/security_handshaker.cc +29 -20
  647. data/src/core/{lib/security/transport → handshaker/security}/security_handshaker.h +8 -7
  648. data/src/core/{lib/security/transport → handshaker/security}/tsi_error.cc +2 -2
  649. data/src/core/{lib/security/transport → handshaker/security}/tsi_error.h +3 -3
  650. data/src/core/{lib/transport → handshaker/tcp_connect}/tcp_connect_handshaker.cc +8 -8
  651. data/src/core/{lib/transport → handshaker/tcp_connect}/tcp_connect_handshaker.h +3 -3
  652. data/src/core/lib/address_utils/parse_address.cc +13 -4
  653. data/src/core/lib/address_utils/parse_address.h +2 -2
  654. data/src/core/lib/address_utils/sockaddr_utils.cc +23 -10
  655. data/src/core/lib/address_utils/sockaddr_utils.h +2 -2
  656. data/src/core/lib/avl/avl.h +2 -2
  657. data/src/core/lib/backoff/backoff.cc +2 -2
  658. data/src/core/lib/backoff/backoff.h +2 -2
  659. data/src/core/lib/backoff/random_early_detection.cc +2 -2
  660. data/src/core/lib/backoff/random_early_detection.h +2 -2
  661. data/src/core/lib/channel/call_finalization.h +3 -3
  662. data/src/core/lib/channel/call_tracer.cc +10 -11
  663. data/src/core/lib/channel/call_tracer.h +15 -14
  664. data/src/core/lib/channel/channel_args.cc +4 -4
  665. data/src/core/lib/channel/channel_args.h +1 -2
  666. data/src/core/lib/channel/channel_args_preconditioning.cc +2 -2
  667. data/src/core/lib/channel/channel_args_preconditioning.h +1 -2
  668. data/src/core/lib/channel/channel_stack.cc +17 -7
  669. data/src/core/lib/channel/channel_stack.h +6 -2
  670. data/src/core/lib/channel/channel_stack_builder.cc +2 -2
  671. data/src/core/lib/channel/channel_stack_builder.h +2 -2
  672. data/src/core/lib/channel/channel_stack_builder_impl.cc +135 -2
  673. data/src/core/lib/channel/channel_stack_builder_impl.h +2 -2
  674. data/src/core/lib/channel/channel_stack_trace.cc +2 -2
  675. data/src/core/lib/channel/connected_channel.cc +25 -43
  676. data/src/core/lib/channel/context.h +29 -1
  677. data/src/core/lib/channel/metrics.cc +334 -0
  678. data/src/core/lib/channel/metrics.h +365 -0
  679. data/src/core/lib/channel/promise_based_filter.cc +70 -75
  680. data/src/core/lib/channel/promise_based_filter.h +251 -154
  681. data/src/core/lib/channel/status_util.cc +2 -2
  682. data/src/core/lib/channel/status_util.h +1 -2
  683. data/src/core/lib/channel/tcp_tracer.h +6 -2
  684. data/src/core/lib/compression/compression.cc +1 -2
  685. data/src/core/lib/compression/compression_internal.cc +36 -3
  686. data/src/core/lib/compression/compression_internal.h +4 -2
  687. data/src/core/lib/compression/message_compress.cc +9 -8
  688. data/src/core/lib/compression/message_compress.h +1 -2
  689. data/src/core/lib/config/config_vars.cc +8 -6
  690. data/src/core/lib/config/config_vars.h +6 -2
  691. data/src/core/lib/config/config_vars_non_generated.cc +2 -2
  692. data/src/core/lib/config/core_configuration.cc +9 -8
  693. data/src/core/lib/config/core_configuration.h +8 -8
  694. data/src/core/lib/config/load_config.cc +4 -4
  695. data/src/core/lib/config/load_config.h +2 -2
  696. data/src/core/lib/debug/event_log.cc +3 -3
  697. data/src/core/lib/debug/event_log.h +2 -2
  698. data/src/core/lib/debug/histogram_view.cc +2 -2
  699. data/src/core/lib/debug/histogram_view.h +2 -2
  700. data/src/core/lib/debug/stats.cc +2 -2
  701. data/src/core/lib/debug/stats.h +2 -2
  702. data/src/core/lib/debug/stats_data.cc +271 -28
  703. data/src/core/lib/debug/stats_data.h +178 -2
  704. data/src/core/lib/debug/trace.cc +1 -2
  705. data/src/core/lib/debug/trace.h +2 -2
  706. data/src/core/lib/event_engine/ares_resolver.cc +18 -19
  707. data/src/core/lib/event_engine/ares_resolver.h +2 -2
  708. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +3 -1
  709. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +3 -3
  710. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +2 -1
  711. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +2 -1
  712. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +1 -2
  713. data/src/core/lib/event_engine/channel_args_endpoint_config.h +1 -2
  714. data/src/core/lib/event_engine/common_closures.h +1 -2
  715. data/src/core/lib/event_engine/default_event_engine.cc +1 -2
  716. data/src/core/lib/event_engine/default_event_engine.h +1 -8
  717. data/src/core/lib/event_engine/default_event_engine_factory.cc +1 -2
  718. data/src/core/lib/event_engine/default_event_engine_factory.h +1 -2
  719. data/src/core/lib/event_engine/event_engine.cc +1 -2
  720. data/src/core/lib/event_engine/event_engine_context.h +30 -0
  721. data/src/core/lib/event_engine/extensions/can_track_errors.h +2 -2
  722. data/src/core/lib/event_engine/extensions/chaotic_good_extension.h +65 -0
  723. data/src/core/lib/event_engine/extensions/supports_fd.h +1 -2
  724. data/src/core/lib/event_engine/forkable.cc +7 -6
  725. data/src/core/lib/event_engine/forkable.h +1 -2
  726. data/src/core/lib/event_engine/grpc_polled_fd.h +1 -2
  727. data/src/core/lib/event_engine/handle_containers.h +1 -2
  728. data/src/core/lib/event_engine/memory_allocator_factory.h +1 -2
  729. data/src/core/lib/event_engine/poller.h +1 -2
  730. data/src/core/lib/event_engine/posix.h +9 -2
  731. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +8 -8
  732. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +1 -2
  733. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +11 -11
  734. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +1 -2
  735. data/src/core/lib/event_engine/posix_engine/event_poller.h +1 -2
  736. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +2 -2
  737. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +2 -2
  738. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +1 -2
  739. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +1 -2
  740. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +2 -2
  741. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +3 -3
  742. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +2 -2
  743. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +2 -2
  744. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +24 -25
  745. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +11 -11
  746. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +10 -10
  747. data/src/core/lib/event_engine/posix_engine/posix_engine.h +1 -2
  748. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +1 -2
  749. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +4 -3
  750. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +1 -2
  751. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +7 -6
  752. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +1 -2
  753. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +10 -3
  754. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +3 -3
  755. data/src/core/lib/event_engine/posix_engine/timer.cc +1 -2
  756. data/src/core/lib/event_engine/posix_engine/timer.h +1 -2
  757. data/src/core/lib/event_engine/posix_engine/timer_heap.cc +2 -2
  758. data/src/core/lib/event_engine/posix_engine/timer_heap.h +2 -2
  759. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +5 -5
  760. data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -2
  761. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +1 -2
  762. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +1 -2
  763. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +2 -2
  764. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +2 -2
  765. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +2 -2
  766. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +2 -2
  767. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +2 -2
  768. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +2 -2
  769. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +2 -2
  770. data/src/core/lib/event_engine/query_extensions.h +3 -2
  771. data/src/core/lib/event_engine/ref_counted_dns_resolver_interface.h +1 -2
  772. data/src/core/lib/event_engine/resolved_address.cc +5 -4
  773. data/src/core/lib/event_engine/resolved_address_internal.h +1 -2
  774. data/src/core/lib/event_engine/shim.cc +2 -2
  775. data/src/core/lib/event_engine/slice.cc +4 -3
  776. data/src/core/lib/event_engine/slice_buffer.cc +1 -2
  777. data/src/core/lib/event_engine/tcp_socket_utils.cc +20 -9
  778. data/src/core/lib/event_engine/tcp_socket_utils.h +3 -4
  779. data/src/core/lib/event_engine/thread_local.cc +2 -2
  780. data/src/core/lib/event_engine/thread_pool/thread_count.cc +1 -2
  781. data/src/core/lib/event_engine/thread_pool/thread_count.h +1 -2
  782. data/src/core/lib/event_engine/thread_pool/thread_pool.h +1 -2
  783. data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +2 -2
  784. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +8 -8
  785. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +1 -2
  786. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +2 -2
  787. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +1 -2
  788. data/src/core/lib/event_engine/time_util.cc +1 -2
  789. data/src/core/lib/event_engine/time_util.h +1 -2
  790. data/src/core/lib/event_engine/trace.cc +2 -2
  791. data/src/core/lib/event_engine/trace.h +1 -2
  792. data/src/core/lib/event_engine/utils.cc +1 -2
  793. data/src/core/lib/event_engine/utils.h +1 -2
  794. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +31 -30
  795. data/src/core/lib/event_engine/windows/iocp.cc +10 -8
  796. data/src/core/lib/event_engine/windows/win_socket.cc +11 -5
  797. data/src/core/lib/event_engine/windows/win_socket.h +3 -0
  798. data/src/core/lib/event_engine/windows/windows_endpoint.cc +13 -12
  799. data/src/core/lib/event_engine/windows/windows_engine.cc +48 -14
  800. data/src/core/lib/event_engine/windows/windows_listener.cc +61 -12
  801. data/src/core/lib/event_engine/windows/windows_listener.h +14 -0
  802. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +2 -2
  803. data/src/core/lib/event_engine/work_queue/basic_work_queue.h +1 -2
  804. data/src/core/lib/event_engine/work_queue/work_queue.h +1 -2
  805. data/src/core/lib/experiments/config.cc +66 -48
  806. data/src/core/lib/experiments/config.h +2 -2
  807. data/src/core/lib/experiments/experiments.cc +42 -246
  808. data/src/core/lib/experiments/experiments.h +26 -124
  809. data/src/core/lib/gpr/alloc.cc +3 -1
  810. data/src/core/lib/gpr/android/log.cc +1 -1
  811. data/src/core/lib/gpr/linux/log.cc +1 -1
  812. data/src/core/lib/gpr/log.cc +26 -0
  813. data/src/core/lib/gpr/posix/log.cc +1 -1
  814. data/src/core/lib/gpr/posix/sync.cc +25 -23
  815. data/src/core/lib/gpr/posix/time.cc +9 -66
  816. data/src/core/lib/gpr/posix/tmpfile.cc +3 -1
  817. data/src/core/lib/gpr/sync.cc +5 -3
  818. data/src/core/lib/gpr/time.cc +10 -8
  819. data/src/core/lib/gpr/windows/log.cc +1 -1
  820. data/src/core/lib/gpr/windows/sync.cc +3 -1
  821. data/src/core/lib/gpr/windows/time.cc +4 -1
  822. data/src/core/lib/gprpp/atomic_utils.h +2 -2
  823. data/src/core/lib/gprpp/bitset.h +2 -2
  824. data/src/core/lib/gprpp/chunked_vector.h +6 -5
  825. data/src/core/lib/gprpp/construct_destruct.h +2 -2
  826. data/src/core/lib/gprpp/crash.cc +1 -2
  827. data/src/core/lib/gprpp/crash.h +2 -2
  828. data/src/core/lib/gprpp/debug_location.h +2 -2
  829. data/src/core/lib/gprpp/directory_reader.h +2 -2
  830. data/src/core/lib/gprpp/down_cast.h +7 -7
  831. data/src/core/lib/gprpp/dual_ref_counted.h +26 -17
  832. data/src/core/lib/gprpp/env.h +2 -2
  833. data/src/core/lib/gprpp/examine_stack.cc +2 -2
  834. data/src/core/lib/gprpp/examine_stack.h +2 -2
  835. data/src/core/lib/gprpp/fork.cc +1 -2
  836. data/src/core/lib/gprpp/fork.h +2 -2
  837. data/src/core/lib/gprpp/host_port.cc +6 -4
  838. data/src/core/lib/gprpp/host_port.h +2 -2
  839. data/src/core/lib/gprpp/linux/env.cc +2 -2
  840. data/src/core/lib/gprpp/load_file.cc +4 -3
  841. data/src/core/lib/gprpp/load_file.h +2 -2
  842. data/src/core/lib/gprpp/manual_constructor.h +2 -2
  843. data/src/core/lib/gprpp/match.h +2 -2
  844. data/src/core/lib/gprpp/memory.h +1 -2
  845. data/src/core/lib/gprpp/mpscq.cc +2 -2
  846. data/src/core/lib/gprpp/mpscq.h +5 -4
  847. data/src/core/lib/gprpp/no_destruct.h +2 -2
  848. data/src/core/lib/gprpp/notification.h +2 -2
  849. data/src/core/lib/gprpp/orphanable.h +7 -4
  850. data/src/core/lib/gprpp/overload.h +2 -2
  851. data/src/core/lib/gprpp/per_cpu.cc +1 -2
  852. data/src/core/lib/gprpp/per_cpu.h +1 -2
  853. data/src/core/lib/gprpp/posix/directory_reader.cc +2 -2
  854. data/src/core/lib/gprpp/posix/stat.cc +6 -4
  855. data/src/core/lib/gprpp/posix/thd.cc +10 -10
  856. data/src/core/lib/gprpp/ref_counted.h +10 -6
  857. data/src/core/lib/gprpp/ref_counted_ptr.h +4 -3
  858. data/src/core/lib/gprpp/ref_counted_string.cc +1 -2
  859. data/src/core/lib/gprpp/ref_counted_string.h +2 -2
  860. data/src/core/lib/gprpp/single_set_ptr.h +4 -3
  861. data/src/core/lib/gprpp/sorted_pack.h +2 -2
  862. data/src/core/lib/gprpp/stat.h +2 -2
  863. data/src/core/lib/gprpp/status_helper.cc +3 -3
  864. data/src/core/lib/gprpp/status_helper.h +2 -2
  865. data/src/core/lib/gprpp/strerror.cc +2 -2
  866. data/src/core/lib/gprpp/strerror.h +2 -2
  867. data/src/core/lib/gprpp/sync.h +5 -5
  868. data/src/core/lib/gprpp/table.h +2 -2
  869. data/src/core/lib/gprpp/tchar.cc +2 -2
  870. data/src/core/lib/gprpp/thd.h +7 -7
  871. data/src/core/lib/gprpp/time.cc +6 -6
  872. data/src/core/lib/gprpp/time.h +7 -2
  873. data/src/core/lib/gprpp/time_averaged_stats.cc +2 -2
  874. data/src/core/lib/gprpp/time_util.cc +5 -4
  875. data/src/core/lib/gprpp/time_util.h +1 -2
  876. data/src/core/lib/gprpp/unique_type_name.h +2 -2
  877. data/src/core/lib/gprpp/uuid_v4.cc +37 -0
  878. data/src/core/lib/gprpp/uuid_v4.h +36 -0
  879. data/src/core/lib/gprpp/validation_errors.cc +2 -2
  880. data/src/core/lib/gprpp/validation_errors.h +2 -2
  881. data/src/core/lib/gprpp/windows/stat.cc +4 -2
  882. data/src/core/lib/gprpp/windows/thd.cc +4 -2
  883. data/src/core/lib/gprpp/work_serializer.cc +5 -5
  884. data/src/core/lib/gprpp/work_serializer.h +1 -2
  885. data/src/core/lib/http/format_request.cc +1 -2
  886. data/src/core/lib/http/format_request.h +1 -2
  887. data/src/core/lib/http/httpcli.cc +6 -6
  888. data/src/core/lib/http/httpcli.h +2 -3
  889. data/src/core/lib/http/httpcli_security_connector.cc +4 -4
  890. data/src/core/lib/http/httpcli_ssl_credentials.h +1 -2
  891. data/src/core/lib/http/parser.cc +5 -5
  892. data/src/core/lib/http/parser.h +1 -2
  893. data/src/core/lib/iomgr/buffer_list.cc +1 -2
  894. data/src/core/lib/iomgr/buffer_list.h +1 -2
  895. data/src/core/lib/iomgr/call_combiner.cc +5 -4
  896. data/src/core/lib/iomgr/call_combiner.h +1 -2
  897. data/src/core/lib/iomgr/closure.cc +2 -2
  898. data/src/core/lib/iomgr/closure.h +4 -3
  899. data/src/core/lib/iomgr/combiner.cc +7 -6
  900. data/src/core/lib/iomgr/combiner.h +1 -2
  901. data/src/core/lib/iomgr/endpoint.cc +2 -2
  902. data/src/core/lib/iomgr/endpoint.h +1 -2
  903. data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -5
  904. data/src/core/lib/iomgr/endpoint_pair_posix.cc +5 -4
  905. data/src/core/lib/iomgr/endpoint_pair_windows.cc +11 -10
  906. data/src/core/lib/iomgr/error.cc +3 -3
  907. data/src/core/lib/iomgr/error.h +3 -3
  908. data/src/core/lib/iomgr/ev_epoll1_linux.cc +14 -13
  909. data/src/core/lib/iomgr/ev_poll_posix.cc +9 -9
  910. data/src/core/lib/iomgr/ev_posix.cc +1 -2
  911. data/src/core/lib/iomgr/ev_posix.h +2 -2
  912. data/src/core/lib/iomgr/event_engine_shims/closure.cc +1 -2
  913. data/src/core/lib/iomgr/event_engine_shims/closure.h +1 -2
  914. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +3 -3
  915. data/src/core/lib/iomgr/event_engine_shims/endpoint.h +1 -2
  916. data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +1 -2
  917. data/src/core/lib/iomgr/event_engine_shims/tcp_client.h +1 -2
  918. data/src/core/lib/iomgr/exec_ctx.cc +5 -5
  919. data/src/core/lib/iomgr/exec_ctx.h +6 -4
  920. data/src/core/lib/iomgr/executor.cc +7 -8
  921. data/src/core/lib/iomgr/grpc_if_nametoindex.h +2 -2
  922. data/src/core/lib/iomgr/internal_errqueue.cc +1 -2
  923. data/src/core/lib/iomgr/iocp_windows.cc +9 -6
  924. data/src/core/lib/iomgr/iocp_windows.h +0 -1
  925. data/src/core/lib/iomgr/iomgr.cc +1 -2
  926. data/src/core/lib/iomgr/iomgr.h +2 -2
  927. data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
  928. data/src/core/lib/iomgr/iomgr_internal.h +2 -2
  929. data/src/core/lib/iomgr/iomgr_windows.cc +4 -2
  930. data/src/core/lib/iomgr/lockfree_event.cc +4 -3
  931. data/src/core/lib/iomgr/lockfree_event.h +1 -2
  932. data/src/core/lib/iomgr/polling_entity.cc +5 -5
  933. data/src/core/lib/iomgr/pollset.cc +2 -2
  934. data/src/core/lib/iomgr/pollset.h +0 -1
  935. data/src/core/lib/iomgr/pollset_set.cc +2 -2
  936. data/src/core/lib/iomgr/pollset_set_windows.cc +2 -2
  937. data/src/core/lib/iomgr/pollset_windows.h +0 -1
  938. data/src/core/lib/iomgr/port.h +3 -0
  939. data/src/core/lib/iomgr/python_util.h +1 -2
  940. data/src/core/lib/iomgr/resolve_address.cc +1 -2
  941. data/src/core/lib/iomgr/resolve_address.h +1 -2
  942. data/src/core/lib/iomgr/resolve_address_impl.h +2 -2
  943. data/src/core/lib/iomgr/resolve_address_posix.h +2 -2
  944. data/src/core/lib/iomgr/resolve_address_windows.h +2 -2
  945. data/src/core/lib/iomgr/resolved_address.h +2 -2
  946. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +3 -1
  947. data/src/core/lib/iomgr/socket_factory_posix.h +1 -2
  948. data/src/core/lib/iomgr/socket_mutator.cc +1 -2
  949. data/src/core/lib/iomgr/socket_mutator.h +1 -2
  950. data/src/core/lib/iomgr/socket_utils.h +2 -2
  951. data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -1
  952. data/src/core/lib/iomgr/socket_utils_posix.cc +2 -2
  953. data/src/core/lib/iomgr/socket_utils_posix.h +1 -2
  954. data/src/core/lib/iomgr/socket_windows.cc +4 -3
  955. data/src/core/lib/iomgr/tcp_client.cc +2 -2
  956. data/src/core/lib/iomgr/tcp_client.h +1 -2
  957. data/src/core/lib/iomgr/tcp_client_posix.cc +5 -4
  958. data/src/core/lib/iomgr/tcp_client_windows.cc +31 -10
  959. data/src/core/lib/iomgr/tcp_posix.cc +89 -41
  960. data/src/core/lib/iomgr/tcp_server.cc +2 -2
  961. data/src/core/lib/iomgr/tcp_server.h +1 -2
  962. data/src/core/lib/iomgr/tcp_server_posix.cc +123 -109
  963. data/src/core/lib/iomgr/tcp_server_utils_posix.h +2 -2
  964. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +6 -6
  965. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -1
  966. data/src/core/lib/iomgr/tcp_server_windows.cc +75 -23
  967. data/src/core/lib/iomgr/tcp_windows.cc +8 -6
  968. data/src/core/lib/iomgr/timer.cc +2 -2
  969. data/src/core/lib/iomgr/timer.h +1 -2
  970. data/src/core/lib/iomgr/timer_generic.cc +3 -3
  971. data/src/core/lib/iomgr/timer_generic.h +0 -1
  972. data/src/core/lib/iomgr/timer_heap.cc +1 -2
  973. data/src/core/lib/iomgr/timer_manager.cc +4 -3
  974. data/src/core/lib/iomgr/timer_manager.h +2 -2
  975. data/src/core/lib/iomgr/unix_sockets_posix.cc +15 -1
  976. data/src/core/lib/iomgr/unix_sockets_posix.h +1 -2
  977. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +3 -1
  978. data/src/core/lib/iomgr/vsock.cc +2 -2
  979. data/src/core/lib/iomgr/vsock.h +1 -2
  980. data/src/core/lib/json/json.h +1 -2
  981. data/src/core/lib/json/json_args.h +2 -2
  982. data/src/core/lib/json/json_channel_args.h +2 -2
  983. data/src/core/lib/json/json_object_loader.cc +1 -2
  984. data/src/core/lib/json/json_object_loader.h +2 -2
  985. data/src/core/lib/json/json_reader.cc +4 -4
  986. data/src/core/lib/json/json_reader.h +2 -2
  987. data/src/core/lib/json/json_util.cc +2 -2
  988. data/src/core/lib/json/json_util.h +2 -2
  989. data/src/core/lib/json/json_writer.cc +2 -2
  990. data/src/core/lib/json/json_writer.h +2 -2
  991. data/src/core/lib/matchers/matchers.cc +2 -2
  992. data/src/core/lib/matchers/matchers.h +2 -2
  993. data/src/core/lib/promise/activity.cc +4 -3
  994. data/src/core/lib/promise/activity.h +8 -7
  995. data/src/core/lib/promise/all_ok.h +2 -2
  996. data/src/core/lib/promise/arena_promise.h +2 -2
  997. data/src/core/lib/promise/context.h +5 -5
  998. data/src/core/lib/promise/detail/join_state.h +11 -10
  999. data/src/core/lib/promise/detail/promise_factory.h +2 -2
  1000. data/src/core/lib/promise/detail/promise_like.h +2 -2
  1001. data/src/core/lib/promise/detail/seq_state.h +194 -194
  1002. data/src/core/lib/promise/detail/status.h +4 -3
  1003. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +2 -2
  1004. data/src/core/lib/promise/for_each.h +88 -27
  1005. data/src/core/lib/promise/if.h +2 -2
  1006. data/src/core/lib/promise/interceptor_list.h +3 -3
  1007. data/src/core/lib/promise/latch.h +8 -8
  1008. data/src/core/lib/promise/loop.h +2 -2
  1009. data/src/core/lib/promise/map.h +2 -2
  1010. data/src/core/lib/promise/party.cc +45 -15
  1011. data/src/core/lib/promise/party.h +21 -23
  1012. data/src/core/lib/promise/pipe.h +15 -15
  1013. data/src/core/lib/promise/poll.h +6 -5
  1014. data/src/core/lib/promise/prioritized_race.h +2 -2
  1015. data/src/core/lib/promise/promise.h +2 -2
  1016. data/src/core/lib/promise/race.h +2 -2
  1017. data/src/core/lib/promise/seq.h +2 -2
  1018. data/src/core/lib/promise/sleep.cc +2 -3
  1019. data/src/core/lib/promise/sleep.h +1 -2
  1020. data/src/core/lib/promise/status_flag.h +16 -8
  1021. data/src/core/lib/promise/trace.cc +2 -2
  1022. data/src/core/lib/promise/try_join.h +4 -3
  1023. data/src/core/lib/promise/try_seq.h +4 -3
  1024. data/src/core/lib/resource_quota/api.cc +1 -2
  1025. data/src/core/lib/resource_quota/api.h +1 -2
  1026. data/src/core/lib/resource_quota/arena.cc +1 -2
  1027. data/src/core/lib/resource_quota/arena.h +4 -2
  1028. data/src/core/lib/resource_quota/connection_quota.cc +70 -0
  1029. data/src/core/lib/resource_quota/connection_quota.h +61 -0
  1030. data/src/core/lib/resource_quota/memory_quota.cc +11 -11
  1031. data/src/core/lib/resource_quota/memory_quota.h +4 -4
  1032. data/src/core/lib/resource_quota/periodic_update.cc +2 -2
  1033. data/src/core/lib/resource_quota/periodic_update.h +2 -2
  1034. data/src/core/lib/resource_quota/resource_quota.cc +2 -2
  1035. data/src/core/lib/resource_quota/resource_quota.h +1 -2
  1036. data/src/core/lib/resource_quota/thread_quota.cc +4 -3
  1037. data/src/core/lib/resource_quota/thread_quota.h +2 -2
  1038. data/src/core/lib/resource_quota/trace.cc +2 -2
  1039. data/src/core/lib/security/authorization/audit_logging.cc +6 -6
  1040. data/src/core/lib/security/authorization/audit_logging.h +1 -2
  1041. data/src/core/lib/security/authorization/authorization_engine.h +2 -2
  1042. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -2
  1043. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -2
  1044. data/src/core/lib/security/authorization/evaluate_args.cc +7 -7
  1045. data/src/core/lib/security/authorization/evaluate_args.h +4 -5
  1046. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +4 -3
  1047. data/src/core/lib/security/authorization/grpc_authorization_engine.h +1 -2
  1048. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +8 -12
  1049. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +7 -9
  1050. data/src/core/lib/security/authorization/matchers.cc +1 -2
  1051. data/src/core/lib/security/authorization/matchers.h +2 -2
  1052. data/src/core/lib/security/authorization/rbac_policy.cc +2 -2
  1053. data/src/core/lib/security/authorization/rbac_policy.h +1 -2
  1054. data/src/core/lib/security/authorization/stdout_logger.cc +4 -3
  1055. data/src/core/lib/security/authorization/stdout_logger.h +1 -2
  1056. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +2 -2
  1057. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +4 -3
  1058. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +2 -2
  1059. data/src/core/lib/security/context/security_context.cc +5 -3
  1060. data/src/core/lib/security/context/security_context.h +2 -2
  1061. data/src/core/lib/security/credentials/alts/alts_credentials.cc +1 -2
  1062. data/src/core/lib/security/credentials/alts/alts_credentials.h +2 -2
  1063. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -2
  1064. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -2
  1065. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +1 -2
  1066. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +2 -2
  1067. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -2
  1068. data/src/core/lib/security/credentials/call_creds_util.cc +1 -2
  1069. data/src/core/lib/security/credentials/call_creds_util.h +2 -2
  1070. data/src/core/lib/security/credentials/channel_creds_registry.h +2 -2
  1071. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +2 -2
  1072. data/src/core/lib/security/credentials/composite/composite_credentials.cc +9 -8
  1073. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  1074. data/src/core/lib/security/credentials/credentials.cc +4 -3
  1075. data/src/core/lib/security/credentials/credentials.h +5 -4
  1076. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +5 -4
  1077. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +2 -2
  1078. data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -2
  1079. data/src/core/lib/security/credentials/external/aws_request_signer.h +2 -2
  1080. data/src/core/lib/security/credentials/external/external_account_credentials.cc +7 -6
  1081. data/src/core/lib/security/credentials/external/external_account_credentials.h +2 -2
  1082. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +1 -2
  1083. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +2 -2
  1084. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -3
  1085. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +2 -2
  1086. data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
  1087. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  1088. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -2
  1089. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +8 -7
  1090. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +2 -2
  1091. data/src/core/lib/security/credentials/iam/iam_credentials.cc +5 -5
  1092. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  1093. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +2 -2
  1094. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +2 -2
  1095. data/src/core/lib/security/credentials/jwt/json_token.cc +13 -8
  1096. data/src/core/lib/security/credentials/jwt/json_token.h +1 -2
  1097. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -3
  1098. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  1099. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +26 -31
  1100. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +1 -2
  1101. data/src/core/lib/security/credentials/local/local_credentials.cc +1 -2
  1102. data/src/core/lib/security/credentials/local/local_credentials.h +2 -2
  1103. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +9 -8
  1104. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +2 -2
  1105. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +3 -3
  1106. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
  1107. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +13 -13
  1108. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +5 -3
  1109. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +26 -25
  1110. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +2 -2
  1111. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_match.cc +2 -2
  1112. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +7 -6
  1113. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +3 -3
  1114. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +3 -3
  1115. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +4 -3
  1116. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +19 -18
  1117. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +1 -0
  1118. data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.cc +19 -12
  1119. data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.h +8 -5
  1120. data/src/core/lib/security/credentials/tls/tls_credentials.cc +1 -2
  1121. data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
  1122. data/src/core/lib/security/credentials/tls/tls_utils.cc +1 -2
  1123. data/src/core/lib/security/credentials/tls/tls_utils.h +1 -2
  1124. data/src/core/lib/security/credentials/xds/xds_credentials.cc +7 -7
  1125. data/src/core/lib/security/credentials/xds/xds_credentials.h +3 -3
  1126. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +14 -14
  1127. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +2 -2
  1128. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +5 -5
  1129. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
  1130. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +6 -5
  1131. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +3 -3
  1132. data/src/core/lib/security/security_connector/load_system_roots.h +4 -2
  1133. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +3 -2
  1134. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +2 -2
  1135. data/src/core/lib/security/security_connector/load_system_roots_supported.h +1 -2
  1136. data/src/core/lib/security/security_connector/load_system_roots_windows.cc +87 -0
  1137. data/src/core/lib/security/security_connector/local/local_security_connector.cc +11 -11
  1138. data/src/core/lib/security/security_connector/local/local_security_connector.h +2 -2
  1139. data/src/core/lib/security/security_connector/security_connector.cc +7 -6
  1140. data/src/core/lib/security/security_connector/security_connector.h +3 -3
  1141. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +6 -6
  1142. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +2 -2
  1143. data/src/core/lib/security/security_connector/ssl_utils.cc +10 -9
  1144. data/src/core/lib/security/security_connector/ssl_utils.h +1 -2
  1145. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +13 -13
  1146. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +3 -3
  1147. data/src/core/lib/security/transport/auth_filters.h +11 -36
  1148. data/src/core/lib/security/transport/client_auth_filter.cc +6 -5
  1149. data/src/core/lib/security/transport/server_auth_filter.cc +7 -5
  1150. data/src/core/lib/security/util/json_util.cc +1 -2
  1151. data/src/core/lib/slice/percent_encoding.cc +4 -3
  1152. data/src/core/lib/slice/slice.cc +42 -15
  1153. data/src/core/lib/slice/slice.h +4 -4
  1154. data/src/core/lib/slice/slice_buffer.cc +64 -25
  1155. data/src/core/lib/slice/slice_buffer.h +15 -3
  1156. data/src/core/lib/slice/slice_internal.h +10 -3
  1157. data/src/core/lib/slice/slice_refcount.cc +2 -2
  1158. data/src/core/lib/slice/slice_refcount.h +1 -2
  1159. data/src/core/lib/slice/slice_string_helpers.cc +2 -2
  1160. data/src/core/lib/slice/slice_string_helpers.h +1 -2
  1161. data/src/core/lib/surface/api_trace.cc +2 -2
  1162. data/src/core/lib/surface/api_trace.h +1 -2
  1163. data/src/core/lib/surface/byte_buffer.cc +1 -2
  1164. data/src/core/lib/surface/byte_buffer_reader.cc +4 -3
  1165. data/src/core/lib/surface/call.cc +212 -339
  1166. data/src/core/lib/surface/call.h +181 -11
  1167. data/src/core/lib/surface/call_details.cc +1 -2
  1168. data/src/core/lib/surface/call_log_batch.cc +1 -2
  1169. data/src/core/lib/surface/call_test_only.h +1 -2
  1170. data/src/core/lib/surface/call_trace.h +0 -6
  1171. data/src/core/lib/surface/channel.cc +111 -321
  1172. data/src/core/lib/surface/channel.h +90 -110
  1173. data/src/core/lib/surface/channel_create.cc +110 -0
  1174. data/src/core/lib/surface/{builtins.cc → channel_create.h} +21 -16
  1175. data/src/core/lib/surface/channel_init.cc +13 -12
  1176. data/src/core/lib/surface/channel_init.h +31 -10
  1177. data/src/core/lib/surface/channel_stack_type.cc +2 -2
  1178. data/src/core/lib/surface/completion_queue.cc +17 -18
  1179. data/src/core/lib/surface/completion_queue.h +1 -2
  1180. data/src/core/lib/surface/completion_queue_factory.cc +9 -8
  1181. data/src/core/lib/surface/completion_queue_factory.h +1 -2
  1182. data/src/core/lib/surface/event_string.cc +2 -2
  1183. data/src/core/lib/surface/event_string.h +1 -2
  1184. data/src/core/lib/surface/init.cc +10 -16
  1185. data/src/core/lib/surface/init_internally.cc +2 -2
  1186. data/src/core/lib/surface/lame_client.cc +12 -40
  1187. data/src/core/lib/surface/lame_client.h +13 -13
  1188. data/src/core/lib/surface/legacy_channel.cc +414 -0
  1189. data/src/core/lib/surface/legacy_channel.h +123 -0
  1190. data/src/core/lib/surface/metadata_array.cc +1 -2
  1191. data/src/core/lib/surface/validate_metadata.cc +1 -2
  1192. data/src/core/lib/surface/validate_metadata.h +3 -3
  1193. data/src/core/lib/surface/version.cc +3 -4
  1194. data/src/core/lib/surface/wait_for_cq_end_op.cc +2 -2
  1195. data/src/core/lib/transport/batch_builder.cc +14 -21
  1196. data/src/core/lib/transport/batch_builder.h +6 -10
  1197. data/src/core/lib/transport/bdp_estimator.cc +5 -3
  1198. data/src/core/lib/transport/bdp_estimator.h +4 -4
  1199. data/src/core/lib/transport/{call_size_estimator.cc → call_arena_allocator.cc} +3 -3
  1200. data/src/core/lib/transport/{call_size_estimator.h → call_arena_allocator.h} +26 -5
  1201. data/src/core/lib/transport/call_filters.cc +143 -28
  1202. data/src/core/lib/transport/call_filters.h +412 -63
  1203. data/src/core/lib/transport/call_final_info.cc +2 -2
  1204. data/src/core/lib/transport/call_final_info.h +1 -2
  1205. data/src/core/lib/transport/call_spine.cc +18 -19
  1206. data/src/core/lib/transport/call_spine.h +393 -190
  1207. data/src/core/lib/transport/connectivity_state.cc +1 -2
  1208. data/src/core/lib/transport/connectivity_state.h +1 -2
  1209. data/src/core/lib/transport/error_utils.cc +1 -2
  1210. data/src/core/lib/transport/error_utils.h +1 -2
  1211. data/src/core/lib/transport/message.cc +1 -2
  1212. data/src/core/lib/transport/metadata.cc +3 -3
  1213. data/src/core/lib/transport/metadata_batch.cc +68 -7
  1214. data/src/core/lib/transport/metadata_batch.h +45 -20
  1215. data/src/core/lib/transport/metadata_compression_traits.h +2 -2
  1216. data/src/core/lib/transport/metadata_info.cc +55 -0
  1217. data/src/core/lib/transport/metadata_info.h +85 -0
  1218. data/src/core/lib/transport/parsed_metadata.cc +2 -2
  1219. data/src/core/lib/transport/parsed_metadata.h +1 -2
  1220. data/src/core/lib/transport/simple_slice_based_metadata.h +2 -2
  1221. data/src/core/lib/transport/status_conversion.cc +2 -2
  1222. data/src/core/lib/transport/status_conversion.h +1 -2
  1223. data/src/core/lib/transport/timeout_encoding.cc +5 -5
  1224. data/src/core/lib/transport/timeout_encoding.h +2 -2
  1225. data/src/core/lib/transport/transport.cc +1 -2
  1226. data/src/core/lib/transport/transport.h +41 -38
  1227. data/src/core/lib/transport/transport_op_string.cc +1 -10
  1228. data/src/core/lib/uri/uri_parser.cc +3 -3
  1229. data/src/core/lib/uri/uri_parser.h +2 -2
  1230. data/src/core/load_balancing/address_filtering.cc +3 -3
  1231. data/src/core/load_balancing/address_filtering.h +3 -3
  1232. data/src/core/load_balancing/backend_metric_data.h +2 -2
  1233. data/src/core/{client_channel/backend_metric.cc → load_balancing/backend_metric_parser.cc} +3 -3
  1234. data/src/core/{client_channel/backend_metric.h → load_balancing/backend_metric_parser.h} +5 -5
  1235. data/src/core/load_balancing/child_policy_handler.cc +7 -7
  1236. data/src/core/load_balancing/child_policy_handler.h +2 -2
  1237. data/src/core/load_balancing/delegating_helper.h +10 -3
  1238. data/src/core/load_balancing/endpoint_list.cc +7 -9
  1239. data/src/core/load_balancing/endpoint_list.h +15 -9
  1240. data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +28 -30
  1241. data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +21 -8
  1242. data/src/core/load_balancing/grpclb/grpclb.cc +65 -70
  1243. data/src/core/load_balancing/grpclb/grpclb_balancer_addresses.cc +2 -2
  1244. data/src/core/load_balancing/grpclb/grpclb_balancer_addresses.h +1 -2
  1245. data/src/core/load_balancing/grpclb/grpclb_client_stats.cc +1 -2
  1246. data/src/core/load_balancing/grpclb/grpclb_client_stats.h +2 -3
  1247. data/src/core/load_balancing/grpclb/load_balancer_api.cc +1 -2
  1248. data/src/core/load_balancing/grpclb/load_balancer_api.h +2 -3
  1249. data/src/core/load_balancing/health_check_client.cc +10 -11
  1250. data/src/core/load_balancing/health_check_client.h +2 -2
  1251. data/src/core/load_balancing/health_check_client_internal.h +5 -7
  1252. data/src/core/load_balancing/lb_policy.cc +2 -2
  1253. data/src/core/load_balancing/lb_policy.h +14 -6
  1254. data/src/core/load_balancing/lb_policy_factory.h +2 -2
  1255. data/src/core/load_balancing/lb_policy_registry.cc +3 -3
  1256. data/src/core/load_balancing/lb_policy_registry.h +4 -4
  1257. data/src/core/load_balancing/oob_backend_metric.cc +10 -11
  1258. data/src/core/load_balancing/oob_backend_metric.h +3 -3
  1259. data/src/core/load_balancing/oob_backend_metric_internal.h +7 -8
  1260. data/src/core/load_balancing/outlier_detection/outlier_detection.cc +32 -32
  1261. data/src/core/load_balancing/outlier_detection/outlier_detection.h +2 -2
  1262. data/src/core/load_balancing/pick_first/pick_first.cc +1152 -245
  1263. data/src/core/load_balancing/priority/priority.cc +23 -17
  1264. data/src/core/load_balancing/ring_hash/ring_hash.cc +42 -25
  1265. data/src/core/load_balancing/ring_hash/ring_hash.h +3 -3
  1266. data/src/core/load_balancing/rls/rls.cc +225 -95
  1267. data/src/core/load_balancing/rls/rls.h +26 -0
  1268. data/src/core/load_balancing/round_robin/round_robin.cc +33 -477
  1269. data/src/core/load_balancing/subchannel_interface.h +4 -4
  1270. data/src/core/load_balancing/weighted_round_robin/static_stride_scheduler.cc +4 -4
  1271. data/src/core/load_balancing/weighted_round_robin/static_stride_scheduler.h +3 -3
  1272. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +203 -988
  1273. data/src/core/load_balancing/weighted_target/weighted_target.cc +20 -17
  1274. data/src/core/load_balancing/weighted_target/weighted_target.h +28 -0
  1275. data/src/core/load_balancing/xds/cds.cc +19 -20
  1276. data/src/core/load_balancing/xds/xds_cluster_impl.cc +113 -67
  1277. data/src/core/load_balancing/xds/xds_cluster_manager.cc +8 -9
  1278. data/src/core/load_balancing/xds/xds_override_host.cc +21 -21
  1279. data/src/core/load_balancing/xds/xds_override_host.h +3 -3
  1280. data/src/core/load_balancing/xds/xds_wrr_locality.cc +11 -11
  1281. data/src/core/plugin_registry/grpc_plugin_registry.cc +23 -9
  1282. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +1 -3
  1283. data/src/core/resolver/binder/binder_resolver.cc +12 -5
  1284. data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +13 -13
  1285. data/src/core/resolver/dns/c_ares/dns_resolver_ares.h +2 -2
  1286. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +3 -3
  1287. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +6 -5
  1288. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +38 -37
  1289. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +14 -14
  1290. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -2
  1291. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +1 -1
  1292. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  1293. data/src/core/resolver/dns/dns_resolver_plugin.cc +4 -5
  1294. data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +7 -7
  1295. data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.h +6 -4
  1296. data/src/core/resolver/dns/event_engine/service_config_helper.cc +2 -2
  1297. data/src/core/resolver/dns/event_engine/service_config_helper.h +2 -2
  1298. data/src/core/resolver/dns/native/dns_resolver.cc +6 -7
  1299. data/src/core/resolver/endpoint_addresses.cc +4 -4
  1300. data/src/core/resolver/endpoint_addresses.h +6 -6
  1301. data/src/core/resolver/fake/fake_resolver.cc +6 -6
  1302. data/src/core/resolver/fake/fake_resolver.h +2 -3
  1303. data/src/core/resolver/google_c2p/google_c2p_resolver.cc +18 -13
  1304. data/src/core/resolver/polling_resolver.cc +5 -5
  1305. data/src/core/resolver/polling_resolver.h +1 -2
  1306. data/src/core/resolver/resolver.cc +2 -2
  1307. data/src/core/resolver/resolver.h +2 -2
  1308. data/src/core/resolver/resolver_factory.h +3 -3
  1309. data/src/core/resolver/resolver_registry.cc +5 -5
  1310. data/src/core/resolver/resolver_registry.h +5 -5
  1311. data/src/core/resolver/sockaddr/sockaddr_resolver.cc +8 -9
  1312. data/src/core/resolver/xds/xds_dependency_manager.cc +19 -13
  1313. data/src/core/resolver/xds/xds_dependency_manager.h +12 -12
  1314. data/src/core/resolver/xds/xds_resolver.cc +36 -40
  1315. data/src/core/resolver/xds/xds_resolver_attributes.h +3 -3
  1316. data/src/core/resolver/xds/xds_resolver_trace.cc +2 -2
  1317. data/src/core/{lib/surface → server}/server.cc +81 -94
  1318. data/src/core/{lib/surface → server}/server.h +16 -13
  1319. data/src/core/{lib/channel → server}/server_call_tracer_filter.cc +10 -5
  1320. data/src/core/{lib/surface/builtins.h → server/server_call_tracer_filter.h} +7 -5
  1321. data/src/core/{ext/filters/server_config_selector → server}/server_config_selector.h +5 -5
  1322. data/src/core/{ext/filters/server_config_selector → server}/server_config_selector_filter.cc +37 -37
  1323. data/src/core/{ext/filters/server_config_selector → server}/server_config_selector_filter.h +3 -3
  1324. data/src/core/server/server_interface.h +43 -0
  1325. data/src/core/{ext/xds → server}/xds_channel_stack_modifier.cc +3 -3
  1326. data/src/core/{ext/xds → server}/xds_channel_stack_modifier.h +6 -6
  1327. data/src/core/{ext/xds → server}/xds_server_config_fetcher.cc +43 -41
  1328. data/src/core/service_config/service_config.h +1 -2
  1329. data/src/core/service_config/service_config_call_data.h +2 -2
  1330. data/src/core/{client_channel → service_config}/service_config_channel_arg_filter.cc +7 -8
  1331. data/src/core/service_config/service_config_impl.cc +2 -2
  1332. data/src/core/service_config/service_config_impl.h +3 -3
  1333. data/src/core/service_config/service_config_parser.cc +1 -2
  1334. data/src/core/service_config/service_config_parser.h +3 -3
  1335. data/src/core/tsi/alts/crypt/aes_gcm.cc +1 -2
  1336. data/src/core/tsi/alts/crypt/gsec.cc +1 -2
  1337. data/src/core/tsi/alts/crypt/gsec.h +1 -2
  1338. data/src/core/tsi/alts/frame_protector/alts_counter.cc +1 -2
  1339. data/src/core/tsi/alts/frame_protector/alts_counter.h +1 -2
  1340. data/src/core/tsi/alts/frame_protector/alts_crypter.cc +1 -2
  1341. data/src/core/tsi/alts/frame_protector/alts_crypter.h +1 -2
  1342. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +1 -2
  1343. data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +2 -2
  1344. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +1 -2
  1345. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +1 -2
  1346. data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +1 -2
  1347. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -2
  1348. data/src/core/tsi/alts/frame_protector/frame_handler.cc +1 -2
  1349. data/src/core/tsi/alts/frame_protector/frame_handler.h +2 -2
  1350. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +44 -41
  1351. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -2
  1352. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +5 -4
  1353. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +1 -2
  1354. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +23 -20
  1355. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -2
  1356. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +5 -4
  1357. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -2
  1358. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -2
  1359. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +1 -2
  1360. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +5 -4
  1361. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +2 -2
  1362. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +1 -2
  1363. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +2 -2
  1364. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +1 -2
  1365. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +9 -5
  1366. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +1 -2
  1367. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +2 -2
  1368. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +5 -4
  1369. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +2 -2
  1370. data/src/core/tsi/fake_transport_security.cc +6 -4
  1371. data/src/core/tsi/local_transport_security.cc +1 -2
  1372. data/src/core/tsi/local_transport_security.h +1 -2
  1373. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +7 -6
  1374. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +1 -2
  1375. data/src/core/tsi/ssl/session_cache/ssl_session.h +1 -2
  1376. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +11 -10
  1377. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +1 -2
  1378. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +3 -4
  1379. data/src/core/tsi/ssl_transport_security.cc +218 -89
  1380. data/src/core/tsi/ssl_transport_security.h +1 -2
  1381. data/src/core/tsi/ssl_transport_security_utils.cc +138 -10
  1382. data/src/core/tsi/ssl_transport_security_utils.h +28 -2
  1383. data/src/core/tsi/ssl_types.h +2 -2
  1384. data/src/core/tsi/transport_security.cc +1 -2
  1385. data/src/core/tsi/transport_security.h +2 -2
  1386. data/src/core/tsi/transport_security_grpc.cc +2 -2
  1387. data/src/core/tsi/transport_security_grpc.h +1 -2
  1388. data/src/core/tsi/transport_security_interface.h +2 -2
  1389. data/src/core/{ext/xds → xds/grpc}/certificate_provider_store.cc +2 -3
  1390. data/src/core/{ext/xds → xds/grpc}/certificate_provider_store.h +7 -7
  1391. data/src/core/{ext/xds → xds/grpc}/file_watcher_certificate_provider_factory.cc +2 -3
  1392. data/src/core/{ext/xds → xds/grpc}/file_watcher_certificate_provider_factory.h +6 -7
  1393. data/src/core/{ext/xds → xds/grpc}/upb_utils.h +5 -5
  1394. data/src/core/{ext/xds → xds/grpc}/xds_audit_logger_registry.cc +6 -5
  1395. data/src/core/{ext/xds → xds/grpc}/xds_audit_logger_registry.h +7 -7
  1396. data/src/core/{ext/xds → xds/grpc}/xds_bootstrap_grpc.cc +40 -9
  1397. data/src/core/{ext/xds → xds/grpc}/xds_bootstrap_grpc.h +33 -18
  1398. data/src/core/{ext/xds → xds/grpc}/xds_certificate_provider.cc +7 -7
  1399. data/src/core/{ext/xds → xds/grpc}/xds_certificate_provider.h +5 -6
  1400. data/src/core/{ext/xds → xds/grpc}/xds_client_grpc.cc +208 -66
  1401. data/src/core/{ext/xds → xds/grpc}/xds_client_grpc.h +30 -17
  1402. data/src/core/{ext/xds → xds/grpc}/xds_cluster.cc +27 -18
  1403. data/src/core/{ext/xds → xds/grpc}/xds_cluster.h +16 -14
  1404. data/src/core/{ext/xds → xds/grpc}/xds_cluster_specifier_plugin.cc +4 -4
  1405. data/src/core/{ext/xds → xds/grpc}/xds_cluster_specifier_plugin.h +8 -8
  1406. data/src/core/{ext/xds → xds/grpc}/xds_common_types.cc +5 -6
  1407. data/src/core/{ext/xds → xds/grpc}/xds_common_types.h +6 -6
  1408. data/src/core/{ext/xds → xds/grpc}/xds_endpoint.cc +10 -9
  1409. data/src/core/{ext/xds → xds/grpc}/xds_endpoint.h +11 -11
  1410. data/src/core/{ext/xds → xds/grpc}/xds_health_status.cc +3 -3
  1411. data/src/core/{ext/xds → xds/grpc}/xds_health_status.h +7 -7
  1412. data/src/core/{ext/xds → xds/grpc}/xds_http_fault_filter.cc +4 -5
  1413. data/src/core/{ext/xds → xds/grpc}/xds_http_fault_filter.h +9 -9
  1414. data/src/core/{ext/xds → xds/grpc}/xds_http_filters.cc +8 -9
  1415. data/src/core/{ext/xds → xds/grpc}/xds_http_filters.h +9 -9
  1416. data/src/core/{ext/xds → xds/grpc}/xds_http_rbac_filter.cc +6 -7
  1417. data/src/core/{ext/xds → xds/grpc}/xds_http_rbac_filter.h +9 -9
  1418. data/src/core/{ext/xds → xds/grpc}/xds_http_stateful_session_filter.cc +5 -6
  1419. data/src/core/{ext/xds → xds/grpc}/xds_http_stateful_session_filter.h +9 -9
  1420. data/src/core/{ext/xds → xds/grpc}/xds_lb_policy_registry.cc +8 -9
  1421. data/src/core/{ext/xds → xds/grpc}/xds_lb_policy_registry.h +7 -7
  1422. data/src/core/{ext/xds → xds/grpc}/xds_listener.cc +8 -8
  1423. data/src/core/{ext/xds → xds/grpc}/xds_listener.h +13 -13
  1424. data/src/core/{ext/xds → xds/grpc}/xds_route_config.cc +16 -16
  1425. data/src/core/{ext/xds → xds/grpc}/xds_route_config.h +12 -12
  1426. data/src/core/{ext/xds → xds/grpc}/xds_routing.cc +6 -6
  1427. data/src/core/{ext/xds → xds/grpc}/xds_routing.h +9 -9
  1428. data/src/core/{ext/xds → xds/grpc}/xds_transport_grpc.cc +31 -46
  1429. data/src/core/{ext/xds → xds/grpc}/xds_transport_grpc.h +12 -13
  1430. data/src/core/{ext/xds → xds/xds_client}/xds_api.cc +4 -5
  1431. data/src/core/{ext/xds → xds/xds_client}/xds_api.h +8 -8
  1432. data/src/core/{ext/xds → xds/xds_client}/xds_bootstrap.cc +3 -3
  1433. data/src/core/{ext/xds → xds/xds_client}/xds_bootstrap.h +7 -9
  1434. data/src/core/{ext/xds → xds/xds_client}/xds_channel_args.h +3 -3
  1435. data/src/core/{ext/xds → xds/xds_client}/xds_client.cc +304 -120
  1436. data/src/core/{ext/xds → xds/xds_client}/xds_client.h +50 -18
  1437. data/src/core/{ext/xds → xds/xds_client}/xds_client_stats.cc +5 -6
  1438. data/src/core/{ext/xds → xds/xds_client}/xds_client_stats.h +20 -13
  1439. data/src/core/xds/xds_client/xds_metrics.h +41 -0
  1440. data/src/core/{ext/xds → xds/xds_client}/xds_resource_type.h +6 -6
  1441. data/src/core/{ext/xds → xds/xds_client}/xds_resource_type_impl.h +7 -7
  1442. data/src/core/{ext/xds → xds/xds_client}/xds_transport.h +6 -6
  1443. data/src/ruby/ext/grpc/extconf.rb +0 -3
  1444. data/src/ruby/ext/grpc/rb_call_credentials.c +1 -0
  1445. data/src/ruby/ext/grpc/rb_call_credentials.h +1 -0
  1446. data/src/ruby/ext/grpc/rb_channel.c +1 -0
  1447. data/src/ruby/ext/grpc/rb_channel_credentials.c +1 -0
  1448. data/src/ruby/ext/grpc/rb_grpc.c +1 -0
  1449. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +130 -132
  1450. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +196 -198
  1451. data/src/ruby/ext/grpc/rb_server.c +1 -0
  1452. data/src/ruby/ext/grpc/rb_server_credentials.c +1 -0
  1453. data/src/ruby/ext/grpc/rb_server_credentials.h +1 -0
  1454. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +1 -0
  1455. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +1 -0
  1456. data/src/ruby/ext/grpc/rb_xds_server_credentials.h +1 -0
  1457. data/src/ruby/lib/grpc/generic/active_call.rb +8 -2
  1458. data/src/ruby/lib/grpc/version.rb +1 -1
  1459. data/src/ruby/spec/generic/rpc_server_spec.rb +25 -0
  1460. data/third_party/abseil-cpp/absl/debugging/internal/examine_stack.cc +320 -0
  1461. data/third_party/abseil-cpp/absl/debugging/internal/examine_stack.h +64 -0
  1462. data/third_party/abseil-cpp/absl/log/absl_vlog_is_on.h +93 -0
  1463. data/third_party/abseil-cpp/absl/log/check.h +209 -0
  1464. data/third_party/abseil-cpp/absl/log/globals.cc +178 -0
  1465. data/third_party/abseil-cpp/absl/log/globals.h +218 -0
  1466. data/third_party/abseil-cpp/absl/log/internal/append_truncated.h +47 -0
  1467. data/third_party/abseil-cpp/absl/log/internal/check_impl.h +150 -0
  1468. data/third_party/abseil-cpp/absl/log/internal/check_op.cc +118 -0
  1469. data/third_party/abseil-cpp/absl/log/internal/check_op.h +420 -0
  1470. data/third_party/abseil-cpp/absl/log/internal/conditions.cc +83 -0
  1471. data/third_party/abseil-cpp/absl/log/internal/conditions.h +239 -0
  1472. data/third_party/abseil-cpp/absl/log/internal/config.h +45 -0
  1473. data/third_party/abseil-cpp/absl/log/internal/fnmatch.cc +73 -0
  1474. data/third_party/abseil-cpp/absl/log/internal/fnmatch.h +35 -0
  1475. data/third_party/abseil-cpp/absl/log/internal/globals.cc +145 -0
  1476. data/third_party/abseil-cpp/absl/log/internal/globals.h +101 -0
  1477. data/third_party/abseil-cpp/absl/log/internal/log_format.cc +205 -0
  1478. data/third_party/abseil-cpp/absl/log/internal/log_format.h +78 -0
  1479. data/third_party/abseil-cpp/absl/log/internal/log_impl.h +282 -0
  1480. data/third_party/abseil-cpp/absl/log/internal/log_message.cc +633 -0
  1481. data/third_party/abseil-cpp/absl/log/internal/log_message.h +375 -0
  1482. data/third_party/abseil-cpp/absl/log/internal/log_sink_set.cc +296 -0
  1483. data/third_party/abseil-cpp/absl/log/internal/log_sink_set.h +54 -0
  1484. data/third_party/abseil-cpp/absl/log/internal/nullguard.cc +35 -0
  1485. data/third_party/abseil-cpp/absl/log/internal/nullguard.h +88 -0
  1486. data/third_party/abseil-cpp/absl/log/internal/nullstream.h +136 -0
  1487. data/third_party/abseil-cpp/absl/log/internal/proto.cc +220 -0
  1488. data/third_party/abseil-cpp/absl/log/internal/proto.h +288 -0
  1489. data/third_party/abseil-cpp/absl/log/internal/strip.h +72 -0
  1490. data/third_party/abseil-cpp/absl/log/internal/vlog_config.cc +340 -0
  1491. data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +163 -0
  1492. data/third_party/abseil-cpp/absl/log/internal/voidify.h +44 -0
  1493. data/third_party/abseil-cpp/absl/log/log.h +361 -0
  1494. data/third_party/abseil-cpp/absl/log/log_entry.cc +41 -0
  1495. data/third_party/abseil-cpp/absl/log/log_entry.h +221 -0
  1496. data/third_party/abseil-cpp/absl/log/log_sink.cc +23 -0
  1497. data/third_party/abseil-cpp/absl/log/log_sink.h +64 -0
  1498. data/third_party/abseil-cpp/absl/log/log_sink_registry.h +61 -0
  1499. data/third_party/abseil-cpp/absl/log/vlog_is_on.h +72 -0
  1500. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +1 -7
  1501. data/third_party/boringssl-with-bazel/src/crypto/asn1/posix_time.c +50 -39
  1502. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +3 -8
  1503. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +25 -10
  1504. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +0 -13
  1505. data/third_party/boringssl-with-bazel/src/crypto/bytestring/unicode.c +3 -2
  1506. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +1 -1
  1507. data/third_party/boringssl-with-bazel/src/crypto/chacha/internal.h +19 -15
  1508. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_des.c +63 -94
  1509. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_null.c +7 -3
  1510. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc2.c +20 -28
  1511. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc4.c +9 -4
  1512. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +2 -2
  1513. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +7 -7
  1514. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -1
  1515. data/third_party/boringssl-with-bazel/src/crypto/des/des.c +45 -32
  1516. data/third_party/boringssl-with-bazel/src/crypto/des/internal.h +24 -0
  1517. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +1 -0
  1518. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +26 -17
  1519. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +3 -2
  1520. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +81 -60
  1521. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +41 -120
  1522. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +13 -13
  1523. data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +7 -0
  1524. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dh.c +137 -0
  1525. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dh_asn1.c +120 -0
  1526. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +30 -0
  1527. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +3 -4
  1528. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +30 -0
  1529. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c +1 -4
  1530. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c +30 -0
  1531. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c +1 -4
  1532. data/third_party/boringssl-with-bazel/src/crypto/ex_data.c +6 -7
  1533. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bytes.c +1 -1
  1534. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +3 -3
  1535. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div_extra.c +1 -1
  1536. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +1 -1
  1537. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +8 -5
  1538. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +1 -1
  1539. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +2 -2
  1540. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +14 -7
  1541. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.c +2 -1
  1542. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +0 -3
  1543. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +11 -7
  1544. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +5 -1
  1545. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +2 -1
  1546. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +11 -11
  1547. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +22 -8
  1548. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/service_indicator.c +3 -6
  1549. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +73 -29
  1550. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +4 -4
  1551. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +3 -3
  1552. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +4 -4
  1553. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +7 -0
  1554. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +2 -0
  1555. data/third_party/boringssl-with-bazel/src/crypto/internal.h +45 -21
  1556. data/third_party/boringssl-with-bazel/src/crypto/kyber/internal.h +1 -1
  1557. data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +1 -1
  1558. data/third_party/boringssl-with-bazel/src/crypto/mem.c +18 -9
  1559. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +18 -17
  1560. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +44 -41
  1561. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +13 -12
  1562. data/third_party/boringssl-with-bazel/src/crypto/spx/spx.c +7 -6
  1563. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +26 -33
  1564. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +1 -1
  1565. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +8 -1
  1566. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +5 -1
  1567. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_cpols.c +9 -4
  1568. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_crld.c +2 -2
  1569. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_info.c +1 -1
  1570. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_lib.c +2 -0
  1571. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_purp.c +40 -61
  1572. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +24 -7
  1573. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +51 -78
  1574. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +5 -12
  1575. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +13 -2
  1576. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +2 -2
  1577. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +1 -6
  1578. data/third_party/boringssl-with-bazel/{err_data.c → src/gen/crypto/err_data.c} +487 -485
  1579. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +10 -10
  1580. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +10 -2
  1581. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +80 -39
  1582. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +12 -4
  1583. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +1 -0
  1584. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +17 -1
  1585. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +10 -3
  1586. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +13 -0
  1587. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +25 -14
  1588. data/third_party/boringssl-with-bazel/src/include/openssl/evp_errors.h +1 -0
  1589. data/third_party/boringssl-with-bazel/src/include/openssl/ex_data.h +15 -3
  1590. data/third_party/boringssl-with-bazel/src/{crypto/spx/internal.h → include/openssl/experimental/spx.h} +24 -13
  1591. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +2 -2
  1592. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +63 -53
  1593. data/third_party/boringssl-with-bazel/src/include/openssl/posix_time.h +6 -0
  1594. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +19 -10
  1595. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +19 -10
  1596. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +14 -0
  1597. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +291 -73
  1598. data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +10 -3
  1599. data/third_party/boringssl-with-bazel/src/include/openssl/target.h +13 -10
  1600. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +2 -2
  1601. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +2959 -2403
  1602. data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +5 -5
  1603. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +3 -9
  1604. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +43 -43
  1605. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +1 -1
  1606. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +17 -7
  1607. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +67 -15
  1608. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +143 -113
  1609. data/third_party/boringssl-with-bazel/src/ssl/internal.h +227 -167
  1610. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +1 -1
  1611. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +0 -1
  1612. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +66 -385
  1613. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +21 -19
  1614. data/third_party/boringssl-with-bazel/src/ssl/ssl_credential.cc +423 -0
  1615. data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +2 -2
  1616. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +1 -1
  1617. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +70 -54
  1618. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +59 -75
  1619. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +6 -14
  1620. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +48 -116
  1621. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +19 -26
  1622. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +36 -3
  1623. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +53 -18
  1624. data/third_party/upb/upb/base/descriptor_constants.h +29 -2
  1625. data/third_party/upb/upb/{wire/internal/swap.h → base/internal/endian.h} +12 -11
  1626. data/third_party/upb/upb/base/status.h +1 -1
  1627. data/third_party/upb/upb/base/status.hpp +5 -1
  1628. data/third_party/upb/upb/base/string_view.h +7 -5
  1629. data/third_party/upb/upb/base/upcast.h +29 -0
  1630. data/third_party/upb/upb/generated_code_support.h +2 -1
  1631. data/third_party/upb/upb/json/decode.c +103 -53
  1632. data/third_party/upb/upb/json/decode.h +3 -26
  1633. data/third_party/upb/upb/json/encode.c +3 -26
  1634. data/third_party/upb/upb/json/encode.h +3 -26
  1635. data/third_party/upb/upb/mem/arena.c +233 -106
  1636. data/third_party/upb/upb/mem/arena.h +14 -66
  1637. data/third_party/upb/upb/mem/arena.hpp +8 -4
  1638. data/third_party/upb/upb/mem/internal/arena.h +76 -58
  1639. data/third_party/upb/upb/message/accessors.c +19 -46
  1640. data/third_party/upb/upb/message/accessors.h +208 -123
  1641. data/third_party/upb/upb/message/array.c +55 -83
  1642. data/third_party/upb/upb/message/array.h +18 -30
  1643. data/third_party/upb/upb/message/compat.c +39 -0
  1644. data/third_party/upb/upb/message/compat.h +41 -0
  1645. data/third_party/upb/upb/message/copy.c +322 -0
  1646. data/third_party/upb/upb/message/copy.h +56 -0
  1647. data/third_party/upb/upb/message/internal/accessors.h +178 -178
  1648. data/third_party/upb/upb/message/internal/array.h +80 -81
  1649. data/third_party/upb/upb/message/internal/extension.c +63 -0
  1650. data/third_party/upb/upb/message/internal/extension.h +12 -12
  1651. data/third_party/upb/upb/message/internal/map.h +28 -41
  1652. data/third_party/upb/upb/message/internal/map_entry.h +14 -39
  1653. data/third_party/upb/upb/message/internal/map_sorter.h +18 -37
  1654. data/third_party/upb/upb/message/internal/message.c +59 -0
  1655. data/third_party/upb/upb/message/internal/message.h +26 -42
  1656. data/third_party/upb/upb/message/internal/tagged_ptr.h +56 -0
  1657. data/third_party/upb/upb/message/internal/types.h +7 -12
  1658. data/third_party/upb/upb/message/map.c +3 -26
  1659. data/third_party/upb/upb/message/map.h +5 -33
  1660. data/third_party/upb/upb/message/map_gencode_util.h +3 -26
  1661. data/third_party/upb/upb/message/map_sorter.c +22 -34
  1662. data/third_party/upb/upb/message/message.c +28 -104
  1663. data/third_party/upb/upb/message/message.h +4 -8
  1664. data/third_party/upb/upb/message/tagged_ptr.h +14 -31
  1665. data/third_party/upb/upb/message/value.h +3 -5
  1666. data/third_party/upb/upb/mini_descriptor/build_enum.c +20 -11
  1667. data/third_party/upb/upb/mini_descriptor/decode.c +127 -107
  1668. data/third_party/upb/upb/mini_descriptor/decode.h +3 -8
  1669. data/third_party/upb/upb/mini_descriptor/link.c +34 -22
  1670. data/third_party/upb/upb/mini_descriptor/link.h +1 -1
  1671. data/third_party/upb/upb/mini_table/enum.h +4 -6
  1672. data/third_party/upb/upb/mini_table/extension.h +37 -0
  1673. data/third_party/upb/upb/mini_table/extension_registry.c +9 -2
  1674. data/third_party/upb/upb/mini_table/field.h +46 -60
  1675. data/third_party/upb/upb/mini_table/file.h +44 -0
  1676. data/third_party/upb/upb/mini_table/internal/enum.h +19 -20
  1677. data/third_party/upb/upb/mini_table/internal/extension.h +34 -3
  1678. data/third_party/upb/upb/mini_table/internal/field.h +136 -27
  1679. data/third_party/upb/upb/mini_table/internal/file.h +47 -10
  1680. data/third_party/upb/upb/mini_table/internal/message.c +17 -9
  1681. data/third_party/upb/upb/mini_table/internal/message.h +94 -23
  1682. data/third_party/upb/upb/mini_table/internal/size_log2.h +77 -0
  1683. data/third_party/upb/upb/mini_table/internal/sub.h +39 -4
  1684. data/third_party/upb/upb/mini_table/message.c +18 -19
  1685. data/third_party/upb/upb/mini_table/message.h +29 -20
  1686. data/third_party/upb/upb/mini_table/sub.h +40 -1
  1687. data/third_party/upb/upb/port/def.inc +18 -0
  1688. data/third_party/upb/upb/port/undef.inc +3 -0
  1689. data/third_party/upb/upb/reflection/def.hpp +8 -4
  1690. data/third_party/upb/upb/reflection/def_pool.c +81 -2
  1691. data/third_party/upb/upb/reflection/def_pool.h +8 -0
  1692. data/third_party/upb/upb/reflection/enum_def.c +42 -19
  1693. data/third_party/upb/upb/reflection/enum_def.h +1 -0
  1694. data/third_party/upb/upb/reflection/enum_value_def.c +43 -14
  1695. data/third_party/upb/upb/reflection/enum_value_def.h +2 -0
  1696. data/third_party/upb/upb/reflection/extension_range.c +13 -5
  1697. data/third_party/upb/upb/reflection/extension_range.h +2 -0
  1698. data/third_party/upb/upb/reflection/field_def.c +177 -130
  1699. data/third_party/upb/upb/reflection/field_def.h +10 -1
  1700. data/third_party/upb/upb/reflection/file_def.c +98 -9
  1701. data/third_party/upb/upb/reflection/file_def.h +3 -0
  1702. data/third_party/upb/upb/reflection/internal/def_builder.c +85 -7
  1703. data/third_party/upb/upb/reflection/internal/def_builder.h +23 -0
  1704. data/third_party/upb/upb/reflection/internal/enum_def.h +5 -4
  1705. data/third_party/upb/upb/reflection/internal/enum_reserved_range.h +1 -1
  1706. data/third_party/upb/upb/reflection/internal/enum_value_def.h +2 -1
  1707. data/third_party/upb/upb/reflection/internal/extension_range.h +2 -2
  1708. data/third_party/upb/upb/reflection/internal/field_def.h +11 -10
  1709. data/third_party/upb/upb/reflection/internal/message_def.h +6 -3
  1710. data/third_party/upb/upb/reflection/internal/method_def.h +5 -3
  1711. data/third_party/upb/upb/reflection/internal/oneof_def.h +5 -3
  1712. data/third_party/upb/upb/reflection/internal/service_def.h +5 -3
  1713. data/third_party/upb/upb/reflection/internal/upb_edition_defaults.h +20 -0
  1714. data/third_party/upb/upb/reflection/message.c +27 -12
  1715. data/third_party/upb/upb/reflection/message.h +5 -5
  1716. data/third_party/upb/upb/reflection/message_def.c +56 -27
  1717. data/third_party/upb/upb/reflection/message_def.h +2 -0
  1718. data/third_party/upb/upb/reflection/method_def.c +20 -9
  1719. data/third_party/upb/upb/reflection/method_def.h +2 -0
  1720. data/third_party/upb/upb/reflection/oneof_def.c +20 -11
  1721. data/third_party/upb/upb/reflection/oneof_def.h +3 -1
  1722. data/third_party/upb/upb/reflection/service_def.c +25 -13
  1723. data/third_party/upb/upb/reflection/service_def.h +2 -0
  1724. data/third_party/upb/upb/text/encode.c +126 -36
  1725. data/third_party/upb/upb/wire/decode.c +214 -196
  1726. data/third_party/upb/upb/wire/decode.h +10 -0
  1727. data/third_party/upb/upb/wire/encode.c +105 -91
  1728. data/third_party/upb/upb/wire/encode.h +4 -3
  1729. data/third_party/upb/upb/wire/{decode_fast.c → internal/decode_fast.c} +53 -48
  1730. data/third_party/upb/upb/wire/{decode_fast.h → internal/decode_fast.h} +6 -5
  1731. data/third_party/upb/upb/wire/internal/{decode.h → decoder.h} +15 -31
  1732. data/third_party/upb/upb/wire/internal/reader.h +61 -0
  1733. data/third_party/upb/upb/wire/reader.c +9 -6
  1734. data/third_party/upb/upb/wire/reader.h +18 -47
  1735. data/third_party/utf8_range/utf8_range.c +467 -0
  1736. data/third_party/utf8_range/utf8_range.h +9 -8
  1737. metadata +182 -128
  1738. data/src/core/client_channel/channel_connectivity.cc +0 -265
  1739. data/src/core/client_channel/client_channel_channelz.cc +0 -93
  1740. data/src/core/client_channel/client_channel_channelz.h +0 -85
  1741. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +0 -318
  1742. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +0 -150
  1743. data/src/core/ext/filters/deadline/deadline_filter.cc +0 -407
  1744. data/src/core/ext/filters/deadline/deadline_filter.h +0 -85
  1745. data/src/core/ext/filters/http/message_compress/legacy_compression_filter.cc +0 -325
  1746. data/src/core/ext/filters/http/message_compress/legacy_compression_filter.h +0 -139
  1747. data/src/core/lib/gpr/log_internal.h +0 -55
  1748. data/src/core/lib/gpr/wrap_memcpy.cc +0 -43
  1749. data/src/core/lib/security/transport/legacy_server_auth_filter.cc +0 -244
  1750. data/src/core/lib/slice/b64.cc +0 -239
  1751. data/src/core/lib/slice/b64.h +0 -52
  1752. data/src/core/lib/surface/call_trace.cc +0 -163
  1753. data/src/core/lib/surface/channel_ping.cc +0 -69
  1754. data/src/core/lib/transport/call_factory.cc +0 -41
  1755. data/src/core/lib/transport/call_factory.h +0 -56
  1756. data/src/core/load_balancing/subchannel_list.h +0 -455
  1757. data/third_party/upb/upb/message/types.h +0 -15
  1758. data/third_party/utf8_range/naive.c +0 -92
  1759. data/third_party/utf8_range/range2-neon.c +0 -157
  1760. data/third_party/utf8_range/range2-sse.c +0 -170
  1761. /data/third_party/boringssl-with-bazel/src/include/openssl/{kyber.h → experimental/kyber.h} +0 -0
@@ -14,8 +14,6 @@
14
14
  // limitations under the License.
15
15
  //
16
16
 
17
- #include <grpc/support/port_platform.h>
18
-
19
17
  #include "src/core/load_balancing/pick_first/pick_first.h"
20
18
 
21
19
  #include <inttypes.h>
@@ -29,6 +27,7 @@
29
27
  #include <vector>
30
28
 
31
29
  #include "absl/algorithm/container.h"
30
+ #include "absl/log/check.h"
32
31
  #include "absl/random/random.h"
33
32
  #include "absl/status/status.h"
34
33
  #include "absl/status/statusor.h"
@@ -40,10 +39,11 @@
40
39
  #include <grpc/impl/channel_arg_names.h>
41
40
  #include <grpc/impl/connectivity_state.h>
42
41
  #include <grpc/support/log.h>
42
+ #include <grpc/support/port_platform.h>
43
43
 
44
- #include "src/core/load_balancing/health_check_client.h"
45
44
  #include "src/core/lib/address_utils/sockaddr_utils.h"
46
45
  #include "src/core/lib/channel/channel_args.h"
46
+ #include "src/core/lib/channel/metrics.h"
47
47
  #include "src/core/lib/config/core_configuration.h"
48
48
  #include "src/core/lib/debug/trace.h"
49
49
  #include "src/core/lib/experiments/experiments.h"
@@ -61,6 +61,7 @@
61
61
  #include "src/core/lib/json/json_args.h"
62
62
  #include "src/core/lib/json/json_object_loader.h"
63
63
  #include "src/core/lib/transport/connectivity_state.h"
64
+ #include "src/core/load_balancing/health_check_client.h"
64
65
  #include "src/core/load_balancing/lb_policy.h"
65
66
  #include "src/core/load_balancing/lb_policy_factory.h"
66
67
  #include "src/core/load_balancing/subchannel_interface.h"
@@ -73,32 +74,1060 @@ TraceFlag grpc_lb_pick_first_trace(false, "pick_first");
73
74
  namespace {
74
75
 
75
76
  //
76
- // pick_first LB policy
77
+ // pick_first LB policy
78
+ //
79
+
80
+ constexpr absl::string_view kPickFirst = "pick_first";
81
+
82
+ const auto kMetricDisconnections =
83
+ GlobalInstrumentsRegistry::RegisterUInt64Counter(
84
+ "grpc.lb.pick_first.disconnections",
85
+ "EXPERIMENTAL. Number of times the selected subchannel becomes "
86
+ "disconnected.",
87
+ "{disconnection}", {kMetricLabelTarget}, {}, false);
88
+
89
+ const auto kMetricConnectionAttemptsSucceeded =
90
+ GlobalInstrumentsRegistry::RegisterUInt64Counter(
91
+ "grpc.lb.pick_first.connection_attempts_succeeded",
92
+ "EXPERIMENTAL. Number of successful connection attempts.", "{attempt}",
93
+ {kMetricLabelTarget}, {}, false);
94
+
95
+ const auto kMetricConnectionAttemptsFailed =
96
+ GlobalInstrumentsRegistry::RegisterUInt64Counter(
97
+ "grpc.lb.pick_first.connection_attempts_failed",
98
+ "EXPERIMENTAL. Number of failed connection attempts.", "{attempt}",
99
+ {kMetricLabelTarget}, {}, false);
100
+
101
+ class PickFirstConfig final : public LoadBalancingPolicy::Config {
102
+ public:
103
+ absl::string_view name() const override { return kPickFirst; }
104
+ bool shuffle_addresses() const { return shuffle_addresses_; }
105
+
106
+ static const JsonLoaderInterface* JsonLoader(const JsonArgs&) {
107
+ static const auto kJsonLoader =
108
+ JsonObjectLoader<PickFirstConfig>()
109
+ .OptionalField("shuffleAddressList",
110
+ &PickFirstConfig::shuffle_addresses_)
111
+ .Finish();
112
+ return kJsonLoader;
113
+ }
114
+
115
+ private:
116
+ bool shuffle_addresses_ = false;
117
+ };
118
+
119
+ class PickFirst final : public LoadBalancingPolicy {
120
+ public:
121
+ explicit PickFirst(Args args);
122
+
123
+ absl::string_view name() const override { return kPickFirst; }
124
+
125
+ absl::Status UpdateLocked(UpdateArgs args) override;
126
+ void ExitIdleLocked() override;
127
+ void ResetBackoffLocked() override;
128
+
129
+ private:
130
+ ~PickFirst() override;
131
+
132
+ // A list of subchannels that we will attempt connections on.
133
+ class SubchannelList final : public InternallyRefCounted<SubchannelList> {
134
+ public:
135
+ // Data about the subchannel that is needed only while attempting to
136
+ // connect.
137
+ class SubchannelData final {
138
+ public:
139
+ // Stores the subchannel and its watcher. This is the state that
140
+ // is retained once a subchannel is chosen.
141
+ class SubchannelState final
142
+ : public InternallyRefCounted<SubchannelState> {
143
+ public:
144
+ SubchannelState(SubchannelData* subchannel_data,
145
+ RefCountedPtr<SubchannelInterface> subchannel);
146
+
147
+ void Orphan() override;
148
+
149
+ SubchannelInterface* subchannel() const { return subchannel_.get(); }
150
+
151
+ void RequestConnection() { subchannel_->RequestConnection(); }
152
+
153
+ void ResetBackoffLocked() { subchannel_->ResetBackoff(); }
154
+
155
+ private:
156
+ // Watcher for subchannel connectivity state.
157
+ class Watcher
158
+ : public SubchannelInterface::ConnectivityStateWatcherInterface {
159
+ public:
160
+ explicit Watcher(RefCountedPtr<SubchannelState> subchannel_state)
161
+ : subchannel_state_(std::move(subchannel_state)) {}
162
+
163
+ ~Watcher() override {
164
+ subchannel_state_.reset(DEBUG_LOCATION, "Watcher dtor");
165
+ }
166
+
167
+ void OnConnectivityStateChange(grpc_connectivity_state new_state,
168
+ absl::Status status) override {
169
+ subchannel_state_->OnConnectivityStateChange(new_state,
170
+ std::move(status));
171
+ }
172
+
173
+ grpc_pollset_set* interested_parties() override {
174
+ return subchannel_state_->pick_first_->interested_parties();
175
+ }
176
+
177
+ private:
178
+ RefCountedPtr<SubchannelState> subchannel_state_;
179
+ };
180
+
181
+ // Selects this subchannel. Called when the subchannel reports READY.
182
+ void Select();
183
+
184
+ // This method will be invoked once soon after instantiation to report
185
+ // the current connectivity state, and it will then be invoked again
186
+ // whenever the connectivity state changes.
187
+ void OnConnectivityStateChange(grpc_connectivity_state new_state,
188
+ absl::Status status);
189
+
190
+ // If non-null, then we are still part of a subchannel list
191
+ // trying to connect.
192
+ SubchannelData* subchannel_data_;
193
+
194
+ // TODO(roth): Once we remove pollset_set, we should no longer
195
+ // need to hold a ref to PickFirst. Instead, we can make this a
196
+ // raw pointer and put it in an absl::variant with subchannel_data_.
197
+ RefCountedPtr<PickFirst> pick_first_;
198
+
199
+ RefCountedPtr<SubchannelInterface> subchannel_;
200
+ SubchannelInterface::ConnectivityStateWatcherInterface* watcher_ =
201
+ nullptr;
202
+ };
203
+
204
+ SubchannelData(SubchannelList* subchannel_list, size_t index,
205
+ RefCountedPtr<SubchannelInterface> subchannel);
206
+
207
+ absl::optional<grpc_connectivity_state> connectivity_state() const {
208
+ return connectivity_state_;
209
+ }
210
+ const absl::Status& connectivity_status() const {
211
+ return connectivity_status_;
212
+ }
213
+
214
+ void RequestConnection() { subchannel_state_->RequestConnection(); }
215
+
216
+ // Resets the connection backoff.
217
+ void ResetBackoffLocked() { subchannel_state_->ResetBackoffLocked(); }
218
+
219
+ // Requests a connection attempt to start on this subchannel,
220
+ // with appropriate Connection Attempt Delay.
221
+ // Used only during the Happy Eyeballs pass.
222
+ void RequestConnectionWithTimer();
223
+
224
+ bool seen_transient_failure() const { return seen_transient_failure_; }
225
+
226
+ private:
227
+ // This method will be invoked once soon after instantiation to report
228
+ // the current connectivity state, and it will then be invoked again
229
+ // whenever the connectivity state changes.
230
+ void OnConnectivityStateChange(grpc_connectivity_state new_state,
231
+ absl::Status status);
232
+
233
+ // Backpointer to owning subchannel list. Not owned.
234
+ SubchannelList* subchannel_list_;
235
+ // Our index within subchannel_list_.
236
+ const size_t index_;
237
+ // Subchannel state.
238
+ OrphanablePtr<SubchannelState> subchannel_state_;
239
+ // Data updated by the watcher.
240
+ absl::optional<grpc_connectivity_state> connectivity_state_;
241
+ absl::Status connectivity_status_;
242
+ bool seen_transient_failure_ = false;
243
+ };
244
+
245
+ SubchannelList(RefCountedPtr<PickFirst> policy,
246
+ EndpointAddressesIterator* addresses,
247
+ const ChannelArgs& args);
248
+
249
+ ~SubchannelList() override;
250
+
251
+ void Orphan() override;
252
+
253
+ // The number of subchannels in the list.
254
+ size_t size() const { return subchannels_.size(); }
255
+
256
+ // Resets connection backoff of all subchannels.
257
+ void ResetBackoffLocked();
258
+
259
+ bool IsHappyEyeballsPassComplete() const {
260
+ // Checking attempting_index_ here is just an optimization -- if
261
+ // we haven't actually tried all subchannels yet, then we don't
262
+ // need to iterate.
263
+ if (attempting_index_ < size()) return false;
264
+ for (const auto& sd : subchannels_) {
265
+ if (!sd->seen_transient_failure()) return false;
266
+ }
267
+ return true;
268
+ }
269
+
270
+ private:
271
+ // Returns true if all subchannels have seen their initial
272
+ // connectivity state notifications.
273
+ bool AllSubchannelsSeenInitialState() const {
274
+ return num_subchannels_seen_initial_notification_ == size();
275
+ }
276
+
277
+ // Looks through subchannels_ starting from attempting_index_ to
278
+ // find the first one not currently in TRANSIENT_FAILURE, then
279
+ // triggers a connection attempt for that subchannel. If there are
280
+ // no more subchannels not in TRANSIENT_FAILURE, calls
281
+ // MaybeFinishHappyEyeballsPass().
282
+ void StartConnectingNextSubchannel();
283
+
284
+ // Checks to see if the initial Happy Eyeballs pass is complete --
285
+ // i.e., all subchannels have seen TRANSIENT_FAILURE state at least once.
286
+ // If so, transitions to a mode where we try to connect to all subchannels
287
+ // in parallel and returns true.
288
+ void MaybeFinishHappyEyeballsPass();
289
+
290
+ // Backpointer to owning policy.
291
+ RefCountedPtr<PickFirst> policy_;
292
+
293
+ ChannelArgs args_;
294
+
295
+ // The list of subchannels.
296
+ std::vector<std::unique_ptr<SubchannelData>> subchannels_;
297
+
298
+ // Is this list shutting down? This may be true due to the shutdown of the
299
+ // policy itself or because a newer update has arrived while this one hadn't
300
+ // finished processing.
301
+ bool shutting_down_ = false;
302
+
303
+ size_t num_subchannels_seen_initial_notification_ = 0;
304
+
305
+ // The index into subchannels_ to which we are currently attempting
306
+ // to connect during the initial Happy Eyeballs pass. Once the
307
+ // initial pass is over, this will be equal to size().
308
+ size_t attempting_index_ = 0;
309
+ // Happy Eyeballs timer handle.
310
+ absl::optional<grpc_event_engine::experimental::EventEngine::TaskHandle>
311
+ timer_handle_;
312
+
313
+ // After the initial Happy Eyeballs pass, the number of failures
314
+ // we've seen. Every size() failures, we trigger re-resolution.
315
+ size_t num_failures_ = 0;
316
+
317
+ // The status from the last subchannel that reported TRANSIENT_FAILURE.
318
+ absl::Status last_failure_;
319
+ };
320
+
321
+ class HealthWatcher final
322
+ : public SubchannelInterface::ConnectivityStateWatcherInterface {
323
+ public:
324
+ explicit HealthWatcher(RefCountedPtr<PickFirst> policy)
325
+ : policy_(std::move(policy)) {}
326
+
327
+ ~HealthWatcher() override {
328
+ policy_.reset(DEBUG_LOCATION, "HealthWatcher dtor");
329
+ }
330
+
331
+ void OnConnectivityStateChange(grpc_connectivity_state new_state,
332
+ absl::Status status) override;
333
+
334
+ grpc_pollset_set* interested_parties() override {
335
+ return policy_->interested_parties();
336
+ }
337
+
338
+ private:
339
+ RefCountedPtr<PickFirst> policy_;
340
+ };
341
+
342
+ class Picker final : public SubchannelPicker {
343
+ public:
344
+ explicit Picker(RefCountedPtr<SubchannelInterface> subchannel)
345
+ : subchannel_(std::move(subchannel)) {}
346
+
347
+ PickResult Pick(PickArgs /*args*/) override {
348
+ return PickResult::Complete(subchannel_);
349
+ }
350
+
351
+ private:
352
+ RefCountedPtr<SubchannelInterface> subchannel_;
353
+ };
354
+
355
+ void ShutdownLocked() override;
356
+
357
+ void UpdateState(grpc_connectivity_state state, const absl::Status& status,
358
+ RefCountedPtr<SubchannelPicker> picker);
359
+
360
+ void AttemptToConnectUsingLatestUpdateArgsLocked();
361
+
362
+ void UnsetSelectedSubchannel();
363
+
364
+ void GoIdle();
365
+
366
+ // When ExitIdleLocked() is called, we create a subchannel_list_ and start
367
+ // trying to connect, but we don't actually change state_ until the first
368
+ // subchannel reports CONNECTING. So in order to know if we're really
369
+ // idle, we need to check both state_ and subchannel_list_.
370
+ bool IsIdle() const {
371
+ return state_ == GRPC_CHANNEL_IDLE && subchannel_list_ == nullptr;
372
+ }
373
+
374
+ // Whether we should enable health watching.
375
+ const bool enable_health_watch_;
376
+ // Whether we should omit our status message prefix.
377
+ const bool omit_status_message_prefix_;
378
+ // Connection Attempt Delay for Happy Eyeballs.
379
+ const Duration connection_attempt_delay_;
380
+
381
+ // Lateset update args.
382
+ UpdateArgs latest_update_args_;
383
+ // The list of subchannels that we're currently trying to connect to.
384
+ // Will generally be null when selected_ is set, except when we get a
385
+ // resolver update and need to check initial connectivity states for
386
+ // the new list to decide whether we keep using the existing
387
+ // connection or go IDLE.
388
+ OrphanablePtr<SubchannelList> subchannel_list_;
389
+ // Selected subchannel. Will generally be null when subchannel_list_
390
+ // is non-null, with the exception mentioned above.
391
+ OrphanablePtr<SubchannelList::SubchannelData::SubchannelState> selected_;
392
+ // Health watcher for the selected subchannel.
393
+ SubchannelInterface::ConnectivityStateWatcherInterface* health_watcher_ =
394
+ nullptr;
395
+ SubchannelInterface::DataWatcherInterface* health_data_watcher_ = nullptr;
396
+ // Current connectivity state.
397
+ grpc_connectivity_state state_ = GRPC_CHANNEL_CONNECTING;
398
+ // Are we shut down?
399
+ bool shutdown_ = false;
400
+ // Random bit generator used for shuffling addresses if configured
401
+ absl::BitGen bit_gen_;
402
+ };
403
+
404
+ PickFirst::PickFirst(Args args)
405
+ : LoadBalancingPolicy(std::move(args)),
406
+ enable_health_watch_(
407
+ channel_args()
408
+ .GetBool(GRPC_ARG_INTERNAL_PICK_FIRST_ENABLE_HEALTH_CHECKING)
409
+ .value_or(false)),
410
+ omit_status_message_prefix_(
411
+ channel_args()
412
+ .GetBool(GRPC_ARG_INTERNAL_PICK_FIRST_OMIT_STATUS_MESSAGE_PREFIX)
413
+ .value_or(false)),
414
+ connection_attempt_delay_(Duration::Milliseconds(
415
+ Clamp(channel_args()
416
+ .GetInt(GRPC_ARG_HAPPY_EYEBALLS_CONNECTION_ATTEMPT_DELAY_MS)
417
+ .value_or(250),
418
+ 100, 2000))) {
419
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
420
+ gpr_log(GPR_INFO, "Pick First %p created.", this);
421
+ }
422
+ }
423
+
424
+ PickFirst::~PickFirst() {
425
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
426
+ gpr_log(GPR_INFO, "Destroying Pick First %p", this);
427
+ }
428
+ CHECK(subchannel_list_ == nullptr);
429
+ }
430
+
431
+ void PickFirst::ShutdownLocked() {
432
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
433
+ gpr_log(GPR_INFO, "Pick First %p Shutting down", this);
434
+ }
435
+ shutdown_ = true;
436
+ UnsetSelectedSubchannel();
437
+ subchannel_list_.reset();
438
+ }
439
+
440
+ void PickFirst::ExitIdleLocked() {
441
+ if (shutdown_) return;
442
+ if (IsIdle()) {
443
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
444
+ gpr_log(GPR_INFO, "Pick First %p exiting idle", this);
445
+ }
446
+ AttemptToConnectUsingLatestUpdateArgsLocked();
447
+ }
448
+ }
449
+
450
+ void PickFirst::ResetBackoffLocked() {
451
+ if (subchannel_list_ != nullptr) subchannel_list_->ResetBackoffLocked();
452
+ }
453
+
454
+ void PickFirst::AttemptToConnectUsingLatestUpdateArgsLocked() {
455
+ // Create a subchannel list from latest_update_args_.
456
+ EndpointAddressesIterator* addresses = nullptr;
457
+ if (latest_update_args_.addresses.ok()) {
458
+ addresses = latest_update_args_.addresses->get();
459
+ }
460
+ // Replace subchannel_list_.
461
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace) &&
462
+ subchannel_list_ != nullptr) {
463
+ gpr_log(GPR_INFO, "[PF %p] Shutting down previous subchannel list %p", this,
464
+ subchannel_list_.get());
465
+ }
466
+ subchannel_list_ = MakeOrphanable<SubchannelList>(
467
+ RefAsSubclass<PickFirst>(DEBUG_LOCATION, "SubchannelList"), addresses,
468
+ latest_update_args_.args);
469
+ // Empty update or no valid subchannels. Put the channel in
470
+ // TRANSIENT_FAILURE and request re-resolution. Also unset the
471
+ // current selected subchannel.
472
+ if (subchannel_list_->size() == 0) {
473
+ channel_control_helper()->RequestReresolution();
474
+ absl::Status status =
475
+ latest_update_args_.addresses.ok()
476
+ ? absl::UnavailableError(absl::StrCat(
477
+ "empty address list: ", latest_update_args_.resolution_note))
478
+ : latest_update_args_.addresses.status();
479
+ UpdateState(GRPC_CHANNEL_TRANSIENT_FAILURE, status,
480
+ MakeRefCounted<TransientFailurePicker>(status));
481
+ UnsetSelectedSubchannel();
482
+ }
483
+ }
484
+
485
+ absl::string_view GetAddressFamily(const grpc_resolved_address& address) {
486
+ const char* uri_scheme = grpc_sockaddr_get_uri_scheme(&address);
487
+ return absl::string_view(uri_scheme == nullptr ? "other" : uri_scheme);
488
+ };
489
+
490
+ // An endpoint list iterator that returns only entries for a specific
491
+ // address family, as indicated by the URI scheme.
492
+ class AddressFamilyIterator final {
493
+ public:
494
+ AddressFamilyIterator(absl::string_view scheme, size_t index)
495
+ : scheme_(scheme), index_(index) {}
496
+
497
+ EndpointAddresses* Next(EndpointAddressesList& endpoints,
498
+ std::vector<bool>* endpoints_moved) {
499
+ for (; index_ < endpoints.size(); ++index_) {
500
+ if (!(*endpoints_moved)[index_] &&
501
+ GetAddressFamily(endpoints[index_].address()) == scheme_) {
502
+ (*endpoints_moved)[index_] = true;
503
+ return &endpoints[index_++];
504
+ }
505
+ }
506
+ return nullptr;
507
+ }
508
+
509
+ private:
510
+ absl::string_view scheme_;
511
+ size_t index_;
512
+ };
513
+
514
+ absl::Status PickFirst::UpdateLocked(UpdateArgs args) {
515
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
516
+ if (args.addresses.ok()) {
517
+ gpr_log(GPR_INFO, "Pick First %p received update", this);
518
+ } else {
519
+ gpr_log(GPR_INFO, "Pick First %p received update with address error: %s",
520
+ this, args.addresses.status().ToString().c_str());
521
+ }
522
+ }
523
+ // Set return status based on the address list.
524
+ absl::Status status;
525
+ if (!args.addresses.ok()) {
526
+ status = args.addresses.status();
527
+ } else {
528
+ EndpointAddressesList endpoints;
529
+ (*args.addresses)->ForEach([&](const EndpointAddresses& endpoint) {
530
+ endpoints.push_back(endpoint);
531
+ });
532
+ if (endpoints.empty()) {
533
+ status = absl::UnavailableError("address list must not be empty");
534
+ } else {
535
+ // Shuffle the list if needed.
536
+ auto config = static_cast<PickFirstConfig*>(args.config.get());
537
+ if (config->shuffle_addresses()) {
538
+ absl::c_shuffle(endpoints, bit_gen_);
539
+ }
540
+ // Flatten the list so that we have one address per endpoint.
541
+ // While we're iterating, also determine the desired address family
542
+ // order and the index of the first element of each family, for use in
543
+ // the interleaving below.
544
+ std::set<absl::string_view> address_families;
545
+ std::vector<AddressFamilyIterator> address_family_order;
546
+ EndpointAddressesList flattened_endpoints;
547
+ for (const auto& endpoint : endpoints) {
548
+ for (const auto& address : endpoint.addresses()) {
549
+ flattened_endpoints.emplace_back(address, endpoint.args());
550
+ absl::string_view scheme = GetAddressFamily(address);
551
+ bool inserted = address_families.insert(scheme).second;
552
+ if (inserted) {
553
+ address_family_order.emplace_back(scheme,
554
+ flattened_endpoints.size() - 1);
555
+ }
556
+ }
557
+ }
558
+ endpoints = std::move(flattened_endpoints);
559
+ // Interleave addresses as per RFC-8305 section 4.
560
+ EndpointAddressesList interleaved_endpoints;
561
+ interleaved_endpoints.reserve(endpoints.size());
562
+ std::vector<bool> endpoints_moved(endpoints.size());
563
+ size_t scheme_index = 0;
564
+ for (size_t i = 0; i < endpoints.size(); ++i) {
565
+ EndpointAddresses* endpoint;
566
+ do {
567
+ auto& iterator = address_family_order[scheme_index++ %
568
+ address_family_order.size()];
569
+ endpoint = iterator.Next(endpoints, &endpoints_moved);
570
+ } while (endpoint == nullptr);
571
+ interleaved_endpoints.emplace_back(std::move(*endpoint));
572
+ }
573
+ endpoints = std::move(interleaved_endpoints);
574
+ args.addresses =
575
+ std::make_shared<EndpointAddressesListIterator>(std::move(endpoints));
576
+ }
577
+ }
578
+ // If the update contains a resolver error and we have a previous update
579
+ // that was not a resolver error, keep using the previous addresses.
580
+ if (!args.addresses.ok() && latest_update_args_.config != nullptr) {
581
+ args.addresses = std::move(latest_update_args_.addresses);
582
+ }
583
+ // Update latest_update_args_.
584
+ latest_update_args_ = std::move(args);
585
+ // If we are not in idle, start connection attempt immediately.
586
+ // Otherwise, we defer the attempt into ExitIdleLocked().
587
+ if (!IsIdle()) {
588
+ AttemptToConnectUsingLatestUpdateArgsLocked();
589
+ }
590
+ return status;
591
+ }
592
+
593
+ void PickFirst::UpdateState(grpc_connectivity_state state,
594
+ const absl::Status& status,
595
+ RefCountedPtr<SubchannelPicker> picker) {
596
+ state_ = state;
597
+ channel_control_helper()->UpdateState(state, status, std::move(picker));
598
+ }
599
+
600
+ void PickFirst::UnsetSelectedSubchannel() {
601
+ if (selected_ != nullptr && health_data_watcher_ != nullptr) {
602
+ selected_->subchannel()->CancelDataWatcher(health_data_watcher_);
603
+ }
604
+ selected_.reset();
605
+ health_watcher_ = nullptr;
606
+ health_data_watcher_ = nullptr;
607
+ }
608
+
609
+ void PickFirst::GoIdle() {
610
+ // Unset the selected subchannel.
611
+ UnsetSelectedSubchannel();
612
+ // Drop the current subchannel list, if any.
613
+ subchannel_list_.reset();
614
+ // Request a re-resolution.
615
+ // TODO(qianchengz): We may want to request re-resolution in
616
+ // ExitIdleLocked() instead.
617
+ channel_control_helper()->RequestReresolution();
618
+ // Enter idle.
619
+ UpdateState(GRPC_CHANNEL_IDLE, absl::Status(),
620
+ MakeRefCounted<QueuePicker>(Ref(DEBUG_LOCATION, "QueuePicker")));
621
+ }
622
+
623
+ //
624
+ // PickFirst::HealthWatcher
625
+ //
626
+
627
+ void PickFirst::HealthWatcher::OnConnectivityStateChange(
628
+ grpc_connectivity_state new_state, absl::Status status) {
629
+ if (policy_->health_watcher_ != this) return;
630
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
631
+ gpr_log(GPR_INFO, "[PF %p] health watch state update: %s (%s)",
632
+ policy_.get(), ConnectivityStateName(new_state),
633
+ status.ToString().c_str());
634
+ }
635
+ switch (new_state) {
636
+ case GRPC_CHANNEL_READY:
637
+ policy_->channel_control_helper()->UpdateState(
638
+ GRPC_CHANNEL_READY, absl::OkStatus(),
639
+ MakeRefCounted<Picker>(policy_->selected_->subchannel()->Ref()));
640
+ break;
641
+ case GRPC_CHANNEL_IDLE:
642
+ // If the subchannel becomes disconnected, the health watcher
643
+ // might happen to see the change before the raw connectivity
644
+ // state watcher does. In this case, ignore it, since the raw
645
+ // connectivity state watcher will handle it shortly.
646
+ break;
647
+ case GRPC_CHANNEL_CONNECTING:
648
+ policy_->channel_control_helper()->UpdateState(
649
+ new_state, absl::OkStatus(),
650
+ MakeRefCounted<QueuePicker>(policy_->Ref()));
651
+ break;
652
+ case GRPC_CHANNEL_TRANSIENT_FAILURE:
653
+ policy_->channel_control_helper()->UpdateState(
654
+ GRPC_CHANNEL_TRANSIENT_FAILURE, status,
655
+ MakeRefCounted<TransientFailurePicker>(status));
656
+ break;
657
+ case GRPC_CHANNEL_SHUTDOWN:
658
+ Crash("health watcher reported state SHUTDOWN");
659
+ }
660
+ }
661
+
662
+ //
663
+ // PickFirst::SubchannelList::SubchannelData::SubchannelState
664
+ //
665
+
666
+ PickFirst::SubchannelList::SubchannelData::SubchannelState::SubchannelState(
667
+ SubchannelData* subchannel_data,
668
+ RefCountedPtr<SubchannelInterface> subchannel)
669
+ : subchannel_data_(subchannel_data),
670
+ pick_first_(subchannel_data_->subchannel_list_->policy_),
671
+ subchannel_(std::move(subchannel)) {
672
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
673
+ gpr_log(GPR_INFO,
674
+ "[PF %p] subchannel state %p (subchannel %p): starting watch",
675
+ pick_first_.get(), this, subchannel_.get());
676
+ }
677
+ auto watcher = std::make_unique<Watcher>(Ref(DEBUG_LOCATION, "Watcher"));
678
+ watcher_ = watcher.get();
679
+ subchannel_->WatchConnectivityState(std::move(watcher));
680
+ }
681
+
682
+ void PickFirst::SubchannelList::SubchannelData::SubchannelState::Orphan() {
683
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
684
+ gpr_log(GPR_INFO,
685
+ "[PF %p] subchannel state %p (subchannel %p): "
686
+ "cancelling watch and unreffing subchannel",
687
+ pick_first_.get(), this, subchannel_.get());
688
+ }
689
+ subchannel_data_ = nullptr;
690
+ subchannel_->CancelConnectivityStateWatch(watcher_);
691
+ watcher_ = nullptr;
692
+ subchannel_.reset();
693
+ pick_first_.reset();
694
+ Unref();
695
+ }
696
+
697
+ void PickFirst::SubchannelList::SubchannelData::SubchannelState::Select() {
698
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
699
+ gpr_log(GPR_INFO, "Pick First %p selected subchannel %p", pick_first_.get(),
700
+ subchannel_.get());
701
+ }
702
+ CHECK_NE(subchannel_data_, nullptr);
703
+ pick_first_->UnsetSelectedSubchannel(); // Cancel health watch, if any.
704
+ pick_first_->selected_ = std::move(subchannel_data_->subchannel_state_);
705
+ // If health checking is enabled, start the health watch, but don't
706
+ // report a new picker -- we want to stay in CONNECTING while we wait
707
+ // for the health status notification.
708
+ // If health checking is NOT enabled, report READY.
709
+ if (pick_first_->enable_health_watch_) {
710
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
711
+ gpr_log(GPR_INFO, "[PF %p] starting health watch", pick_first_.get());
712
+ }
713
+ auto watcher = std::make_unique<HealthWatcher>(
714
+ pick_first_.Ref(DEBUG_LOCATION, "HealthWatcher"));
715
+ pick_first_->health_watcher_ = watcher.get();
716
+ auto health_data_watcher = MakeHealthCheckWatcher(
717
+ pick_first_->work_serializer(),
718
+ subchannel_data_->subchannel_list_->args_, std::move(watcher));
719
+ pick_first_->health_data_watcher_ = health_data_watcher.get();
720
+ subchannel_->AddDataWatcher(std::move(health_data_watcher));
721
+ } else {
722
+ pick_first_->UpdateState(GRPC_CHANNEL_READY, absl::Status(),
723
+ MakeRefCounted<Picker>(subchannel_));
724
+ }
725
+ // Report successful connection.
726
+ // We consider it a successful connection attempt only if the
727
+ // previous state was CONNECTING. In particular, we don't want to
728
+ // increment this counter if we got a new address list and found the
729
+ // existing connection already in state READY.
730
+ if (subchannel_data_->connectivity_state_ == GRPC_CHANNEL_CONNECTING) {
731
+ auto& stats_plugins =
732
+ pick_first_->channel_control_helper()->GetStatsPluginGroup();
733
+ stats_plugins.AddCounter(
734
+ kMetricConnectionAttemptsSucceeded, 1,
735
+ {pick_first_->channel_control_helper()->GetTarget()}, {});
736
+ }
737
+ // Drop our pointer to subchannel_data_, so that we know not to
738
+ // interact with it on subsequent connectivity state updates.
739
+ subchannel_data_ = nullptr;
740
+ // Clean up subchannel list.
741
+ pick_first_->subchannel_list_.reset();
742
+ }
743
+
744
+ void PickFirst::SubchannelList::SubchannelData::SubchannelState::
745
+ OnConnectivityStateChange(grpc_connectivity_state new_state,
746
+ absl::Status status) {
747
+ if (watcher_ == nullptr) return;
748
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
749
+ gpr_log(GPR_INFO,
750
+ "[PF %p] subchannel state %p (subchannel %p): connectivity "
751
+ "changed: new_state=%s, status=%s, watcher=%p, "
752
+ "subchannel_data_=%p, pick_first_->selected_=%p",
753
+ pick_first_.get(), this, subchannel_.get(),
754
+ ConnectivityStateName(new_state), status.ToString().c_str(),
755
+ watcher_, subchannel_data_, pick_first_->selected_.get());
756
+ }
757
+ // If we're still part of a subchannel list trying to connect, check
758
+ // if we're connected.
759
+ if (subchannel_data_ != nullptr) {
760
+ // If the subchannel is READY, use it.
761
+ // Otherwise, tell the subchannel list to keep trying.
762
+ if (new_state == GRPC_CHANNEL_READY) {
763
+ Select();
764
+ } else {
765
+ subchannel_data_->OnConnectivityStateChange(new_state, std::move(status));
766
+ }
767
+ return;
768
+ }
769
+ // We aren't trying to connect, so we must be the selected subchannel.
770
+ CHECK(pick_first_->selected_.get() == this);
771
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
772
+ gpr_log(GPR_INFO,
773
+ "Pick First %p selected subchannel connectivity changed to %s",
774
+ pick_first_.get(), ConnectivityStateName(new_state));
775
+ }
776
+ // Any state change is considered to be a failure of the existing
777
+ // connection. Report the failure.
778
+ auto& stats_plugins =
779
+ pick_first_->channel_control_helper()->GetStatsPluginGroup();
780
+ stats_plugins.AddCounter(kMetricDisconnections, 1,
781
+ {pick_first_->channel_control_helper()->GetTarget()},
782
+ {});
783
+ // Report IDLE.
784
+ pick_first_->GoIdle();
785
+ }
786
+
787
+ //
788
+ // PickFirst::SubchannelList::SubchannelData
789
+ //
790
+
791
+ PickFirst::SubchannelList::SubchannelData::SubchannelData(
792
+ SubchannelList* subchannel_list, size_t index,
793
+ RefCountedPtr<SubchannelInterface> subchannel)
794
+ : subchannel_list_(subchannel_list), index_(index) {
795
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
796
+ gpr_log(GPR_INFO,
797
+ "[PF %p] subchannel list %p index %" PRIuPTR
798
+ ": creating subchannel data",
799
+ subchannel_list_->policy_.get(), subchannel_list_, index_);
800
+ }
801
+ subchannel_state_ =
802
+ MakeOrphanable<SubchannelState>(this, std::move(subchannel));
803
+ }
804
+
805
+ void PickFirst::SubchannelList::SubchannelData::OnConnectivityStateChange(
806
+ grpc_connectivity_state new_state, absl::Status status) {
807
+ PickFirst* p = subchannel_list_->policy_.get();
808
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
809
+ gpr_log(
810
+ GPR_INFO,
811
+ "[PF %p] subchannel list %p index %" PRIuPTR " of %" PRIuPTR
812
+ " (subchannel_state %p): connectivity changed: old_state=%s, "
813
+ "new_state=%s, status=%s, seen_transient_failure=%d, p->selected_=%p, "
814
+ "p->subchannel_list_=%p, p->subchannel_list_->shutting_down_=%d",
815
+ p, subchannel_list_, index_, subchannel_list_->size(),
816
+ subchannel_state_.get(),
817
+ (connectivity_state_.has_value()
818
+ ? ConnectivityStateName(*connectivity_state_)
819
+ : "N/A"),
820
+ ConnectivityStateName(new_state), status.ToString().c_str(),
821
+ seen_transient_failure_, p->selected_.get(), p->subchannel_list_.get(),
822
+ p->subchannel_list_->shutting_down_);
823
+ }
824
+ if (subchannel_list_->shutting_down_) return;
825
+ // The notification must be for a subchannel in the current list.
826
+ CHECK(subchannel_list_ == p->subchannel_list_.get());
827
+ // SHUTDOWN should never happen.
828
+ CHECK(new_state != GRPC_CHANNEL_SHUTDOWN);
829
+ // READY should be caught by SubchannelState, in which case it will
830
+ // not call us in the first place.
831
+ CHECK(new_state != GRPC_CHANNEL_READY);
832
+ // Update state.
833
+ absl::optional<grpc_connectivity_state> old_state = connectivity_state_;
834
+ connectivity_state_ = new_state;
835
+ connectivity_status_ = std::move(status);
836
+ // Make sure we note when a subchannel has seen TRANSIENT_FAILURE.
837
+ bool prev_seen_transient_failure = seen_transient_failure_;
838
+ if (new_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
839
+ seen_transient_failure_ = true;
840
+ subchannel_list_->last_failure_ = connectivity_status_;
841
+ }
842
+ // If this is the initial connectivity state update for this subchannel,
843
+ // increment the counter in the subchannel list.
844
+ if (!old_state.has_value()) {
845
+ ++subchannel_list_->num_subchannels_seen_initial_notification_;
846
+ }
847
+ // If we haven't yet seen the initial connectivity state notification
848
+ // for all subchannels, do nothing.
849
+ if (!subchannel_list_->AllSubchannelsSeenInitialState()) return;
850
+ // If we're still here and this is the initial connectivity state
851
+ // notification for this subchannel, that means it was the last one to
852
+ // see its initial notification. So we now have enough state to
853
+ // figure out how to proceed.
854
+ if (!old_state.has_value()) {
855
+ // If we already have a selected subchannel and we got here, that
856
+ // means that none of the subchannels on the new list are in READY
857
+ // state, which means that the address we're currently connected to
858
+ // is not in the new list. In that case, we drop the current
859
+ // connection and report IDLE.
860
+ if (p->selected_ != nullptr) {
861
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
862
+ gpr_log(GPR_INFO,
863
+ "[PF %p] subchannel list %p: new update has no subchannels in "
864
+ "state READY; dropping existing connection and going IDLE",
865
+ p, subchannel_list_);
866
+ }
867
+ p->GoIdle();
868
+ } else {
869
+ // Start trying to connect, starting with the first subchannel.
870
+ subchannel_list_->StartConnectingNextSubchannel();
871
+ }
872
+ return;
873
+ }
874
+ // We've already started trying to connect. Any subchannel that
875
+ // reports TF is a connection attempt failure.
876
+ if (new_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
877
+ auto& stats_plugins = subchannel_list_->policy_->channel_control_helper()
878
+ ->GetStatsPluginGroup();
879
+ stats_plugins.AddCounter(
880
+ kMetricConnectionAttemptsFailed, 1,
881
+ {subchannel_list_->policy_->channel_control_helper()->GetTarget()}, {});
882
+ }
883
+ // Otherwise, process connectivity state change.
884
+ switch (*connectivity_state_) {
885
+ case GRPC_CHANNEL_TRANSIENT_FAILURE: {
886
+ // If this is the first failure we've seen on this subchannel,
887
+ // then we're still in the Happy Eyeballs pass.
888
+ if (!prev_seen_transient_failure && seen_transient_failure_) {
889
+ // If a connection attempt fails before the timer fires, then
890
+ // cancel the timer and start connecting on the next subchannel.
891
+ if (index_ == subchannel_list_->attempting_index_) {
892
+ if (subchannel_list_->timer_handle_.has_value()) {
893
+ p->channel_control_helper()->GetEventEngine()->Cancel(
894
+ *subchannel_list_->timer_handle_);
895
+ }
896
+ ++subchannel_list_->attempting_index_;
897
+ subchannel_list_->StartConnectingNextSubchannel();
898
+ } else {
899
+ // If this was the last subchannel to fail, check if the Happy
900
+ // Eyeballs pass is complete.
901
+ subchannel_list_->MaybeFinishHappyEyeballsPass();
902
+ }
903
+ } else if (subchannel_list_->IsHappyEyeballsPassComplete()) {
904
+ // We're done with the initial Happy Eyeballs pass and in a mode
905
+ // where we're attempting to connect to every subchannel in
906
+ // parallel. We count the number of failed connection attempts,
907
+ // and when that is equal to the number of subchannels, request
908
+ // re-resolution and report TRANSIENT_FAILURE again, so that the
909
+ // caller has the most recent status message. Note that this
910
+ // isn't necessarily the same as saying that we've seen one
911
+ // failure for each subchannel in the list, because the backoff
912
+ // state may be different in each subchannel, so we may have seen
913
+ // one subchannel fail more than once and another subchannel not
914
+ // fail at all. But it's a good enough heuristic.
915
+ ++subchannel_list_->num_failures_;
916
+ if (subchannel_list_->num_failures_ % subchannel_list_->size() == 0) {
917
+ p->channel_control_helper()->RequestReresolution();
918
+ status = absl::UnavailableError(absl::StrCat(
919
+ (p->omit_status_message_prefix_
920
+ ? ""
921
+ : "failed to connect to all addresses; last error: "),
922
+ connectivity_status_.ToString()));
923
+ p->UpdateState(GRPC_CHANNEL_TRANSIENT_FAILURE, status,
924
+ MakeRefCounted<TransientFailurePicker>(status));
925
+ }
926
+ }
927
+ break;
928
+ }
929
+ case GRPC_CHANNEL_IDLE:
930
+ // If we've finished the first Happy Eyeballs pass, then we go
931
+ // into a mode where we immediately try to connect to every
932
+ // subchannel in parallel.
933
+ if (subchannel_list_->IsHappyEyeballsPassComplete()) {
934
+ subchannel_state_->RequestConnection();
935
+ }
936
+ break;
937
+ case GRPC_CHANNEL_CONNECTING:
938
+ // Only update connectivity state only if we're not already in
939
+ // TRANSIENT_FAILURE.
940
+ // TODO(roth): Squelch duplicate CONNECTING updates.
941
+ if (p->state_ != GRPC_CHANNEL_TRANSIENT_FAILURE) {
942
+ p->UpdateState(GRPC_CHANNEL_CONNECTING, absl::Status(),
943
+ MakeRefCounted<QueuePicker>(nullptr));
944
+ }
945
+ break;
946
+ default:
947
+ // We handled READY above, and we should never see SHUTDOWN.
948
+ GPR_UNREACHABLE_CODE(break);
949
+ }
950
+ }
951
+
952
+ void PickFirst::SubchannelList::SubchannelData::RequestConnectionWithTimer() {
953
+ CHECK(connectivity_state_.has_value());
954
+ if (connectivity_state_ == GRPC_CHANNEL_IDLE) {
955
+ subchannel_state_->RequestConnection();
956
+ } else {
957
+ CHECK(connectivity_state_ == GRPC_CHANNEL_CONNECTING);
958
+ }
959
+ // If this is not the last subchannel in the list, start the timer.
960
+ if (index_ != subchannel_list_->size() - 1) {
961
+ PickFirst* p = subchannel_list_->policy_.get();
962
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
963
+ gpr_log(GPR_INFO,
964
+ "Pick First %p subchannel list %p: starting Connection "
965
+ "Attempt Delay timer for %" PRId64 "ms for index %" PRIuPTR,
966
+ p, subchannel_list_, p->connection_attempt_delay_.millis(),
967
+ index_);
968
+ }
969
+ subchannel_list_->timer_handle_ =
970
+ p->channel_control_helper()->GetEventEngine()->RunAfter(
971
+ p->connection_attempt_delay_,
972
+ [subchannel_list =
973
+ subchannel_list_->Ref(DEBUG_LOCATION, "timer")]() mutable {
974
+ ApplicationCallbackExecCtx application_exec_ctx;
975
+ ExecCtx exec_ctx;
976
+ auto* sl = subchannel_list.get();
977
+ sl->policy_->work_serializer()->Run(
978
+ [subchannel_list = std::move(subchannel_list)]() {
979
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
980
+ gpr_log(GPR_INFO,
981
+ "Pick First %p subchannel list %p: Connection "
982
+ "Attempt Delay timer fired (shutting_down=%d, "
983
+ "selected=%p)",
984
+ subchannel_list->policy_.get(),
985
+ subchannel_list.get(),
986
+ subchannel_list->shutting_down_,
987
+ subchannel_list->policy_->selected_.get());
988
+ }
989
+ if (subchannel_list->shutting_down_) return;
990
+ if (subchannel_list->policy_->selected_ != nullptr) return;
991
+ ++subchannel_list->attempting_index_;
992
+ subchannel_list->StartConnectingNextSubchannel();
993
+ },
994
+ DEBUG_LOCATION);
995
+ });
996
+ }
997
+ }
998
+
999
+ //
1000
+ // PickFirst::SubchannelList
77
1001
  //
78
1002
 
79
- constexpr absl::string_view kPickFirst = "pick_first";
1003
+ PickFirst::SubchannelList::SubchannelList(RefCountedPtr<PickFirst> policy,
1004
+ EndpointAddressesIterator* addresses,
1005
+ const ChannelArgs& args)
1006
+ : InternallyRefCounted<SubchannelList>(
1007
+ GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace) ? "SubchannelList"
1008
+ : nullptr),
1009
+ policy_(std::move(policy)),
1010
+ args_(args.Remove(GRPC_ARG_INTERNAL_PICK_FIRST_ENABLE_HEALTH_CHECKING)
1011
+ .Remove(
1012
+ GRPC_ARG_INTERNAL_PICK_FIRST_OMIT_STATUS_MESSAGE_PREFIX)) {
1013
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
1014
+ gpr_log(GPR_INFO, "[PF %p] Creating subchannel list %p - channel args: %s",
1015
+ policy_.get(), this, args_.ToString().c_str());
1016
+ }
1017
+ if (addresses == nullptr) return;
1018
+ // Create a subchannel for each address.
1019
+ addresses->ForEach([&](const EndpointAddresses& address) {
1020
+ CHECK_EQ(address.addresses().size(), 1u);
1021
+ RefCountedPtr<SubchannelInterface> subchannel =
1022
+ policy_->channel_control_helper()->CreateSubchannel(
1023
+ address.address(), address.args(), args_);
1024
+ if (subchannel == nullptr) {
1025
+ // Subchannel could not be created.
1026
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
1027
+ gpr_log(GPR_INFO,
1028
+ "[PF %p] could not create subchannel for address %s, ignoring",
1029
+ policy_.get(), address.ToString().c_str());
1030
+ }
1031
+ return;
1032
+ }
1033
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
1034
+ gpr_log(GPR_INFO,
1035
+ "[PF %p] subchannel list %p index %" PRIuPTR
1036
+ ": Created subchannel %p for address %s",
1037
+ policy_.get(), this, subchannels_.size(), subchannel.get(),
1038
+ address.ToString().c_str());
1039
+ }
1040
+ subchannels_.emplace_back(std::make_unique<SubchannelData>(
1041
+ this, subchannels_.size(), std::move(subchannel)));
1042
+ });
1043
+ }
80
1044
 
81
- class PickFirstConfig : public LoadBalancingPolicy::Config {
82
- public:
83
- absl::string_view name() const override { return kPickFirst; }
84
- bool shuffle_addresses() const { return shuffle_addresses_; }
1045
+ PickFirst::SubchannelList::~SubchannelList() {
1046
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
1047
+ gpr_log(GPR_INFO, "[PF %p] Destroying subchannel_list %p", policy_.get(),
1048
+ this);
1049
+ }
1050
+ }
85
1051
 
86
- static const JsonLoaderInterface* JsonLoader(const JsonArgs&) {
87
- static const auto kJsonLoader =
88
- JsonObjectLoader<PickFirstConfig>()
89
- .OptionalField("shuffleAddressList",
90
- &PickFirstConfig::shuffle_addresses_)
91
- .Finish();
92
- return kJsonLoader;
1052
+ void PickFirst::SubchannelList::Orphan() {
1053
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
1054
+ gpr_log(GPR_INFO, "[PF %p] Shutting down subchannel_list %p", policy_.get(),
1055
+ this);
1056
+ }
1057
+ CHECK(!shutting_down_);
1058
+ shutting_down_ = true;
1059
+ // Cancel Happy Eyeballs timer, if any.
1060
+ if (timer_handle_.has_value()) {
1061
+ policy_->channel_control_helper()->GetEventEngine()->Cancel(*timer_handle_);
93
1062
  }
1063
+ Unref();
1064
+ }
94
1065
 
95
- private:
96
- bool shuffle_addresses_ = false;
97
- };
1066
+ void PickFirst::SubchannelList::ResetBackoffLocked() {
1067
+ for (auto& sd : subchannels_) {
1068
+ sd->ResetBackoffLocked();
1069
+ }
1070
+ }
1071
+
1072
+ void PickFirst::SubchannelList::StartConnectingNextSubchannel() {
1073
+ // Find the next subchannel not in state TRANSIENT_FAILURE.
1074
+ // We skip subchannels in state TRANSIENT_FAILURE to avoid a
1075
+ // large recursion that could overflow the stack.
1076
+ for (; attempting_index_ < size(); ++attempting_index_) {
1077
+ SubchannelData* sc = subchannels_[attempting_index_].get();
1078
+ CHECK(sc->connectivity_state().has_value());
1079
+ if (sc->connectivity_state() != GRPC_CHANNEL_TRANSIENT_FAILURE) {
1080
+ // Found a subchannel not in TRANSIENT_FAILURE, so trigger a
1081
+ // connection attempt.
1082
+ sc->RequestConnectionWithTimer();
1083
+ return;
1084
+ }
1085
+ }
1086
+ // If we didn't find a subchannel to request a connection on, check to
1087
+ // see if the Happy Eyeballs pass is complete.
1088
+ MaybeFinishHappyEyeballsPass();
1089
+ }
1090
+
1091
+ void PickFirst::SubchannelList::MaybeFinishHappyEyeballsPass() {
1092
+ // Make sure all subchannels have finished a connection attempt before
1093
+ // we consider the Happy Eyeballs pass complete.
1094
+ if (!IsHappyEyeballsPassComplete()) return;
1095
+ // We didn't find another subchannel not in state TRANSIENT_FAILURE,
1096
+ // so report TRANSIENT_FAILURE and switch to a mode in which we try to
1097
+ // connect to all addresses in parallel.
1098
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
1099
+ gpr_log(GPR_INFO,
1100
+ "Pick First %p subchannel list %p failed to connect to "
1101
+ "all subchannels",
1102
+ policy_.get(), this);
1103
+ }
1104
+ // Re-resolve and report TRANSIENT_FAILURE.
1105
+ policy_->channel_control_helper()->RequestReresolution();
1106
+ absl::Status status = absl::UnavailableError(
1107
+ absl::StrCat((policy_->omit_status_message_prefix_
1108
+ ? ""
1109
+ : "failed to connect to all addresses; last error: "),
1110
+ last_failure_.ToString()));
1111
+ policy_->UpdateState(GRPC_CHANNEL_TRANSIENT_FAILURE, status,
1112
+ MakeRefCounted<TransientFailurePicker>(status));
1113
+ // Drop the existing (working) connection, if any. This may be
1114
+ // sub-optimal, but we can't ignore what the control plane told us.
1115
+ policy_->UnsetSelectedSubchannel();
1116
+ // We now transition into a mode where we try to connect to all
1117
+ // subchannels in parallel. For any subchannel currently in IDLE,
1118
+ // trigger a connection attempt. For any subchannel not currently in
1119
+ // IDLE, we will trigger a connection attempt when it does report IDLE.
1120
+ for (auto& sd : subchannels_) {
1121
+ if (sd->connectivity_state() == GRPC_CHANNEL_IDLE) {
1122
+ sd->RequestConnection();
1123
+ }
1124
+ }
1125
+ }
98
1126
 
99
- class PickFirst : public LoadBalancingPolicy {
1127
+ // TODO(roth): Remove this when the pick_first_new experiment is removed.
1128
+ class OldPickFirst final : public LoadBalancingPolicy {
100
1129
  public:
101
- explicit PickFirst(Args args);
1130
+ explicit OldPickFirst(Args args);
102
1131
 
103
1132
  absl::string_view name() const override { return kPickFirst; }
104
1133
 
@@ -107,11 +1136,11 @@ class PickFirst : public LoadBalancingPolicy {
107
1136
  void ResetBackoffLocked() override;
108
1137
 
109
1138
  private:
110
- ~PickFirst() override;
1139
+ ~OldPickFirst() override;
111
1140
 
112
- class SubchannelList : public InternallyRefCounted<SubchannelList> {
1141
+ class SubchannelList final : public InternallyRefCounted<SubchannelList> {
113
1142
  public:
114
- class SubchannelData {
1143
+ class SubchannelData final {
115
1144
  public:
116
1145
  SubchannelData(SubchannelList* subchannel_list, size_t index,
117
1146
  RefCountedPtr<SubchannelInterface> subchannel);
@@ -143,7 +1172,7 @@ class PickFirst : public LoadBalancingPolicy {
143
1172
 
144
1173
  private:
145
1174
  // Watcher for subchannel connectivity state.
146
- class Watcher
1175
+ class Watcher final
147
1176
  : public SubchannelInterface::ConnectivityStateWatcherInterface {
148
1177
  public:
149
1178
  Watcher(RefCountedPtr<SubchannelList> subchannel_list, size_t index)
@@ -178,10 +1207,6 @@ class PickFirst : public LoadBalancingPolicy {
178
1207
  // subchannel.
179
1208
  void ProcessUnselectedReadyLocked();
180
1209
 
181
- // Reacts to the current connectivity state while trying to connect.
182
- // TODO(roth): Remove this when we remove the Happy Eyeballs experiment.
183
- void ReactToConnectivityStateLocked();
184
-
185
1210
  // Backpointer to owning subchannel list. Not owned.
186
1211
  SubchannelList* subchannel_list_;
187
1212
  const size_t index_;
@@ -196,7 +1221,7 @@ class PickFirst : public LoadBalancingPolicy {
196
1221
  bool seen_transient_failure_ = false;
197
1222
  };
198
1223
 
199
- SubchannelList(RefCountedPtr<PickFirst> policy,
1224
+ SubchannelList(RefCountedPtr<OldPickFirst> policy,
200
1225
  EndpointAddressesIterator* addresses,
201
1226
  const ChannelArgs& args);
202
1227
 
@@ -242,7 +1267,7 @@ class PickFirst : public LoadBalancingPolicy {
242
1267
  void MaybeFinishHappyEyeballsPass();
243
1268
 
244
1269
  // Backpointer to owning policy.
245
- RefCountedPtr<PickFirst> policy_;
1270
+ RefCountedPtr<OldPickFirst> policy_;
246
1271
 
247
1272
  ChannelArgs args_;
248
1273
 
@@ -254,9 +1279,6 @@ class PickFirst : public LoadBalancingPolicy {
254
1279
  // finished processing.
255
1280
  bool shutting_down_ = false;
256
1281
 
257
- // TODO(roth): Remove this when we remove the Happy Eyeballs experiment.
258
- bool in_transient_failure_ = false;
259
-
260
1282
  size_t num_subchannels_seen_initial_notification_ = 0;
261
1283
 
262
1284
  // The index into subchannels_ to which we are currently attempting
@@ -275,10 +1297,10 @@ class PickFirst : public LoadBalancingPolicy {
275
1297
  absl::Status last_failure_;
276
1298
  };
277
1299
 
278
- class HealthWatcher
1300
+ class HealthWatcher final
279
1301
  : public SubchannelInterface::ConnectivityStateWatcherInterface {
280
1302
  public:
281
- explicit HealthWatcher(RefCountedPtr<PickFirst> policy)
1303
+ explicit HealthWatcher(RefCountedPtr<OldPickFirst> policy)
282
1304
  : policy_(std::move(policy)) {}
283
1305
 
284
1306
  ~HealthWatcher() override {
@@ -293,10 +1315,10 @@ class PickFirst : public LoadBalancingPolicy {
293
1315
  }
294
1316
 
295
1317
  private:
296
- RefCountedPtr<PickFirst> policy_;
1318
+ RefCountedPtr<OldPickFirst> policy_;
297
1319
  };
298
1320
 
299
- class Picker : public SubchannelPicker {
1321
+ class Picker final : public SubchannelPicker {
300
1322
  public:
301
1323
  explicit Picker(RefCountedPtr<SubchannelInterface> subchannel)
302
1324
  : subchannel_(std::move(subchannel)) {}
@@ -353,7 +1375,7 @@ class PickFirst : public LoadBalancingPolicy {
353
1375
  absl::BitGen bit_gen_;
354
1376
  };
355
1377
 
356
- PickFirst::PickFirst(Args args)
1378
+ OldPickFirst::OldPickFirst(Args args)
357
1379
  : LoadBalancingPolicy(std::move(args)),
358
1380
  enable_health_watch_(
359
1381
  channel_args()
@@ -373,15 +1395,15 @@ PickFirst::PickFirst(Args args)
373
1395
  }
374
1396
  }
375
1397
 
376
- PickFirst::~PickFirst() {
1398
+ OldPickFirst::~OldPickFirst() {
377
1399
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
378
1400
  gpr_log(GPR_INFO, "Destroying Pick First %p", this);
379
1401
  }
380
- GPR_ASSERT(subchannel_list_ == nullptr);
381
- GPR_ASSERT(latest_pending_subchannel_list_ == nullptr);
1402
+ CHECK(subchannel_list_ == nullptr);
1403
+ CHECK(latest_pending_subchannel_list_ == nullptr);
382
1404
  }
383
1405
 
384
- void PickFirst::ShutdownLocked() {
1406
+ void OldPickFirst::ShutdownLocked() {
385
1407
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
386
1408
  gpr_log(GPR_INFO, "Pick First %p Shutting down", this);
387
1409
  }
@@ -391,7 +1413,7 @@ void PickFirst::ShutdownLocked() {
391
1413
  latest_pending_subchannel_list_.reset();
392
1414
  }
393
1415
 
394
- void PickFirst::ExitIdleLocked() {
1416
+ void OldPickFirst::ExitIdleLocked() {
395
1417
  if (shutdown_) return;
396
1418
  if (IsIdle()) {
397
1419
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
@@ -401,14 +1423,14 @@ void PickFirst::ExitIdleLocked() {
401
1423
  }
402
1424
  }
403
1425
 
404
- void PickFirst::ResetBackoffLocked() {
1426
+ void OldPickFirst::ResetBackoffLocked() {
405
1427
  if (subchannel_list_ != nullptr) subchannel_list_->ResetBackoffLocked();
406
1428
  if (latest_pending_subchannel_list_ != nullptr) {
407
1429
  latest_pending_subchannel_list_->ResetBackoffLocked();
408
1430
  }
409
1431
  }
410
1432
 
411
- void PickFirst::AttemptToConnectUsingLatestUpdateArgsLocked() {
1433
+ void OldPickFirst::AttemptToConnectUsingLatestUpdateArgsLocked() {
412
1434
  // Create a subchannel list from latest_update_args_.
413
1435
  EndpointAddressesIterator* addresses = nullptr;
414
1436
  if (latest_update_args_.addresses.ok()) {
@@ -422,7 +1444,7 @@ void PickFirst::AttemptToConnectUsingLatestUpdateArgsLocked() {
422
1444
  latest_pending_subchannel_list_.get());
423
1445
  }
424
1446
  latest_pending_subchannel_list_ = MakeOrphanable<SubchannelList>(
425
- RefAsSubclass<PickFirst>(), addresses, latest_update_args_.args);
1447
+ RefAsSubclass<OldPickFirst>(), addresses, latest_update_args_.args);
426
1448
  // Empty update or no valid subchannels. Put the channel in
427
1449
  // TRANSIENT_FAILURE and request re-resolution.
428
1450
  if (latest_pending_subchannel_list_->size() == 0) {
@@ -448,36 +1470,7 @@ void PickFirst::AttemptToConnectUsingLatestUpdateArgsLocked() {
448
1470
  }
449
1471
  }
450
1472
 
451
- absl::string_view GetAddressFamily(const grpc_resolved_address& address) {
452
- const char* uri_scheme = grpc_sockaddr_get_uri_scheme(&address);
453
- return absl::string_view(uri_scheme == nullptr ? "other" : uri_scheme);
454
- };
455
-
456
- // An endpoint list iterator that returns only entries for a specific
457
- // address family, as indicated by the URI scheme.
458
- class AddressFamilyIterator {
459
- public:
460
- AddressFamilyIterator(absl::string_view scheme, size_t index)
461
- : scheme_(scheme), index_(index) {}
462
-
463
- EndpointAddresses* Next(EndpointAddressesList& endpoints,
464
- std::vector<bool>* endpoints_moved) {
465
- for (; index_ < endpoints.size(); ++index_) {
466
- if (!(*endpoints_moved)[index_] &&
467
- GetAddressFamily(endpoints[index_].address()) == scheme_) {
468
- (*endpoints_moved)[index_] = true;
469
- return &endpoints[index_++];
470
- }
471
- }
472
- return nullptr;
473
- }
474
-
475
- private:
476
- absl::string_view scheme_;
477
- size_t index_;
478
- };
479
-
480
- absl::Status PickFirst::UpdateLocked(UpdateArgs args) {
1473
+ absl::Status OldPickFirst::UpdateLocked(UpdateArgs args) {
481
1474
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
482
1475
  if (args.addresses.ok()) {
483
1476
  gpr_log(GPR_INFO, "Pick First %p received update", this);
@@ -513,34 +1506,30 @@ absl::Status PickFirst::UpdateLocked(UpdateArgs args) {
513
1506
  for (const auto& endpoint : endpoints) {
514
1507
  for (const auto& address : endpoint.addresses()) {
515
1508
  flattened_endpoints.emplace_back(address, endpoint.args());
516
- if (IsPickFirstHappyEyeballsEnabled()) {
517
- absl::string_view scheme = GetAddressFamily(address);
518
- bool inserted = address_families.insert(scheme).second;
519
- if (inserted) {
520
- address_family_order.emplace_back(scheme,
521
- flattened_endpoints.size() - 1);
522
- }
1509
+ absl::string_view scheme = GetAddressFamily(address);
1510
+ bool inserted = address_families.insert(scheme).second;
1511
+ if (inserted) {
1512
+ address_family_order.emplace_back(scheme,
1513
+ flattened_endpoints.size() - 1);
523
1514
  }
524
1515
  }
525
1516
  }
526
1517
  endpoints = std::move(flattened_endpoints);
527
1518
  // Interleave addresses as per RFC-8305 section 4.
528
- if (IsPickFirstHappyEyeballsEnabled()) {
529
- EndpointAddressesList interleaved_endpoints;
530
- interleaved_endpoints.reserve(endpoints.size());
531
- std::vector<bool> endpoints_moved(endpoints.size());
532
- size_t scheme_index = 0;
533
- for (size_t i = 0; i < endpoints.size(); ++i) {
534
- EndpointAddresses* endpoint;
535
- do {
536
- auto& iterator = address_family_order[scheme_index++ %
537
- address_family_order.size()];
538
- endpoint = iterator.Next(endpoints, &endpoints_moved);
539
- } while (endpoint == nullptr);
540
- interleaved_endpoints.emplace_back(std::move(*endpoint));
541
- }
542
- endpoints = std::move(interleaved_endpoints);
1519
+ EndpointAddressesList interleaved_endpoints;
1520
+ interleaved_endpoints.reserve(endpoints.size());
1521
+ std::vector<bool> endpoints_moved(endpoints.size());
1522
+ size_t scheme_index = 0;
1523
+ for (size_t i = 0; i < endpoints.size(); ++i) {
1524
+ EndpointAddresses* endpoint;
1525
+ do {
1526
+ auto& iterator = address_family_order[scheme_index++ %
1527
+ address_family_order.size()];
1528
+ endpoint = iterator.Next(endpoints, &endpoints_moved);
1529
+ } while (endpoint == nullptr);
1530
+ interleaved_endpoints.emplace_back(std::move(*endpoint));
543
1531
  }
1532
+ endpoints = std::move(interleaved_endpoints);
544
1533
  args.addresses =
545
1534
  std::make_shared<EndpointAddressesListIterator>(std::move(endpoints));
546
1535
  }
@@ -560,14 +1549,14 @@ absl::Status PickFirst::UpdateLocked(UpdateArgs args) {
560
1549
  return status;
561
1550
  }
562
1551
 
563
- void PickFirst::UpdateState(grpc_connectivity_state state,
564
- const absl::Status& status,
565
- RefCountedPtr<SubchannelPicker> picker) {
1552
+ void OldPickFirst::UpdateState(grpc_connectivity_state state,
1553
+ const absl::Status& status,
1554
+ RefCountedPtr<SubchannelPicker> picker) {
566
1555
  state_ = state;
567
1556
  channel_control_helper()->UpdateState(state, status, std::move(picker));
568
1557
  }
569
1558
 
570
- void PickFirst::UnsetSelectedSubchannel() {
1559
+ void OldPickFirst::UnsetSelectedSubchannel() {
571
1560
  if (selected_ != nullptr && health_data_watcher_ != nullptr) {
572
1561
  selected_->subchannel()->CancelDataWatcher(health_data_watcher_);
573
1562
  }
@@ -577,10 +1566,10 @@ void PickFirst::UnsetSelectedSubchannel() {
577
1566
  }
578
1567
 
579
1568
  //
580
- // PickFirst::HealthWatcher
1569
+ // OldPickFirst::HealthWatcher
581
1570
  //
582
1571
 
583
- void PickFirst::HealthWatcher::OnConnectivityStateChange(
1572
+ void OldPickFirst::HealthWatcher::OnConnectivityStateChange(
584
1573
  grpc_connectivity_state new_state, absl::Status status) {
585
1574
  if (policy_->health_watcher_ != this) return;
586
1575
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
@@ -616,10 +1605,10 @@ void PickFirst::HealthWatcher::OnConnectivityStateChange(
616
1605
  }
617
1606
 
618
1607
  //
619
- // PickFirst::SubchannelList::SubchannelData
1608
+ // OldPickFirst::SubchannelList::SubchannelData
620
1609
  //
621
1610
 
622
- PickFirst::SubchannelList::SubchannelData::SubchannelData(
1611
+ OldPickFirst::SubchannelList::SubchannelData::SubchannelData(
623
1612
  SubchannelList* subchannel_list, size_t index,
624
1613
  RefCountedPtr<SubchannelInterface> subchannel)
625
1614
  : subchannel_list_(subchannel_list),
@@ -638,7 +1627,7 @@ PickFirst::SubchannelList::SubchannelData::SubchannelData(
638
1627
  subchannel_->WatchConnectivityState(std::move(watcher));
639
1628
  }
640
1629
 
641
- void PickFirst::SubchannelList::SubchannelData::ShutdownLocked() {
1630
+ void OldPickFirst::SubchannelList::SubchannelData::ShutdownLocked() {
642
1631
  if (subchannel_ != nullptr) {
643
1632
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
644
1633
  gpr_log(GPR_INFO,
@@ -653,9 +1642,9 @@ void PickFirst::SubchannelList::SubchannelData::ShutdownLocked() {
653
1642
  }
654
1643
  }
655
1644
 
656
- void PickFirst::SubchannelList::SubchannelData::OnConnectivityStateChange(
1645
+ void OldPickFirst::SubchannelList::SubchannelData::OnConnectivityStateChange(
657
1646
  grpc_connectivity_state new_state, absl::Status status) {
658
- PickFirst* p = subchannel_list_->policy_.get();
1647
+ OldPickFirst* p = subchannel_list_->policy_.get();
659
1648
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
660
1649
  gpr_log(
661
1650
  GPR_INFO,
@@ -675,17 +1664,19 @@ void PickFirst::SubchannelList::SubchannelData::OnConnectivityStateChange(
675
1664
  p->latest_pending_subchannel_list_.get());
676
1665
  }
677
1666
  if (subchannel_list_->shutting_down_ || pending_watcher_ == nullptr) return;
1667
+ auto& stats_plugins = subchannel_list_->policy_->channel_control_helper()
1668
+ ->GetStatsPluginGroup();
678
1669
  // The notification must be for a subchannel in either the current or
679
1670
  // latest pending subchannel lists.
680
- GPR_ASSERT(subchannel_list_ == p->subchannel_list_.get() ||
681
- subchannel_list_ == p->latest_pending_subchannel_list_.get());
682
- GPR_ASSERT(new_state != GRPC_CHANNEL_SHUTDOWN);
1671
+ CHECK(subchannel_list_ == p->subchannel_list_.get() ||
1672
+ subchannel_list_ == p->latest_pending_subchannel_list_.get());
1673
+ CHECK(new_state != GRPC_CHANNEL_SHUTDOWN);
683
1674
  absl::optional<grpc_connectivity_state> old_state = connectivity_state_;
684
1675
  connectivity_state_ = new_state;
685
1676
  connectivity_status_ = std::move(status);
686
1677
  // Handle updates for the currently selected subchannel.
687
1678
  if (p->selected_ == this) {
688
- GPR_ASSERT(subchannel_list_ == p->subchannel_list_.get());
1679
+ CHECK(subchannel_list_ == p->subchannel_list_.get());
689
1680
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
690
1681
  gpr_log(GPR_INFO,
691
1682
  "Pick First %p selected subchannel connectivity changed to %s", p,
@@ -693,6 +1684,9 @@ void PickFirst::SubchannelList::SubchannelData::OnConnectivityStateChange(
693
1684
  }
694
1685
  // Any state change is considered to be a failure of the existing
695
1686
  // connection.
1687
+ stats_plugins.AddCounter(
1688
+ kMetricDisconnections, 1,
1689
+ {subchannel_list_->policy_->channel_control_helper()->GetTarget()}, {});
696
1690
  // TODO(roth): We could check the connectivity states of all the
697
1691
  // subchannels here, just in case one of them happens to be READY,
698
1692
  // and we could switch to that rather than going IDLE.
@@ -712,9 +1706,7 @@ void PickFirst::SubchannelList::SubchannelData::OnConnectivityStateChange(
712
1706
  p->UnsetSelectedSubchannel();
713
1707
  p->subchannel_list_ = std::move(p->latest_pending_subchannel_list_);
714
1708
  // Set our state to that of the pending subchannel list.
715
- if (IsPickFirstHappyEyeballsEnabled()
716
- ? p->subchannel_list_->IsHappyEyeballsPassComplete()
717
- : p->subchannel_list_->in_transient_failure_) {
1709
+ if (p->subchannel_list_->IsHappyEyeballsPassComplete()) {
718
1710
  status = absl::UnavailableError(absl::StrCat(
719
1711
  "selected subchannel failed; switching to pending update; "
720
1712
  "last failure: ",
@@ -746,8 +1738,15 @@ void PickFirst::SubchannelList::SubchannelData::OnConnectivityStateChange(
746
1738
  // select in place of the current one.
747
1739
  // If the subchannel is READY, use it.
748
1740
  if (new_state == GRPC_CHANNEL_READY) {
749
- if (!IsPickFirstHappyEyeballsEnabled()) {
750
- subchannel_list_->in_transient_failure_ = false;
1741
+ // We consider it a successful connection attempt only if the
1742
+ // previous state was CONNECTING. In particular, we don't want to
1743
+ // increment this counter if we got a new address list and found the
1744
+ // existing connection already in state READY.
1745
+ if (old_state == GRPC_CHANNEL_CONNECTING) {
1746
+ stats_plugins.AddCounter(
1747
+ kMetricConnectionAttemptsSucceeded, 1,
1748
+ {subchannel_list_->policy_->channel_control_helper()->GetTarget()},
1749
+ {});
751
1750
  }
752
1751
  ProcessUnselectedReadyLocked();
753
1752
  return;
@@ -771,20 +1770,15 @@ void PickFirst::SubchannelList::SubchannelData::OnConnectivityStateChange(
771
1770
  // see its initial notification. Start trying to connect, starting
772
1771
  // with the first subchannel.
773
1772
  if (!old_state.has_value()) {
774
- if (!IsPickFirstHappyEyeballsEnabled()) {
775
- subchannel_list_->subchannels_.front().ReactToConnectivityStateLocked();
776
- return;
777
- }
778
1773
  subchannel_list_->StartConnectingNextSubchannel();
779
1774
  return;
780
1775
  }
781
- if (!IsPickFirstHappyEyeballsEnabled()) {
782
- // Ignore any other updates for subchannels we're not currently trying to
783
- // connect to.
784
- if (index_ != subchannel_list_->attempting_index_) return;
785
- // React to the connectivity state.
786
- ReactToConnectivityStateLocked();
787
- return;
1776
+ // We've already started trying to connect. Any subchannel that
1777
+ // reports TF is a connection attempt failure.
1778
+ if (new_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
1779
+ stats_plugins.AddCounter(
1780
+ kMetricConnectionAttemptsFailed, 1,
1781
+ {subchannel_list_->policy_->channel_control_helper()->GetTarget()}, {});
788
1782
  }
789
1783
  // Otherwise, process connectivity state change.
790
1784
  switch (*connectivity_state_) {
@@ -855,109 +1849,17 @@ void PickFirst::SubchannelList::SubchannelData::OnConnectivityStateChange(
855
1849
  }
856
1850
  }
857
1851
 
858
- void PickFirst::SubchannelList::SubchannelData::
859
- ReactToConnectivityStateLocked() {
860
- PickFirst* p = subchannel_list_->policy_.get();
861
- // Otherwise, process connectivity state.
862
- switch (connectivity_state_.value()) {
863
- case GRPC_CHANNEL_READY:
864
- // Already handled this case above, so this should not happen.
865
- GPR_UNREACHABLE_CODE(break);
866
- case GRPC_CHANNEL_TRANSIENT_FAILURE: {
867
- // Find the next subchannel not in state TRANSIENT_FAILURE.
868
- // We skip subchannels in state TRANSIENT_FAILURE to avoid a
869
- // large recursion that could overflow the stack.
870
- SubchannelData* found_subchannel = nullptr;
871
- for (size_t next_index = index_ + 1;
872
- next_index < subchannel_list_->size(); ++next_index) {
873
- SubchannelData* sc = &subchannel_list_->subchannels_[next_index];
874
- GPR_ASSERT(sc->connectivity_state_.has_value());
875
- if (sc->connectivity_state_ != GRPC_CHANNEL_TRANSIENT_FAILURE) {
876
- subchannel_list_->attempting_index_ = next_index;
877
- found_subchannel = sc;
878
- break;
879
- }
880
- }
881
- // If we found another subchannel in the list not in state
882
- // TRANSIENT_FAILURE, trigger the right behavior for that subchannel.
883
- if (found_subchannel != nullptr) {
884
- found_subchannel->ReactToConnectivityStateLocked();
885
- break;
886
- }
887
- // We didn't find another subchannel not in state TRANSIENT_FAILURE,
888
- // so report TRANSIENT_FAILURE and wait for the first subchannel
889
- // in the list to report IDLE before continuing.
890
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
891
- gpr_log(GPR_INFO,
892
- "Pick First %p subchannel list %p failed to connect to "
893
- "all subchannels",
894
- p, subchannel_list_);
895
- }
896
- subchannel_list_->attempting_index_ = 0;
897
- subchannel_list_->in_transient_failure_ = true;
898
- // In case 2, swap to the new subchannel list. This means reporting
899
- // TRANSIENT_FAILURE and dropping the existing (working) connection,
900
- // but we can't ignore what the control plane has told us.
901
- if (subchannel_list_ == p->latest_pending_subchannel_list_.get()) {
902
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
903
- gpr_log(GPR_INFO,
904
- "Pick First %p promoting pending subchannel list %p to "
905
- "replace %p",
906
- p, p->latest_pending_subchannel_list_.get(),
907
- p->subchannel_list_.get());
908
- }
909
- p->UnsetSelectedSubchannel();
910
- p->subchannel_list_ = std::move(p->latest_pending_subchannel_list_);
911
- }
912
- // If this is the current subchannel list (either because we were
913
- // in case 1 or because we were in case 2 and just promoted it to
914
- // be the current list), re-resolve and report new state.
915
- if (subchannel_list_ == p->subchannel_list_.get()) {
916
- p->channel_control_helper()->RequestReresolution();
917
- absl::Status status = absl::UnavailableError(absl::StrCat(
918
- (p->omit_status_message_prefix_
919
- ? ""
920
- : "failed to connect to all addresses; last error: "),
921
- connectivity_status_.ToString()));
922
- p->UpdateState(GRPC_CHANNEL_TRANSIENT_FAILURE, status,
923
- MakeRefCounted<TransientFailurePicker>(status));
924
- }
925
- // If the first subchannel is already IDLE, trigger the next connection
926
- // attempt immediately. Otherwise, we'll wait for it to report
927
- // its own connectivity state change.
928
- auto& subchannel0 = subchannel_list_->subchannels_.front();
929
- if (subchannel0.connectivity_state_ == GRPC_CHANNEL_IDLE) {
930
- subchannel0.subchannel_->RequestConnection();
931
- }
932
- break;
933
- }
934
- case GRPC_CHANNEL_IDLE:
935
- subchannel_->RequestConnection();
936
- break;
937
- case GRPC_CHANNEL_CONNECTING:
938
- // Only update connectivity state in case 1, and only if we're not
939
- // already in TRANSIENT_FAILURE.
940
- if (subchannel_list_ == p->subchannel_list_.get() &&
941
- p->state_ != GRPC_CHANNEL_TRANSIENT_FAILURE) {
942
- p->UpdateState(GRPC_CHANNEL_CONNECTING, absl::Status(),
943
- MakeRefCounted<QueuePicker>(nullptr));
944
- }
945
- break;
946
- case GRPC_CHANNEL_SHUTDOWN:
947
- GPR_UNREACHABLE_CODE(break);
948
- }
949
- }
950
-
951
- void PickFirst::SubchannelList::SubchannelData::RequestConnectionWithTimer() {
952
- GPR_ASSERT(connectivity_state_.has_value());
1852
+ void OldPickFirst::SubchannelList::SubchannelData::
1853
+ RequestConnectionWithTimer() {
1854
+ CHECK(connectivity_state_.has_value());
953
1855
  if (connectivity_state_ == GRPC_CHANNEL_IDLE) {
954
1856
  subchannel_->RequestConnection();
955
1857
  } else {
956
- GPR_ASSERT(connectivity_state_ == GRPC_CHANNEL_CONNECTING);
1858
+ CHECK(connectivity_state_ == GRPC_CHANNEL_CONNECTING);
957
1859
  }
958
1860
  // If this is not the last subchannel in the list, start the timer.
959
1861
  if (index_ != subchannel_list_->size() - 1) {
960
- PickFirst* p = subchannel_list_->policy_.get();
1862
+ OldPickFirst* p = subchannel_list_->policy_.get();
961
1863
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
962
1864
  gpr_log(GPR_INFO,
963
1865
  "Pick First %p subchannel list %p: starting Connection "
@@ -995,8 +1897,9 @@ void PickFirst::SubchannelList::SubchannelData::RequestConnectionWithTimer() {
995
1897
  }
996
1898
  }
997
1899
 
998
- void PickFirst::SubchannelList::SubchannelData::ProcessUnselectedReadyLocked() {
999
- PickFirst* p = subchannel_list_->policy_.get();
1900
+ void OldPickFirst::SubchannelList::SubchannelData::
1901
+ ProcessUnselectedReadyLocked() {
1902
+ OldPickFirst* p = subchannel_list_->policy_.get();
1000
1903
  // Cancel Happy Eyeballs timer, if any.
1001
1904
  if (subchannel_list_->timer_handle_.has_value()) {
1002
1905
  p->channel_control_helper()->GetEventEngine()->Cancel(
@@ -1011,8 +1914,8 @@ void PickFirst::SubchannelList::SubchannelData::ProcessUnselectedReadyLocked() {
1011
1914
  // for a subchannel in p->latest_pending_subchannel_list_. The
1012
1915
  // goal here is to find a subchannel from the update that we can
1013
1916
  // select in place of the current one.
1014
- GPR_ASSERT(subchannel_list_ == p->subchannel_list_.get() ||
1015
- subchannel_list_ == p->latest_pending_subchannel_list_.get());
1917
+ CHECK(subchannel_list_ == p->subchannel_list_.get() ||
1918
+ subchannel_list_ == p->latest_pending_subchannel_list_.get());
1016
1919
  // Case 2. Promote p->latest_pending_subchannel_list_ to p->subchannel_list_.
1017
1920
  if (subchannel_list_ == p->latest_pending_subchannel_list_.get()) {
1018
1921
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
@@ -1022,6 +1925,7 @@ void PickFirst::SubchannelList::SubchannelData::ProcessUnselectedReadyLocked() {
1022
1925
  p, p->latest_pending_subchannel_list_.get(),
1023
1926
  p->subchannel_list_.get());
1024
1927
  }
1928
+ p->UnsetSelectedSubchannel();
1025
1929
  p->subchannel_list_ = std::move(p->latest_pending_subchannel_list_);
1026
1930
  }
1027
1931
  // Cases 1 and 2.
@@ -1039,7 +1943,7 @@ void PickFirst::SubchannelList::SubchannelData::ProcessUnselectedReadyLocked() {
1039
1943
  gpr_log(GPR_INFO, "[PF %p] starting health watch", p);
1040
1944
  }
1041
1945
  auto watcher = std::make_unique<HealthWatcher>(
1042
- p->RefAsSubclass<PickFirst>(DEBUG_LOCATION, "HealthWatcher"));
1946
+ p->RefAsSubclass<OldPickFirst>(DEBUG_LOCATION, "HealthWatcher"));
1043
1947
  p->health_watcher_ = watcher.get();
1044
1948
  auto health_data_watcher = MakeHealthCheckWatcher(
1045
1949
  p->work_serializer(), subchannel_list_->args_, std::move(watcher));
@@ -1058,12 +1962,12 @@ void PickFirst::SubchannelList::SubchannelData::ProcessUnselectedReadyLocked() {
1058
1962
  }
1059
1963
 
1060
1964
  //
1061
- // PickFirst::SubchannelList
1965
+ // OldPickFirst::SubchannelList
1062
1966
  //
1063
1967
 
1064
- PickFirst::SubchannelList::SubchannelList(RefCountedPtr<PickFirst> policy,
1065
- EndpointAddressesIterator* addresses,
1066
- const ChannelArgs& args)
1968
+ OldPickFirst::SubchannelList::SubchannelList(
1969
+ RefCountedPtr<OldPickFirst> policy, EndpointAddressesIterator* addresses,
1970
+ const ChannelArgs& args)
1067
1971
  : InternallyRefCounted<SubchannelList>(
1068
1972
  GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace) ? "SubchannelList"
1069
1973
  : nullptr),
@@ -1078,7 +1982,7 @@ PickFirst::SubchannelList::SubchannelList(RefCountedPtr<PickFirst> policy,
1078
1982
  if (addresses == nullptr) return;
1079
1983
  // Create a subchannel for each address.
1080
1984
  addresses->ForEach([&](const EndpointAddresses& address) {
1081
- GPR_ASSERT(address.addresses().size() == 1);
1985
+ CHECK_EQ(address.addresses().size(), 1u);
1082
1986
  RefCountedPtr<SubchannelInterface> subchannel =
1083
1987
  policy_->channel_control_helper()->CreateSubchannel(
1084
1988
  address.address(), address.args(), args_);
@@ -1102,19 +2006,19 @@ PickFirst::SubchannelList::SubchannelList(RefCountedPtr<PickFirst> policy,
1102
2006
  });
1103
2007
  }
1104
2008
 
1105
- PickFirst::SubchannelList::~SubchannelList() {
2009
+ OldPickFirst::SubchannelList::~SubchannelList() {
1106
2010
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
1107
2011
  gpr_log(GPR_INFO, "[PF %p] Destroying subchannel_list %p", policy_.get(),
1108
2012
  this);
1109
2013
  }
1110
2014
  }
1111
2015
 
1112
- void PickFirst::SubchannelList::Orphan() {
2016
+ void OldPickFirst::SubchannelList::Orphan() {
1113
2017
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_pick_first_trace)) {
1114
2018
  gpr_log(GPR_INFO, "[PF %p] Shutting down subchannel_list %p", policy_.get(),
1115
2019
  this);
1116
2020
  }
1117
- GPR_ASSERT(!shutting_down_);
2021
+ CHECK(!shutting_down_);
1118
2022
  shutting_down_ = true;
1119
2023
  for (auto& sd : subchannels_) {
1120
2024
  sd.ShutdownLocked();
@@ -1125,19 +2029,19 @@ void PickFirst::SubchannelList::Orphan() {
1125
2029
  Unref();
1126
2030
  }
1127
2031
 
1128
- void PickFirst::SubchannelList::ResetBackoffLocked() {
2032
+ void OldPickFirst::SubchannelList::ResetBackoffLocked() {
1129
2033
  for (auto& sd : subchannels_) {
1130
2034
  sd.ResetBackoffLocked();
1131
2035
  }
1132
2036
  }
1133
2037
 
1134
- void PickFirst::SubchannelList::StartConnectingNextSubchannel() {
2038
+ void OldPickFirst::SubchannelList::StartConnectingNextSubchannel() {
1135
2039
  // Find the next subchannel not in state TRANSIENT_FAILURE.
1136
2040
  // We skip subchannels in state TRANSIENT_FAILURE to avoid a
1137
2041
  // large recursion that could overflow the stack.
1138
2042
  for (; attempting_index_ < size(); ++attempting_index_) {
1139
2043
  SubchannelData* sc = &subchannels_[attempting_index_];
1140
- GPR_ASSERT(sc->connectivity_state().has_value());
2044
+ CHECK(sc->connectivity_state().has_value());
1141
2045
  if (sc->connectivity_state() != GRPC_CHANNEL_TRANSIENT_FAILURE) {
1142
2046
  // Found a subchannel not in TRANSIENT_FAILURE, so trigger a
1143
2047
  // connection attempt.
@@ -1150,7 +2054,7 @@ void PickFirst::SubchannelList::StartConnectingNextSubchannel() {
1150
2054
  MaybeFinishHappyEyeballsPass();
1151
2055
  }
1152
2056
 
1153
- void PickFirst::SubchannelList::MaybeFinishHappyEyeballsPass() {
2057
+ void OldPickFirst::SubchannelList::MaybeFinishHappyEyeballsPass() {
1154
2058
  // Make sure all subchannels have finished a connection attempt before
1155
2059
  // we consider the Happy Eyeballs pass complete.
1156
2060
  if (!IsHappyEyeballsPassComplete()) return;
@@ -1206,10 +2110,13 @@ void PickFirst::SubchannelList::MaybeFinishHappyEyeballsPass() {
1206
2110
  // factory
1207
2111
  //
1208
2112
 
1209
- class PickFirstFactory : public LoadBalancingPolicyFactory {
2113
+ class PickFirstFactory final : public LoadBalancingPolicyFactory {
1210
2114
  public:
1211
2115
  OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
1212
2116
  LoadBalancingPolicy::Args args) const override {
2117
+ if (!IsPickFirstNewEnabled()) {
2118
+ return MakeOrphanable<OldPickFirst>(std::move(args));
2119
+ }
1213
2120
  return MakeOrphanable<PickFirst>(std::move(args));
1214
2121
  }
1215
2122