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
@@ -34,6 +34,7 @@
34
34
  #include <random>
35
35
  #include <set>
36
36
  #include <string>
37
+ #include <type_traits>
37
38
  #include <unordered_map>
38
39
  #include <utility>
39
40
  #include <vector>
@@ -55,9 +56,8 @@
55
56
  #include <grpc/byte_buffer_reader.h>
56
57
  #include <grpc/event_engine/event_engine.h>
57
58
  #include <grpc/grpc.h>
58
- #include <grpc/impl/codegen/connectivity_state.h>
59
- #include <grpc/impl/codegen/grpc_types.h>
60
- #include <grpc/impl/codegen/propagation_bits.h>
59
+ #include <grpc/impl/connectivity_state.h>
60
+ #include <grpc/impl/propagation_bits.h>
61
61
  #include <grpc/slice.h>
62
62
  #include <grpc/status.h>
63
63
  #include <grpc/support/log.h>
@@ -82,7 +82,6 @@
82
82
  #include "src/core/lib/iomgr/error.h"
83
83
  #include "src/core/lib/iomgr/exec_ctx.h"
84
84
  #include "src/core/lib/iomgr/pollset_set.h"
85
- #include "src/core/lib/iomgr/timer.h"
86
85
  #include "src/core/lib/json/json.h"
87
86
  #include "src/core/lib/json/json_args.h"
88
87
  #include "src/core/lib/json/json_object_loader.h"
@@ -110,6 +109,8 @@ TraceFlag grpc_lb_rls_trace(false, "rls_lb");
110
109
 
111
110
  namespace {
112
111
 
112
+ using ::grpc_event_engine::experimental::EventEngine;
113
+
113
114
  constexpr absl::string_view kRls = "rls_experimental";
114
115
  const char kGrpc[] = "grpc";
115
116
  const char* kRlsRequestPath = "/grpc.lookup.v1.RouteLookupService/RouteLookup";
@@ -333,7 +334,7 @@ class RlsLb : public LoadBalancingPolicy {
333
334
  ServerAddress address, const ChannelArgs& args) override;
334
335
  void UpdateState(grpc_connectivity_state state,
335
336
  const absl::Status& status,
336
- std::unique_ptr<SubchannelPicker> picker) override;
337
+ RefCountedPtr<SubchannelPicker> picker) override;
337
338
  void RequestReresolution() override;
338
339
  absl::string_view GetAuthority() override;
339
340
  grpc_event_engine::experimental::EventEngine* GetEventEngine() override;
@@ -354,7 +355,7 @@ class RlsLb : public LoadBalancingPolicy {
354
355
 
355
356
  grpc_connectivity_state connectivity_state_ ABSL_GUARDED_BY(&RlsLb::mu_) =
356
357
  GRPC_CHANNEL_IDLE;
357
- std::unique_ptr<LoadBalancingPolicy::SubchannelPicker> picker_
358
+ RefCountedPtr<LoadBalancingPolicy::SubchannelPicker> picker_
358
359
  ABSL_GUARDED_BY(&RlsLb::mu_);
359
360
  };
360
361
 
@@ -460,12 +461,11 @@ class RlsLb : public LoadBalancingPolicy {
460
461
  void Orphan() override ABSL_NO_THREAD_SAFETY_ANALYSIS;
461
462
 
462
463
  private:
463
- static void OnBackoffTimer(void* args, grpc_error_handle error);
464
+ void OnBackoffTimerLocked();
464
465
 
465
466
  RefCountedPtr<Entry> entry_;
466
- bool armed_ ABSL_GUARDED_BY(&RlsLb::mu_) = true;
467
- grpc_timer backoff_timer_;
468
- grpc_closure backoff_timer_callback_;
467
+ absl::optional<EventEngine::TaskHandle> backoff_timer_task_handle_
468
+ ABSL_GUARDED_BY(&RlsLb::mu_);
469
469
  };
470
470
 
471
471
  RefCountedPtr<RlsLb> lb_policy_;
@@ -521,7 +521,10 @@ class RlsLb : public LoadBalancingPolicy {
521
521
  void Shutdown() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_);
522
522
 
523
523
  private:
524
- static void OnCleanupTimer(void* arg, grpc_error_handle error);
524
+ // Shared logic for starting the cleanup timer
525
+ void StartCleanupTimer() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_);
526
+
527
+ void OnCleanupTimer();
525
528
 
526
529
  // Returns the entry size for a given key.
