grpc 1.51.0 → 1.52.0.pre2

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

Potentially problematic release.


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

Files changed (886) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +91 -23
  3. data/include/grpc/byte_buffer.h +76 -1
  4. data/include/grpc/byte_buffer_reader.h +19 -1
  5. data/include/grpc/compression.h +2 -2
  6. data/include/grpc/event_engine/event_engine.h +17 -3
  7. data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -1
  8. data/include/grpc/event_engine/internal/slice_cast.h +67 -0
  9. data/include/grpc/event_engine/memory_allocator.h +1 -1
  10. data/include/grpc/event_engine/slice.h +24 -4
  11. data/include/grpc/event_engine/slice_buffer.h +14 -2
  12. data/include/grpc/fork.h +25 -1
  13. data/include/grpc/grpc.h +3 -3
  14. data/include/grpc/grpc_posix.h +1 -1
  15. data/include/grpc/impl/codegen/atm.h +3 -71
  16. data/include/grpc/impl/codegen/atm_gcc_atomic.h +3 -58
  17. data/include/grpc/impl/codegen/atm_gcc_sync.h +3 -59
  18. data/include/grpc/impl/codegen/atm_windows.h +3 -106
  19. data/include/grpc/impl/codegen/byte_buffer.h +4 -78
  20. data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -19
  21. data/include/grpc/impl/codegen/compression_types.h +3 -82
  22. data/include/grpc/impl/codegen/connectivity_state.h +3 -20
  23. data/include/grpc/impl/codegen/fork.h +4 -25
  24. data/include/grpc/impl/codegen/gpr_types.h +2 -34
  25. data/include/grpc/impl/codegen/grpc_types.h +3 -787
  26. data/include/grpc/impl/codegen/log.h +3 -86
  27. data/include/grpc/impl/codegen/port_platform.h +3 -755
  28. data/include/grpc/impl/codegen/propagation_bits.h +3 -28
  29. data/include/grpc/impl/codegen/slice.h +3 -106
  30. data/include/grpc/impl/codegen/status.h +4 -131
  31. data/include/grpc/impl/codegen/sync.h +3 -42
  32. data/include/grpc/impl/codegen/sync_abseil.h +3 -12
  33. data/include/grpc/impl/codegen/sync_custom.h +3 -14
  34. data/include/grpc/impl/codegen/sync_generic.h +3 -25
  35. data/include/grpc/impl/codegen/sync_posix.h +3 -28
  36. data/include/grpc/impl/codegen/sync_windows.h +3 -16
  37. data/include/grpc/impl/compression_types.h +109 -0
  38. data/include/grpc/impl/connectivity_state.h +47 -0
  39. data/include/grpc/impl/grpc_types.h +824 -0
  40. data/include/grpc/impl/propagation_bits.h +54 -0
  41. data/include/grpc/impl/slice_type.h +112 -0
  42. data/include/grpc/load_reporting.h +1 -1
  43. data/include/grpc/module.modulemap +5 -1
  44. data/include/grpc/slice.h +1 -1
  45. data/include/grpc/status.h +131 -1
  46. data/include/grpc/support/atm.h +70 -1
  47. data/include/grpc/support/atm_gcc_atomic.h +59 -1
  48. data/include/grpc/support/atm_gcc_sync.h +58 -1
  49. data/include/grpc/support/atm_windows.h +105 -1
  50. data/include/grpc/support/log.h +87 -1
  51. data/include/grpc/support/log_windows.h +1 -1
  52. data/include/grpc/support/port_platform.h +767 -1
  53. data/include/grpc/support/string_util.h +1 -1
  54. data/include/grpc/support/sync.h +35 -2
  55. data/include/grpc/support/sync_abseil.h +11 -1
  56. data/include/grpc/support/sync_custom.h +13 -1
  57. data/include/grpc/support/sync_generic.h +24 -1
  58. data/include/grpc/support/sync_posix.h +27 -1
  59. data/include/grpc/support/sync_windows.h +15 -1
  60. data/include/grpc/support/time.h +25 -2
  61. data/src/core/ext/filters/census/grpc_context.cc +17 -18
  62. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +9 -9
  63. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +1 -1
  64. data/src/core/ext/filters/channel_idle/idle_filter_state.h +1 -1
  65. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -0
  66. data/src/core/ext/filters/client_channel/backup_poller.cc +21 -21
  67. data/src/core/ext/filters/client_channel/backup_poller.h +21 -21
  68. data/src/core/ext/filters/client_channel/channel_connectivity.cc +45 -24
  69. data/src/core/ext/filters/client_channel/client_channel.cc +40 -31
  70. data/src/core/ext/filters/client_channel/client_channel.h +7 -6
  71. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +17 -17
  72. data/src/core/ext/filters/client_channel/client_channel_channelz.h +19 -19
  73. data/src/core/ext/filters/client_channel/client_channel_factory.cc +17 -17
  74. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +17 -17
  75. data/src/core/ext/filters/client_channel/config_selector.h +16 -20
  76. data/src/core/ext/filters/client_channel/dynamic_filters.cc +8 -8
  77. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +18 -18
  78. data/src/core/ext/filters/client_channel/health/health_check_client.cc +1 -1
  79. data/src/core/ext/filters/client_channel/http_proxy.cc +39 -39
  80. data/src/core/ext/filters/client_channel/http_proxy.h +18 -18
  81. data/src/core/ext/filters/client_channel/lb_call_state_internal.h +39 -0
  82. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +17 -17
  83. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +2 -2
  84. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +1 -2
  85. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +58 -130
  86. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +37 -21
  87. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +102 -116
  88. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +24 -25
  89. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +2 -4
  90. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +17 -17
  91. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +18 -19
  92. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +18 -19
  93. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +18 -19
  94. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +5 -5
  95. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +173 -196
  96. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +10 -19
  97. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +66 -97
  98. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +14 -13
  99. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +1 -1
  100. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +98 -84
  101. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +10 -8
  102. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +30 -16
  103. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +21 -35
  104. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +45 -39
  105. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +11 -23
  106. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +16 -49
  107. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +31 -21
  108. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +651 -0
  109. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +60 -0
  110. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +4 -4
  111. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +18 -18
  112. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +0 -1
  113. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +3 -3
  114. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +40 -41
  115. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +21 -21
  116. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +60 -59
  117. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +67 -66
  118. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +50 -51
  119. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +18 -18
  120. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +18 -18
  121. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +18 -19
  122. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +1 -1
  123. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -1
  124. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +0 -1
  125. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +44 -33
  126. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +8 -10
  127. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +59 -73
  128. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +1 -1
  129. data/src/core/ext/filters/client_channel/retry_filter.cc +1 -1
  130. data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -1
  131. data/src/core/ext/filters/client_channel/retry_throttle.cc +19 -21
  132. data/src/core/ext/filters/client_channel/retry_throttle.h +18 -18
  133. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +1 -1
  134. data/src/core/ext/filters/client_channel/subchannel.cc +139 -155
  135. data/src/core/ext/filters/client_channel/subchannel.h +15 -38
  136. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +18 -18
  137. data/src/core/ext/filters/deadline/deadline_filter.cc +21 -3
  138. data/src/core/ext/filters/deadline/deadline_filter.h +1 -1
  139. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +2 -1
  140. data/src/core/ext/filters/http/client/http_client_filter.cc +20 -21
  141. data/src/core/ext/filters/http/client/http_client_filter.h +17 -17
  142. data/src/core/ext/filters/http/client_authority_filter.cc +18 -18
  143. data/src/core/ext/filters/http/client_authority_filter.h +18 -18
  144. data/src/core/ext/filters/http/http_filters_plugin.cc +35 -51
  145. data/src/core/ext/filters/http/message_compress/compression_filter.cc +315 -0
  146. data/src/core/ext/filters/http/message_compress/compression_filter.h +132 -0
  147. data/src/core/ext/filters/http/server/http_server_filter.cc +18 -18
  148. data/src/core/ext/filters/http/server/http_server_filter.h +18 -18
  149. data/src/core/ext/filters/message_size/message_size_filter.cc +6 -6
  150. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  151. data/src/core/ext/filters/server_config_selector/server_config_selector.h +6 -8
  152. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +3 -4
  153. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +229 -0
  154. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +66 -0
  155. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +82 -0
  156. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +93 -0
  157. data/src/core/ext/transport/chttp2/alpn/alpn.cc +18 -18
  158. data/src/core/ext/transport/chttp2/alpn/alpn.h +22 -22
  159. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +54 -44
  160. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +28 -22
  161. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +24 -25
  162. data/src/core/ext/transport/chttp2/server/chttp2_server.h +18 -18
  163. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +17 -17
  164. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +30 -30
  165. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +29 -29
  166. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +27 -27
  167. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +66 -35
  168. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +18 -19
  169. data/src/core/ext/transport/chttp2/transport/context_list.cc +19 -19
  170. data/src/core/ext/transport/chttp2/transport/context_list.h +25 -25
  171. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +0 -36
  172. data/src/core/ext/transport/chttp2/transport/decode_huff.h +35 -82
  173. data/src/core/ext/transport/chttp2/transport/flow_control.cc +75 -38
  174. data/src/core/ext/transport/chttp2/transport/flow_control.h +56 -31
  175. data/src/core/ext/transport/chttp2/transport/frame.h +19 -19
  176. data/src/core/ext/transport/chttp2/transport/frame_data.cc +17 -17
  177. data/src/core/ext/transport/chttp2/transport/frame_data.h +22 -22
  178. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +23 -23
  179. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +18 -18
  180. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +21 -21
  181. data/src/core/ext/transport/chttp2/transport/frame_ping.h +19 -19
  182. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +18 -18
  183. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +18 -18
  184. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +19 -19
  185. data/src/core/ext/transport/chttp2/transport/frame_settings.h +20 -20
  186. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +17 -17
  187. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +18 -18
  188. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +129 -176
  189. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +39 -58
  190. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +69 -111
  191. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +20 -20
  192. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +19 -20
  193. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +18 -18
  194. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +21 -19
  195. data/src/core/ext/transport/chttp2/transport/http2_settings.h +36 -34
  196. data/src/core/ext/transport/chttp2/transport/http_trace.cc +19 -0
  197. data/src/core/ext/transport/chttp2/transport/http_trace.h +24 -0
  198. data/src/core/ext/transport/chttp2/transport/huffsyms.cc +20 -20
  199. data/src/core/ext/transport/chttp2/transport/huffsyms.h +19 -19
  200. data/src/core/ext/transport/chttp2/transport/internal.h +170 -163
  201. data/src/core/ext/transport/chttp2/transport/parsing.cc +96 -28
  202. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +19 -19
  203. data/src/core/ext/transport/chttp2/transport/stream_map.cc +23 -23
  204. data/src/core/ext/transport/chttp2/transport/stream_map.h +31 -31
  205. data/src/core/ext/transport/chttp2/transport/varint.cc +17 -17
  206. data/src/core/ext/transport/chttp2/transport/varint.h +24 -24
  207. data/src/core/ext/transport/chttp2/transport/writing.cc +45 -41
  208. data/src/core/ext/transport/inproc/inproc_plugin.cc +17 -17
  209. data/src/core/ext/transport/inproc/inproc_transport.cc +25 -25
  210. data/src/core/ext/transport/inproc/inproc_transport.h +19 -19
  211. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c +62 -0
  212. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +179 -0
  213. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c +46 -0
  214. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +98 -0
  215. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.c +47 -0
  216. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.h +107 -0
  217. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +3 -2
  218. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +9 -0
  219. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +0 -1
  220. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.c +46 -0
  221. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.h +98 -0
  222. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.c +62 -0
  223. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.h +174 -0
  224. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.c +36 -0
  225. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.h +74 -0
  226. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.c +65 -0
  227. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.h +191 -0
  228. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.c +127 -0
  229. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.h +474 -0
  230. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.c +67 -0
  231. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.h +214 -0
  232. data/src/core/ext/upb-generated/xds/type/v3/range.upb.c +64 -0
  233. data/src/core/ext/upb-generated/xds/type/v3/range.upb.h +208 -0
  234. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +0 -1
  235. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +60 -0
  236. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +40 -0
  237. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +50 -0
  238. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +35 -0
  239. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.c +45 -0
  240. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.h +35 -0
  241. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.c +43 -0
  242. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.h +35 -0
  243. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.c +51 -0
  244. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.h +40 -0
  245. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.c +36 -0
  246. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.h +35 -0
  247. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.c +55 -0
  248. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.h +40 -0
  249. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +9 -9
  250. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.c +71 -0
  251. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.h +60 -0
  252. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.c +60 -0
  253. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.h +40 -0
  254. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.c +36 -0
  255. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.h +45 -0
  256. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +4 -7
  257. data/src/core/ext/xds/xds_api.cc +5 -27
  258. data/src/core/ext/xds/xds_api.h +2 -1
  259. data/src/core/ext/xds/xds_certificate_provider.h +1 -1
  260. data/src/core/ext/xds/xds_channel_args.h +1 -1
  261. data/src/core/ext/xds/xds_channel_stack_modifier.h +2 -2
  262. data/src/core/ext/xds/xds_client.cc +14 -6
  263. data/src/core/ext/xds/xds_client.h +6 -3
  264. data/src/core/ext/xds/xds_client_grpc.cc +26 -0
  265. data/src/core/ext/xds/xds_client_grpc.h +1 -1
  266. data/src/core/ext/xds/xds_client_stats.cc +17 -17
  267. data/src/core/ext/xds/xds_client_stats.h +18 -18
  268. data/src/core/ext/xds/xds_cluster.cc +94 -46
  269. data/src/core/ext/xds/xds_cluster.h +44 -23
  270. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +30 -50
  271. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +14 -9
  272. data/src/core/ext/xds/xds_common_types.cc +4 -3
  273. data/src/core/ext/xds/xds_endpoint.cc +8 -2
  274. data/src/core/ext/xds/xds_health_status.cc +80 -0
  275. data/src/core/ext/xds/xds_health_status.h +82 -0
  276. data/src/core/ext/xds/xds_http_fault_filter.cc +7 -6
  277. data/src/core/ext/xds/xds_http_fault_filter.h +3 -3
  278. data/src/core/ext/xds/xds_http_filters.cc +11 -6
  279. data/src/core/ext/xds/xds_http_filters.h +5 -5
  280. data/src/core/ext/xds/xds_http_rbac_filter.cc +7 -6
  281. data/src/core/ext/xds/xds_http_rbac_filter.h +3 -3
  282. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +218 -0
  283. data/src/core/ext/xds/xds_http_stateful_session_filter.h +58 -0
  284. data/src/core/ext/xds/xds_lb_policy_registry.cc +0 -4
  285. data/src/core/ext/xds/xds_listener.cc +14 -28
  286. data/src/core/ext/xds/xds_listener.h +2 -0
  287. data/src/core/ext/xds/xds_resource_type_impl.h +8 -6
  288. data/src/core/ext/xds/xds_route_config.cc +501 -529
  289. data/src/core/ext/xds/xds_route_config.h +29 -18
  290. data/src/core/ext/xds/xds_server_config_fetcher.cc +12 -24
  291. data/src/core/ext/xds/xds_transport_grpc.cc +2 -2
  292. data/src/core/ext/xds/xds_transport_grpc.h +1 -1
  293. data/src/core/lib/address_utils/parse_address.cc +19 -19
  294. data/src/core/lib/address_utils/parse_address.h +32 -32
  295. data/src/core/lib/address_utils/sockaddr_utils.cc +29 -28
  296. data/src/core/lib/address_utils/sockaddr_utils.h +33 -33
  297. data/src/core/lib/avl/avl.h +4 -4
  298. data/src/core/lib/backoff/backoff.cc +17 -17
  299. data/src/core/lib/backoff/backoff.h +18 -18
  300. data/src/core/lib/channel/call_tracer.h +10 -1
  301. data/src/core/lib/channel/channel_args.cc +19 -20
  302. data/src/core/lib/channel/channel_args.h +43 -42
  303. data/src/core/lib/channel/channel_args_preconditioning.h +1 -1
  304. data/src/core/lib/channel/channel_stack.cc +39 -38
  305. data/src/core/lib/channel/channel_stack.h +127 -127
  306. data/src/core/lib/channel/channel_stack_builder.cc +17 -17
  307. data/src/core/lib/channel/channel_stack_builder_impl.cc +18 -18
  308. data/src/core/lib/channel/channel_trace.cc +17 -17
  309. data/src/core/lib/channel/channel_trace.h +19 -19
  310. data/src/core/lib/channel/channelz.cc +17 -18
  311. data/src/core/lib/channel/channelz.h +26 -26
  312. data/src/core/lib/channel/channelz_registry.cc +17 -17
  313. data/src/core/lib/channel/channelz_registry.h +18 -18
  314. data/src/core/lib/channel/connected_channel.cc +43 -34
  315. data/src/core/lib/channel/connected_channel.h +18 -18
  316. data/src/core/lib/channel/context.h +18 -18
  317. data/src/core/lib/channel/promise_based_filter.cc +191 -68
  318. data/src/core/lib/channel/promise_based_filter.h +10 -1
  319. data/src/core/lib/channel/status_util.cc +35 -17
  320. data/src/core/lib/channel/status_util.h +26 -19
  321. data/src/core/lib/compression/compression.cc +19 -19
  322. data/src/core/lib/compression/compression_internal.cc +41 -48
  323. data/src/core/lib/compression/compression_internal.h +22 -22
  324. data/src/core/lib/compression/message_compress.cc +21 -21
  325. data/src/core/lib/compression/message_compress.h +25 -25
  326. data/src/core/lib/config/core_configuration.h +1 -1
  327. data/src/core/lib/debug/stats.cc +17 -17
  328. data/src/core/lib/debug/stats.h +17 -17
  329. data/src/core/lib/debug/trace.cc +18 -18
  330. data/src/core/lib/debug/trace.h +19 -19
  331. data/src/core/lib/event_engine/executor/executor.h +1 -1
  332. data/src/core/lib/event_engine/forkable.h +1 -1
  333. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +27 -31
  334. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +2 -2
  335. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +36 -37
  336. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +3 -3
  337. data/src/core/lib/event_engine/posix_engine/event_poller.h +3 -3
  338. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +2 -2
  339. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +2 -2
  340. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +2 -2
  341. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +46 -46
  342. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +10 -12
  343. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +2 -2
  344. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +79 -41
  345. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +11 -9
  346. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +33 -40
  347. data/src/core/lib/event_engine/posix_engine/posix_engine.h +14 -14
  348. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +2 -2
  349. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +236 -0
  350. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +228 -0
  351. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +380 -0
  352. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +91 -0
  353. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +55 -283
  354. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +4 -49
  355. data/src/core/lib/event_engine/posix_engine/timer.cc +49 -49
  356. data/src/core/lib/event_engine/posix_engine/timer.h +87 -87
  357. data/src/core/lib/event_engine/posix_engine/timer_heap.cc +27 -27
  358. data/src/core/lib/event_engine/posix_engine/timer_heap.h +21 -21
  359. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +19 -20
  360. data/src/core/lib/event_engine/posix_engine/timer_manager.h +20 -20
  361. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +39 -8
  362. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +46 -40
  363. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +8 -7
  364. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +2 -2
  365. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +6 -7
  366. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +2 -2
  367. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +28 -28
  368. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +4 -4
  369. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +3 -3
  370. data/src/core/lib/event_engine/socket_notifier.h +1 -1
  371. data/src/core/lib/event_engine/tcp_socket_utils.cc +373 -0
  372. data/src/core/lib/event_engine/tcp_socket_utils.h +85 -0
  373. data/src/core/lib/event_engine/thread_pool.cc +19 -18
  374. data/src/core/lib/event_engine/thread_pool.h +17 -17
  375. data/src/core/lib/event_engine/time_util.h +1 -1
  376. data/src/core/lib/event_engine/windows/iocp.cc +13 -12
  377. data/src/core/lib/event_engine/windows/iocp.h +1 -1
  378. data/src/core/lib/event_engine/windows/win_socket.cc +2 -2
  379. data/src/core/lib/event_engine/windows/windows_engine.cc +8 -8
  380. data/src/core/lib/event_engine/windows/windows_engine.h +1 -1
  381. data/src/core/lib/experiments/experiments.cc +5 -16
  382. data/src/core/lib/experiments/experiments.h +7 -12
  383. data/src/core/lib/gpr/alloc.cc +19 -17
  384. data/src/core/lib/gpr/alloc.h +18 -18
  385. data/src/core/lib/gpr/atm.cc +17 -17
  386. data/src/core/lib/gpr/cpu_iphone.cc +24 -24
  387. data/src/core/lib/gpr/cpu_linux.cc +22 -21
  388. data/src/core/lib/gpr/cpu_posix.cc +23 -22
  389. data/src/core/lib/gpr/cpu_windows.cc +20 -18
  390. data/src/core/lib/gpr/log.cc +27 -19
  391. data/src/core/lib/gpr/log_android.cc +22 -20
  392. data/src/core/lib/gpr/log_linux.cc +21 -20
  393. data/src/core/lib/gpr/log_posix.cc +20 -19
  394. data/src/core/lib/gpr/log_windows.cc +25 -24
  395. data/src/core/lib/gpr/spinlock.h +18 -18
  396. data/src/core/lib/gpr/string.cc +25 -24
  397. data/src/core/lib/gpr/string.h +57 -57
  398. data/src/core/lib/gpr/string_posix.cc +24 -24
  399. data/src/core/lib/gpr/string_util_windows.cc +22 -22
  400. data/src/core/lib/gpr/string_windows.cc +24 -24
  401. data/src/core/lib/gpr/sync.cc +25 -25
  402. data/src/core/lib/gpr/sync_abseil.cc +22 -20
  403. data/src/core/lib/gpr/sync_posix.cc +23 -21
  404. data/src/core/lib/gpr/sync_windows.cc +29 -27
  405. data/src/core/lib/gpr/time.cc +23 -21
  406. data/src/core/lib/gpr/time_posix.cc +35 -30
  407. data/src/core/lib/gpr/time_precise.cc +22 -22
  408. data/src/core/lib/gpr/time_precise.h +18 -19
  409. data/src/core/lib/gpr/time_windows.cc +25 -22
  410. data/src/core/lib/gpr/tmpfile.h +22 -22
  411. data/src/core/lib/gpr/tmpfile_msys.cc +21 -20
  412. data/src/core/lib/gpr/tmpfile_posix.cc +19 -18
  413. data/src/core/lib/gpr/tmpfile_windows.cc +23 -22
  414. data/src/core/lib/gpr/useful.h +40 -27
  415. data/src/core/lib/gpr/wrap_memcpy.cc +23 -23
  416. data/src/core/lib/gprpp/atomic_utils.h +18 -18
  417. data/src/core/lib/gprpp/bitset.h +24 -0
  418. data/src/core/{ext/filters/http/message_compress/message_decompress_filter.h → lib/gprpp/crash.cc} +15 -14
  419. data/src/core/lib/gprpp/crash.h +34 -0
  420. data/src/core/lib/gprpp/debug_location.h +18 -18
  421. data/src/core/lib/gprpp/dual_ref_counted.h +1 -1
  422. data/src/core/lib/gprpp/env.h +20 -20
  423. data/src/core/lib/gprpp/env_linux.cc +21 -21
  424. data/src/core/lib/gprpp/env_posix.cc +18 -18
  425. data/src/core/lib/gprpp/env_windows.cc +18 -18
  426. data/src/core/lib/gprpp/examine_stack.cc +17 -17
  427. data/src/core/lib/gprpp/examine_stack.h +18 -18
  428. data/src/core/lib/gprpp/fork.cc +21 -22
  429. data/src/core/lib/gprpp/fork.h +22 -22
  430. data/src/core/lib/gprpp/global_config.h +18 -18
  431. data/src/core/lib/gprpp/global_config_custom.h +18 -18
  432. data/src/core/lib/gprpp/global_config_env.cc +17 -17
  433. data/src/core/lib/gprpp/global_config_env.h +23 -23
  434. data/src/core/lib/gprpp/global_config_generic.h +18 -18
  435. data/src/core/lib/gprpp/host_port.cc +26 -26
  436. data/src/core/lib/gprpp/host_port.h +29 -28
  437. data/src/core/lib/gprpp/manual_constructor.h +18 -17
  438. data/src/core/lib/gprpp/memory.h +18 -18
  439. data/src/core/lib/gprpp/mpscq.cc +17 -17
  440. data/src/core/lib/gprpp/mpscq.h +18 -18
  441. data/src/core/lib/gprpp/no_destruct.h +1 -0
  442. data/src/core/lib/gprpp/orphanable.h +18 -18
  443. data/src/core/lib/gprpp/ref_counted.h +18 -18
  444. data/src/core/lib/gprpp/ref_counted_ptr.h +19 -18
  445. data/src/core/lib/gprpp/stat_windows.cc +1 -0
  446. data/src/core/lib/gprpp/status_helper.cc +4 -3
  447. data/src/core/lib/gprpp/sync.h +20 -20
  448. data/src/core/lib/gprpp/table.h +1 -0
  449. data/src/core/lib/gprpp/thd.h +19 -19
  450. data/src/core/lib/gprpp/thd_posix.cc +30 -31
  451. data/src/core/lib/gprpp/thd_windows.cc +25 -24
  452. data/src/core/lib/gprpp/time.cc +13 -7
  453. data/src/core/lib/gprpp/time.h +0 -1
  454. data/src/core/lib/gprpp/time_averaged_stats.cc +20 -20
  455. data/src/core/lib/gprpp/time_averaged_stats.h +48 -48
  456. data/src/core/lib/gprpp/time_util.h +1 -1
  457. data/src/core/lib/gprpp/unique_type_name.h +18 -18
  458. data/src/core/lib/handshaker/proxy_mapper.h +18 -18
  459. data/src/core/lib/handshaker/proxy_mapper_registry.cc +17 -17
  460. data/src/core/lib/handshaker/proxy_mapper_registry.h +18 -18
  461. data/src/core/lib/http/format_request.cc +18 -18
  462. data/src/core/lib/http/format_request.h +18 -18
  463. data/src/core/lib/http/httpcli.cc +17 -17
  464. data/src/core/lib/http/httpcli.h +20 -21
  465. data/src/core/lib/http/httpcli_security_connector.cc +18 -19
  466. data/src/core/lib/http/parser.cc +22 -22
  467. data/src/core/lib/http/parser.h +32 -32
  468. data/src/core/lib/iomgr/block_annotate.h +21 -21
  469. data/src/core/lib/iomgr/buffer_list.cc +52 -21
  470. data/src/core/lib/iomgr/buffer_list.h +63 -57
  471. data/src/core/lib/iomgr/call_combiner.cc +18 -17
  472. data/src/core/lib/iomgr/call_combiner.h +18 -18
  473. data/src/core/lib/iomgr/cfstream_handle.cc +20 -20
  474. data/src/core/lib/iomgr/cfstream_handle.h +22 -22
  475. data/src/core/lib/iomgr/closure.h +42 -41
  476. data/src/core/lib/iomgr/combiner.cc +18 -17
  477. data/src/core/lib/iomgr/combiner.h +18 -18
  478. data/src/core/lib/iomgr/dualstack_socket_posix.cc +21 -21
  479. data/src/core/lib/iomgr/dynamic_annotations.h +20 -20
  480. data/src/core/lib/iomgr/endpoint.cc +17 -17
  481. data/src/core/lib/iomgr/endpoint.h +46 -46
  482. data/src/core/lib/iomgr/endpoint_cfstream.cc +18 -18
  483. data/src/core/lib/iomgr/endpoint_cfstream.h +27 -27
  484. data/src/core/lib/iomgr/endpoint_pair.h +18 -18
  485. data/src/core/lib/iomgr/endpoint_pair_posix.cc +18 -17
  486. data/src/core/lib/iomgr/endpoint_pair_windows.cc +18 -17
  487. data/src/core/lib/iomgr/error.cc +22 -19
  488. data/src/core/lib/iomgr/error.h +20 -21
  489. data/src/core/lib/iomgr/error_cfstream.cc +18 -18
  490. data/src/core/lib/iomgr/error_cfstream.h +19 -19
  491. data/src/core/lib/iomgr/ev_apple.cc +17 -17
  492. data/src/core/lib/iomgr/ev_apple.h +17 -17
  493. data/src/core/lib/iomgr/ev_epoll1_linux.cc +182 -170
  494. data/src/core/lib/iomgr/ev_epoll1_linux.h +18 -18
  495. data/src/core/lib/iomgr/ev_poll_posix.cc +185 -174
  496. data/src/core/lib/iomgr/ev_poll_posix.h +18 -18
  497. data/src/core/lib/iomgr/ev_posix.cc +36 -28
  498. data/src/core/lib/iomgr/ev_posix.h +85 -81
  499. data/src/core/lib/iomgr/ev_windows.cc +18 -18
  500. data/src/core/lib/iomgr/exec_ctx.cc +31 -30
  501. data/src/core/lib/iomgr/exec_ctx.h +139 -138
  502. data/src/core/lib/iomgr/executor.cc +20 -19
  503. data/src/core/lib/iomgr/executor.h +24 -24
  504. data/src/core/lib/iomgr/fork_posix.cc +24 -22
  505. data/src/core/lib/iomgr/fork_windows.cc +21 -21
  506. data/src/core/lib/iomgr/gethostname.h +18 -18
  507. data/src/core/lib/iomgr/gethostname_fallback.cc +17 -17
  508. data/src/core/lib/iomgr/gethostname_host_name_max.cc +17 -17
  509. data/src/core/lib/iomgr/gethostname_sysconf.cc +17 -17
  510. data/src/core/lib/iomgr/grpc_if_nametoindex.h +20 -20
  511. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +20 -19
  512. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +20 -19
  513. data/src/core/lib/iomgr/internal_errqueue.cc +1 -1
  514. data/src/core/lib/iomgr/internal_errqueue.h +80 -80
  515. data/src/core/lib/iomgr/iocp_windows.cc +21 -21
  516. data/src/core/lib/iomgr/iocp_windows.h +18 -18
  517. data/src/core/lib/iomgr/iomgr.cc +19 -18
  518. data/src/core/lib/iomgr/iomgr.h +32 -32
  519. data/src/core/lib/iomgr/iomgr_internal.cc +17 -17
  520. data/src/core/lib/iomgr/iomgr_internal.h +25 -25
  521. data/src/core/lib/iomgr/iomgr_posix.cc +18 -18
  522. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +18 -18
  523. data/src/core/lib/iomgr/iomgr_windows.cc +22 -21
  524. data/src/core/lib/iomgr/load_file.cc +19 -18
  525. data/src/core/lib/iomgr/load_file.h +20 -20
  526. data/src/core/lib/iomgr/lockfree_event.cc +104 -104
  527. data/src/core/lib/iomgr/lockfree_event.h +19 -19
  528. data/src/core/lib/iomgr/nameser.h +84 -84
  529. data/src/core/lib/iomgr/polling_entity.cc +25 -21
  530. data/src/core/lib/iomgr/polling_entity.h +27 -27
  531. data/src/core/lib/iomgr/pollset.cc +17 -17
  532. data/src/core/lib/iomgr/pollset.h +51 -51
  533. data/src/core/lib/iomgr/pollset_set.cc +17 -17
  534. data/src/core/lib/iomgr/pollset_set.h +22 -22
  535. data/src/core/lib/iomgr/pollset_set_windows.cc +18 -18
  536. data/src/core/lib/iomgr/pollset_set_windows.h +18 -18
  537. data/src/core/lib/iomgr/pollset_windows.cc +26 -25
  538. data/src/core/lib/iomgr/pollset_windows.h +22 -22
  539. data/src/core/lib/iomgr/port.h +29 -29
  540. data/src/core/lib/iomgr/python_util.h +18 -18
  541. data/src/core/lib/iomgr/resolve_address.cc +18 -17
  542. data/src/core/lib/iomgr/resolve_address.h +18 -18
  543. data/src/core/lib/iomgr/resolve_address_impl.h +1 -1
  544. data/src/core/lib/iomgr/resolve_address_posix.cc +21 -20
  545. data/src/core/lib/iomgr/resolve_address_windows.cc +4 -3
  546. data/src/core/lib/iomgr/resolved_address.h +1 -1
  547. data/src/core/lib/iomgr/sockaddr.h +21 -21
  548. data/src/core/lib/iomgr/sockaddr_posix.h +18 -18
  549. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +18 -17
  550. data/src/core/lib/iomgr/sockaddr_windows.h +18 -18
  551. data/src/core/lib/iomgr/socket_factory_posix.cc +18 -18
  552. data/src/core/lib/iomgr/socket_factory_posix.h +30 -30
  553. data/src/core/lib/iomgr/socket_mutator.cc +19 -18
  554. data/src/core/lib/iomgr/socket_mutator.h +37 -37
  555. data/src/core/lib/iomgr/socket_utils.h +24 -24
  556. data/src/core/lib/iomgr/socket_utils_common_posix.cc +38 -37
  557. data/src/core/lib/iomgr/socket_utils_linux.cc +18 -17
  558. data/src/core/lib/iomgr/socket_utils_posix.cc +21 -20
  559. data/src/core/lib/iomgr/socket_utils_posix.h +76 -76
  560. data/src/core/lib/iomgr/socket_utils_windows.cc +20 -19
  561. data/src/core/lib/iomgr/socket_windows.cc +35 -34
  562. data/src/core/lib/iomgr/socket_windows.h +56 -56
  563. data/src/core/lib/iomgr/systemd_utils.cc +116 -0
  564. data/src/core/lib/iomgr/systemd_utils.h +33 -0
  565. data/src/core/lib/iomgr/tcp_client.cc +17 -17
  566. data/src/core/lib/iomgr/tcp_client.h +26 -26
  567. data/src/core/lib/iomgr/tcp_client_cfstream.cc +19 -18
  568. data/src/core/lib/iomgr/tcp_client_posix.cc +39 -38
  569. data/src/core/lib/iomgr/tcp_client_posix.h +43 -43
  570. data/src/core/lib/iomgr/tcp_client_windows.cc +28 -27
  571. data/src/core/lib/iomgr/tcp_posix.cc +136 -134
  572. data/src/core/lib/iomgr/tcp_posix.h +27 -27
  573. data/src/core/lib/iomgr/tcp_server.cc +30 -22
  574. data/src/core/lib/iomgr/tcp_server.h +68 -62
  575. data/src/core/lib/iomgr/tcp_server_posix.cc +91 -61
  576. data/src/core/lib/iomgr/tcp_server_utils_posix.h +54 -51
  577. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +72 -34
  578. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +28 -27
  579. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +18 -18
  580. data/src/core/lib/iomgr/tcp_server_windows.cc +71 -75
  581. data/src/core/lib/iomgr/tcp_windows.cc +83 -60
  582. data/src/core/lib/iomgr/tcp_windows.h +29 -29
  583. data/src/core/lib/iomgr/timer.cc +17 -17
  584. data/src/core/lib/iomgr/timer.h +65 -65
  585. data/src/core/lib/iomgr/timer_generic.cc +106 -107
  586. data/src/core/lib/iomgr/timer_generic.h +19 -19
  587. data/src/core/lib/iomgr/timer_heap.cc +25 -25
  588. data/src/core/lib/iomgr/timer_heap.h +19 -19
  589. data/src/core/lib/iomgr/timer_manager.cc +30 -29
  590. data/src/core/lib/iomgr/timer_manager.h +25 -25
  591. data/src/core/lib/iomgr/unix_sockets_posix.cc +18 -17
  592. data/src/core/lib/iomgr/unix_sockets_posix.h +18 -18
  593. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +19 -17
  594. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +19 -18
  595. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +23 -23
  596. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +19 -18
  597. data/src/core/lib/iomgr/wakeup_fd_pipe.h +18 -18
  598. data/src/core/lib/iomgr/wakeup_fd_posix.cc +18 -18
  599. data/src/core/lib/iomgr/wakeup_fd_posix.h +50 -50
  600. data/src/core/lib/json/json_object_loader.cc +10 -0
  601. data/src/core/lib/json/json_object_loader.h +15 -1
  602. data/src/core/lib/json/json_reader.cc +28 -28
  603. data/src/core/lib/json/json_writer.cc +56 -56
  604. data/src/core/lib/load_balancing/lb_policy.cc +17 -17
  605. data/src/core/lib/load_balancing/lb_policy.h +3 -4
  606. data/src/core/lib/load_balancing/subchannel_interface.h +1 -1
  607. data/src/core/lib/matchers/matchers.cc +3 -1
  608. data/src/core/lib/matchers/matchers.h +1 -1
  609. data/src/core/lib/promise/activity.h +20 -12
  610. data/src/core/lib/promise/arena_promise.h +2 -1
  611. data/src/core/lib/promise/context.h +1 -0
  612. data/src/core/lib/promise/detail/promise_factory.h +1 -0
  613. data/src/core/lib/promise/detail/switch.h +18 -18
  614. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +18 -12
  615. data/src/core/lib/promise/for_each.h +68 -42
  616. data/src/core/lib/promise/latch.h +13 -19
  617. data/src/core/lib/promise/map.h +1 -0
  618. data/src/core/lib/promise/map_pipe.h +1 -0
  619. data/src/core/lib/promise/poll.h +6 -0
  620. data/src/core/lib/promise/seq.h +1 -0
  621. data/src/core/lib/promise/try_concurrently.h +1 -0
  622. data/src/core/lib/promise/try_seq.h +1 -0
  623. data/src/core/lib/resolver/resolver.cc +17 -17
  624. data/src/core/lib/resolver/server_address.cc +17 -17
  625. data/src/core/lib/resolver/server_address.h +18 -18
  626. data/src/core/lib/resource_quota/api.h +1 -1
  627. data/src/core/lib/resource_quota/arena.cc +17 -17
  628. data/src/core/lib/resource_quota/arena.h +18 -18
  629. data/src/core/lib/resource_quota/memory_quota.cc +139 -43
  630. data/src/core/lib/resource_quota/memory_quota.h +85 -23
  631. data/src/core/lib/resource_quota/resource_quota.h +1 -1
  632. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  633. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +0 -1
  634. data/src/core/lib/security/authorization/rbac_policy.h +1 -1
  635. data/src/core/lib/security/context/security_context.cc +22 -23
  636. data/src/core/lib/security/context/security_context.h +30 -30
  637. data/src/core/lib/security/credentials/alts/alts_credentials.cc +17 -17
  638. data/src/core/lib/security/credentials/alts/alts_credentials.h +50 -50
  639. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +19 -19
  640. data/src/core/lib/security/credentials/alts/check_gcp_environment.h +41 -41
  641. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +17 -17
  642. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +18 -17
  643. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +18 -17
  644. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +19 -19
  645. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +18 -18
  646. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +36 -37
  647. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +18 -18
  648. data/src/core/lib/security/credentials/call_creds_util.h +1 -1
  649. data/src/core/lib/security/credentials/composite/composite_credentials.cc +21 -21
  650. data/src/core/lib/security/credentials/composite/composite_credentials.h +20 -21
  651. data/src/core/lib/security/credentials/credentials.cc +19 -18
  652. data/src/core/lib/security/credentials/credentials.h +34 -33
  653. data/src/core/lib/security/credentials/fake/fake_credentials.cc +19 -19
  654. data/src/core/lib/security/credentials/fake/fake_credentials.h +34 -35
  655. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +17 -17
  656. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +48 -49
  657. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +18 -19
  658. data/src/core/lib/security/credentials/iam/iam_credentials.cc +17 -17
  659. data/src/core/lib/security/credentials/iam/iam_credentials.h +18 -18
  660. data/src/core/lib/security/credentials/jwt/json_token.cc +23 -23
  661. data/src/core/lib/security/credentials/jwt/json_token.h +32 -32
  662. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +17 -17
  663. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +18 -19
  664. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +70 -70
  665. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +43 -43
  666. data/src/core/lib/security/credentials/local/local_credentials.cc +17 -17
  667. data/src/core/lib/security/credentials/local/local_credentials.h +20 -20
  668. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +28 -29
  669. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +19 -19
  670. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +18 -18
  671. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +19 -19
  672. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +19 -20
  673. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +18 -18
  674. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +1 -1
  675. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +1 -2
  676. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +18 -18
  677. data/src/core/lib/security/credentials/tls/tls_credentials.cc +18 -19
  678. data/src/core/lib/security/credentials/tls/tls_credentials.h +18 -18
  679. data/src/core/lib/security/credentials/xds/xds_credentials.cc +1 -2
  680. data/src/core/lib/security/credentials/xds/xds_credentials.h +1 -1
  681. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +26 -27
  682. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +41 -42
  683. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +24 -26
  684. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +20 -21
  685. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +1 -2
  686. data/src/core/lib/security/security_connector/load_system_roots.h +18 -18
  687. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +18 -18
  688. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +18 -18
  689. data/src/core/lib/security/security_connector/load_system_roots_supported.h +19 -20
  690. data/src/core/lib/security/security_connector/local/local_security_connector.cc +23 -23
  691. data/src/core/lib/security/security_connector/local/local_security_connector.h +40 -41
  692. data/src/core/lib/security/security_connector/security_connector.cc +17 -17
  693. data/src/core/lib/security/security_connector/security_connector.h +32 -33
  694. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +25 -25
  695. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +38 -39
  696. data/src/core/lib/security/security_connector/ssl_utils.cc +32 -32
  697. data/src/core/lib/security/security_connector/ssl_utils.h +31 -31
  698. data/src/core/lib/security/security_connector/ssl_utils_config.cc +22 -22
  699. data/src/core/lib/security/security_connector/ssl_utils_config.h +18 -19
  700. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -21
  701. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +17 -17
  702. data/src/core/lib/security/transport/auth_filters.h +18 -18
  703. data/src/core/lib/security/transport/client_auth_filter.cc +20 -20
  704. data/src/core/lib/security/transport/secure_endpoint.cc +28 -28
  705. data/src/core/lib/security/transport/secure_endpoint.h +22 -22
  706. data/src/core/lib/security/transport/security_handshaker.cc +17 -17
  707. data/src/core/lib/security/transport/security_handshaker.h +19 -19
  708. data/src/core/lib/security/transport/server_auth_filter.cc +22 -23
  709. data/src/core/lib/security/transport/tsi_error.cc +17 -17
  710. data/src/core/lib/security/transport/tsi_error.h +18 -18
  711. data/src/core/lib/security/util/json_util.cc +17 -17
  712. data/src/core/lib/security/util/json_util.h +18 -18
  713. data/src/core/lib/service_config/service_config.h +1 -1
  714. data/src/core/lib/service_config/service_config_call_data.h +7 -1
  715. data/src/core/lib/slice/b64.cc +24 -24
  716. data/src/core/lib/slice/b64.h +29 -29
  717. data/src/core/lib/slice/percent_encoding.cc +17 -17
  718. data/src/core/lib/slice/percent_encoding.h +24 -24
  719. data/src/core/lib/slice/slice.cc +37 -37
  720. data/src/core/lib/slice/slice.h +38 -5
  721. data/src/core/lib/slice/slice_buffer.cc +50 -45
  722. data/src/core/lib/slice/slice_buffer.h +27 -2
  723. data/src/core/lib/slice/slice_internal.h +18 -18
  724. data/src/core/lib/slice/slice_string_helpers.cc +17 -17
  725. data/src/core/lib/slice/slice_string_helpers.h +19 -19
  726. data/src/core/lib/surface/api_trace.cc +17 -17
  727. data/src/core/lib/surface/api_trace.h +22 -22
  728. data/src/core/lib/surface/byte_buffer.cc +19 -19
  729. data/src/core/lib/surface/byte_buffer_reader.cc +19 -19
  730. data/src/core/lib/surface/call.cc +163 -104
  731. data/src/core/lib/surface/call.h +42 -39
  732. data/src/core/lib/surface/call_details.cc +17 -18
  733. data/src/core/lib/surface/call_log_batch.cc +18 -18
  734. data/src/core/lib/surface/call_test_only.h +30 -30
  735. data/src/core/lib/surface/call_trace.cc +5 -5
  736. data/src/core/lib/surface/channel.cc +18 -18
  737. data/src/core/lib/surface/channel.h +31 -31
  738. data/src/core/lib/surface/channel_init.cc +17 -17
  739. data/src/core/lib/surface/channel_init.h +18 -18
  740. data/src/core/lib/surface/channel_ping.cc +18 -18
  741. data/src/core/lib/surface/channel_stack_type.cc +17 -17
  742. data/src/core/lib/surface/channel_stack_type.h +18 -18
  743. data/src/core/lib/surface/completion_queue.cc +136 -140
  744. data/src/core/lib/surface/completion_queue.h +32 -32
  745. data/src/core/lib/surface/completion_queue_factory.cc +28 -28
  746. data/src/core/lib/surface/completion_queue_factory.h +20 -20
  747. data/src/core/lib/surface/event_string.cc +17 -17
  748. data/src/core/lib/surface/event_string.h +20 -20
  749. data/src/core/lib/surface/init.cc +21 -19
  750. data/src/core/lib/surface/init.h +18 -18
  751. data/src/core/lib/surface/init_internally.cc +1 -0
  752. data/src/core/lib/surface/init_internally.h +1 -0
  753. data/src/core/lib/surface/lame_client.cc +18 -18
  754. data/src/core/lib/surface/lame_client.h +19 -19
  755. data/src/core/lib/surface/metadata_array.cc +17 -18
  756. data/src/core/lib/surface/server.cc +15 -15
  757. data/src/core/lib/surface/server.h +2 -3
  758. data/src/core/lib/surface/validate_metadata.cc +17 -17
  759. data/src/core/lib/surface/validate_metadata.h +18 -18
  760. data/src/core/lib/surface/version.cc +21 -21
  761. data/src/core/lib/transport/bdp_estimator.cc +17 -17
  762. data/src/core/lib/transport/bdp_estimator.h +18 -19
  763. data/src/core/lib/transport/connectivity_state.cc +17 -17
  764. data/src/core/lib/transport/connectivity_state.h +19 -19
  765. data/src/core/lib/transport/error_utils.cc +17 -17
  766. data/src/core/lib/transport/error_utils.h +18 -18
  767. data/src/core/lib/transport/handshaker.cc +37 -34
  768. data/src/core/lib/transport/handshaker.h +42 -37
  769. data/src/core/lib/transport/handshaker_factory.h +18 -18
  770. data/src/core/lib/transport/handshaker_registry.cc +17 -17
  771. data/src/core/lib/transport/handshaker_registry.h +18 -18
  772. data/src/core/lib/transport/http2_errors.h +20 -20
  773. data/src/core/lib/transport/http_connect_handshaker.cc +17 -17
  774. data/src/core/lib/transport/http_connect_handshaker.h +18 -18
  775. data/src/core/lib/transport/metadata_batch.cc +4 -1
  776. data/src/core/lib/transport/metadata_batch.h +30 -20
  777. data/src/core/lib/transport/parsed_metadata.h +1 -0
  778. data/src/core/lib/transport/pid_controller.cc +20 -20
  779. data/src/core/lib/transport/pid_controller.h +24 -24
  780. data/src/core/lib/transport/status_conversion.cc +22 -22
  781. data/src/core/lib/transport/status_conversion.h +20 -20
  782. data/src/core/lib/transport/tcp_connect_handshaker.h +1 -1
  783. data/src/core/lib/transport/timeout_encoding.cc +22 -22
  784. data/src/core/lib/transport/timeout_encoding.h +18 -18
  785. data/src/core/lib/transport/transport.cc +25 -24
  786. data/src/core/lib/transport/transport.h +134 -132
  787. data/src/core/lib/transport/transport_impl.h +41 -41
  788. data/src/core/lib/transport/transport_op_string.cc +19 -19
  789. data/src/core/plugin_registry/grpc_plugin_registry.cc +21 -19
  790. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +5 -0
  791. data/src/core/tsi/alts/crypt/aes_gcm.cc +20 -20
  792. data/src/core/tsi/alts/crypt/gsec.cc +26 -26
  793. data/src/core/tsi/alts/crypt/gsec.h +334 -334
  794. data/src/core/tsi/alts/frame_protector/alts_counter.cc +23 -23
  795. data/src/core/tsi/alts/frame_protector/alts_counter.h +66 -66
  796. data/src/core/tsi/alts/frame_protector/alts_crypter.cc +19 -19
  797. data/src/core/tsi/alts/frame_protector/alts_crypter.h +206 -206
  798. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +72 -71
  799. data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +38 -38
  800. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +18 -18
  801. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +80 -81
  802. data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +22 -22
  803. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +22 -22
  804. data/src/core/tsi/alts/frame_protector/frame_handler.cc +26 -25
  805. data/src/core/tsi/alts/frame_protector/frame_handler.h +166 -166
  806. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +68 -67
  807. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +99 -99
  808. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +18 -17
  809. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +41 -42
  810. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +29 -28
  811. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +58 -58
  812. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +20 -20
  813. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +19 -19
  814. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +36 -36
  815. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +19 -19
  816. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +102 -101
  817. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +38 -37
  818. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +38 -39
  819. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +31 -30
  820. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +33 -34
  821. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +65 -66
  822. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +31 -30
  823. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +53 -54
  824. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +54 -53
  825. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +138 -139
  826. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +53 -52
  827. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +41 -42
  828. data/src/core/tsi/fake_transport_security.cc +77 -76
  829. data/src/core/tsi/fake_transport_security.h +30 -30
  830. data/src/core/tsi/local_transport_security.cc +34 -33
  831. data/src/core/tsi/local_transport_security.h +31 -31
  832. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +1 -0
  833. data/src/core/tsi/ssl/session_cache/ssl_session.h +18 -18
  834. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +18 -18
  835. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +18 -17
  836. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +19 -19
  837. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +19 -18
  838. data/src/core/tsi/ssl_transport_security.cc +139 -323
  839. data/src/core/tsi/ssl_transport_security.h +201 -200
  840. data/src/core/tsi/ssl_transport_security_utils.cc +250 -0
  841. data/src/core/tsi/ssl_transport_security_utils.h +147 -0
  842. data/src/core/tsi/ssl_types.h +25 -25
  843. data/src/core/tsi/transport_security.cc +26 -26
  844. data/src/core/tsi/transport_security.h +45 -45
  845. data/src/core/tsi/transport_security_grpc.cc +20 -20
  846. data/src/core/tsi/transport_security_grpc.h +39 -39
  847. data/src/core/tsi/transport_security_interface.h +330 -330
  848. data/src/ruby/ext/grpc/{ext-export-truffleruby.clang → ext-export-truffleruby-with-ruby-abi-version.clang} +0 -0
  849. data/src/ruby/ext/grpc/{ext-export-truffleruby.gcc → ext-export-truffleruby-with-ruby-abi-version.gcc} +0 -0
  850. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.clang +2 -0
  851. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.gcc +7 -0
  852. data/src/ruby/ext/grpc/ext-export.clang +0 -1
  853. data/src/ruby/ext/grpc/ext-export.gcc +1 -2
  854. data/src/ruby/ext/grpc/extconf.rb +47 -2
  855. data/src/ruby/ext/grpc/rb_call.c +1 -0
  856. data/src/ruby/ext/grpc/rb_channel.c +1 -0
  857. data/src/ruby/ext/grpc/rb_channel_args.c +1 -0
  858. data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
  859. data/src/ruby/ext/grpc/rb_grpc.c +1 -0
  860. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +38 -36
  861. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +59 -56
  862. data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
  863. data/src/ruby/lib/grpc/version.rb +1 -1
  864. data/src/ruby/spec/client_server_spec.rb +20 -8
  865. data/third_party/re2/re2/bitstate.cc +3 -3
  866. data/third_party/re2/re2/dfa.cc +13 -13
  867. data/third_party/re2/re2/nfa.cc +4 -4
  868. data/third_party/re2/re2/onepass.cc +2 -2
  869. data/third_party/re2/re2/prefilter_tree.cc +27 -59
  870. data/third_party/re2/re2/prefilter_tree.h +3 -2
  871. data/third_party/re2/re2/prog.cc +11 -2
  872. data/third_party/re2/re2/prog.h +17 -5
  873. data/third_party/re2/re2/re2.cc +6 -11
  874. data/third_party/re2/re2/re2.h +1 -1
  875. data/third_party/re2/re2/regexp.cc +1 -2
  876. data/third_party/re2/re2/stringpiece.h +10 -7
  877. data/third_party/re2/re2/unicode_casefold.cc +25 -11
  878. data/third_party/re2/re2/unicode_groups.cc +319 -151
  879. data/third_party/re2/re2/walker-inl.h +3 -2
  880. data/third_party/re2/util/mutex.h +4 -4
  881. metadata +95 -26
  882. data/include/grpc/impl/codegen/gpr_slice.h +0 -71
  883. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +0 -332
  884. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -52
  885. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -322
  886. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +0 -62
