grpc 1.52.2 → 1.53.0.pre2

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 (890) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +50 -5
  3. data/include/grpc/event_engine/event_engine.h +24 -2
  4. data/include/grpc/event_engine/slice_buffer.h +13 -1
  5. data/include/grpc/impl/grpc_types.h +3 -0
  6. data/include/grpc/support/time.h +6 -4
  7. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +148 -0
  8. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +52 -0
  9. data/src/core/ext/filters/backend_metrics/backend_metric_provider.h +29 -0
  10. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +3 -3
  11. data/src/core/ext/filters/channel_idle/idle_filter_state.h +3 -3
  12. data/src/core/ext/filters/client_channel/backend_metric.h +3 -3
  13. data/src/core/ext/filters/client_channel/backup_poller.h +3 -3
  14. data/src/core/ext/filters/client_channel/channel_connectivity.cc +1 -1
  15. data/src/core/ext/filters/client_channel/client_channel.cc +29 -33
  16. data/src/core/ext/filters/client_channel/client_channel.h +3 -3
  17. data/src/core/ext/filters/client_channel/client_channel_channelz.h +3 -3
  18. data/src/core/ext/filters/client_channel/client_channel_factory.h +3 -3
  19. data/src/core/ext/filters/client_channel/client_channel_service_config.h +3 -3
  20. data/src/core/ext/filters/client_channel/config_selector.h +3 -3
  21. data/src/core/ext/filters/client_channel/connector.h +8 -4
  22. data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
  23. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -3
  24. data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
  25. data/src/core/ext/filters/client_channel/http_proxy.h +3 -3
  26. data/src/core/ext/filters/client_channel/lb_call_state_internal.h +3 -3
  27. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +3 -3
  28. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +3 -3
  29. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +3 -3
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +14 -7
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +3 -3
  32. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +1 -0
  33. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +3 -3
  34. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +3 -3
  35. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +3 -3
  36. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +3 -3
  37. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +1 -78
  38. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +3 -3
  39. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric_internal.h +117 -0
  40. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +3 -3
  41. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +3 -3
  42. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +1 -0
  43. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +3 -3
  44. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +128 -0
  45. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.h +71 -0
  46. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +972 -0
  47. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +2 -2
  48. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +3 -6
  49. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.h +3 -3
  50. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +3 -3
  51. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +12 -7
  52. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +275 -107
  53. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +10 -3
  54. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +5 -0
  55. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +3 -3
  56. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +3 -3
  57. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +6 -1
  58. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +1 -2
  59. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +3 -3
  60. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +3 -3
  61. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +3 -3
  62. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +1 -0
  63. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +3 -3
  64. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +3 -7
  65. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -3
  66. data/src/core/ext/filters/client_channel/retry_filter.cc +10 -13
  67. data/src/core/ext/filters/client_channel/retry_filter.h +3 -3
  68. data/src/core/ext/filters/client_channel/retry_service_config.h +3 -3
  69. data/src/core/ext/filters/client_channel/retry_throttle.h +3 -3
  70. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +4 -4
  71. data/src/core/ext/filters/client_channel/subchannel.cc +5 -1
  72. data/src/core/ext/filters/client_channel/subchannel.h +3 -3
  73. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +3 -3
  74. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +3 -3
  75. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +3 -3
  76. data/src/core/ext/filters/deadline/deadline_filter.cc +40 -48
  77. data/src/core/ext/filters/deadline/deadline_filter.h +6 -10
  78. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +3 -3
  79. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +3 -3
  80. data/src/core/ext/filters/http/client/http_client_filter.cc +26 -21
  81. data/src/core/ext/filters/http/client/http_client_filter.h +3 -3
  82. data/src/core/ext/filters/http/client_authority_filter.h +3 -3
  83. data/src/core/ext/filters/http/message_compress/compression_filter.cc +109 -117
  84. data/src/core/ext/filters/http/message_compress/compression_filter.h +17 -10
  85. data/src/core/ext/filters/http/server/http_server_filter.cc +25 -24
  86. data/src/core/ext/filters/http/server/http_server_filter.h +3 -3
  87. data/src/core/ext/filters/message_size/message_size_filter.cc +2 -1
  88. data/src/core/ext/filters/message_size/message_size_filter.h +3 -3
  89. data/src/core/ext/filters/rbac/rbac_filter.cc +4 -3
  90. data/src/core/ext/filters/rbac/rbac_filter.h +3 -3
  91. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +3 -3
  92. data/src/core/ext/filters/server_config_selector/server_config_selector.h +3 -3
  93. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +3 -3
  94. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +27 -37
  95. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +5 -5
  96. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +3 -3
  97. data/src/core/ext/transport/chttp2/alpn/alpn.h +3 -3
  98. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -7
  99. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +3 -3
  100. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +1 -0
  101. data/src/core/ext/transport/chttp2/server/chttp2_server.h +3 -3
  102. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +3 -3
  103. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +3 -3
  104. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +195 -111
  105. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -3
  106. data/src/core/ext/transport/chttp2/transport/context_list.h +3 -3
  107. data/src/core/ext/transport/chttp2/transport/decode_huff.h +3 -3
  108. data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -0
  109. data/src/core/ext/transport/chttp2/transport/flow_control.h +3 -3
  110. data/src/core/ext/transport/chttp2/transport/frame.h +3 -3
  111. data/src/core/ext/transport/chttp2/transport/frame_data.cc +2 -0
  112. data/src/core/ext/transport/chttp2/transport/frame_data.h +3 -3
  113. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -0
  114. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -3
  115. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +1 -0
  116. data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -3
  117. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -0
  118. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -3
  119. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +1 -0
  120. data/src/core/ext/transport/chttp2/transport/frame_settings.h +3 -3
  121. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +2 -0
  122. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -3
  123. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +3 -3
  124. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +3 -3
  125. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +3 -3
  126. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +17 -406
  127. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +3 -3
  128. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +1 -0
  129. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +3 -3
  130. data/src/core/ext/transport/chttp2/transport/http2_settings.h +3 -3
  131. data/src/core/ext/transport/chttp2/transport/http_trace.h +3 -3
  132. data/src/core/ext/transport/chttp2/transport/huffsyms.h +3 -3
  133. data/src/core/ext/transport/chttp2/transport/internal.h +28 -23
  134. data/src/core/ext/transport/chttp2/transport/parsing.cc +111 -31
  135. data/src/core/ext/transport/chttp2/transport/stream_map.h +3 -3
  136. data/src/core/ext/transport/chttp2/transport/varint.h +3 -3
  137. data/src/core/ext/transport/chttp2/transport/writing.cc +9 -8
  138. data/src/core/ext/transport/inproc/inproc_transport.h +3 -3
  139. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +3 -2
  140. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +9 -0
  141. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +38 -2
  142. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +185 -0
  143. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +7 -3
  144. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +44 -0
  145. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +16 -25
  146. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +48 -74
  147. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +30 -7
  148. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +137 -0
  149. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +15 -12
  150. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +83 -51
  151. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +3 -2
  152. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +15 -0
  153. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +17 -2
  154. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +61 -0
  155. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +11 -5
  156. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +37 -6
  157. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +5 -3
  158. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +24 -0
  159. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +5 -3
  160. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +22 -0
  161. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +6 -3
  162. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +24 -0
  163. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +24 -5
  164. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +50 -0
  165. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +57 -16
  166. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +254 -17
  167. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +3 -2
  168. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +9 -0
  169. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +3 -2
  170. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +9 -0
  171. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +7 -6
  172. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +21 -12
  173. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +6 -3
  174. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +23 -0
  175. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +10 -7
  176. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +42 -12
  177. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +54 -0
  178. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +188 -0
  179. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.c +111 -0
  180. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +444 -0
  181. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +7 -3
  182. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +24 -0
  183. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +8 -6
  184. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +31 -9
  185. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +5 -3
  186. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +24 -0
  187. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.c +47 -0
  188. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.h +113 -0
  189. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.c +43 -0
  190. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.h +114 -0
  191. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +3 -1
  192. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +54 -53
  193. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +34 -13
  194. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +10 -0
  195. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +195 -187
  196. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +232 -224
  197. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +0 -5
  198. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +95 -75
  199. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +5 -0
  200. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +94 -93
  201. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +81 -75
  202. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +189 -187
  203. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +7 -3
  204. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +5 -0
  205. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +71 -66
  206. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +137 -133
  207. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +16 -12
  208. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +140 -133
  209. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +81 -70
  210. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +5 -0
  211. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +771 -741
  212. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -0
  213. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +16 -14
  214. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +14 -13
  215. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +20 -18
  216. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +53 -42
  217. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +363 -356
  218. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +149 -145
  219. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +16 -13
  220. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.c +48 -0
  221. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.h +35 -0
  222. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +14 -14
  223. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.c +40 -0
  224. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.h +40 -0
  225. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +10 -9
  226. data/src/core/ext/xds/certificate_provider_store.h +3 -3
  227. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +1 -0
  228. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +3 -3
  229. data/src/core/ext/xds/upb_utils.h +3 -3
  230. data/src/core/ext/xds/xds_api.h +3 -3
  231. data/src/core/ext/xds/xds_bootstrap.h +3 -3
  232. data/src/core/ext/xds/xds_bootstrap_grpc.cc +1 -0
  233. data/src/core/ext/xds/xds_bootstrap_grpc.h +3 -3
  234. data/src/core/ext/xds/xds_certificate_provider.h +3 -3
  235. data/src/core/ext/xds/xds_channel_args.h +3 -3
  236. data/src/core/ext/xds/xds_channel_stack_modifier.h +3 -3
  237. data/src/core/ext/xds/xds_client.cc +8 -3
  238. data/src/core/ext/xds/xds_client.h +3 -3
  239. data/src/core/ext/xds/xds_client_grpc.cc +0 -1
  240. data/src/core/ext/xds/xds_client_grpc.h +3 -3
  241. data/src/core/ext/xds/xds_client_stats.h +4 -3
  242. data/src/core/ext/xds/xds_cluster.cc +11 -7
  243. data/src/core/ext/xds/xds_cluster.h +6 -6
  244. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +3 -3
  245. data/src/core/ext/xds/xds_common_types.cc +1 -0
  246. data/src/core/ext/xds/xds_common_types.h +3 -3
  247. data/src/core/ext/xds/xds_endpoint.cc +1 -1
  248. data/src/core/ext/xds/xds_endpoint.h +3 -3
  249. data/src/core/ext/xds/xds_health_status.h +30 -3
  250. data/src/core/ext/xds/xds_http_fault_filter.h +3 -3
  251. data/src/core/ext/xds/xds_http_filters.cc +1 -1
  252. data/src/core/ext/xds/xds_http_filters.h +3 -3
  253. data/src/core/ext/xds/xds_http_rbac_filter.h +3 -3
  254. data/src/core/ext/xds/xds_http_stateful_session_filter.h +3 -3
  255. data/src/core/ext/xds/xds_lb_policy_registry.cc +95 -0
  256. data/src/core/ext/xds/xds_lb_policy_registry.h +3 -3
  257. data/src/core/ext/xds/xds_listener.cc +1 -0
  258. data/src/core/ext/xds/xds_listener.h +3 -3
  259. data/src/core/ext/xds/xds_resource_type.h +3 -3
  260. data/src/core/ext/xds/xds_resource_type_impl.h +3 -3
  261. data/src/core/ext/xds/xds_route_config.cc +6 -0
  262. data/src/core/ext/xds/xds_route_config.h +3 -3
  263. data/src/core/ext/xds/xds_routing.h +3 -3
  264. data/src/core/ext/xds/xds_transport.h +3 -3
  265. data/src/core/ext/xds/xds_transport_grpc.h +3 -3
  266. data/src/core/lib/address_utils/parse_address.h +3 -3
  267. data/src/core/lib/address_utils/sockaddr_utils.cc +1 -0
  268. data/src/core/lib/address_utils/sockaddr_utils.h +3 -3
  269. data/src/core/lib/avl/avl.h +3 -3
  270. data/src/core/lib/backoff/backoff.h +3 -3
  271. data/src/core/lib/channel/call_finalization.h +3 -3
  272. data/src/core/lib/channel/call_tracer.h +3 -3
  273. data/src/core/lib/channel/channel_args.cc +1 -0
  274. data/src/core/lib/channel/channel_args.h +11 -5
  275. data/src/core/lib/channel/channel_args_preconditioning.h +3 -3
  276. data/src/core/lib/channel/channel_fwd.h +3 -3
  277. data/src/core/lib/channel/channel_stack.cc +1 -2
  278. data/src/core/lib/channel/channel_stack.h +4 -4
  279. data/src/core/lib/channel/channel_stack_builder.h +3 -3
  280. data/src/core/lib/channel/channel_stack_builder_impl.cc +14 -1
  281. data/src/core/lib/channel/channel_stack_builder_impl.h +3 -3
  282. data/src/core/lib/channel/channel_trace.h +3 -3
  283. data/src/core/lib/channel/channelz.h +3 -3
  284. data/src/core/lib/channel/channelz_registry.h +3 -3
  285. data/src/core/lib/channel/connected_channel.cc +883 -354
  286. data/src/core/lib/channel/connected_channel.h +3 -3
  287. data/src/core/lib/channel/context.h +7 -3
  288. data/src/core/lib/channel/promise_based_filter.cc +509 -259
  289. data/src/core/lib/channel/promise_based_filter.h +118 -43
  290. data/src/core/lib/channel/status_util.h +3 -3
  291. data/src/core/lib/compression/compression_internal.h +3 -3
  292. data/src/core/lib/compression/message_compress.h +3 -3
  293. data/src/core/lib/config/core_configuration.h +3 -3
  294. data/src/core/lib/debug/event_log.h +3 -3
  295. data/src/core/lib/debug/histogram_view.h +3 -3
  296. data/src/core/lib/debug/stats.h +3 -3
  297. data/src/core/lib/debug/stats_data.cc +66 -65
  298. data/src/core/lib/debug/stats_data.h +42 -33
  299. data/src/core/lib/debug/trace.h +4 -26
  300. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +5 -0
  301. data/src/core/lib/event_engine/channel_args_endpoint_config.h +3 -3
  302. data/src/core/lib/event_engine/common_closures.h +3 -3
  303. data/src/core/lib/event_engine/default_event_engine.cc +9 -4
  304. data/src/core/lib/event_engine/default_event_engine.h +30 -6
  305. data/src/core/lib/event_engine/default_event_engine_factory.h +3 -3
  306. data/src/core/lib/event_engine/event_engine.cc +25 -0
  307. data/src/core/lib/event_engine/executor/executor.h +3 -3
  308. data/src/core/lib/event_engine/forkable.cc +11 -6
  309. data/src/core/lib/event_engine/forkable.h +3 -3
  310. data/src/core/lib/event_engine/handle_containers.h +10 -3
  311. data/src/core/lib/event_engine/poller.h +3 -3
  312. data/src/core/lib/event_engine/posix.h +158 -0
  313. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +44 -16
  314. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +14 -4
  315. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +6 -7
  316. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +3 -3
  317. data/src/core/lib/event_engine/posix_engine/event_poller.h +3 -3
  318. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +3 -3
  319. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +3 -3
  320. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +3 -3
  321. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +52 -55
  322. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +46 -13
  323. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +82 -12
  324. data/src/core/lib/event_engine/posix_engine/posix_engine.h +23 -9
  325. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +3 -3
  326. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +60 -7
  327. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +65 -14
  328. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +0 -1
  329. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +6 -6
  330. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +3 -3
  331. data/src/core/lib/event_engine/posix_engine/timer.h +3 -3
  332. data/src/core/lib/event_engine/posix_engine/timer_heap.h +3 -3
  333. data/src/core/lib/event_engine/posix_engine/timer_manager.h +3 -3
  334. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +3 -3
  335. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +3 -3
  336. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +3 -3
  337. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +3 -3
  338. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +3 -3
  339. data/src/core/lib/event_engine/resolved_address.cc +19 -0
  340. data/src/core/lib/event_engine/resolved_address_internal.h +34 -0
  341. data/src/core/lib/event_engine/shim.cc +56 -0
  342. data/src/core/lib/event_engine/shim.h +33 -0
  343. data/src/core/lib/event_engine/slice.cc +1 -1
  344. data/src/core/lib/event_engine/tcp_socket_utils.cc +18 -2
  345. data/src/core/lib/event_engine/tcp_socket_utils.h +8 -3
  346. data/src/core/lib/event_engine/thread_local.cc +29 -0
  347. data/src/core/lib/event_engine/thread_local.h +32 -0
  348. data/src/core/lib/event_engine/thread_pool.cc +41 -65
  349. data/src/core/lib/event_engine/thread_pool.h +21 -17
  350. data/src/core/lib/event_engine/time_util.h +3 -3
  351. data/src/core/lib/event_engine/trace.cc +6 -0
  352. data/src/core/lib/event_engine/trace.h +16 -3
  353. data/src/core/lib/event_engine/utils.cc +2 -2
  354. data/src/core/lib/event_engine/utils.h +12 -4
  355. data/src/core/lib/event_engine/windows/iocp.cc +24 -40
  356. data/src/core/lib/event_engine/windows/iocp.h +3 -3
  357. data/src/core/lib/event_engine/windows/win_socket.cc +56 -33
  358. data/src/core/lib/event_engine/windows/win_socket.h +34 -25
  359. data/src/core/lib/event_engine/windows/windows_endpoint.cc +331 -0
  360. data/src/core/lib/event_engine/windows/windows_endpoint.h +103 -0
  361. data/src/core/lib/event_engine/windows/windows_engine.cc +243 -20
  362. data/src/core/lib/event_engine/windows/windows_engine.h +62 -23
  363. data/src/core/lib/experiments/config.cc +16 -1
  364. data/src/core/lib/experiments/config.h +13 -3
  365. data/src/core/lib/experiments/experiments.cc +14 -8
  366. data/src/core/lib/experiments/experiments.h +80 -21
  367. data/src/core/lib/gpr/alloc.h +3 -3
  368. data/src/core/lib/gpr/spinlock.h +3 -3
  369. data/src/core/lib/gpr/string.h +3 -3
  370. data/src/core/lib/gpr/sync_abseil.cc +15 -7
  371. data/src/core/lib/gpr/time_precise.h +3 -3
  372. data/src/core/lib/gpr/tmpfile.h +3 -3
  373. data/src/core/lib/gpr/useful.h +3 -3
  374. data/src/core/lib/gprpp/atomic_utils.h +3 -3
  375. data/src/core/lib/gprpp/bitset.h +3 -3
  376. data/src/core/lib/gprpp/chunked_vector.h +3 -3
  377. data/src/core/lib/gprpp/construct_destruct.h +3 -3
  378. data/src/core/lib/gprpp/cpp_impl_of.h +3 -3
  379. data/src/core/lib/gprpp/crash.h +3 -3
  380. data/src/core/lib/gprpp/debug_location.h +3 -6
  381. data/src/core/lib/gprpp/dual_ref_counted.h +3 -3
  382. data/src/core/lib/gprpp/env.h +3 -3
  383. data/src/core/lib/gprpp/examine_stack.h +3 -3
  384. data/src/core/lib/gprpp/fork.cc +21 -4
  385. data/src/core/lib/gprpp/fork.h +7 -5
  386. data/src/core/lib/gprpp/global_config.h +3 -3
  387. data/src/core/lib/gprpp/global_config_custom.h +3 -3
  388. data/src/core/lib/gprpp/global_config_env.cc +1 -0
  389. data/src/core/lib/gprpp/global_config_env.h +3 -3
  390. data/src/core/lib/gprpp/global_config_generic.h +3 -3
  391. data/src/core/lib/gprpp/host_port.cc +2 -0
  392. data/src/core/lib/gprpp/host_port.h +3 -3
  393. data/src/core/lib/gprpp/load_file.h +3 -3
  394. data/src/core/lib/gprpp/manual_constructor.h +3 -3
  395. data/src/core/lib/gprpp/match.h +3 -3
  396. data/src/core/lib/gprpp/memory.h +3 -3
  397. data/src/core/lib/gprpp/mpscq.h +3 -3
  398. data/src/core/lib/gprpp/no_destruct.h +3 -3
  399. data/src/core/lib/gprpp/notification.h +3 -3
  400. data/src/core/lib/gprpp/orphanable.h +3 -3
  401. data/src/core/lib/gprpp/overload.h +3 -3
  402. data/src/core/lib/gprpp/packed_table.h +3 -3
  403. data/src/core/lib/gprpp/per_cpu.h +3 -3
  404. data/src/core/lib/gprpp/ref_counted.h +3 -3
  405. data/src/core/lib/gprpp/ref_counted_ptr.h +3 -3
  406. data/src/core/lib/gprpp/single_set_ptr.h +3 -3
  407. data/src/core/lib/gprpp/sorted_pack.h +3 -3
  408. data/src/core/lib/gprpp/stat.h +3 -3
  409. data/src/core/lib/gprpp/status_helper.h +3 -3
  410. data/src/core/lib/gprpp/strerror.cc +2 -0
  411. data/src/core/lib/gprpp/strerror.h +3 -3
  412. data/src/core/lib/gprpp/sync.h +3 -3
  413. data/src/core/lib/gprpp/table.h +3 -3
  414. data/src/core/lib/gprpp/tchar.h +3 -3
  415. data/src/core/lib/gprpp/thd.h +3 -3
  416. data/src/core/lib/gprpp/time.cc +1 -0
  417. data/src/core/lib/gprpp/time.h +3 -3
  418. data/src/core/lib/gprpp/time_averaged_stats.h +3 -3
  419. data/src/core/lib/gprpp/time_util.h +3 -3
  420. data/src/core/lib/gprpp/unique_type_name.h +3 -3
  421. data/src/core/lib/gprpp/validation_errors.h +3 -3
  422. data/src/core/lib/gprpp/work_serializer.h +3 -3
  423. data/src/core/lib/handshaker/proxy_mapper.h +3 -3
  424. data/src/core/lib/handshaker/proxy_mapper_registry.h +3 -3
  425. data/src/core/lib/http/format_request.cc +1 -0
  426. data/src/core/lib/http/format_request.h +3 -3
  427. data/src/core/lib/http/httpcli.cc +1 -0
  428. data/src/core/lib/http/httpcli.h +3 -3
  429. data/src/core/lib/http/httpcli_ssl_credentials.h +3 -3
  430. data/src/core/lib/http/parser.h +3 -3
  431. data/src/core/lib/iomgr/block_annotate.h +3 -3
  432. data/src/core/lib/iomgr/buffer_list.h +3 -3
  433. data/src/core/lib/iomgr/call_combiner.cc +4 -4
  434. data/src/core/lib/iomgr/call_combiner.h +3 -3
  435. data/src/core/lib/iomgr/cfstream_handle.h +3 -3
  436. data/src/core/lib/iomgr/closure.cc +27 -0
  437. data/src/core/lib/iomgr/closure.h +5 -3
  438. data/src/core/lib/iomgr/combiner.h +3 -3
  439. data/src/core/lib/iomgr/dynamic_annotations.h +3 -3
  440. data/src/core/lib/iomgr/endpoint.h +3 -3
  441. data/src/core/lib/iomgr/endpoint_cfstream.h +3 -3
  442. data/src/core/lib/iomgr/endpoint_pair.h +3 -3
  443. data/src/core/lib/iomgr/endpoint_pair_windows.cc +10 -2
  444. data/src/core/lib/iomgr/error.h +3 -3
  445. data/src/core/lib/iomgr/error_cfstream.h +3 -3
  446. data/src/core/lib/iomgr/ev_apple.h +3 -3
  447. data/src/core/lib/iomgr/ev_epoll1_linux.h +3 -3
  448. data/src/core/lib/iomgr/ev_poll_posix.h +3 -3
  449. data/src/core/lib/iomgr/ev_posix.h +3 -3
  450. data/src/core/lib/iomgr/event_engine_shims/closure.cc +62 -0
  451. data/src/core/lib/iomgr/event_engine_shims/closure.h +39 -0
  452. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +430 -0
  453. data/src/core/lib/iomgr/event_engine_shims/endpoint.h +43 -0
  454. data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +91 -0
  455. data/src/core/lib/iomgr/event_engine_shims/tcp_client.h +44 -0
  456. data/src/core/lib/iomgr/exec_ctx.h +3 -3
  457. data/src/core/lib/iomgr/executor.h +3 -3
  458. data/src/core/lib/iomgr/fork_posix.cc +5 -4
  459. data/src/core/lib/iomgr/gethostname.h +3 -3
  460. data/src/core/lib/iomgr/grpc_if_nametoindex.h +3 -3
  461. data/src/core/lib/iomgr/internal_errqueue.h +3 -3
  462. data/src/core/lib/iomgr/iocp_windows.h +3 -3
  463. data/src/core/lib/iomgr/iomgr.h +3 -3
  464. data/src/core/lib/iomgr/iomgr_fwd.h +3 -3
  465. data/src/core/lib/iomgr/iomgr_internal.h +3 -3
  466. data/src/core/lib/iomgr/load_file.h +3 -3
  467. data/src/core/lib/iomgr/lockfree_event.h +3 -3
  468. data/src/core/lib/iomgr/nameser.h +3 -3
  469. data/src/core/lib/iomgr/polling_entity.h +3 -3
  470. data/src/core/lib/iomgr/pollset.h +3 -3
  471. data/src/core/lib/iomgr/pollset_set.h +3 -3
  472. data/src/core/lib/iomgr/pollset_set_windows.h +3 -3
  473. data/src/core/lib/iomgr/pollset_windows.cc +2 -2
  474. data/src/core/lib/iomgr/pollset_windows.h +3 -3
  475. data/src/core/lib/iomgr/port.h +3 -3
  476. data/src/core/lib/iomgr/python_util.h +3 -3
  477. data/src/core/lib/iomgr/resolve_address.h +3 -3
  478. data/src/core/lib/iomgr/resolve_address_impl.h +3 -3
  479. data/src/core/lib/iomgr/resolve_address_posix.h +3 -3
  480. data/src/core/lib/iomgr/resolve_address_windows.h +3 -3
  481. data/src/core/lib/iomgr/resolved_address.h +3 -3
  482. data/src/core/lib/iomgr/sockaddr.h +3 -3
  483. data/src/core/lib/iomgr/sockaddr_posix.h +3 -3
  484. data/src/core/lib/iomgr/sockaddr_windows.h +3 -3
  485. data/src/core/lib/iomgr/socket_factory_posix.h +3 -3
  486. data/src/core/lib/iomgr/socket_mutator.h +3 -3
  487. data/src/core/lib/iomgr/socket_utils.h +3 -3
  488. data/src/core/lib/iomgr/socket_utils_posix.h +3 -3
  489. data/src/core/lib/iomgr/socket_windows.h +3 -3
  490. data/src/core/lib/iomgr/systemd_utils.cc +19 -19
  491. data/src/core/lib/iomgr/systemd_utils.h +24 -24
  492. data/src/core/lib/iomgr/tcp_client.h +3 -3
  493. data/src/core/lib/iomgr/tcp_client_posix.cc +12 -0
  494. data/src/core/lib/iomgr/tcp_client_posix.h +3 -3
  495. data/src/core/lib/iomgr/tcp_client_windows.cc +13 -1
  496. data/src/core/lib/iomgr/tcp_posix.cc +49 -65
  497. data/src/core/lib/iomgr/tcp_posix.h +3 -3
  498. data/src/core/lib/iomgr/tcp_server.h +3 -3
  499. data/src/core/lib/iomgr/tcp_server_posix.cc +219 -4
  500. data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -3
  501. data/src/core/lib/iomgr/tcp_server_windows.cc +4 -6
  502. data/src/core/lib/iomgr/tcp_windows.h +3 -3
  503. data/src/core/lib/iomgr/timer.h +3 -3
  504. data/src/core/lib/iomgr/timer_generic.h +3 -3
  505. data/src/core/lib/iomgr/timer_heap.h +3 -3
  506. data/src/core/lib/iomgr/timer_manager.h +3 -3
  507. data/src/core/lib/iomgr/unix_sockets_posix.h +3 -3
  508. data/src/core/lib/iomgr/wakeup_fd_pipe.h +3 -3
  509. data/src/core/lib/iomgr/wakeup_fd_posix.h +3 -3
  510. data/src/core/lib/json/json.h +3 -3
  511. data/src/core/lib/json/json_args.h +3 -3
  512. data/src/core/lib/json/json_channel_args.h +3 -3
  513. data/src/core/lib/json/json_object_loader.h +3 -3
  514. data/src/core/lib/json/json_reader.cc +1 -0
  515. data/src/core/lib/json/json_util.h +3 -3
  516. data/src/core/lib/load_balancing/lb_policy.cc +9 -0
  517. data/src/core/lib/load_balancing/lb_policy.h +9 -5
  518. data/src/core/lib/load_balancing/lb_policy_factory.h +3 -3
  519. data/src/core/lib/load_balancing/lb_policy_registry.cc +1 -0
  520. data/src/core/lib/load_balancing/lb_policy_registry.h +3 -3
  521. data/src/core/lib/load_balancing/subchannel_interface.h +8 -6
  522. data/src/core/lib/matchers/matchers.cc +1 -0
  523. data/src/core/lib/matchers/matchers.h +3 -3
  524. data/src/core/lib/promise/activity.cc +8 -6
  525. data/src/core/lib/promise/activity.h +52 -66
  526. data/src/core/lib/promise/arena_promise.h +3 -3
  527. data/src/core/lib/promise/context.h +3 -3
  528. data/src/core/lib/promise/detail/basic_join.h +197 -0
  529. data/src/core/lib/promise/detail/basic_seq.h +10 -16
  530. data/src/core/lib/promise/detail/promise_factory.h +3 -3
  531. data/src/core/lib/promise/detail/promise_like.h +3 -3
  532. data/src/core/lib/promise/detail/status.h +3 -3
  533. data/src/core/lib/promise/detail/switch.h +3 -3
  534. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +3 -3
  535. data/src/core/lib/promise/if.h +195 -0
  536. data/src/core/lib/promise/interceptor_list.h +308 -0
  537. data/src/core/lib/promise/intra_activity_waiter.h +9 -3
  538. data/src/core/lib/promise/latch.h +99 -5
  539. data/src/core/lib/promise/loop.h +4 -4
  540. data/src/core/lib/promise/map.h +4 -6
  541. data/src/core/lib/promise/pipe.h +296 -193
  542. data/src/core/lib/promise/poll.h +113 -14
  543. data/src/core/lib/promise/promise.h +4 -5
  544. data/src/core/lib/promise/race.h +6 -9
  545. data/src/core/lib/promise/seq.h +3 -3
  546. data/src/core/lib/promise/sleep.h +3 -3
  547. data/src/core/lib/promise/{pipe.cc → trace.cc} +3 -2
  548. data/src/core/lib/promise/trace.h +24 -0
  549. data/src/core/lib/promise/try_join.h +82 -0
  550. data/src/core/lib/promise/try_seq.h +3 -3
  551. data/src/core/lib/resolver/resolver.h +3 -3
  552. data/src/core/lib/resolver/resolver_factory.h +4 -4
  553. data/src/core/lib/resolver/resolver_registry.cc +15 -0
  554. data/src/core/lib/resolver/resolver_registry.h +3 -3
  555. data/src/core/lib/resolver/server_address.cc +1 -0
  556. data/src/core/lib/resolver/server_address.h +3 -3
  557. data/src/core/lib/resource_quota/api.h +3 -3
  558. data/src/core/lib/resource_quota/arena.cc +36 -9
  559. data/src/core/lib/resource_quota/arena.h +84 -22
  560. data/src/core/lib/resource_quota/memory_quota.h +3 -3
  561. data/src/core/lib/resource_quota/periodic_update.h +3 -3
  562. data/src/core/lib/resource_quota/resource_quota.h +3 -3
  563. data/src/core/lib/resource_quota/thread_quota.h +3 -3
  564. data/src/core/lib/resource_quota/trace.h +3 -3
  565. data/src/core/lib/security/authorization/authorization_engine.h +3 -3
  566. data/src/core/lib/security/authorization/authorization_policy_provider.h +3 -3
  567. data/src/core/lib/security/authorization/evaluate_args.h +3 -3
  568. data/src/core/lib/security/authorization/grpc_authorization_engine.h +3 -3
  569. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +3 -3
  570. data/src/core/lib/security/authorization/matchers.h +3 -3
  571. data/src/core/lib/security/authorization/rbac_policy.cc +1 -0
  572. data/src/core/lib/security/authorization/rbac_policy.h +3 -3
  573. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +3 -3
  574. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +3 -3
  575. data/src/core/lib/security/context/security_context.h +3 -3
  576. data/src/core/lib/security/credentials/alts/alts_credentials.h +3 -3
  577. data/src/core/lib/security/credentials/alts/check_gcp_environment.h +3 -3
  578. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +3 -3
  579. data/src/core/lib/security/credentials/call_creds_util.h +3 -3
  580. data/src/core/lib/security/credentials/channel_creds_registry.h +3 -3
  581. data/src/core/lib/security/credentials/composite/composite_credentials.h +3 -3
  582. data/src/core/lib/security/credentials/credentials.h +3 -3
  583. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +1 -0
  584. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +3 -3
  585. data/src/core/lib/security/credentials/external/aws_request_signer.cc +1 -0
  586. data/src/core/lib/security/credentials/external/aws_request_signer.h +3 -3
  587. data/src/core/lib/security/credentials/external/external_account_credentials.cc +1 -0
  588. data/src/core/lib/security/credentials/external/external_account_credentials.h +3 -3
  589. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +3 -3
  590. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +1 -0
  591. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +3 -3
  592. data/src/core/lib/security/credentials/fake/fake_credentials.h +3 -3
  593. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +3 -3
  594. data/src/core/lib/security/credentials/iam/iam_credentials.cc +1 -0
  595. data/src/core/lib/security/credentials/iam/iam_credentials.h +3 -3
  596. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +3 -3
  597. data/src/core/lib/security/credentials/jwt/json_token.h +3 -3
  598. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +4 -3
  599. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +3 -3
  600. data/src/core/lib/security/credentials/local/local_credentials.h +3 -3
  601. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +4 -3
  602. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +3 -3
  603. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +3 -3
  604. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +3 -3
  605. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +1 -1
  606. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +3 -3
  607. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +3 -3
  608. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +3 -3
  609. data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -3
  610. data/src/core/lib/security/credentials/tls/tls_utils.h +3 -3
  611. data/src/core/lib/security/credentials/xds/xds_credentials.h +3 -3
  612. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +3 -3
  613. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -0
  614. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +3 -3
  615. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +3 -3
  616. data/src/core/lib/security/security_connector/load_system_roots.h +3 -3
  617. data/src/core/lib/security/security_connector/load_system_roots_supported.h +3 -3
  618. data/src/core/lib/security/security_connector/local/local_security_connector.h +3 -3
  619. data/src/core/lib/security/security_connector/security_connector.h +3 -3
  620. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +1 -0
  621. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +3 -3
  622. data/src/core/lib/security/security_connector/ssl_utils.h +3 -3
  623. data/src/core/lib/security/security_connector/ssl_utils_config.h +3 -3
  624. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +3 -3
  625. data/src/core/lib/security/transport/auth_filters.h +27 -5
  626. data/src/core/lib/security/transport/secure_endpoint.h +3 -3
  627. data/src/core/lib/security/transport/security_handshaker.cc +9 -0
  628. data/src/core/lib/security/transport/security_handshaker.h +3 -3
  629. data/src/core/lib/security/transport/server_auth_filter.cc +120 -251
  630. data/src/core/lib/security/transport/tsi_error.h +3 -3
  631. data/src/core/lib/security/util/json_util.h +3 -3
  632. data/src/core/lib/service_config/service_config.h +3 -3
  633. data/src/core/lib/service_config/service_config_call_data.h +3 -3
  634. data/src/core/lib/service_config/service_config_impl.h +3 -3
  635. data/src/core/lib/service_config/service_config_parser.h +3 -3
  636. data/src/core/lib/slice/b64.h +3 -3
  637. data/src/core/lib/slice/percent_encoding.h +3 -3
  638. data/src/core/lib/slice/slice.cc +3 -3
  639. data/src/core/lib/slice/slice.h +14 -21
  640. data/src/core/lib/slice/slice_buffer.h +10 -4
  641. data/src/core/lib/slice/slice_internal.h +3 -3
  642. data/src/core/lib/slice/slice_refcount.cc +20 -0
  643. data/src/core/lib/slice/slice_refcount.h +26 -6
  644. data/src/core/lib/slice/slice_string_helpers.h +3 -3
  645. data/src/core/lib/surface/api_trace.h +3 -3
  646. data/src/core/lib/surface/builtins.h +3 -3
  647. data/src/core/lib/surface/call.cc +866 -252
  648. data/src/core/lib/surface/call.h +31 -3
  649. data/src/core/lib/surface/call_log_batch.cc +1 -0
  650. data/src/core/lib/surface/call_test_only.h +3 -3
  651. data/src/core/lib/surface/call_trace.cc +21 -11
  652. data/src/core/lib/surface/call_trace.h +3 -3
  653. data/src/core/lib/surface/channel.h +3 -3
  654. data/src/core/lib/surface/channel_init.h +3 -3
  655. data/src/core/lib/surface/channel_stack_type.h +3 -3
  656. data/src/core/lib/surface/completion_queue.cc +1 -0
  657. data/src/core/lib/surface/completion_queue.h +3 -3
  658. data/src/core/lib/surface/completion_queue_factory.h +3 -3
  659. data/src/core/lib/surface/event_string.cc +1 -0
  660. data/src/core/lib/surface/event_string.h +3 -3
  661. data/src/core/lib/surface/init.cc +1 -1
  662. data/src/core/lib/surface/init.h +3 -3
  663. data/src/core/lib/surface/init_internally.h +3 -3
  664. data/src/core/lib/surface/lame_client.cc +3 -1
  665. data/src/core/lib/surface/lame_client.h +3 -3
  666. data/src/core/lib/surface/server.cc +273 -27
  667. data/src/core/lib/surface/server.h +6 -3
  668. data/src/core/lib/surface/validate_metadata.h +3 -3
  669. data/src/core/lib/surface/version.cc +2 -2
  670. data/src/core/lib/transport/bdp_estimator.h +3 -3
  671. data/src/core/lib/transport/connectivity_state.h +3 -3
  672. data/src/core/lib/transport/error_utils.h +3 -3
  673. data/src/core/lib/transport/handshaker.cc +11 -0
  674. data/src/core/lib/transport/handshaker.h +4 -4
  675. data/src/core/lib/transport/handshaker_factory.h +3 -3
  676. data/src/core/lib/transport/handshaker_registry.h +3 -3
  677. data/src/core/lib/transport/http2_errors.h +3 -3
  678. data/src/core/lib/transport/http_connect_handshaker.h +3 -3
  679. data/src/core/lib/transport/metadata_batch.h +3 -3
  680. data/src/core/lib/transport/parsed_metadata.h +3 -3
  681. data/src/core/lib/transport/pid_controller.h +3 -3
  682. data/src/core/lib/transport/status_conversion.h +3 -3
  683. data/src/core/lib/transport/tcp_connect_handshaker.cc +0 -1
  684. data/src/core/lib/transport/tcp_connect_handshaker.h +3 -3
  685. data/src/core/lib/transport/timeout_encoding.h +3 -3
  686. data/src/core/lib/transport/transport.cc +3 -8
  687. data/src/core/lib/transport/transport.h +16 -8
  688. data/src/core/lib/transport/transport_fwd.h +3 -3
  689. data/src/core/lib/transport/transport_impl.h +3 -3
  690. data/src/core/lib/transport/transport_op_string.cc +1 -0
  691. data/src/core/lib/uri/uri_parser.cc +1 -1
  692. data/src/core/lib/uri/uri_parser.h +3 -3
  693. data/src/core/plugin_registry/grpc_plugin_registry.cc +5 -0
  694. data/src/core/tsi/alts/crypt/gsec.h +3 -3
  695. data/src/core/tsi/alts/frame_protector/alts_counter.h +3 -3
  696. data/src/core/tsi/alts/frame_protector/alts_crypter.h +3 -3
  697. data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +3 -3
  698. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +3 -3
  699. data/src/core/tsi/alts/frame_protector/frame_handler.h +3 -3
  700. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +3 -3
  701. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +3 -3
  702. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +3 -3
  703. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +3 -3
  704. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +3 -3
  705. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +3 -3
  706. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +3 -3
  707. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +3 -3
  708. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +3 -3
  709. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +3 -3
  710. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +3 -3
  711. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +3 -3
  712. data/src/core/tsi/fake_transport_security.h +3 -3
  713. data/src/core/tsi/local_transport_security.h +3 -3
  714. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +1 -1
  715. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +3 -3
  716. data/src/core/tsi/ssl/session_cache/ssl_session.h +3 -3
  717. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +3 -3
  718. data/src/core/tsi/ssl_transport_security.cc +113 -24
  719. data/src/core/tsi/ssl_transport_security.h +5 -3
  720. data/src/core/tsi/ssl_transport_security_utils.h +3 -3
  721. data/src/core/tsi/ssl_types.h +3 -3
  722. data/src/core/tsi/transport_security.h +3 -3
  723. data/src/core/tsi/transport_security_grpc.h +3 -3
  724. data/src/core/tsi/transport_security_interface.h +3 -3
  725. data/src/ruby/lib/grpc/version.rb +1 -1
  726. data/src/ruby/pb/generate_proto_ruby.sh +0 -6
  727. data/third_party/abseil-cpp/absl/algorithm/container.h +56 -57
  728. data/third_party/abseil-cpp/absl/base/attributes.h +39 -19
  729. data/third_party/abseil-cpp/absl/base/config.h +44 -3
  730. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +3 -18
  731. data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +55 -0
  732. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +2 -1
  733. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +3 -3
  734. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +2 -2
  735. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +1 -1
  736. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +10 -6
  737. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +23 -24
  738. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -3
  739. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +2 -6
  740. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +4 -1
  741. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +4 -4
  742. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +14 -10
  743. data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +9 -0
  744. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -0
  745. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -40
  746. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +62 -0
  747. data/third_party/abseil-cpp/absl/base/macros.h +4 -21
  748. data/third_party/abseil-cpp/absl/base/optimization.h +58 -6
  749. data/third_party/abseil-cpp/absl/base/options.h +1 -7
  750. data/third_party/abseil-cpp/absl/base/policy_checks.h +15 -13
  751. data/third_party/abseil-cpp/absl/container/fixed_array.h +7 -5
  752. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +0 -7
  753. data/third_party/abseil-cpp/absl/container/inlined_vector.h +66 -18
  754. data/third_party/abseil-cpp/absl/container/internal/common.h +3 -3
  755. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +132 -0
  756. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +13 -1
  757. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +4 -55
  758. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +50 -5
  759. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +14 -46
  760. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +110 -32
  761. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +155 -4
  762. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +661 -341
  763. data/third_party/abseil-cpp/absl/crc/crc32c.cc +99 -0
  764. data/third_party/abseil-cpp/absl/crc/crc32c.h +183 -0
  765. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +256 -0
  766. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +57 -0
  767. data/third_party/abseil-cpp/absl/crc/internal/crc.cc +468 -0
  768. data/third_party/abseil-cpp/absl/crc/internal/crc.h +91 -0
  769. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +269 -0
  770. data/third_party/abseil-cpp/absl/crc/internal/crc32c.h +39 -0
  771. data/third_party/abseil-cpp/absl/crc/internal/crc32c_inline.h +72 -0
  772. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.cc +130 -0
  773. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.h +159 -0
  774. data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +179 -0
  775. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy.h +119 -0
  776. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_fallback.cc +75 -0
  777. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_64.cc +434 -0
  778. data/third_party/abseil-cpp/absl/crc/internal/crc_non_temporal_memcpy.cc +93 -0
  779. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +725 -0
  780. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +79 -0
  781. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +180 -0
  782. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +1 -1
  783. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +67 -38
  784. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +1 -1
  785. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +12 -13
  786. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +11 -9
  787. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +1 -1
  788. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +40 -85
  789. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +5 -4
  790. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +33 -8
  791. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +3 -2
  792. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +3 -2
  793. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +118 -94
  794. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +7 -6
  795. data/third_party/abseil-cpp/absl/functional/any_invocable.h +5 -2
  796. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +47 -26
  797. data/third_party/abseil-cpp/absl/hash/internal/city.cc +10 -10
  798. data/third_party/abseil-cpp/absl/hash/internal/hash.h +18 -4
  799. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +3 -14
  800. data/third_party/abseil-cpp/absl/memory/memory.h +26 -447
  801. data/third_party/abseil-cpp/absl/meta/type_traits.h +104 -12
  802. data/third_party/abseil-cpp/absl/numeric/bits.h +2 -3
  803. data/third_party/abseil-cpp/absl/numeric/int128.cc +10 -8
  804. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +14 -6
  805. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
  806. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +1 -1
  807. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +2 -23
  808. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +9 -9
  809. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +2 -2
  810. data/third_party/abseil-cpp/absl/random/random.h +6 -6
  811. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +1 -0
  812. data/third_party/abseil-cpp/absl/status/status.cc +19 -12
  813. data/third_party/abseil-cpp/absl/status/status.h +2 -2
  814. data/third_party/abseil-cpp/absl/strings/ascii.cc +5 -5
  815. data/third_party/abseil-cpp/absl/strings/charconv.cc +534 -96
  816. data/third_party/abseil-cpp/absl/strings/cord.cc +92 -40
  817. data/third_party/abseil-cpp/absl/strings/cord.h +71 -80
  818. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +8 -5
  819. data/third_party/abseil-cpp/absl/strings/escaping.cc +73 -62
  820. data/third_party/abseil-cpp/absl/strings/escaping.h +24 -19
  821. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +14 -12
  822. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +4 -4
  823. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
  824. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +326 -70
  825. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +8 -4
  826. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +26 -14
  827. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +5 -5
  828. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +9 -7
  829. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +5 -4
  830. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +7 -15
  831. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +3 -3
  832. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +8 -5
  833. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +7 -7
  834. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +4 -4
  835. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +93 -0
  836. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +34 -0
  837. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +12 -10
  838. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +7 -9
  839. data/third_party/abseil-cpp/absl/strings/internal/has_absl_stringify.h +55 -0
  840. data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +9 -6
  841. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +14 -7
  842. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +35 -10
  843. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +113 -46
  844. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +126 -29
  845. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -2
  846. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +4 -3
  847. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +49 -287
  848. data/third_party/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +351 -0
  849. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +2 -1
  850. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +4 -2
  851. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +215 -181
  852. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +10 -209
  853. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +10 -101
  854. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -1
  855. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.cc +28 -0
  856. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +57 -0
  857. data/third_party/abseil-cpp/absl/strings/numbers.cc +34 -31
  858. data/third_party/abseil-cpp/absl/strings/str_cat.cc +9 -6
  859. data/third_party/abseil-cpp/absl/strings/str_cat.h +50 -3
  860. data/third_party/abseil-cpp/absl/strings/str_format.h +71 -9
  861. data/third_party/abseil-cpp/absl/strings/string_view.cc +6 -6
  862. data/third_party/abseil-cpp/absl/strings/string_view.h +3 -10
  863. data/third_party/abseil-cpp/absl/strings/substitute.cc +8 -6
  864. data/third_party/abseil-cpp/absl/strings/substitute.h +46 -20
  865. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +20 -17
  866. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +37 -31
  867. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +22 -8
  868. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +104 -55
  869. data/third_party/abseil-cpp/absl/synchronization/mutex.h +85 -46
  870. data/third_party/abseil-cpp/absl/synchronization/notification.cc +0 -1
  871. data/third_party/abseil-cpp/absl/synchronization/notification.h +0 -1
  872. data/third_party/abseil-cpp/absl/time/civil_time.cc +26 -0
  873. data/third_party/abseil-cpp/absl/time/civil_time.h +25 -0
  874. data/third_party/abseil-cpp/absl/time/clock.cc +17 -11
  875. data/third_party/abseil-cpp/absl/time/duration.cc +7 -7
  876. data/third_party/abseil-cpp/absl/time/format.cc +2 -1
  877. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1 -1
  878. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +26 -5
  879. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +7 -6
  880. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +36 -35
  881. data/third_party/abseil-cpp/absl/time/time.cc +2 -2
  882. data/third_party/abseil-cpp/absl/time/time.h +253 -158
  883. data/third_party/abseil-cpp/absl/types/internal/span.h +30 -19
  884. data/third_party/abseil-cpp/absl/types/internal/variant.h +28 -40
  885. data/third_party/abseil-cpp/absl/types/span.h +29 -7
  886. metadata +75 -10
  887. data/src/core/lib/event_engine/socket_notifier.h +0 -55
  888. data/src/core/lib/promise/for_each.h +0 -155
  889. data/src/core/lib/promise/map_pipe.h +0 -88
  890. data/src/core/lib/promise/try_concurrently.h +0 -342