527
530
  static size_t EntrySizeForKey(const RequestKey& key);
@@ -539,8 +542,7 @@ class RlsLb : public LoadBalancingPolicy {
539
542
  std::list<RequestKey> lru_list_ ABSL_GUARDED_BY(&RlsLb::mu_);
540
543
  std::unordered_map<RequestKey, OrphanablePtr<Entry>, absl::Hash<RequestKey>>
541
544
  map_ ABSL_GUARDED_BY(&RlsLb::mu_);
542
- grpc_timer cleanup_timer_;
543
- grpc_closure timer_callback_;
545
+ absl::optional<EventEngine::TaskHandle> cleanup_timer_handle_;
544
546
  };
545
547
 
546
548
  // Channel for communicating with the RLS server.
@@ -730,7 +732,7 @@ RlsLb::ChildPolicyWrapper::ChildPolicyWrapper(RefCountedPtr<RlsLb> lb_policy,
730
732
  : nullptr),
731
733
  lb_policy_(lb_policy),
732
734
  target_(std::move(target)),
733
- picker_(std::make_unique<QueuePicker>(std::move(lb_policy))) {
735
+ picker_(MakeRefCounted<QueuePicker>(std::move(lb_policy))) {
734
736
  lb_policy_->child_policy_map_.emplace(target_, this);
735
737
  }
736
738
 
@@ -811,7 +813,7 @@ void RlsLb::ChildPolicyWrapper::StartUpdate() {
811
813
  config.status().ToString().c_str());
812
814
  }
813
815
  pending_config_.reset();