@@ -21,6 +21,7 @@
21
21
  #include <memory>
22
22
  #include <set>
23
23
  #include <string>
24
+ #include <type_traits>
24
25
  #include <utility>
25
26
  #include <vector>
26
27
 
@@ -29,11 +30,12 @@
29
30
  #include "absl/strings/str_cat.h"
30
31
  #include "absl/strings/string_view.h"
31
32
  #include "absl/types/optional.h"
33
+ #include "absl/types/variant.h"
32
34
 
33
35
  #include <grpc/event_engine/event_engine.h>
34
36
  #include <grpc/grpc.h>
35
37
  #include <grpc/grpc_security.h>
36
- #include <grpc/impl/codegen/connectivity_state.h>
38
+ #include <grpc/impl/connectivity_state.h>
37
39
  #include <grpc/support/log.h>
38
40
 
39
41
  #include "src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h"
@@ -42,10 +44,12 @@
42
44
  #include "src/core/ext/xds/xds_client_grpc.h"
43
45
  #include "src/core/ext/xds/xds_cluster.h"
44
46
  #include "src/core/ext/xds/xds_common_types.h"
47
+ #include "src/core/ext/xds/xds_health_status.h"
45
48
  #include "src/core/lib/channel/channel_args.h"
46
49
  #include "src/core/lib/config/core_configuration.h"