@@ -18,18 +18,23 @@
18
18
 
19
19
  #include "src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h"
20
20
 
21
+ #include <stddef.h>
22
+
23
+ #include <algorithm>
21
24
  #include <atomic>
22
25
  #include <functional>
23
26
  #include <map>
24
27
  #include <memory>
28
+ #include <set>
25
29
  #include <string>
26
- #include <unordered_set>
30
+ #include <tuple>
27
31
  #include <utility>
28
32
  #include <vector>
29
33
 
30
34
  #include "absl/base/thread_annotations.h"
31
35
  #include "absl/status/status.h"
32
36
  #include "absl/status/statusor.h"
37
+ #include "absl/strings/str_cat.h"
33
38
  #include "absl/strings/string_view.h"
34
39
  #include "absl/types/optional.h"
35
40
  #include "absl/types/variant.h"
@@ -41,11 +46,13 @@
41
46
  #include "src/core/ext/filters/client_channel/lb_call_state_internal.h"
42
47
  #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
43
48
  #include "src/core/ext/filters/stateful_session/stateful_session_filter.h"
49
+ #include "src/core/ext/xds/xds_health_status.h"
44
50
  #include "src/core/lib/address_utils/sockaddr_utils.h"
45
51
  #include "src/core/lib/channel/channel_args.h"