814
- picker_ = std::make_unique<TransientFailurePicker>(
816
+ picker_ = MakeRefCounted<TransientFailurePicker>(
815
817
  absl::UnavailableError(config.status().message()));
816
818
  child_policy_.reset();
817
819
  } else {
@@ -876,7 +878,7 @@ RlsLb::ChildPolicyWrapper::ChildPolicyHelper::CreateSubchannel(
876
878
 
877
879
  void RlsLb::ChildPolicyWrapper::ChildPolicyHelper::UpdateState(
878
880
  grpc_connectivity_state state, const absl::Status& status,
879
- std::unique_ptr<SubchannelPicker> picker) {
881
+ RefCountedPtr<SubchannelPicker> picker) {
880
882
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
881
883
  gpr_log(GPR_INFO,
882
884
  "[rlslb %p] ChildPolicyWrapper=%p [%s] ChildPolicyHelper=%p: "
@@ -1116,46 +1118,50 @@ LoadBalancingPolicy::PickResult RlsLb::Picker::Pick(PickArgs args) {
1116
1118
  RlsLb::Cache::Entry::BackoffTimer::BackoffTimer(RefCountedPtr<Entry> entry,
1117
1119
  Timestamp backoff_time)
1118
1120
  : entry_(std::move(entry)) {
1119
- GRPC_CLOSURE_INIT(&backoff_timer_callback_, OnBackoffTimer, this, nullptr);
1120
- Ref(DEBUG_LOCATION, "BackoffTimer").release();
1121
- grpc_timer_init(&backoff_timer_, backoff_time, &backoff_timer_callback_);
1121
+ backoff_timer_task_handle_ =
1122
+ entry_->lb_policy_->channel_control_helper()->GetEventEngine()->RunAfter(
1123
+ backoff_time - Timestamp::Now(),
1124
+ [self = Ref(DEBUG_LOCATION, "BackoffTimer")]() mutable {
1125
+ ApplicationCallbackExecCtx callback_exec_ctx;
1126
+ ExecCtx exec_ctx;
1127
+ auto self_ptr = self.get();
1128
+ self_ptr->entry_->lb_policy_->work_serializer()->Run(
1129
+ [self = std::move(self)]() { self->OnBackoffTimerLocked(); },
1130
+ DEBUG_LOCATION);
1131
+ });
1122
1132
  }
1123
1133
 
1124
1134
  void RlsLb::Cache::Entry::BackoffTimer::Orphan() {
1125
- if (armed_) {
1126
- armed_ = false;
1127
- grpc_timer_cancel(&backoff_timer_);
1135
+ if (backoff_timer_task_handle_.has_value() &&
1136
+ entry_->lb_policy_->channel_control_helper()->GetEventEngine()->Cancel(
1137
+ *backoff_timer_task_handle_)) {
1138
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1139
+ gpr_log(GPR_INFO, "[rlslb %p] cache entry=%p %s, backoff timer canceled",
1140
+ entry_->lb_policy_.get(), entry_.get(),
1141
+ entry_->is_shutdown_ ? "(shut down)"
1142
+ : entry_->lru_iterator_->ToString().c_str());
1143
+ }
1128
1144
  }
1145
+ backoff_timer_task_handle_.reset();
1129
1146
  Unref(DEBUG_LOCATION, "Orphan");
1130
1147
  }
1131
1148
 
1132
- void RlsLb::Cache::Entry::BackoffTimer::OnBackoffTimer(
1133
- void* arg, grpc_error_handle /*error*/) {
1134
- auto* self = static_cast<BackoffTimer*>(arg);
1135
- self->entry_->lb_policy_->work_serializer()->Run(
1136
- [self]() {
1137
- RefCountedPtr<BackoffTimer> backoff_timer(self);
1138
- {
1139
- MutexLock lock(&self->entry_->lb_policy_->mu_);
1140
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1141
- gpr_log(GPR_INFO,
1142
- "[rlslb %p] cache entry=%p %s, armed_=%d: "
1143
- "backoff timer fired",
1144
- self->entry_->lb_policy_.get(), self->entry_.get(),
1145
- self->entry_->is_shutdown_
1146
- ? "(shut down)"
1147
- : self->entry_->lru_iterator_->ToString().c_str(),
1148
- self->armed_);
1149
- }
1150
- bool cancelled = !self->armed_;
1151
- self->armed_ = false;
1152
- if (cancelled) return;
1153
- }
1154
- // The pick was in backoff state and there could be a pick queued if
1155
- // wait_for_ready is true. We'll update the picker for that case.
1156
- self->entry_->lb_policy_->UpdatePickerLocked();
1157
- },
1158
- DEBUG_LOCATION);
1149
+ void RlsLb::Cache::Entry::BackoffTimer::OnBackoffTimerLocked() {
1150
+ {
1151
+ MutexLock lock(&entry_->lb_policy_->mu_);
1152
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1153
+ gpr_log(GPR_INFO, "[rlslb %p] cache entry=%p %s, backoff timer fired",
1154
+ entry_->lb_policy_.get(), entry_.get(),
1155
+ entry_->is_shutdown_ ? "(shut down)"
1156
+ : entry_->lru_iterator_->ToString().c_str());
1157
+ }
1158
+ // Skip the update if Orphaned
1159
+ if (!backoff_timer_task_handle_.has_value()) return;
1160
+ backoff_timer_task_handle_.reset();
1161
+ }
1162
+ // The pick was in backoff state and there could be a pick queued if
1163
+ // wait_for_ready is true. We'll update the picker for that case.
1164
+ entry_->lb_policy_->UpdatePickerLocked();
1159
1165
  }
1160
1166
 
1161
1167
  //
@@ -1361,11 +1367,7 @@ RlsLb::Cache::Entry::OnRlsResponseLocked(
1361
1367
  //
1362
1368
 
1363
1369
  RlsLb::Cache::Cache(RlsLb* lb_policy) : lb_policy_(lb_policy) {
1364
- Timestamp now = Timestamp::Now();
1365
- lb_policy_->Ref(DEBUG_LOCATION, "CacheCleanupTimer").release();
1366
- GRPC_CLOSURE_INIT(&timer_callback_, OnCleanupTimer, this, nullptr);
1367
- grpc_timer_init(&cleanup_timer_, now + kCacheCleanupTimerInterval,
1368
- &timer_callback_);
1370
+ StartCleanupTimer();
1369
1371
  }
1370
1372
 
1371
1373
  RlsLb::Cache::Entry* RlsLb::Cache::Find(const RequestKey& key) {
@@ -1419,37 +1421,49 @@ void RlsLb::Cache::ResetAllBackoff() {
1419
1421
  void RlsLb::Cache::Shutdown() {
1420
1422
  map_.clear();
1421
1423
  lru_list_.clear();
1422
- grpc_timer_cancel(&cleanup_timer_);
1424
+ if (cleanup_timer_handle_.has_value() &&
1425
+ lb_policy_->channel_control_helper()->GetEventEngine()->Cancel(
1426
+ *cleanup_timer_handle_)) {
1427
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1428
+ gpr_log(GPR_INFO, "[rlslb %p] cache cleanup timer canceled", lb_policy_);
1429
+ }
1430
+ }
1431
+ cleanup_timer_handle_.reset();
1423
1432
  }
1424
1433
 
1425
- void RlsLb::Cache::OnCleanupTimer(void* arg, grpc_error_handle error) {
1426
- Cache* cache = static_cast<Cache*>(arg);
1427
- cache->lb_policy_->work_serializer()->Run(
1428
- [cache, error]() {
1429
- RefCountedPtr<RlsLb> lb_policy(cache->lb_policy_);
1430
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1431
- gpr_log(GPR_INFO, "[rlslb %p] cache cleanup timer fired (%s)",
1432
- cache->lb_policy_, StatusToString(error).c_str());
1433
- }
1434
- if (error == absl::CancelledError()) return;
1435
- MutexLock lock(&lb_policy->mu_);
1436
- if (lb_policy->is_shutdown_) return;
1437
- for (auto it = cache->map_.begin(); it != cache->map_.end();) {
1438
- if (GPR_UNLIKELY(it->second->ShouldRemove() &&
1439
- it->second->CanEvict())) {
1440
- cache->size_ -= it->second->Size();
1441
- it = cache->map_.erase(it);
1442
- } else {
1443
- ++it;
1444
- }
1445
- }
1446
- Timestamp now = Timestamp::Now();
1447
- lb_policy.release();
1448
- grpc_timer_init(&cache->cleanup_timer_,
1449
- now + kCacheCleanupTimerInterval,
1450
- &cache->timer_callback_);
1451
- },
1452
- DEBUG_LOCATION);
1434
+ void RlsLb::Cache::StartCleanupTimer() {
1435
+ cleanup_timer_handle_ =
1436
+ lb_policy_->channel_control_helper()->GetEventEngine()->RunAfter(
1437
+ kCacheCleanupTimerInterval,
1438
+ [this, lb_policy = lb_policy_->Ref(DEBUG_LOCATION,
1439
+ "CacheCleanupTimer")]() mutable {
1440
+ ApplicationCallbackExecCtx callback_exec_ctx;
1441
+ ExecCtx exec_ctx;
1442
+ lb_policy_->work_serializer()->Run(
1443
+ [this, lb_policy = std::move(lb_policy)]() {
1444
+ // The lb_policy ref is held until the callback completes
1445
+ OnCleanupTimer();
1446
+ },
1447
+ DEBUG_LOCATION);
1448
+ });
1449
+ }
1450
+
1451
+ void RlsLb::Cache::OnCleanupTimer() {
1452
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1453
+ gpr_log(GPR_INFO, "[rlslb %p] cache cleanup timer fired", lb_policy_);
1454
+ }
1455
+ MutexLock lock(&lb_policy_->mu_);
1456
+ if (!cleanup_timer_handle_.has_value()) return;
1457
+ if (lb_policy_->is_shutdown_) return;
1458
+ for (auto it = map_.begin(); it != map_.end();) {
1459
+ if (GPR_UNLIKELY(it->second->ShouldRemove() && it->second->CanEvict())) {
1460
+ size_ -= it->second->Size();
1461
+ it = map_.erase(it);
1462
+ } else {
1463
+ ++it;
1464
+ }
1465
+ }
1466
+ StartCleanupTimer();
1453
1467
  }
1454
1468
 
1455
1469
  size_t RlsLb::Cache::EntrySizeForKey(const RequestKey& key) {
@@ -2147,7 +2161,7 @@ void RlsLb::UpdatePickerLocked() {
2147
2161
  status = absl::UnavailableError("no children available");
2148
2162
  }
2149
2163
  channel_control_helper()->UpdateState(
2150
- state, status, std::make_unique<Picker>(Ref(DEBUG_LOCATION, "Picker")));
2164
+ state, status, MakeRefCounted<Picker>(Ref(DEBUG_LOCATION, "Picker")));
2151
2165
  }
2152
2166
 
2153
2167
  //
@@ -31,7 +31,7 @@
31
31
  #include "absl/strings/string_view.h"
32
32
  #include "absl/types/optional.h"
33
33
 
34
- #include <grpc/impl/codegen/connectivity_state.h>
34
+ #include <grpc/impl/connectivity_state.h>
35
35
  #include <grpc/support/log.h>
36
36
 
37
37
  #include "src/core/ext/filters/client_channel/lb_policy/subchannel_list.h"
@@ -305,7 +305,7 @@ absl::Status RoundRobin::UpdateLocked(UpdateArgs args) {
305
305
  : args.addresses.status();
306
306
  channel_control_helper()->UpdateState(
307
307
  GRPC_CHANNEL_TRANSIENT_FAILURE, status,
308
- std::make_unique<TransientFailurePicker>(status));
308
+ MakeRefCounted<TransientFailurePicker>(status));
309
309
  return status;
310
310
  }
311
311
  // Otherwise, if this is the initial update, immediately promote it to
@@ -314,7 +314,7 @@ absl::Status RoundRobin::UpdateLocked(UpdateArgs args) {
314
314
  subchannel_list_ = std::move(latest_pending_subchannel_list_);
315
315
  channel_control_helper()->UpdateState(
316
316
  GRPC_CHANNEL_CONNECTING, absl::Status(),
317
- std::make_unique<QueuePicker>(Ref(DEBUG_LOCATION, "QueuePicker")));
317
+ MakeRefCounted<QueuePicker>(Ref(DEBUG_LOCATION, "QueuePicker")));
318
318
  }
319
319
  return absl::OkStatus();
320
320
  }
@@ -355,12 +355,14 @@ void RoundRobin::RoundRobinSubchannelList::
355
355
  // If this is latest_pending_subchannel_list_, then swap it into
356
356
  // subchannel_list_ in the following cases:
357
357
  // - subchannel_list_ has no READY subchannels.
358
- // - This list has at least one READY subchannel.
358
+ // - This list has at least one READY subchannel and we have seen the
359
+ // initial connectivity state notification for all subchannels.
359
360
  // - All of the subchannels in this list are in TRANSIENT_FAILURE.
360
361
  // (This may cause the channel to go from READY to TRANSIENT_FAILURE,
361
362
  // but we're doing what the control plane told us to do.)
362
363
  if (p->latest_pending_subchannel_list_.get() == this &&
363
- (p->subchannel_list_->num_ready_ == 0 || num_ready_ > 0 ||
364
+ (p->subchannel_list_->num_ready_ == 0 ||
365
+ (num_ready_ > 0 && AllSubchannelsSeenInitialState()) ||
364
366
  num_transient_failure_ == num_subchannels())) {
365
367
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_round_robin_trace)) {
366
368
  const std::string old_counters_string =
@@ -386,7 +388,7 @@ void RoundRobin::RoundRobinSubchannelList::
386
388
  this);
387
389
  }