47
50
  #include "src/core/lib/debug/trace.h"
48
51
  #include "src/core/lib/gprpp/debug_location.h"
52
+ #include "src/core/lib/gprpp/match.h"
49
53
  #include "src/core/lib/gprpp/orphanable.h"
50
54
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
51
55
  #include "src/core/lib/gprpp/time.h"
@@ -122,31 +126,28 @@ class CdsLb : public LoadBalancingPolicy {
122
126
  : parent_(std::move(parent)), name_(std::move(name)) {}
123
127
 
124
128
  void OnResourceChanged(XdsClusterResource cluster_data) override {
125
- Ref().release(); // Ref held by lambda
129
+ RefCountedPtr<ClusterWatcher> self = Ref();
126
130
  parent_->work_serializer()->Run(
127
- // TODO(roth): When we move to C++14, capture cluster_data with
128
- // std::move().
129
- [this, cluster_data]() mutable {
130
- parent_->OnClusterChanged(name_, std::move(cluster_data));
131
- Unref();
131
+ [self = std::move(self),
132
+ cluster_data = std::move(cluster_data)]() mutable {
133
+ self->parent_->OnClusterChanged(self->name_,
134
+ std::move(cluster_data));
132
135
  },
133
136
  DEBUG_LOCATION);
134
137
  }
135
138
  void OnError(absl::Status status) override {
136
- Ref().release(); // Ref held by lambda
139
+ RefCountedPtr<ClusterWatcher> self = Ref();
137
140
  parent_->work_serializer()->Run(
138
- [this, status]() {
139
- parent_->OnError(name_, status);
140
- Unref();
141
+ [self = std::move(self), status = std::move(status)]() mutable {
142
+ self->parent_->OnError(self->name_, std::move(status));
141
143
  },
142
144
  DEBUG_LOCATION);
143
145
  }
144
146
  void OnResourceDoesNotExist() override {
145
- Ref().release(); // Ref held by lambda
147
+ RefCountedPtr<ClusterWatcher> self = Ref();
146
148
  parent_->work_serializer()->Run(
147
- [this]() {
148
- parent_->OnResourceDoesNotExist(name_);
149
- Unref();
149
+ [self = std::move(self)]() {
150
+ self->parent_->OnResourceDoesNotExist(self->name_);
150
151
  },
151
152
  DEBUG_LOCATION);
152
153
  }
@@ -171,7 +172,7 @@ class CdsLb : public LoadBalancingPolicy {
171
172
  RefCountedPtr<SubchannelInterface> CreateSubchannel(
172
173
  ServerAddress address, const ChannelArgs& args) override;
173
174
  void UpdateState(grpc_connectivity_state state, const absl::Status& status,
174
- std::unique_ptr<SubchannelPicker> picker) override;
175
+ RefCountedPtr<SubchannelPicker> picker) override;
175
176
  void RequestReresolution() override;
176
177
  absl::string_view GetAuthority() override;
177
178
  grpc_event_engine::experimental::EventEngine* GetEventEngine() override;
@@ -239,7 +240,7 @@ RefCountedPtr<SubchannelInterface> CdsLb::Helper::CreateSubchannel(
239
240
 
240
241
  void CdsLb::Helper::UpdateState(grpc_connectivity_state state,
241
242
  const absl::Status& status,
242
- std::unique_ptr<SubchannelPicker> picker) {
243
+ RefCountedPtr<SubchannelPicker> picker) {
243
244
  if (parent_->shutting_down_ || parent_->child_policy_ == nullptr) return;
244
245
  if (GRPC_TRACE_FLAG_ENABLED(grpc_cds_lb_trace)) {
245
246
  gpr_log(GPR_INFO, "[cdslb %p] state updated by child: %s (%s)", this,
@@ -360,7 +361,7 @@ absl::Status CdsLb::UpdateLocked(UpdateArgs args) {
360
361
 
361
362
  // Generates the discovery mechanism config for the specified cluster name.
362
363
  //
363
- // If no CdsUpdate has been received for the cluster, starts the watcher
364
+ // If no CDS update has been received for the cluster, starts the watcher
364
365
  // if needed, and returns false. Otherwise, generates the discovery
365
366
  // mechanism config, adds it to *discovery_mechanisms, and returns true.
366
367
  //
@@ -392,11 +393,11 @@ absl::StatusOr<bool> CdsLb::GenerateDiscoveryMechanismForCluster(
392
393
  // Don't have the update we need yet.
393
394
  if (!state.update.has_value()) return false;
394
395
  // For AGGREGATE clusters, recursively expand to child clusters.
395
- if (state.update->cluster_type ==
396
- XdsClusterResource::ClusterType::AGGREGATE) {
396
+ auto* aggregate =
397
+ absl::get_if<XdsClusterResource::Aggregate>(&state.update->type);
398
+ if (aggregate != nullptr) {
397
399
  bool missing_cluster = false;
398
- for (const std::string& child_name :
399
- state.update->prioritized_cluster_names) {
400
+ for (const std::string& child_name : aggregate->prioritized_cluster_names) {
400
401
  auto result = GenerateDiscoveryMechanismForCluster(
401
402
  child_name, depth + 1, discovery_mechanisms, clusters_added);
402
403
  if (!result.ok()) return result;
@@ -447,25 +448,30 @@ absl::StatusOr<bool> CdsLb::GenerateDiscoveryMechanismForCluster(
447
448
  }
448
449
  mechanism["outlierDetection"] = std::move(outlier_detection);
449
450
  }
450
- switch (state.update->cluster_type) {
451
- case XdsClusterResource::ClusterType::EDS:
452
- mechanism["type"] = "EDS";
453
- if (!state.update->eds_service_name.empty()) {
454
- mechanism["edsServiceName"] = state.update->eds_service_name;
455
- }
456
- break;
457
- case XdsClusterResource::ClusterType::LOGICAL_DNS:
458
- mechanism["type"] = "LOGICAL_DNS";
459
- mechanism["dnsHostname"] = state.update->dns_hostname;
460
- break;
461
- default:
462
- GPR_ASSERT(0);
463
- break;
464
- }
451
+ Match(
452
+ state.update->type,
453
+ [&](const XdsClusterResource::Eds& eds) {
454
+ mechanism["type"] = "EDS";
455
+ if (!eds.eds_service_name.empty()) {
456
+ mechanism["edsServiceName"] = eds.eds_service_name;
457
+ }
458
+ },
459
+ [&](const XdsClusterResource::LogicalDns& logical_dns) {
460
+ mechanism["type"] = "LOGICAL_DNS";
461
+ mechanism["dnsHostname"] = logical_dns.hostname;
462
+ },
463
+ [&](const XdsClusterResource::Aggregate&) { GPR_ASSERT(0); });
465
464
  if (state.update->lrs_load_reporting_server.has_value()) {
466
465
  mechanism["lrsLoadReportingServer"] =
467
466
  state.update->lrs_load_reporting_server->ToJson();
468
467
  }
468
+ if (!state.update->host_override_statuses.empty()) {
469
+ Json::Array status_list;
470
+ for (const auto& status : state.update->host_override_statuses) {
471
+ status_list.emplace_back(status.ToString());
472
+ }
473
+ mechanism["overrideHostStatus"] = std::move(status_list);
474
+ }
469
475
  discovery_mechanisms->emplace_back(std::move(mechanism));
470
476
  return true;
471
477
  }
@@ -590,7 +596,7 @@ void CdsLb::OnError(const std::string& name, absl::Status status) {
590
596
  if (child_policy_ == nullptr) {
591
597
  channel_control_helper()->UpdateState(
592
598
  GRPC_CHANNEL_TRANSIENT_FAILURE, status,
593
- std::make_unique<TransientFailurePicker>(absl::UnavailableError(
599
+ MakeRefCounted<TransientFailurePicker>(absl::UnavailableError(
594
600
  absl::StrCat(name, ": ", status.ToString()))));
595
601
  }
596
602
  }
@@ -604,7 +610,7 @@ void CdsLb::OnResourceDoesNotExist(const std::string& name) {
604
610
  absl::StrCat("CDS resource \"", config_->cluster(), "\" does not exist"));
605
611
  channel_control_helper()->UpdateState(
606
612
  GRPC_CHANNEL_TRANSIENT_FAILURE, status,
607
- std::make_unique<TransientFailurePicker>(status));
613
+ MakeRefCounted<TransientFailurePicker>(status));
608
614
  MaybeDestroyChildPolicyLocked();
609
615
  }
610
616
 
@@ -35,7 +35,7 @@
35
35
  #include "absl/types/variant.h"
36
36
 
37
37
  #include <grpc/event_engine/event_engine.h>
38
- #include <grpc/impl/codegen/connectivity_state.h>
38
+ #include <grpc/impl/connectivity_state.h>
39
39
  #include <grpc/support/log.h>
40
40
 
41
41
  #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
@@ -210,22 +210,11 @@ class XdsClusterImplLb : public LoadBalancingPolicy {
210
210
  RefCountedPtr<XdsClusterLocalityStats> locality_stats_;
211
211
  };
212
212
 
213
- // A simple wrapper for ref-counting a picker from the child policy.
214
- class RefCountedPicker : public RefCounted<RefCountedPicker> {
215
- public:
216
- explicit RefCountedPicker(std::unique_ptr<SubchannelPicker> picker)
217
- : picker_(std::move(picker)) {}
218
- PickResult Pick(PickArgs args) { return picker_->Pick(args); }
219
-
220
- private:
221
- std::unique_ptr<SubchannelPicker> picker_;
222
- };
223
-
224
213
  // A picker that wraps the picker from the child to perform drops.
225
214
  class Picker : public SubchannelPicker {
226
215
  public:
227
216
  Picker(XdsClusterImplLb* xds_cluster_impl_lb,
228
- RefCountedPtr<RefCountedPicker> picker);
217
+ RefCountedPtr<SubchannelPicker> picker);
229
218
 
230
219
  PickResult Pick(PickArgs args) override;
231
220
 
@@ -236,7 +225,7 @@ class XdsClusterImplLb : public LoadBalancingPolicy {
236
225
  uint32_t max_concurrent_requests_;
237
226
  RefCountedPtr<XdsEndpointResource::DropConfig> drop_config_;
238
227
  RefCountedPtr<XdsClusterDropStats> drop_stats_;
239
- RefCountedPtr<RefCountedPicker> picker_;
228
+ RefCountedPtr<SubchannelPicker> picker_;
240
229
  };
241
230
 
242
231
  class Helper : public ChannelControlHelper {
@@ -251,7 +240,7 @@ class XdsClusterImplLb : public LoadBalancingPolicy {
251
240
  RefCountedPtr<SubchannelInterface> CreateSubchannel(
252
241
  ServerAddress address, const ChannelArgs& args) override;
253
242
  void UpdateState(grpc_connectivity_state state, const absl::Status& status,
254
- std::unique_ptr<SubchannelPicker> picker) override;
243
+ RefCountedPtr<SubchannelPicker> picker) override;
255
244
  void RequestReresolution() override;
256
245
  absl::string_view GetAuthority() override;
257
246
  grpc_event_engine::experimental::EventEngine* GetEventEngine() override;
@@ -294,7 +283,7 @@ class XdsClusterImplLb : public LoadBalancingPolicy {
294
283
  // Latest state and picker reported by the child policy.
295
284
  grpc_connectivity_state state_ = GRPC_CHANNEL_IDLE;
296
285
  absl::Status status_;
297
- RefCountedPtr<RefCountedPicker> picker_;
286
+ RefCountedPtr<SubchannelPicker> picker_;
298
287
  };
299
288
 
300
289
  //
@@ -367,7 +356,7 @@ class XdsClusterImplLb::Picker::SubchannelCallTracker
367
356
  //
368
357
 
369
358
  XdsClusterImplLb::Picker::Picker(XdsClusterImplLb* xds_cluster_impl_lb,
370
- RefCountedPtr<RefCountedPicker> picker)
359
+ RefCountedPtr<SubchannelPicker> picker)
371
360
  : call_counter_(xds_cluster_impl_lb->call_counter_),
372
361
  max_concurrent_requests_(
373
362
  xds_cluster_impl_lb->config_->max_concurrent_requests()),
@@ -532,7 +521,7 @@ void XdsClusterImplLb::MaybeUpdatePickerLocked() {
532
521
  // If we're dropping all calls, report READY, regardless of what (or
533
522
  // whether) the child has reported.
534
523
  if (config_->drop_config() != nullptr && config_->drop_config()->drop_all()) {
535
- auto drop_picker = std::make_unique<Picker>(this, picker_);
524
+ auto drop_picker = MakeRefCounted<Picker>(this, picker_);
536
525
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_cluster_impl_lb_trace)) {
537
526
  gpr_log(GPR_INFO,
538
527
  "[xds_cluster_impl_lb %p] updating connectivity (drop all): "
@@ -545,7 +534,7 @@ void XdsClusterImplLb::MaybeUpdatePickerLocked() {
545
534
  }
546
535
  // Otherwise, update only if we have a child picker.
547
536
  if (picker_ != nullptr) {
548
- auto drop_picker = std::make_unique<Picker>(this, picker_);
537
+ auto drop_picker = MakeRefCounted<Picker>(this, picker_);
549
538
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_cluster_impl_lb_trace)) {
550
539
  gpr_log(GPR_INFO,
551
540
  "[xds_cluster_impl_lb %p] updating connectivity: state=%s "
@@ -612,7 +601,7 @@ RefCountedPtr<SubchannelInterface> XdsClusterImplLb::Helper::CreateSubchannel(
612
601
  ServerAddress address, const ChannelArgs& args) {
613
602
  if (xds_cluster_impl_policy_->shutting_down_) return nullptr;
614
603
  // If load reporting is enabled, wrap the subchannel such that it
615
- // includes the locality stats object, which will be used by the EdsPicker.
604
+ // includes the locality stats object, which will be used by the Picker.
616
605
  if (xds_cluster_impl_policy_->config_->lrs_load_reporting_server()
617
606
  .has_value()) {
618
607
  RefCountedPtr<XdsLocalityName> locality_name;
@@ -653,7 +642,7 @@ RefCountedPtr<SubchannelInterface> XdsClusterImplLb::Helper::CreateSubchannel(
653
642
 
654
643
  void XdsClusterImplLb::Helper::UpdateState(
655
644
  grpc_connectivity_state state, const absl::Status& status,
656
- std::unique_ptr<SubchannelPicker> picker) {
645
+ RefCountedPtr<SubchannelPicker> picker) {
657
646
  if (xds_cluster_impl_policy_->shutting_down_) return;
658
647
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_cluster_impl_lb_trace)) {
659
648
  gpr_log(GPR_INFO,
@@ -666,8 +655,7 @@ void XdsClusterImplLb::Helper::UpdateState(
666
655
  // Save the state and picker.
667
656
  xds_cluster_impl_policy_->state_ = state;
668
657
  xds_cluster_impl_policy_->status_ = status;
669
- xds_cluster_impl_policy_->picker_ =
670
- MakeRefCounted<RefCountedPicker>(std::move(picker));
658
+ xds_cluster_impl_policy_->picker_ = std::move(picker);
671
659
  // Wrap the picker and return it to the channel.
672
660
  xds_cluster_impl_policy_->MaybeUpdatePickerLocked();
673
661
  }
@@ -22,6 +22,7 @@
22
22
  #include <map>
23
23
  #include <memory>
24
24
  #include <string>
25
+ #include <type_traits>
25
26
  #include <utility>
26
27
  #include <vector>
27
28
 
@@ -33,7 +34,7 @@
33
34
  #include "absl/types/optional.h"
34
35
 
35
36
  #include <grpc/event_engine/event_engine.h>
36
- #include <grpc/impl/codegen/connectivity_state.h>
37
+ #include <grpc/impl/connectivity_state.h>
37
38
  #include <grpc/support/log.h>
38
39
 
39
40
  #include "src/core/ext/filters/client_channel/client_channel.h"
@@ -44,7 +45,6 @@
44
45
  #include "src/core/lib/debug/trace.h"
45
46
  #include "src/core/lib/gprpp/debug_location.h"
46
47
  #include "src/core/lib/gprpp/orphanable.h"
47
- #include "src/core/lib/gprpp/ref_counted.h"
48
48
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
49
49
  #include "src/core/lib/gprpp/time.h"
50
50
  #include "src/core/lib/gprpp/validation_errors.h"
@@ -101,8 +101,6 @@ class XdsClusterManagerLbConfig : public LoadBalancingPolicy::Config {
101
101
  }
102
102
 
103
103
  static const JsonLoaderInterface* JsonLoader(const JsonArgs&);
104
- void JsonPostLoad(const Json& json, const JsonArgs&,
105
- ValidationErrors* errors);
106
104
 
107
105
  private:
108
106
  std::map<std::string, Child> cluster_map_;
@@ -120,28 +118,13 @@ class XdsClusterManagerLb : public LoadBalancingPolicy {
120
118
  void ResetBackoffLocked() override;
121
119
 
122
120
  private:
123
- // A simple wrapper for ref-counting a picker from the child policy.
124
- class ChildPickerWrapper : public RefCounted<ChildPickerWrapper> {
125
- public:
126
- ChildPickerWrapper(std::string name,
127
- std::unique_ptr<SubchannelPicker> picker)
128
- : name_(std::move(name)), picker_(std::move(picker)) {}
129
- PickResult Pick(PickArgs args) { return picker_->Pick(args); }
130
-
131
- const std::string& name() const { return name_; }
132
-
133
- private:
134
- std::string name_;
135
- std::unique_ptr<SubchannelPicker> picker_;
136
- };
137
-
138
121
  // Picks a child using prefix or path matching and then delegates to that
139
122
  // child's picker.
140
123
  class ClusterPicker : public SubchannelPicker {
141
124
  public:
142
125
  // Maintains a map of cluster names to pickers.
143
- using ClusterMap = std::map<absl::string_view /*cluster_name*/,
144
- RefCountedPtr<ChildPickerWrapper>>;
126
+ using ClusterMap =
127
+ std::map<std::string /*cluster_name*/, RefCountedPtr<SubchannelPicker>>;
145
128
 
146
129
  // It is required that the keys of cluster_map have to live at least as long
147
130
  // as the ClusterPicker instance.
@@ -174,9 +157,7 @@ class XdsClusterManagerLb : public LoadBalancingPolicy {
174
157
  grpc_connectivity_state connectivity_state() const {
175
158
  return connectivity_state_;
176
159
  }
177
- RefCountedPtr<ChildPickerWrapper> picker_wrapper() const {
178
- return picker_wrapper_;
179
- }
160
+ RefCountedPtr<SubchannelPicker> picker() const { return picker_; }
180
161
 
181
162
  private:
182
163
  class Helper : public ChannelControlHelper {
@@ -192,7 +173,7 @@ class XdsClusterManagerLb : public LoadBalancingPolicy {
192
173
  ServerAddress address, const ChannelArgs& args) override;
193
174
  void UpdateState(grpc_connectivity_state state,
194
175
  const absl::Status& status,
195
- std::unique_ptr<SubchannelPicker> picker) override;
176
+ RefCountedPtr<SubchannelPicker> picker) override;
196
177
  void RequestReresolution() override;
197
178
  absl::string_view GetAuthority() override;
198
179
  EventEngine* GetEventEngine() override;
@@ -217,7 +198,7 @@ class XdsClusterManagerLb : public LoadBalancingPolicy {
217
198
 
218
199
  OrphanablePtr<LoadBalancingPolicy> child_policy_;
219
200
 
220
- RefCountedPtr<ChildPickerWrapper> picker_wrapper_;
201
+ RefCountedPtr<SubchannelPicker> picker_;
221
202
  grpc_connectivity_state connectivity_state_ = GRPC_CHANNEL_IDLE;
222
203
 
223
204
  // States for delayed removal.
@@ -252,7 +233,7 @@ XdsClusterManagerLb::PickResult XdsClusterManagerLb::ClusterPicker::Pick(
252
233
  args.call_state);
253
234
  auto cluster_name =
254
235
  call_state->GetCallAttribute(XdsClusterAttributeTypeName());
255
- auto it = cluster_map_.find(cluster_name);
236
+ auto it = cluster_map_.find(std::string(cluster_name));
256
237
  if (it != cluster_map_.end()) {
257
238
  return it->second->Pick(args);
258
239
  }
@@ -395,8 +376,8 @@ void XdsClusterManagerLb::UpdateStateLocked() {
395
376
  ClusterPicker::ClusterMap cluster_map;
396
377
  for (const auto& p : config_->cluster_map()) {
397
378
  const std::string& cluster_name = p.first;
398
- RefCountedPtr<ChildPickerWrapper>& child_picker = cluster_map[cluster_name];
399
- child_picker = children_[cluster_name]->picker_wrapper();
379
+ RefCountedPtr<SubchannelPicker>& child_picker = cluster_map[cluster_name];
380
+ child_picker = children_[cluster_name]->picker();
400
381
  if (child_picker == nullptr) {
401
382
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_cluster_manager_lb_trace)) {
402
383
  gpr_log(GPR_INFO,
@@ -404,13 +385,11 @@ void XdsClusterManagerLb::UpdateStateLocked() {
404
385
  "picker; creating a QueuePicker.",
405
386
  this, cluster_name.c_str());
406
387
  }
407
- child_picker = MakeRefCounted<ChildPickerWrapper>(
408
- cluster_name,
409
- std::make_unique<QueuePicker>(Ref(DEBUG_LOCATION, "QueuePicker")));
388
+ child_picker =
389
+ MakeRefCounted<QueuePicker>(Ref(DEBUG_LOCATION, "QueuePicker"));
410
390
  }
411
391
  }
412
- std::unique_ptr<SubchannelPicker> picker =
413
- std::make_unique<ClusterPicker>(std::move(cluster_map));
392
+ auto picker = MakeRefCounted<ClusterPicker>(std::move(cluster_map));
414
393
  absl::Status status;
415
394
  if (connectivity_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
416
395
  status = absl::Status(absl::StatusCode::kUnavailable,
@@ -461,7 +440,7 @@ void XdsClusterManagerLb::ClusterChild::Orphan() {
461
440
  child_policy_.reset();
462
441
  // Drop our ref to the child's picker, in case it's holding a ref to
463
442
  // the child.
464
- picker_wrapper_.reset();
443
+ picker_.reset();
465
444
  if (delayed_removal_timer_handle_.has_value()) {
466
445
  xds_cluster_manager_policy_->channel_control_helper()
467
446
  ->GetEventEngine()
@@ -587,7 +566,7 @@ XdsClusterManagerLb::ClusterChild::Helper::CreateSubchannel(
587
566
 
588
567
  void XdsClusterManagerLb::ClusterChild::Helper::UpdateState(
589
568
  grpc_connectivity_state state, const absl::Status& status,
590
- std::unique_ptr<SubchannelPicker> picker) {
569
+ RefCountedPtr<SubchannelPicker> picker) {
591
570
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_cluster_manager_lb_trace)) {
592
571
  gpr_log(
593
572
  GPR_INFO,
@@ -601,9 +580,7 @@ void XdsClusterManagerLb::ClusterChild::Helper::UpdateState(
601
580
  return;
602
581
  }
603
582
  // Cache the picker in the ClusterChild.
604
- xds_cluster_manager_child_->picker_wrapper_ =
605
- MakeRefCounted<ChildPickerWrapper>(xds_cluster_manager_child_->name_,
606
- std::move(picker));
583
+ xds_cluster_manager_child_->picker_ = std::move(picker);
607
584
  // Decide what state to report for aggregation purposes.
608
585
  // If the last recorded state was TRANSIENT_FAILURE and the new state
609
586
  // is something other than READY, don't change the state.
@@ -687,16 +664,6 @@ const JsonLoaderInterface* XdsClusterManagerLbConfig::JsonLoader(
687
664
  return loader;
688
665
  }
689
666
 
690
- void XdsClusterManagerLbConfig::JsonPostLoad(const Json&, const JsonArgs&,
691
- ValidationErrors* errors) {
692
- if (cluster_map_.empty()) {
693
- ValidationErrors::ScopedField field(errors, ".children");
694
- if (!errors->FieldHasErrors()) {
695
- errors->AddError("no valid children configured");
696
- }
697
- }
698
- }
699
-
700
667
  class XdsClusterManagerLbFactory : public LoadBalancingPolicyFactory {
701
668
  public:
702
669
  OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
@@ -24,6 +24,7 @@
24
24
  #include <memory>
25
25
  #include <set>
26
26
  #include <string>
27
+ #include <type_traits>
27
28
  #include <utility>
28
29
  #include <vector>
29
30
 
@@ -35,8 +36,8 @@
35
36
  #include "absl/types/optional.h"
36
37
 
37
38
  #include <grpc/event_engine/event_engine.h>
38
- #include <grpc/impl/codegen/connectivity_state.h>
39
- #include <grpc/impl/codegen/grpc_types.h>
39
+ #include <grpc/grpc.h>
40
+ #include <grpc/impl/connectivity_state.h>
40
41
  #include <grpc/support/log.h>
41
42
 
42
43
  #include "src/core/ext/filters/client_channel/lb_policy/address_filtering.h"
@@ -97,6 +98,8 @@ class XdsClusterResolverLbConfig : public LoadBalancingPolicy::Config {
97
98
  std::string eds_service_name;
98
99
  std::string dns_hostname;
99
100
 
101
+ Json::Array host_override_statuses;
102
+
100
103
  // This is type Json::Object instead of OutlierDetectionConfig, because we
101
104
  // don't actually need to validate the contents of the outlier detection
102
105
  // config here. In this case, the JSON is generated by the CDS policy
@@ -112,6 +115,7 @@ class XdsClusterResolverLbConfig : public LoadBalancingPolicy::Config {
112
115
  type == other.type &&
113
116
  eds_service_name == other.eds_service_name &&
114
117
  dns_hostname == other.dns_hostname &&
118
+ host_override_statuses == other.host_override_statuses &&
115
119
  outlier_detection_lb_config == other.outlier_detection_lb_config);
116
120
  }
117
121
 
@@ -209,31 +213,26 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
209
213
  discovery_mechanism_.reset(DEBUG_LOCATION, "EndpointWatcher");
210
214
  }
211
215
  void OnResourceChanged(XdsEndpointResource update) override {
212
- Ref().release(); // ref held by callback
216
+ RefCountedPtr<EndpointWatcher> self = Ref();
213
217
  discovery_mechanism_->parent()->work_serializer()->Run(
214
- // TODO(yashykt): When we move to C++14, capture update with
215
- // std::move
216
- [this, update]() mutable {
217
- OnResourceChangedHelper(std::move(update));
218
- Unref();
218
+ [self = std::move(self), update = std::move(update)]() mutable {
219
+ self->OnResourceChangedHelper(std::move(update));
219
220
  },
220
221
  DEBUG_LOCATION);
221
222
  }
222
223
  void OnError(absl::Status status) override {
223
- Ref().release(); // ref held by callback
224
+ RefCountedPtr<EndpointWatcher> self = Ref();
224
225
  discovery_mechanism_->parent()->work_serializer()->Run(
225
- [this, status]() {
226
- OnErrorHelper(status);
227
- Unref();
226
+ [self = std::move(self), status = std::move(status)]() mutable {
227
+ self->OnErrorHelper(std::move(status));
228
228
  },
229
229
  DEBUG_LOCATION);
230
230
  }
231
231
  void OnResourceDoesNotExist() override {
232
- Ref().release(); // ref held by callback
232
+ RefCountedPtr<EndpointWatcher> self = Ref();
233
233
  discovery_mechanism_->parent()->work_serializer()->Run(
234
- [this]() {
235
- OnResourceDoesNotExistHelper();
236
- Unref();
234
+ [self = std::move(self)]() {
235
+ self->OnResourceDoesNotExistHelper();
237
236
  },
238
237
  DEBUG_LOCATION);
239
238
  }
@@ -373,7 +372,7 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
373
372
  RefCountedPtr<SubchannelInterface> CreateSubchannel(
374
373
  ServerAddress address, const ChannelArgs& args) override;
375
374
  void UpdateState(grpc_connectivity_state state, const absl::Status& status,
376
- std::unique_ptr<SubchannelPicker> picker) override;
375
+ RefCountedPtr<SubchannelPicker> picker) override;
377
376
  // This is a no-op, because we get the addresses from the xds
378
377
  // client, which is a watch-based API.
379
378
  void RequestReresolution() override {}
@@ -435,7 +434,7 @@ XdsClusterResolverLb::Helper::CreateSubchannel(ServerAddress address,
435
434
 
436
435
  void XdsClusterResolverLb::Helper::UpdateState(
437
436
  grpc_connectivity_state state, const absl::Status& status,
438
- std::unique_ptr<SubchannelPicker> picker) {
437
+ RefCountedPtr<SubchannelPicker> picker) {
439
438
  if (xds_cluster_resolver_policy_->shutting_down_ ||
440
439
  xds_cluster_resolver_policy_->child_policy_ == nullptr) {
441
440
  return;
@@ -874,6 +873,7 @@ XdsClusterResolverLb::CreateChildPolicyConfigLocked() {
874
873
  for (size_t priority = 0;
875
874
  priority < discovery_entry.latest_update->priorities.size();
876
875
  ++priority) {
876
+ // Determine what xDS LB policy to use.
877
877
  Json child_policy;
878
878
  if (!discovery_entry.discovery_mechanism->override_child_policy()
879
879
  .empty()) {
@@ -882,7 +882,14 @@ XdsClusterResolverLb::CreateChildPolicyConfigLocked() {
882
882
  } else {
883
883
  child_policy = config_->xds_lb_policy();
884
884
  }
885
- // Wrap it in the drop policy.
885
+ // Wrap the xDS LB policy in the xds_override_host policy.
886
+ Json::Array xds_override_host_config = {Json::Object{
887
+ {"xds_override_host_experimental",
888
+ Json::Object{
889
+ {"overrideHostStatus", discovery_config.host_override_statuses},
890
+ {"childPolicy", std::move(child_policy)},
891
+ }}}};
892
+ // Wrap it in the xds_cluster_impl policy.
886
893
  Json::Array drop_categories;
887
894
  if (discovery_entry.latest_update->drop_config != nullptr) {
888
895
  for (const auto& category :
@@ -895,7 +902,7 @@ XdsClusterResolverLb::CreateChildPolicyConfigLocked() {
895
902
  }
896
903
  Json::Object xds_cluster_impl_config = {
897
904
  {"clusterName", discovery_config.cluster_name},
898
- {"childPolicy", std::move(child_policy)},
905
+ {"childPolicy", std::move(xds_override_host_config)},
899
906
  {"dropCategories", std::move(drop_categories)},
900
907
  {"maxConcurrentRequests", discovery_config.max_concurrent_requests},
901
908
  };
@@ -907,6 +914,7 @@ XdsClusterResolverLb::CreateChildPolicyConfigLocked() {
907
914
  xds_cluster_impl_config["lrsLoadReportingServer"] =
908
915
  discovery_config.lrs_load_reporting_server->ToJson();
909
916
  }
917
+ // Wrap it in the outlier_detection policy.
910
918
  Json::Object outlier_detection_config;
911
919
  if (discovery_entry.config().outlier_detection_lb_config.has_value()) {
912
920
  outlier_detection_config =
@@ -961,7 +969,7 @@ XdsClusterResolverLb::CreateChildPolicyConfigLocked() {
961
969
  "config");
962
970
  channel_control_helper()->UpdateState(
963
971
  GRPC_CHANNEL_TRANSIENT_FAILURE, status,
964
- std::make_unique<TransientFailurePicker>(status));
972
+ MakeRefCounted<TransientFailurePicker>(status));
965
973
  return nullptr;
966
974
  }
967
975
  return std::move(*config);
@@ -1037,6 +1045,8 @@ XdsClusterResolverLbConfig::DiscoveryMechanism::JsonLoader(const JsonArgs&) {
1037
1045
  &DiscoveryMechanism::max_concurrent_requests)
1038
1046
  .OptionalField("outlierDetection",
1039
1047
  &DiscoveryMechanism::outlier_detection_lb_config)
1048
+ .OptionalField("overrideHostStatus",
1049
+ &DiscoveryMechanism::host_override_statuses)
1040
1050
  .Finish();
1041
1051
  return loader;
1042
1052
  }