46
52
  #include "src/core/lib/config/core_configuration.h"
47
53
  #include "src/core/lib/debug/trace.h"
48
54
  #include "src/core/lib/gprpp/debug_location.h"
55
+ #include "src/core/lib/gprpp/match.h"
49
56
  #include "src/core/lib/gprpp/orphanable.h"
50
57
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
51
58
  #include "src/core/lib/gprpp/sync.h"
@@ -70,6 +77,31 @@ namespace grpc_core {
70
77
  TraceFlag grpc_lb_xds_override_host_trace(false, "xds_override_host_lb");
71
78
 
72
79
  namespace {
80
+ template <typename Value>
81
+ struct PtrLessThan {
82
+ using is_transparent = void;
83
+
84
+ bool operator()(const std::unique_ptr<Value>& v1,
85
+ const std::unique_ptr<Value>& v2) const {
86
+ return v1 < v2;
87
+ }
88
+ bool operator()(const Value* v1, const Value* v2) const { return v1 < v2; }
89
+ bool operator()(const Value* v1, const std::unique_ptr<Value>& v2) const {
90
+ return v1 < v2.get();
91
+ }
92
+ bool operator()(const std::unique_ptr<Value>& v1, const Value* v2) const {
93
+ return v1.get() < v2;
94
+ }
95
+ };
96
+
97
+ XdsHealthStatus GetAddressHealthStatus(const ServerAddress& address) {
98
+ auto attribute = address.GetAttribute(XdsEndpointHealthStatusAttribute::kKey);
99
+ if (attribute == nullptr) {
100
+ return XdsHealthStatus(XdsHealthStatus::HealthStatus::kUnknown);
101
+ }
102
+ return static_cast<const XdsEndpointHealthStatusAttribute*>(attribute)
103
+ ->status();
104
+ }
73
105
 
74
106
  //
75
107
  // xds_override_host LB policy
@@ -91,7 +123,7 @@ class XdsOverrideHostLb : public LoadBalancingPolicy {
91
123
  public:
92
124
  SubchannelWrapper(RefCountedPtr<SubchannelInterface> subchannel,
93
125
  RefCountedPtr<XdsOverrideHostLb> policy,
94
- absl::optional<const std::string> key);
126
+ absl::string_view key);
95
127
 
96
128
  ~SubchannelWrapper() override;
97
129
 
@@ -110,31 +142,32 @@ class XdsOverrideHostLb : public LoadBalancingPolicy {
110
142
  private:
111
143
  class ConnectivityStateWatcher : public ConnectivityStateWatcherInterface {
112
144
  public:
113
- ConnectivityStateWatcher(
114
- std::unique_ptr<ConnectivityStateWatcherInterface> delegate,
115
- RefCountedPtr<SubchannelWrapper> subchannel)
116
- : delegate_(std::move(delegate)), subchannel_(subchannel) {}
145
+ explicit ConnectivityStateWatcher(
146
+ WeakRefCountedPtr<SubchannelWrapper> subchannel)
147
+ : subchannel_(std::move(subchannel)) {}
117
148
 
118
149
  void OnConnectivityStateChange(grpc_connectivity_state state,
119
- absl::Status status) override {
120
- delegate_->OnConnectivityStateChange(state, status);
121
- subchannel_->connectivity_state_ = state;
122
- }
150
+ absl::Status status) override;
123
151
 
124
- grpc_pollset_set* interested_parties() override {
125
- return delegate_->interested_parties();
126
- }
152
+ grpc_pollset_set* interested_parties() override;
127
153
 
128
154
  private:
129
- std::unique_ptr<ConnectivityStateWatcherInterface> delegate_;
130
- RefCountedPtr<SubchannelWrapper> subchannel_;
155
+ WeakRefCountedPtr<SubchannelWrapper> subchannel_;
131
156
  };
132
157
 
133
- const absl::optional<const std::string> key_;
158
+ void Orphan() override;
159
+
160
+ void UpdateConnectivityState(grpc_connectivity_state state,
161
+ absl::Status status);
162
+
163
+ ConnectivityStateWatcher* watcher_;
164
+ absl::optional<std::string> key_;
134
165
  RefCountedPtr<XdsOverrideHostLb> policy_;
135
- std::atomic<grpc_connectivity_state> connectivity_state_{GRPC_CHANNEL_IDLE};
136
- std::map<ConnectivityStateWatcherInterface*, ConnectivityStateWatcher*>
166
+ std::set<std::unique_ptr<ConnectivityStateWatcherInterface>,
167
+ PtrLessThan<ConnectivityStateWatcherInterface>>
137
168
  watchers_;
169
+ std::atomic<grpc_connectivity_state> connectivity_state_ = {
170
+ GRPC_CHANNEL_IDLE};
138
171
  };
139
172
 
140
173
  // A picker that wraps the picker from the child for cases when cookie is
@@ -142,7 +175,8 @@ class XdsOverrideHostLb : public LoadBalancingPolicy {
142
175
  class Picker : public SubchannelPicker {
143
176
  public:
144
177
  Picker(RefCountedPtr<XdsOverrideHostLb> xds_override_host_lb,
145
- RefCountedPtr<SubchannelPicker> picker);
178
+ RefCountedPtr<SubchannelPicker> picker,
179
+ XdsHealthStatusSet override_host_health_status_set);
146
180
 
147
181
  PickResult Pick(PickArgs args) override;
148
182
 
@@ -159,11 +193,9 @@ class XdsOverrideHostLb : public LoadBalancingPolicy {
159
193
  }
160
194
 
161
195
  private:
162
- XdsOverrideHostLb* policy() { return subchannel_->policy(); }
163
-
164
196
  static void RunInExecCtx(void* arg, grpc_error_handle /*error*/) {
165
197
  auto* self = static_cast<SubchannelConnectionRequester*>(arg);
166
- self->policy()->work_serializer()->Run(
198
+ self->subchannel_->policy()->work_serializer()->Run(
167
199
  [self]() {
168
200
  self->subchannel_->RequestConnection();
169
201
  delete self;
@@ -180,6 +212,7 @@ class XdsOverrideHostLb : public LoadBalancingPolicy {
180
212
 
181
213
  RefCountedPtr<XdsOverrideHostLb> policy_;
182
214
  RefCountedPtr<SubchannelPicker> picker_;
215
+ XdsHealthStatusSet override_host_health_status_set_;
183
216
  };
184
217
 
185
218
  class Helper : public ChannelControlHelper {
@@ -207,25 +240,49 @@ class XdsOverrideHostLb : public LoadBalancingPolicy {
207
240
 
208
241
  class SubchannelEntry {
209
242
  public:
243
+ explicit SubchannelEntry(XdsHealthStatus eds_health_status)
244
+ : eds_health_status_(eds_health_status) {}
245
+
210
246
  void SetSubchannel(SubchannelWrapper* subchannel) {
211
- subchannel_ = subchannel;
247
+ if (eds_health_status_.status() == XdsHealthStatus::kDraining) {
248
+ subchannel_ = subchannel->Ref();
249
+ } else {
250
+ subchannel_ = subchannel;
251
+ }
212
252
  }
213
253
 
214
- void ResetSubchannel(SubchannelWrapper* expected) {
215
- if (subchannel_ == expected) {
216
- subchannel_ = nullptr;
217
- }
254
+ void UnsetSubchannel() { subchannel_ = nullptr; }
255
+
256
+ SubchannelWrapper* GetSubchannel() const {
257
+ return Match(
258
+ subchannel_,
259
+ [](XdsOverrideHostLb::SubchannelWrapper* subchannel) {
260
+ return subchannel;
261
+ },
262
+ [](RefCountedPtr<XdsOverrideHostLb::SubchannelWrapper> subchannel) {
263
+ return subchannel.get();
264
+ });
218
265
  }
219
266
 
220
- RefCountedPtr<SubchannelWrapper> GetSubchannel() {
221
- if (subchannel_ == nullptr) {
222
- return nullptr;
267
+ void SetEdsHealthStatus(XdsHealthStatus eds_health_status) {
268
+ eds_health_status_ = eds_health_status;
269
+ auto subchannel = GetSubchannel();
270
+ if (subchannel == nullptr) {
271
+ return;
272
+ }
273
+ if (eds_health_status_.status() == XdsHealthStatus::kDraining) {
274
+ subchannel_ = subchannel->Ref();
275
+ } else {
276
+ subchannel_ = subchannel;
223
277
  }
224
- return subchannel_->Ref();
225
278
  }
226
279
 
280
+ XdsHealthStatus eds_health_status() const { return eds_health_status_; }
281
+
227
282
  private:
228
- SubchannelWrapper* subchannel_ = nullptr;
283
+ absl::variant<SubchannelWrapper*, RefCountedPtr<SubchannelWrapper>>
284
+ subchannel_;
285
+ XdsHealthStatus eds_health_status_;
229
286
  };
230
287
 
231
288
  ~XdsOverrideHostLb() override;
@@ -237,17 +294,21 @@ class XdsOverrideHostLb : public LoadBalancingPolicy {
237
294
 
238
295
  void MaybeUpdatePickerLocked();
239
296
 
240
- RefCountedPtr<SubchannelWrapper> LookupSubchannel(absl::string_view address);
241
-
242
- void UpdateAddressMap(const absl::StatusOr<ServerAddressList>& addresses);
297
+ absl::StatusOr<ServerAddressList> UpdateAddressMap(
298
+ absl::StatusOr<ServerAddressList> addresses);
243
299
 
244
300
  RefCountedPtr<SubchannelWrapper> AdoptSubchannel(
245
301
  ServerAddress address, RefCountedPtr<SubchannelInterface> subchannel);
246
302
 
247
- void ResetSubchannel(absl::string_view key, SubchannelWrapper* subchannel);
303
+ void UnsetSubchannel(absl::string_view key, SubchannelWrapper* subchannel);
248
304
 
249
305
  RefCountedPtr<SubchannelWrapper> GetSubchannelByAddress(
250
- absl::string_view address);
306
+ absl::string_view address, XdsHealthStatusSet overriden_health_statuses);
307
+
308
+ void OnSubchannelConnectivityStateChange(absl::string_view subchannel_key)
309
+ ABSL_NO_THREAD_SAFETY_ANALYSIS; // Called from within the worker
310
+ // serializer and does not require
311
+ // additional synchronization
251
312
 
252
313
  // Current config from the resolver.
253
314
  RefCountedPtr<XdsOverrideHostLbConfig> config_;
@@ -272,8 +333,11 @@ class XdsOverrideHostLb : public LoadBalancingPolicy {
272
333
 
273
334
  XdsOverrideHostLb::Picker::Picker(
274
335
  RefCountedPtr<XdsOverrideHostLb> xds_override_host_lb,
275
- RefCountedPtr<SubchannelPicker> picker)
276
- : policy_(std::move(xds_override_host_lb)), picker_(std::move(picker)) {
336
+ RefCountedPtr<SubchannelPicker> picker,
337
+ XdsHealthStatusSet override_host_health_status_set)
338
+ : policy_(std::move(xds_override_host_lb)),
339
+ picker_(std::move(picker)),
340
+ override_host_health_status_set_(override_host_health_status_set) {
277
341
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_override_host_trace)) {
278
342
  gpr_log(GPR_INFO, "[xds_override_host_lb %p] constructed new picker %p",
279
343
  policy_.get(), this);
@@ -285,7 +349,8 @@ XdsOverrideHostLb::Picker::PickOverridenHost(absl::string_view override_host) {
285
349
  if (override_host.length() == 0) {
286
350
  return absl::nullopt;
287
351
  }
288
- auto subchannel = policy_->GetSubchannelByAddress(override_host);
352
+ auto subchannel = policy_->GetSubchannelByAddress(
353
+ override_host, override_host_health_status_set_);
289
354
  if (subchannel == nullptr) {
290
355
  return absl::nullopt;
291
356
  }
@@ -305,7 +370,7 @@ XdsOverrideHostLb::Picker::PickOverridenHost(absl::string_view override_host) {
305
370
  LoadBalancingPolicy::PickResult XdsOverrideHostLb::Picker::Pick(
306
371
  LoadBalancingPolicy::PickArgs args) {
307
372
  auto* call_state = static_cast<LbCallStateInternal*>(args.call_state);
308
- auto override_host = call_state->GetCallAttribute(XdsHostOverrideTypeName());
373
+ auto override_host = call_state->GetCallAttribute(XdsOverrideHostTypeName());
309
374
  auto overridden_host_pick = PickOverridenHost(override_host);
310
375
  if (overridden_host_pick.has_value()) {
311
376
  return std::move(*overridden_host_pick);
@@ -348,6 +413,10 @@ void XdsOverrideHostLb::ShutdownLocked() {
348
413
  gpr_log(GPR_INFO, "[xds_override_host_lb %p] shutting down", this);
349
414
  }
350
415
  shutting_down_ = true;
416
+ {
417
+ MutexLock lock(&subchannel_map_mu_);
418
+ subchannel_map_.clear();
419
+ }
351
420
  // Remove the child policy's interested_parties pollset_set from the
352
421
  // xDS policy.
353
422
  if (child_policy_ != nullptr) {
@@ -382,10 +451,9 @@ absl::Status XdsOverrideHostLb::UpdateLocked(UpdateArgs args) {
382
451
  if (child_policy_ == nullptr) {
383
452
  child_policy_ = CreateChildPolicyLocked(args.args);
384
453
  }
385
- UpdateAddressMap(args.addresses);
386
454
  // Update child policy.
387
455
  UpdateArgs update_args;
388
- update_args.addresses = std::move(args.addresses);
456
+ update_args.addresses = UpdateAddressMap(std::move(args.addresses));
389
457
  update_args.resolution_note = std::move(args.resolution_note);
390
458
  update_args.config = config_->child_config();
391
459
  update_args.args = std::move(args.args);
@@ -399,7 +467,8 @@ absl::Status XdsOverrideHostLb::UpdateLocked(UpdateArgs args) {
399
467
 
400
468
  void XdsOverrideHostLb::MaybeUpdatePickerLocked() {
401
469
  if (picker_ != nullptr) {
402
- auto xds_override_host_picker = MakeRefCounted<Picker>(Ref(), picker_);
470
+ auto xds_override_host_picker = MakeRefCounted<Picker>(
471
+ Ref(), picker_, config_->override_host_status_set());
403
472
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_override_host_trace)) {
404
473
  gpr_log(GPR_INFO,
405
474
  "[xds_override_host_lb %p] updating connectivity: state=%s "
@@ -435,69 +504,109 @@ OrphanablePtr<LoadBalancingPolicy> XdsOverrideHostLb::CreateChildPolicyLocked(
435
504
  return lb_policy;
436
505
  }
437
506
 
438
- void XdsOverrideHostLb::UpdateAddressMap(
439
- const absl::StatusOr<ServerAddressList>& addresses) {
440
- std::unordered_set<std::string> keys(addresses->size());
441
- if (addresses.ok()) {
442
- for (const auto& address : *addresses) {
443
- auto key = grpc_sockaddr_to_string(&address.address(), false);
444
- if (key.ok()) {
445
- keys.insert(std::move(*key));
446
- }
447
- }
507
+ absl::StatusOr<ServerAddressList> XdsOverrideHostLb::UpdateAddressMap(
508
+ absl::StatusOr<ServerAddressList> addresses) {
509
+ if (!addresses.ok()) {
510
+ return addresses;
448
511
  }
449
- MutexLock lock(&subchannel_map_mu_);
450
- for (auto it = subchannel_map_.begin(); it != subchannel_map_.end();) {
451
- if (keys.find(it->first) == keys.end()) {
452
- it = subchannel_map_.erase(it);
453
- } else {
454
- ++it;
512
+ ServerAddressList return_value;
513
+ std::map<const std::string, XdsHealthStatus> addresses_for_map;
514
+ for (const auto& address : *addresses) {
515
+ XdsHealthStatus status = GetAddressHealthStatus(address);
516
+ if (status.status() != XdsHealthStatus::kDraining) {
517
+ return_value.push_back(address);
518
+ } else if (!config_->override_host_status_set().Contains(status)) {
519
+ // Skip draining hosts if not in the override status set.
520
+ continue;
521
+ }
522
+ auto key = grpc_sockaddr_to_uri(&address.address());
523
+ if (key.ok()) {
524
+ addresses_for_map.emplace(std::move(*key), status);
455
525
  }
456
526
  }
457
- for (const auto& key : keys) {
458
- if (subchannel_map_.find(key) == subchannel_map_.end()) {
459
- subchannel_map_.emplace(key, SubchannelEntry());
527
+ {
528
+ MutexLock lock(&subchannel_map_mu_);
529
+ for (auto it = subchannel_map_.begin(); it != subchannel_map_.end();) {
530
+ if (addresses_for_map.find(it->first) == addresses_for_map.end()) {
531
+ it = subchannel_map_.erase(it);
532
+ } else {
533
+ ++it;
534
+ }
535
+ }
536
+ for (const auto& key_status : addresses_for_map) {
537
+ auto it = subchannel_map_.find(key_status.first);
538
+ if (it == subchannel_map_.end()) {
539
+ subchannel_map_.emplace(std::piecewise_construct,
540
+ std::forward_as_tuple(key_status.first),
541
+ std::forward_as_tuple(key_status.second));
542
+ } else {
543
+ it->second.SetEdsHealthStatus(key_status.second);
544
+ }
460
545
  }
461
546
  }
547
+ return return_value;
462
548
  }
463
549
 
464
550
  RefCountedPtr<XdsOverrideHostLb::SubchannelWrapper>
465
551
  XdsOverrideHostLb::AdoptSubchannel(
466
552
  ServerAddress address, RefCountedPtr<SubchannelInterface> subchannel) {
467
- auto subchannel_key = grpc_sockaddr_to_string(&address.address(), false);
468
- absl::optional<std::string> key;
469
- if (subchannel_key.ok()) {
470
- key = std::move(*subchannel_key);
553
+ auto key = grpc_sockaddr_to_uri(&address.address());
554
+ if (!key.ok()) {
555
+ return subchannel;
471
556
  }
472
557
  auto wrapper =
473
- MakeRefCounted<SubchannelWrapper>(std::move(subchannel), Ref(), key);
474
- if (key.has_value()) {
475
- MutexLock lock(&subchannel_map_mu_);
476
- auto it = subchannel_map_.find(*key);
477
- if (it != subchannel_map_.end()) {
478
- it->second.SetSubchannel(wrapper.get());
479
- }
558
+ MakeRefCounted<SubchannelWrapper>(std::move(subchannel), Ref(), *key);
559
+ MutexLock lock(&subchannel_map_mu_);
560
+ auto it = subchannel_map_.find(*key);
561
+ if (it != subchannel_map_.end()) {
562
+ it->second.SetSubchannel(wrapper.get());
480
563
  }
481
564
  return wrapper;
482
565
  }
483
566
 
484
- void XdsOverrideHostLb::ResetSubchannel(absl::string_view key,
567
+ void XdsOverrideHostLb::UnsetSubchannel(absl::string_view key,
485
568
  SubchannelWrapper* subchannel) {
486
569
  MutexLock lock(&subchannel_map_mu_);
487
570
  auto it = subchannel_map_.find(key);
488
571
  if (it != subchannel_map_.end()) {
489
- it->second.ResetSubchannel(subchannel);
572
+ if (subchannel == it->second.GetSubchannel()) {
573
+ it->second.UnsetSubchannel();
574
+ }
490
575
  }
491
576
  }
492
577
 
493
578
  RefCountedPtr<XdsOverrideHostLb::SubchannelWrapper>
494
- XdsOverrideHostLb::GetSubchannelByAddress(absl::string_view address) {
579
+ XdsOverrideHostLb::GetSubchannelByAddress(
580
+ absl::string_view address, XdsHealthStatusSet overriden_health_statuses) {
495
581
  MutexLock lock(&subchannel_map_mu_);
496
582
  auto it = subchannel_map_.find(address);
497
- if (it != subchannel_map_.end()) {
498
- return it->second.GetSubchannel();
583
+ if (it == subchannel_map_.end() || it->second.GetSubchannel() == nullptr) {
584
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_override_host_trace)) {
585
+ gpr_log(GPR_INFO, "Subchannel %s was not found",
586
+ std::string(address).c_str());
587
+ }
588
+ return nullptr;
589
+ }
590
+ if (!overriden_health_statuses.Contains(it->second.eds_health_status())) {
591
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_override_host_trace)) {
592
+ gpr_log(GPR_INFO, "Subchannel %s health status is not overridden (%s)",
593
+ std::string(address).c_str(),
594
+ it->second.eds_health_status().ToString());
595
+ }
596
+ return nullptr;
597
+ }
598
+ return it->second.GetSubchannel()->Ref();
599
+ }
600
+
601
+ void XdsOverrideHostLb::OnSubchannelConnectivityStateChange(
602
+ absl::string_view subchannel_key) {
603
+ auto it = subchannel_map_.find(subchannel_key);
604
+ if (it == subchannel_map_.end()) {
605
+ return;
606
+ }
607
+ if (it->second.eds_health_status().status() == XdsHealthStatus::kDraining) {
608
+ MaybeUpdatePickerLocked();
499
609
  }
500
- return nullptr;
501
610
  }
502
611
 
503
612
  //
@@ -551,35 +660,68 @@ void XdsOverrideHostLb::Helper::AddTraceEvent(TraceSeverity severity,
551
660
 
552
661
  XdsOverrideHostLb::SubchannelWrapper::SubchannelWrapper(
553
662
  RefCountedPtr<SubchannelInterface> subchannel,
554
- RefCountedPtr<XdsOverrideHostLb> policy,
555
- absl::optional<const std::string> key)
663
+ RefCountedPtr<XdsOverrideHostLb> policy, absl::string_view key)
556
664
  : DelegatingSubchannel(std::move(subchannel)),
557
- key_(std::move(key)),
558
- policy_(std::move(policy)) {}
665
+ key_(key),
666
+ policy_(std::move(policy)) {
667
+ auto watcher = std::make_unique<ConnectivityStateWatcher>(WeakRef());
668
+ watcher_ = watcher.get();
669
+ wrapped_subchannel()->WatchConnectivityState(std::move(watcher));
670
+ }
559
671
 
560
672
  XdsOverrideHostLb::SubchannelWrapper::~SubchannelWrapper() {
561
673
  if (key_.has_value()) {
562
- policy_->ResetSubchannel(*key_, this);
674
+ policy_->UnsetSubchannel(*key_, this);
563
675
  }
564
676
  }
565
677
 
566
678
  void XdsOverrideHostLb::SubchannelWrapper::WatchConnectivityState(
567
679
  std::unique_ptr<ConnectivityStateWatcherInterface> watcher) {
568
- auto watcher_id = watcher.get();
569
- auto wrapper =
570
- std::make_unique<ConnectivityStateWatcher>(std::move(watcher), Ref());
571
- watchers_.emplace(watcher_id, wrapper.get());
572
- wrapped_subchannel()->WatchConnectivityState(std::move(wrapper));
680
+ watchers_.insert(std::move(watcher));
573
681
  }
574
682
 
575
683
  void XdsOverrideHostLb::SubchannelWrapper::CancelConnectivityStateWatch(
576
684
  ConnectivityStateWatcherInterface* watcher) {
577
- auto original_watcher = watchers_.find(watcher);
578
- if (original_watcher != watchers_.end()) {
579
- wrapped_subchannel()->CancelConnectivityStateWatch(
580
- original_watcher->second);
581
- watchers_.erase(original_watcher);
685
+ auto it = watchers_.find(watcher);
686
+ if (it != watchers_.end()) {
687
+ watchers_.erase(it);
688
+ }
689
+ }
690
+
691
+ void XdsOverrideHostLb::SubchannelWrapper::UpdateConnectivityState(
692
+ grpc_connectivity_state state, absl::Status status) {
693
+ connectivity_state_.store(state);
694
+ // Sending connectivity state notifications to the watchers may cause the set
695
+ // of watchers to change, so we can't be iterating over the set of watchers
696
+ // while we send the notifications
697
+ std::vector<ConnectivityStateWatcherInterface*> watchers(watchers_.size());
698
+ for (const auto& watcher : watchers_) {
699
+ watchers.push_back(watcher.get());
582
700
  }
701
+ for (const auto& watcher : watchers) {
702
+ if (watchers_.find(watcher) != watchers_.end()) {
703
+ watcher->OnConnectivityStateChange(state, status);
704
+ }
705
+ }
706
+ if (key_.has_value()) {
707
+ policy_->OnSubchannelConnectivityStateChange(*key_);
708
+ }
709
+ }
710
+
711
+ void XdsOverrideHostLb::SubchannelWrapper::Orphan() {
712
+ key_.reset();
713
+ wrapped_subchannel()->CancelConnectivityStateWatch(watcher_);
714
+ }
715
+
716
+ grpc_pollset_set* XdsOverrideHostLb::SubchannelWrapper::
717
+ ConnectivityStateWatcher::interested_parties() {
718
+ return subchannel_->policy_->interested_parties();
719
+ }
720
+
721
+ void XdsOverrideHostLb::SubchannelWrapper::ConnectivityStateWatcher::
722
+ OnConnectivityStateChange(grpc_connectivity_state state,
723
+ absl::Status status) {
724
+ subchannel_->UpdateConnectivityState(state, status);
583
725
  }
584
726
 
585
727
  //
@@ -630,20 +772,46 @@ const JsonLoaderInterface* XdsOverrideHostLbConfig::JsonLoader(
630
772
  return kJsonLoader;
631
773
  }
632
774
 
633
- void XdsOverrideHostLbConfig::JsonPostLoad(const Json& json, const JsonArgs&,
775
+ void XdsOverrideHostLbConfig::JsonPostLoad(const Json& json,
776
+ const JsonArgs& args,
634
777
  ValidationErrors* errors) {
635
- ValidationErrors::ScopedField field(errors, ".childPolicy");
636
- auto it = json.object_value().find("childPolicy");
637
- if (it == json.object_value().end()) {
638
- errors->AddError("field not present");
639
- } else {
640
- auto child_policy_config =
641
- CoreConfiguration::Get().lb_policy_registry().ParseLoadBalancingConfig(
642
- it->second);
643
- if (!child_policy_config.ok()) {
644
- errors->AddError(child_policy_config.status().message());
778
+ {
779
+ ValidationErrors::ScopedField field(errors, ".childPolicy");
780
+ auto it = json.object_value().find("childPolicy");
781
+ if (it == json.object_value().end()) {
782
+ errors->AddError("field not present");
783
+ } else {
784
+ auto child_policy_config = CoreConfiguration::Get()
785
+ .lb_policy_registry()
786
+ .ParseLoadBalancingConfig(it->second);
787
+ if (!child_policy_config.ok()) {
788
+ errors->AddError(child_policy_config.status().message());
789
+ } else {
790
+ child_config_ = std::move(*child_policy_config);
791
+ }
792
+ }
793
+ }
794
+ {
795
+ ValidationErrors::ScopedField field(errors, ".overrideHostStatus");
796
+ auto host_status_list = LoadJsonObjectField<std::vector<std::string>>(
797
+ json.object_value(), args, "overrideHostStatus", errors,
798
+ /*required=*/false);
799
+ if (host_status_list.has_value()) {
800
+ for (size_t i = 0; i < host_status_list->size(); ++i) {
801
+ const std::string& host_status = (*host_status_list)[i];
802
+ auto status = XdsHealthStatus::FromString(host_status);
803
+ if (!status.has_value()) {
804
+ ValidationErrors::ScopedField field(errors,
805
+ absl::StrCat("[", i, "]"));
806
+ errors->AddError("invalid host status");
807
+ } else {
808
+ override_host_status_set_.Add(*status);
809
+ }
810
+ }
645
811
  } else {
646
- child_config_ = std::move(*child_policy_config);
812
+ override_host_status_set_ = XdsHealthStatusSet(
813
+ {XdsHealthStatus(XdsHealthStatus::HealthStatus::kHealthy),
814
+ XdsHealthStatus(XdsHealthStatus::HealthStatus::kUnknown)});
647
815
  }
648
816
  }
649
817
  }
@@ -14,13 +14,14 @@
14
14
  // limitations under the License.
15
15
  //
16
16
 
17
- #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_XDS_XDS_OVERRIDE_HOST_H
18
- #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_XDS_XDS_OVERRIDE_HOST_H
17
+ #ifndef GRPC_SRC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_XDS_XDS_OVERRIDE_HOST_H
18
+ #define GRPC_SRC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_XDS_XDS_OVERRIDE_HOST_H
19
19
 
20
20
  #include <grpc/support/port_platform.h>
21
21
 
22
22
  #include "absl/strings/string_view.h"
23
23
 
24
+ #include "src/core/ext/xds/xds_health_status.h"
24
25
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
25
26
  #include "src/core/lib/gprpp/validation_errors.h"
26
27
  #include "src/core/lib/json/json.h"
@@ -49,12 +50,18 @@ class XdsOverrideHostLbConfig : public LoadBalancingPolicy::Config {
49
50
  return child_config_;
50
51
  }
51
52
 
53
+ XdsHealthStatusSet override_host_status_set() const {
54
+ return override_host_status_set_;
55
+ }
56
+
52
57
  static const JsonLoaderInterface* JsonLoader(const JsonArgs&);
53
58
  void JsonPostLoad(const Json& json, const JsonArgs&,
54
59
  ValidationErrors* errors);
55
60
 
56
61
  private:
57
62
  RefCountedPtr<LoadBalancingPolicy::Config> child_config_;
63
+ XdsHealthStatusSet override_host_status_set_;
58
64
  };
65
+
59
66
  } // namespace grpc_core
60
- #endif // GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_XDS_XDS_OVERRIDE_HOST_H
67
+ #endif // GRPC_SRC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_XDS_XDS_OVERRIDE_HOST_H
@@ -223,6 +223,11 @@ absl::Status XdsWrrLocalityLb::UpdateLocked(UpdateArgs args) {
223
223
  }},
224
224
  },
225
225
  };
226
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_wrr_locality_lb_trace)) {
227
+ gpr_log(GPR_INFO,
228
+ "[xds_wrr_locality_lb %p] generated child policy config: %s", this,
229
+ child_config_json.Dump(/*indent=*/1).c_str());
230
+ }
226
231
  // Parse config.
227
232
  auto child_config =
228
233
  CoreConfiguration::Get().lb_policy_registry().ParseLoadBalancingConfig(
@@ -16,8 +16,8 @@
16
16
  //
17
17
  //
18
18
 
19
- #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LOCAL_SUBCHANNEL_POOL_H
20
- #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LOCAL_SUBCHANNEL_POOL_H
19
+ #ifndef GRPC_SRC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LOCAL_SUBCHANNEL_POOL_H
20
+ #define GRPC_SRC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LOCAL_SUBCHANNEL_POOL_H
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
@@ -56,4 +56,4 @@ class LocalSubchannelPool final : public SubchannelPoolInterface {
56
56
 
57
57
  } // namespace grpc_core
58
58
 
59
- #endif // GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LOCAL_SUBCHANNEL_POOL_H
59
+ #endif // GRPC_SRC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LOCAL_SUBCHANNEL_POOL_H