388
390
  p->channel_control_helper()->UpdateState(GRPC_CHANNEL_READY, absl::Status(),
389
- std::make_unique<Picker>(p, this));
391
+ MakeRefCounted<Picker>(p, this));
390
392
  } else if (num_connecting_ > 0) {
391
393
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_round_robin_trace)) {
392
394
  gpr_log(GPR_INFO, "[RR %p] reporting CONNECTING with subchannel list %p",
@@ -394,7 +396,7 @@ void RoundRobin::RoundRobinSubchannelList::
394
396
  }
395
397
  p->channel_control_helper()->UpdateState(
396
398
  GRPC_CHANNEL_CONNECTING, absl::Status(),
397
- std::make_unique<QueuePicker>(p->Ref(DEBUG_LOCATION, "QueuePicker")));
399
+ MakeRefCounted<QueuePicker>(p->Ref(DEBUG_LOCATION, "QueuePicker")));
398
400
  } else if (num_transient_failure_ == num_subchannels()) {
399
401
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_round_robin_trace)) {
400
402
  gpr_log(GPR_INFO,
@@ -408,7 +410,7 @@ void RoundRobin::RoundRobinSubchannelList::
408
410
  }
409
411
  p->channel_control_helper()->UpdateState(
410
412
  GRPC_CHANNEL_TRANSIENT_FAILURE, last_failure_,
411
- std::make_unique<TransientFailurePicker>(last_failure_));
413
+ MakeRefCounted<TransientFailurePicker>(last_failure_));
412
414
  }
413
415
  }
414
416
 
@@ -30,7 +30,7 @@
30
30
  #include "absl/status/status.h"
31
31
  #include "absl/types/optional.h"
32
32
 
33
- #include <grpc/impl/codegen/connectivity_state.h>
33
+ #include <grpc/impl/connectivity_state.h>
34
34
  #include <grpc/support/log.h>
35
35
 
36
36
  #include "src/core/lib/channel/channel_args.h"
@@ -47,25 +47,25 @@
47
47
  // Code for maintaining a list of subchannels within an LB policy.
48
48
  //
49
49
  // To use this, callers must create their own subclasses, like so:
50
- /*
50
+ //
51
51
 
52
- class MySubchannelList; // Forward declaration.
52
+ // class MySubchannelList; // Forward declaration.
53
53
 
54
- class MySubchannelData
55
- : public SubchannelData<MySubchannelList, MySubchannelData> {
56
- public:
57
- void ProcessConnectivityChangeLocked(
58
- absl::optional<grpc_connectivity_state> old_state,
59
- grpc_connectivity_state new_state) override {
60
- // ...code to handle connectivity changes...
61
- }
62
- };
54
+ // class MySubchannelData
55
+ // : public SubchannelData<MySubchannelList, MySubchannelData> {
56
+ // public:
57
+ // void ProcessConnectivityChangeLocked(
58
+ // absl::optional<grpc_connectivity_state> old_state,
59
+ // grpc_connectivity_state new_state) override {
60
+ // // ...code to handle connectivity changes...
61
+ // }
62
+ // };
63
63
 
64
- class MySubchannelList
65
- : public SubchannelList<MySubchannelList, MySubchannelData> {
66
- };
64
+ // class MySubchannelList
65
+ // : public SubchannelList<MySubchannelList, MySubchannelData> {
66
+ // };
67
67
 
68
- */
68
+ //
69
69
  // All methods will be called from within the client_channel work serializer.
70
70
 
71
71
  namespace grpc_core {
@@ -200,6 +200,10 @@ class SubchannelList : public DualRefCounted<SubchannelListType> {
200
200
  // Resets connection backoff of all subchannels.
201
201
  void ResetBackoffLocked();
202
202
 
203
+ // Returns true if all subchannels have seen their initial
204
+ // connectivity state notifications.
205
+ bool AllSubchannelsSeenInitialState();
206
+
203
207
  void Orphan() override;
204
208
 
205
209
  protected:
@@ -324,6 +328,7 @@ void SubchannelData<SubchannelListType,
324
328
  pending_watcher_ =
325
329
  new Watcher(this, subchannel_list()->WeakRef(DEBUG_LOCATION, "Watcher"));
326
330
  subchannel_->WatchConnectivityState(
331
+ // NOLINTNEXTLINE(google-readability-casting)
327
332
  std::unique_ptr<SubchannelInterface::ConnectivityStateWatcherInterface>(
328
333
  pending_watcher_));
329
334
  }
@@ -434,6 +439,15 @@ void SubchannelList<SubchannelListType,
434
439
  }
435
440
  }
436
441
 
442
+ template <typename SubchannelListType, typename SubchannelDataType>
443
+ bool SubchannelList<SubchannelListType,
444
+ SubchannelDataType>::AllSubchannelsSeenInitialState() {
445
+ for (size_t i = 0; i < num_subchannels(); ++i) {
446
+ if (!subchannel(i)->connectivity_state().has_value()) return false;
447
+ }
448
+ return true;
449
+ }
450
+
437
451
  } // namespace grpc_core
438
452
 
439
453
  #endif // GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_POLICY_SUBCHANNEL_LIST_H
@@ -35,7 +35,7 @@
35
35
  #include "absl/types/optional.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/address_filtering.h"
@@ -45,7 +45,6 @@
45
45
  #include "src/core/lib/debug/trace.h"
46
46
  #include "src/core/lib/gprpp/debug_location.h"
47
47
  #include "src/core/lib/gprpp/orphanable.h"
48
- #include "src/core/lib/gprpp/ref_counted.h"
49
48
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
50
49
  #include "src/core/lib/gprpp/time.h"
51
50
  #include "src/core/lib/gprpp/validation_errors.h"
@@ -121,17 +120,6 @@ class WeightedTargetLb : public LoadBalancingPolicy {
121
120
  void ResetBackoffLocked() override;
122
121
 
123
122
  private:
124
- // A simple wrapper for ref-counting a picker from the child policy.
125
- class ChildPickerWrapper : public RefCounted<ChildPickerWrapper> {
126
- public:
127
- explicit ChildPickerWrapper(std::unique_ptr<SubchannelPicker> picker)
128
- : picker_(std::move(picker)) {}
129
- PickResult Pick(PickArgs args) { return picker_->Pick(args); }
130
-
131
- private:
132
- std::unique_ptr<SubchannelPicker> picker_;
133
- };
134
-
135
123
  // Picks a child using stateless WRR and then delegates to that
136
124
  // child's picker.
137
125
  class WeightedPicker : public SubchannelPicker {
@@ -141,7 +129,7 @@ class WeightedTargetLb : public LoadBalancingPolicy {
141
129
  // range proportional to the child's weight. The start of the range
142
130
  // is the previous value in the vector and is 0 for the first element.
143
131
  using PickerList =
144
- std::vector<std::pair<uint64_t, RefCountedPtr<ChildPickerWrapper>>>;
132
+ std::vector<std::pair<uint64_t, RefCountedPtr<SubchannelPicker>>>;
145
133
 
146
134
  explicit WeightedPicker(PickerList pickers)
147
135
  : pickers_(std::move(pickers)) {}
@@ -173,9 +161,7 @@ class WeightedTargetLb : public LoadBalancingPolicy {
173
161
  grpc_connectivity_state connectivity_state() const {
174
162
  return connectivity_state_;
175
163
  }
176
- RefCountedPtr<ChildPickerWrapper> picker_wrapper() const {
177
- return picker_wrapper_;
178
- }
164
+ RefCountedPtr<SubchannelPicker> picker() const { return picker_; }
179
165
 
180
166
  private:
181
167
  class Helper : public ChannelControlHelper {
@@ -189,7 +175,7 @@ class WeightedTargetLb : public LoadBalancingPolicy {
189
175
  ServerAddress address, const ChannelArgs& args) override;
190
176
  void UpdateState(grpc_connectivity_state state,
191
177
  const absl::Status& status,
192
- std::unique_ptr<SubchannelPicker> picker) override;
178
+ RefCountedPtr<SubchannelPicker> picker) override;
193
179
  void RequestReresolution() override;
194
180
  absl::string_view GetAuthority() override;
195
181
  grpc_event_engine::experimental::EventEngine* GetEventEngine() override;
@@ -220,7 +206,7 @@ class WeightedTargetLb : public LoadBalancingPolicy {
220
206
 
221
207
  void OnConnectivityStateUpdateLocked(
222
208
  grpc_connectivity_state state, const absl::Status& status,
223
- std::unique_ptr<SubchannelPicker> picker);
209
+ RefCountedPtr<SubchannelPicker> picker);
224
210
 
225
211
  // The owning LB policy.
226
212
  RefCountedPtr<WeightedTargetLb> weighted_target_policy_;
@@ -231,7 +217,7 @@ class WeightedTargetLb : public LoadBalancingPolicy {
231
217
 
232
218
  OrphanablePtr<LoadBalancingPolicy> child_policy_;
233
219
 
234
- RefCountedPtr<ChildPickerWrapper> picker_wrapper_;
220
+ RefCountedPtr<SubchannelPicker> picker_;
235
221
  grpc_connectivity_state connectivity_state_ = GRPC_CHANNEL_CONNECTING;
236
222
 
237
223
  OrphanablePtr<DelayedRemovalTimer> delayed_removal_timer_;
@@ -364,7 +350,7 @@ absl::Status WeightedTargetLb::UpdateLocked(UpdateArgs args) {
364
350
  "no children in weighted_target policy: ", args.resolution_note));
365
351
  channel_control_helper()->UpdateState(
366
352
  GRPC_CHANNEL_TRANSIENT_FAILURE, status,
367
- std::make_unique<TransientFailurePicker>(status));
353
+ MakeRefCounted<TransientFailurePicker>(status));
368
354
  return absl::OkStatus();
369
355
  }
370
356
  UpdateStateLocked();
@@ -409,18 +395,19 @@ void WeightedTargetLb::UpdateStateLocked() {
409
395
  if (config_->target_map().find(child_name) == config_->target_map().end()) {
410
396
  continue;
411
397
  }
398
+ auto child_picker = child->picker();
412
399
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_weighted_target_trace)) {
413
400
  gpr_log(GPR_INFO,
414
401
  "[weighted_target_lb %p] child=%s state=%s weight=%u picker=%p",
415
402
  this, child_name.c_str(),
416
403
  ConnectivityStateName(child->connectivity_state()),
417
- child->weight(), child->picker_wrapper().get());
404
+ child->weight(), child_picker.get());
418
405
  }
419
406
  switch (child->connectivity_state()) {
420
407
  case GRPC_CHANNEL_READY: {
421
408
  GPR_ASSERT(child->weight() > 0);
422
409
  ready_end += child->weight();
423
- ready_picker_list.emplace_back(ready_end, child->picker_wrapper());
410
+ ready_picker_list.emplace_back(ready_end, std::move(child_picker));
424
411
  break;
425
412
  }
426
413
  case GRPC_CHANNEL_CONNECTING: {
@@ -434,7 +421,7 @@ void WeightedTargetLb::UpdateStateLocked() {
434
421
  case GRPC_CHANNEL_TRANSIENT_FAILURE: {
435
422
  GPR_ASSERT(child->weight() > 0);
436
423
  tf_end += child->weight();
437
- tf_picker_list.emplace_back(tf_end, child->picker_wrapper());
424
+ tf_picker_list.emplace_back(tf_end, std::move(child_picker));
438
425
  break;
439
426
  }
440
427
  default:
@@ -456,19 +443,18 @@ void WeightedTargetLb::UpdateStateLocked() {
456
443
  gpr_log(GPR_INFO, "[weighted_target_lb %p] connectivity changed to %s",
457
444
  this, ConnectivityStateName(connectivity_state));
458
445
  }
459
- std::unique_ptr<SubchannelPicker> picker;
446
+ RefCountedPtr<SubchannelPicker> picker;
460
447
  absl::Status status;
461
448
  switch (connectivity_state) {
462
449
  case GRPC_CHANNEL_READY:
463
- picker = std::make_unique<WeightedPicker>(std::move(ready_picker_list));
450
+ picker = MakeRefCounted<WeightedPicker>(std::move(ready_picker_list));
464
451
  break;
465
452
  case GRPC_CHANNEL_CONNECTING:
466
453
  case GRPC_CHANNEL_IDLE:
467
- picker =
468
- std::make_unique<QueuePicker>(Ref(DEBUG_LOCATION, "QueuePicker"));
454
+ picker = MakeRefCounted<QueuePicker>(Ref(DEBUG_LOCATION, "QueuePicker"));
469
455
  break;
470
456
  default:
471
- picker = std::make_unique<WeightedPicker>(std::move(tf_picker_list));
457
+ picker = MakeRefCounted<WeightedPicker>(std::move(tf_picker_list));
472
458
  }
473
459
  channel_control_helper()->UpdateState(connectivity_state, status,
474
460
  std::move(picker));
@@ -555,7 +541,7 @@ void WeightedTargetLb::WeightedChild::Orphan() {
555
541
  child_policy_.reset();
556
542
  // Drop our ref to the child's picker, in case it's holding a ref to
557
543
  // the child.
558
- picker_wrapper_.reset();
544
+ picker_.reset();
559
545
  delayed_removal_timer_.reset();
560
546
  Unref();
561
547
  }
@@ -635,16 +621,16 @@ void WeightedTargetLb::WeightedChild::ResetBackoffLocked() {
635
621
 
636
622
  void WeightedTargetLb::WeightedChild::OnConnectivityStateUpdateLocked(
637
623
  grpc_connectivity_state state, const absl::Status& status,
638
- std::unique_ptr<SubchannelPicker> picker) {
624
+ RefCountedPtr<SubchannelPicker> picker) {
639
625
  // Cache the picker in the WeightedChild.
640
- picker_wrapper_ = MakeRefCounted<ChildPickerWrapper>(std::move(picker));
626
+ picker_ = std::move(picker);
641
627
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_weighted_target_trace)) {
642
628
  gpr_log(GPR_INFO,
643
629
  "[weighted_target_lb %p] WeightedChild %p %s: connectivity "
644
- "state update: state=%s (%s) picker_wrapper=%p",
630
+ "state update: state=%s (%s) picker=%p",
645
631
  weighted_target_policy_.get(), this, name_.c_str(),
646
632
  ConnectivityStateName(state), status.ToString().c_str(),
647
- picker_wrapper_.get());
633
+ picker_.get());
648
634
  }
649
635
  // If the child reports IDLE, immediately tell it to exit idle.
650
636
  if (state == GRPC_CHANNEL_IDLE) child_policy_->ExitIdleLocked();
@@ -688,7 +674,7 @@ WeightedTargetLb::WeightedChild::Helper::CreateSubchannel(
688
674
 
689
675
  void WeightedTargetLb::WeightedChild::Helper::UpdateState(
690
676
  grpc_connectivity_state state, const absl::Status& status,
691
- std::unique_ptr<SubchannelPicker> picker) {
677
+ RefCountedPtr<SubchannelPicker> picker) {
692
678
  if (weighted_child_->weighted_target_policy_->shutting_down_) return;
693
679
  weighted_child_->OnConnectivityStateUpdateLocked(state, status,
694
680
  std::move(picker));