grpc 1.45.0 → 1.53.0

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

Potentially problematic release.


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

Files changed (1842) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +437 -254
  3. data/include/grpc/byte_buffer.h +76 -1
  4. data/include/grpc/byte_buffer_reader.h +19 -1
  5. data/include/grpc/compression.h +2 -2
  6. data/include/grpc/event_engine/endpoint_config.h +11 -5
  7. data/include/grpc/event_engine/event_engine.h +129 -39
  8. data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -1
  9. data/include/grpc/event_engine/internal/slice_cast.h +67 -0
  10. data/include/grpc/event_engine/memory_allocator.h +1 -16
  11. data/include/grpc/event_engine/port.h +1 -1
  12. data/include/grpc/event_engine/slice.h +306 -0
  13. data/include/grpc/event_engine/slice_buffer.h +159 -0
  14. data/include/grpc/fork.h +25 -1
  15. data/include/grpc/grpc.h +4 -14
  16. data/include/grpc/grpc_posix.h +1 -1
  17. data/include/grpc/grpc_security.h +11 -0
  18. data/include/grpc/impl/codegen/atm.h +3 -71
  19. data/include/grpc/impl/codegen/atm_gcc_atomic.h +3 -67
  20. data/include/grpc/impl/codegen/atm_gcc_sync.h +3 -61
  21. data/include/grpc/impl/codegen/atm_windows.h +3 -108
  22. data/include/grpc/impl/codegen/byte_buffer.h +4 -78
  23. data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -19
  24. data/include/grpc/impl/codegen/compression_types.h +5 -83
  25. data/include/grpc/impl/codegen/connectivity_state.h +5 -21
  26. data/include/grpc/impl/codegen/fork.h +4 -25
  27. data/include/grpc/impl/codegen/gpr_types.h +4 -35
  28. data/include/grpc/impl/codegen/grpc_types.h +5 -797
  29. data/include/grpc/impl/codegen/log.h +3 -86
  30. data/include/grpc/impl/codegen/port_platform.h +3 -699
  31. data/include/grpc/impl/codegen/propagation_bits.h +3 -28
  32. data/include/grpc/impl/codegen/slice.h +4 -107
  33. data/include/grpc/impl/codegen/status.h +4 -131
  34. data/include/grpc/impl/codegen/sync.h +3 -42
  35. data/include/grpc/impl/codegen/sync_abseil.h +3 -12
  36. data/include/grpc/impl/codegen/sync_custom.h +3 -14
  37. data/include/grpc/impl/codegen/sync_generic.h +3 -25
  38. data/include/grpc/impl/codegen/sync_posix.h +3 -28
  39. data/include/grpc/impl/codegen/sync_windows.h +3 -16
  40. data/include/grpc/impl/compression_types.h +109 -0
  41. data/include/grpc/impl/connectivity_state.h +47 -0
  42. data/include/grpc/impl/grpc_types.h +827 -0
  43. data/include/grpc/impl/propagation_bits.h +54 -0
  44. data/include/grpc/impl/slice_type.h +112 -0
  45. data/include/grpc/load_reporting.h +1 -1
  46. data/include/grpc/module.modulemap +5 -1
  47. data/include/grpc/slice.h +1 -1
  48. data/include/grpc/status.h +131 -1
  49. data/include/grpc/support/atm.h +70 -1
  50. data/include/grpc/support/atm_gcc_atomic.h +59 -1
  51. data/include/grpc/support/atm_gcc_sync.h +58 -1
  52. data/include/grpc/support/atm_windows.h +105 -1
  53. data/include/grpc/support/log.h +87 -1
  54. data/include/grpc/support/log_windows.h +1 -1
  55. data/include/grpc/support/port_platform.h +767 -1
  56. data/include/grpc/support/string_util.h +1 -1
  57. data/include/grpc/support/sync.h +35 -2
  58. data/include/grpc/support/sync_abseil.h +11 -1
  59. data/include/grpc/support/sync_custom.h +13 -1
  60. data/include/grpc/support/sync_generic.h +24 -1
  61. data/include/grpc/support/sync_posix.h +27 -1
  62. data/include/grpc/support/sync_windows.h +15 -1
  63. data/include/grpc/support/time.h +31 -6
  64. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +148 -0
  65. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +52 -0
  66. data/src/core/ext/filters/backend_metrics/backend_metric_provider.h +29 -0
  67. data/src/core/ext/filters/census/grpc_context.cc +19 -17
  68. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +315 -0
  69. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +142 -0
  70. data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.cc +1 -1
  71. data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.h +6 -4
  72. data/src/core/ext/filters/client_channel/backend_metric.cc +19 -12
  73. data/src/core/ext/filters/client_channel/backend_metric.h +21 -11
  74. data/src/core/ext/filters/client_channel/backup_poller.cc +34 -34
  75. data/src/core/ext/filters/client_channel/backup_poller.h +26 -28
  76. data/src/core/ext/filters/client_channel/channel_connectivity.cc +89 -44
  77. data/src/core/ext/filters/client_channel/client_channel.cc +557 -540
  78. data/src/core/ext/filters/client_channel/client_channel.h +70 -26
  79. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +19 -23
  80. data/src/core/ext/filters/client_channel/client_channel_channelz.h +33 -23
  81. data/src/core/ext/filters/client_channel/client_channel_factory.cc +19 -43
  82. data/src/core/ext/filters/client_channel/client_channel_factory.h +11 -11
  83. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +22 -47
  84. data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
  85. data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +33 -27
  86. data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
  87. data/src/core/ext/filters/client_channel/config_selector.h +29 -23
  88. data/src/core/ext/filters/client_channel/connector.h +19 -10
  89. data/src/core/ext/filters/client_channel/dynamic_filters.cc +40 -54
  90. data/src/core/ext/filters/client_channel/dynamic_filters.h +20 -11
  91. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
  92. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +24 -21
  93. data/src/core/ext/filters/client_channel/health/health_check_client.cc +137 -582
  94. data/src/core/ext/filters/client_channel/health/health_check_client.h +29 -163
  95. data/src/core/ext/filters/client_channel/http_proxy.cc +130 -164
  96. data/src/core/ext/filters/client_channel/http_proxy.h +46 -22
  97. data/src/core/ext/filters/client_channel/lb_call_state_internal.h +39 -0
  98. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +8 -5
  99. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +4 -3
  100. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
  101. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +37 -16
  102. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +18 -13
  103. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +71 -131
  104. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +41 -24
  105. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +410 -375
  106. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +26 -27
  107. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +15 -3
  108. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +9 -7
  109. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +18 -20
  110. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +27 -22
  111. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +28 -19
  112. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +26 -25
  113. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +338 -0
  114. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
  115. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric_internal.h +117 -0
  116. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1129 -0
  117. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +94 -0
  118. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +174 -180
  119. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +478 -479
  120. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +491 -409
  121. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +19 -9
  122. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +618 -642
  123. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +261 -234
  124. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +165 -143
  125. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +128 -0
  126. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.h +71 -0
  127. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +972 -0
  128. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +280 -248
  129. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +251 -187
  130. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
  131. data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +19 -15
  132. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +3 -3
  133. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +178 -256
  134. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +212 -216
  135. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +543 -584
  136. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +819 -0
  137. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +67 -0
  138. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +369 -0
  139. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
  140. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +22 -21
  141. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +34 -19
  142. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +579 -376
  143. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +50 -44
  144. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +31 -30
  145. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +89 -84
  146. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +300 -209
  147. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +82 -61
  148. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +18 -18
  149. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +20 -19
  150. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
  151. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +22 -22
  152. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +86 -224
  153. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +21 -34
  154. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +19 -5
  155. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +135 -63
  156. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +269 -0
  157. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +121 -0
  158. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +21 -27
  159. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +413 -303
  160. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +6 -4
  161. data/src/core/ext/filters/client_channel/retry_filter.cc +184 -166
  162. data/src/core/ext/filters/client_channel/retry_filter.h +4 -3
  163. data/src/core/ext/filters/client_channel/retry_service_config.cc +197 -229
  164. data/src/core/ext/filters/client_channel/retry_service_config.h +29 -26
  165. data/src/core/ext/filters/client_channel/retry_throttle.cc +28 -37
  166. data/src/core/ext/filters/client_channel/retry_throttle.h +36 -29
  167. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +34 -17
  168. data/src/core/ext/filters/client_channel/subchannel.cc +336 -388
  169. data/src/core/ext/filters/client_channel/subchannel.h +112 -82
  170. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
  171. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +17 -77
  172. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +41 -47
  173. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +470 -0
  174. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +222 -0
  175. data/src/core/ext/filters/deadline/deadline_filter.cc +94 -76
  176. data/src/core/ext/filters/deadline/deadline_filter.h +14 -12
  177. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +154 -372
  178. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +41 -9
  179. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
  180. data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +34 -13
  181. data/src/core/ext/filters/http/client/http_client_filter.cc +119 -477
  182. data/src/core/ext/filters/http/client/http_client_filter.h +55 -25
  183. data/src/core/ext/filters/http/client_authority_filter.cc +48 -58
  184. data/src/core/ext/filters/http/client_authority_filter.h +32 -28
  185. data/src/core/ext/filters/http/http_filters_plugin.cc +46 -52
  186. data/src/core/ext/filters/http/message_compress/compression_filter.cc +307 -0
  187. data/src/core/ext/filters/http/message_compress/compression_filter.h +139 -0
  188. data/src/core/ext/filters/http/server/http_server_filter.cc +111 -385
  189. data/src/core/ext/filters/http/server/http_server_filter.h +58 -24
  190. data/src/core/ext/filters/message_size/message_size_filter.cc +117 -137
  191. data/src/core/ext/filters/message_size/message_size_filter.h +34 -17
  192. data/src/core/ext/filters/rbac/rbac_filter.cc +29 -16
  193. data/src/core/ext/filters/rbac/rbac_filter.h +11 -3
  194. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +736 -523
  195. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +18 -7
  196. data/src/core/ext/filters/server_config_selector/server_config_selector.h +20 -8
  197. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +90 -202
  198. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +4 -3
  199. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +219 -0
  200. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +66 -0
  201. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +82 -0
  202. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +93 -0
  203. data/src/core/ext/transport/chttp2/alpn/alpn.cc +18 -18
  204. data/src/core/ext/transport/chttp2/alpn/alpn.h +24 -24
  205. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +186 -241
  206. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +38 -30
  207. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +209 -215
  208. data/src/core/ext/transport/chttp2/server/chttp2_server.h +26 -26
  209. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +24 -24
  210. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +35 -34
  211. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +31 -30
  212. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +29 -29
  213. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +893 -1079
  214. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +28 -23
  215. data/src/core/ext/transport/chttp2/transport/context_list.cc +23 -19
  216. data/src/core/ext/transport/chttp2/transport/context_list.h +32 -29
  217. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +251 -0
  218. data/src/core/ext/transport/chttp2/transport/decode_huff.h +971 -0
  219. data/src/core/ext/transport/chttp2/transport/flow_control.cc +350 -300
  220. data/src/core/ext/transport/chttp2/transport/flow_control.h +248 -325
  221. data/src/core/ext/transport/chttp2/transport/frame.h +22 -26
  222. data/src/core/ext/transport/chttp2/transport/frame_data.cc +85 -234
  223. data/src/core/ext/transport/chttp2/transport/frame_data.h +38 -61
  224. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +41 -36
  225. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +24 -22
  226. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +31 -25
  227. data/src/core/ext/transport/chttp2/transport/frame_ping.h +25 -22
  228. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +35 -26
  229. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +24 -21
  230. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +46 -77
  231. data/src/core/ext/transport/chttp2/transport/frame_settings.h +27 -23
  232. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +34 -33
  233. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +24 -21
  234. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +10 -4
  235. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +169 -220
  236. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +59 -61
  237. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +4 -1
  238. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +14 -5
  239. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +114 -542
  240. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +31 -24
  241. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +75 -67
  242. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +70 -48
  243. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +21 -19
  244. data/src/core/ext/transport/chttp2/transport/http2_settings.h +39 -38
  245. data/src/core/ext/transport/chttp2/transport/http_trace.cc +19 -0
  246. data/src/core/ext/transport/chttp2/transport/http_trace.h +24 -0
  247. data/src/core/ext/transport/chttp2/transport/huffsyms.cc +20 -20
  248. data/src/core/ext/transport/chttp2/transport/huffsyms.h +21 -21
  249. data/src/core/ext/transport/chttp2/transport/internal.h +250 -298
  250. data/src/core/ext/transport/chttp2/transport/parsing.cc +365 -132
  251. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +30 -30
  252. data/src/core/ext/transport/chttp2/transport/stream_map.cc +24 -24
  253. data/src/core/ext/transport/chttp2/transport/stream_map.h +34 -33
  254. data/src/core/ext/transport/chttp2/transport/varint.cc +19 -20
  255. data/src/core/ext/transport/chttp2/transport/varint.h +39 -34
  256. data/src/core/ext/transport/chttp2/transport/writing.cc +144 -106
  257. data/src/core/ext/transport/inproc/inproc_plugin.cc +17 -18
  258. data/src/core/ext/transport/inproc/inproc_transport.cc +227 -274
  259. data/src/core/ext/transport/inproc/inproc_transport.h +23 -21
  260. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +27 -24
  261. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +173 -73
  262. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +39 -36
  263. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +210 -85
  264. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +29 -344
  265. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +189 -1489
  266. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +388 -0
  267. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1953 -0
  268. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +5 -5
  269. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +38 -17
  270. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +9 -7
  271. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +56 -13
  272. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +7 -7
  273. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +24 -2
  274. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +4 -4
  275. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +19 -6
  276. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +4 -4
  277. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +15 -2
  278. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +49 -46
  279. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +229 -82
  280. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +3 -3
  281. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +16 -4
  282. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +12 -12
  283. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +40 -8
  284. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +5 -5
  285. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +26 -4
  286. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +55 -55
  287. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +379 -140
  288. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +140 -126
  289. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +824 -301
  290. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +24 -18
  291. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +114 -29
  292. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +195 -191
  293. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1042 -412
  294. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +3 -3
  295. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +16 -4
  296. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +44 -24
  297. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +171 -42
  298. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +72 -63
  299. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +517 -202
  300. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +61 -36
  301. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +333 -66
  302. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +5 -4
  303. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +20 -6
  304. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +93 -91
  305. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +615 -213
  306. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +76 -33
  307. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +417 -79
  308. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +2 -2
  309. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +20 -8
  310. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +5 -25
  311. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +16 -93
  312. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +5 -5
  313. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +38 -17
  314. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +70 -68
  315. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +447 -157
  316. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +98 -66
  317. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +545 -191
  318. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +4 -4
  319. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +33 -13
  320. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +108 -87
  321. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +502 -149
  322. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +2 -2
  323. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +9 -2
  324. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +6 -6
  325. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +42 -17
  326. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +24 -9
  327. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +110 -18
  328. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +8 -8
  329. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +64 -26
  330. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +4 -4
  331. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +20 -6
  332. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +18 -18
  333. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +118 -49
  334. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +39 -32
  335. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +242 -87
  336. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +32 -32
  337. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +226 -105
  338. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +2 -2
  339. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +13 -4
  340. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +86 -53
  341. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +475 -141
  342. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +56 -50
  343. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +379 -160
  344. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +16 -12
  345. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +77 -16
  346. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +9 -6
  347. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +50 -8
  348. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +5 -5
  349. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +26 -6
  350. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +33 -32
  351. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +253 -102
  352. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +34 -34
  353. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +229 -92
  354. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +74 -55
  355. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +494 -160
  356. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +38 -30
  357. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +232 -124
  358. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +458 -351
  359. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2879 -947
  360. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +11 -11
  361. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +67 -22
  362. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +79 -54
  363. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +454 -133
  364. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +5 -4
  365. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +21 -2
  366. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +3 -3
  367. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +16 -4
  368. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +5 -5
  369. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +38 -14
  370. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +5 -5
  371. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +33 -14
  372. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +17 -16
  373. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +89 -38
  374. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +47 -0
  375. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +107 -0
  376. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +2 -2
  377. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +13 -4
  378. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +8 -8
  379. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +58 -21
  380. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -0
  381. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -0
  382. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +9 -9
  383. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +50 -16
  384. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +9 -8
  385. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +43 -10
  386. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +2 -2
  387. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +16 -8
  388. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +15 -15
  389. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +101 -38
  390. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +25 -25
  391. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +167 -71
  392. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +16 -8
  393. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +88 -16
  394. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +14 -11
  395. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +71 -17
  396. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c +62 -0
  397. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +179 -0
  398. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +184 -144
  399. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1091 -361
  400. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c +46 -0
  401. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +98 -0
  402. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +54 -0
  403. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +188 -0
  404. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.c +111 -0
  405. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +444 -0
  406. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +56 -0
  407. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +192 -0
  408. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  409. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +98 -0
  410. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +56 -48
  411. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +327 -130
  412. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +13 -13
  413. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +88 -31
  414. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +83 -56
  415. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +472 -136
  416. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +5 -5
  417. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +35 -13
  418. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  419. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +6 -2
  420. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +171 -54
  421. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +917 -134
  422. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +8 -8
  423. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +59 -25
  424. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +33 -33
  425. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +205 -76
  426. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +4 -4
  427. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +23 -8
  428. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +8 -8
  429. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +62 -25
  430. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.c +47 -0
  431. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.h +113 -0
  432. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +8 -8
  433. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +36 -8
  434. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +7 -7
  435. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +55 -22
  436. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +3 -3
  437. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +26 -11
  438. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +3 -3
  439. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +30 -11
  440. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +2 -2
  441. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +20 -8
  442. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +8 -8
  443. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +58 -22
  444. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.c +43 -0
  445. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.h +114 -0
  446. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +9 -9
  447. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +82 -29
  448. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +5 -5
  449. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +49 -22
  450. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +12 -12
  451. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +99 -36
  452. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +16 -16
  453. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +118 -44
  454. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +20 -20
  455. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +120 -40
  456. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +7 -7
  457. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +46 -16
  458. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +2 -2
  459. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +9 -2
  460. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +5 -5
  461. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +25 -8
  462. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +9 -9
  463. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +36 -6
  464. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
  465. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
  466. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +3 -1
  467. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +4 -4
  468. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +15 -2
  469. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +5 -5
  470. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +23 -6
  471. data/src/core/ext/upb-generated/google/api/annotations.upb.c +3 -3
  472. data/src/core/ext/upb-generated/google/api/annotations.upb.h +17 -2
  473. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +70 -66
  474. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +477 -185
  475. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +80 -74
  476. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +512 -182
  477. data/src/core/ext/upb-generated/google/api/http.upb.c +17 -17
  478. data/src/core/ext/upb-generated/google/api/http.upb.h +134 -49
  479. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +4 -4
  480. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +25 -9
  481. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +3 -3
  482. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +12 -2
  483. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +183 -181
  484. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1332 -488
  485. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +3 -3
  486. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +16 -6
  487. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  488. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +6 -2
  489. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +15 -15
  490. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +126 -46
  491. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +3 -3
  492. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +16 -6
  493. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +18 -18
  494. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +81 -18
  495. data/src/core/ext/upb-generated/google/rpc/status.upb.c +4 -4
  496. data/src/core/ext/upb-generated/google/rpc/status.upb.h +25 -9
  497. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +15 -15
  498. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +89 -30
  499. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +12 -12
  500. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +55 -14
  501. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +69 -65
  502. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +424 -169
  503. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +8 -7
  504. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +32 -8
  505. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +4 -4
  506. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +18 -4
  507. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +31 -31
  508. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +204 -76
  509. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +11 -11
  510. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +63 -22
  511. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +175 -0
  512. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +792 -0
  513. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +22 -22
  514. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +115 -16
  515. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +6 -6
  516. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +29 -4
  517. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +3 -3
  518. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +10 -2
  519. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +6 -6
  520. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +33 -8
  521. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +5 -5
  522. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +26 -4
  523. data/src/core/ext/upb-generated/validate/validate.upb.c +264 -253
  524. data/src/core/ext/upb-generated/validate/validate.upb.h +1974 -709
  525. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +22 -22
  526. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +115 -16
  527. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +6 -6
  528. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +29 -4
  529. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +3 -3
  530. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +10 -2
  531. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +18 -18
  532. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +94 -18
  533. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +5 -5
  534. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +26 -4
  535. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +2 -2
  536. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +9 -2
  537. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.c +47 -0
  538. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.h +107 -0
  539. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +8 -8
  540. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +50 -16
  541. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +5 -5
  542. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +33 -12
  543. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +3 -3
  544. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +16 -4
  545. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +5 -5
  546. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +27 -10
  547. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +10 -10
  548. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +83 -34
  549. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +5 -5
  550. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +22 -4
  551. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +14 -13
  552. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +84 -28
  553. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +46 -0
  554. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +113 -0
  555. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.c +46 -0
  556. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.h +98 -0
  557. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.c +62 -0
  558. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.h +174 -0
  559. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.c +36 -0
  560. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.h +74 -0
  561. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.c +65 -0
  562. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.h +191 -0
  563. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +43 -39
  564. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +309 -121
  565. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.c +127 -0
  566. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.h +474 -0
  567. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +4 -4
  568. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +31 -12
  569. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +9 -9
  570. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +82 -29
  571. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.c +67 -0
  572. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.h +214 -0
  573. data/src/core/ext/upb-generated/xds/type/v3/range.upb.c +64 -0
  574. data/src/core/ext/upb-generated/xds/type/v3/range.upb.h +208 -0
  575. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +3 -4
  576. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +16 -4
  577. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +54 -53
  578. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +67 -274
  579. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +0 -85
  580. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +277 -0
  581. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +125 -0
  582. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +14 -11
  583. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +107 -107
  584. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +199 -187
  585. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +50 -46
  586. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +149 -129
  587. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +0 -5
  588. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +16 -12
  589. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +95 -75
  590. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +5 -0
  591. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +187 -183
  592. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +129 -94
  593. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +10 -0
  594. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +18 -33
  595. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +0 -5
  596. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +168 -154
  597. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +5 -0
  598. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +190 -186
  599. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +7 -3
  600. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +5 -0
  601. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +16 -16
  602. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +71 -66
  603. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +164 -137
  604. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  605. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +141 -138
  606. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +16 -12
  607. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +39 -31
  608. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +140 -129
  609. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  610. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +82 -68
  611. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +2 -2
  612. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +828 -747
  613. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +20 -0
  614. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +150 -139
  615. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +5 -0
  616. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +16 -14
  617. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +48 -0
  618. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
  619. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +16 -12
  620. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +20 -18
  621. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
  622. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +53 -42
  623. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +60 -0
  624. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +40 -0
  625. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +483 -445
  626. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +5 -0
  627. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +50 -0
  628. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +35 -0
  629. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
  630. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +211 -193
  631. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +5 -0
  632. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +156 -84
  633. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +35 -0
  634. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -113
  635. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.c +48 -0
  636. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.h +35 -0
  637. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -28
  638. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.c +40 -0
  639. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.h +40 -0
  640. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  641. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
  642. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +10 -9
  643. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +92 -90
  644. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +99 -0
  645. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +75 -0
  646. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.c +45 -0
  647. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.h +35 -0
  648. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.c +43 -0
  649. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.h +35 -0
  650. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.c +51 -0
  651. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.h +40 -0
  652. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.c +36 -0
  653. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.h +35 -0
  654. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.c +55 -0
  655. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.h +40 -0
  656. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +9 -9
  657. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.c +71 -0
  658. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.h +60 -0
  659. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.c +60 -0
  660. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.h +40 -0
  661. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.c +36 -0
  662. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.h +45 -0
  663. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +4 -7
  664. data/src/core/ext/xds/certificate_provider_store.cc +75 -3
  665. data/src/core/ext/xds/certificate_provider_store.h +30 -4
  666. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +17 -10
  667. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +12 -4
  668. data/src/core/ext/xds/upb_utils.h +3 -25
  669. data/src/core/ext/xds/xds_api.cc +106 -192
  670. data/src/core/ext/xds/xds_api.h +41 -39
  671. data/src/core/ext/xds/xds_bootstrap.cc +5 -537
  672. data/src/core/ext/xds/xds_bootstrap.h +42 -95
  673. data/src/core/ext/xds/xds_bootstrap_grpc.cc +362 -0
  674. data/src/core/ext/xds/xds_bootstrap_grpc.h +184 -0
  675. data/src/core/ext/xds/xds_certificate_provider.cc +36 -25
  676. data/src/core/ext/xds/xds_certificate_provider.h +36 -4
  677. data/src/core/ext/xds/xds_channel_args.h +3 -3
  678. data/src/core/ext/xds/xds_channel_stack_modifier.cc +17 -7
  679. data/src/core/ext/xds/xds_channel_stack_modifier.h +16 -4
  680. data/src/core/ext/xds/xds_client.cc +885 -1360
  681. data/src/core/ext/xds/xds_client.h +69 -65
  682. data/src/core/ext/xds/xds_client_grpc.cc +235 -0
  683. data/src/core/ext/xds/xds_client_grpc.h +79 -0
  684. data/src/core/ext/xds/xds_client_stats.cc +24 -25
  685. data/src/core/ext/xds/xds_client_stats.h +26 -24
  686. data/src/core/ext/xds/xds_cluster.cc +505 -247
  687. data/src/core/ext/xds/xds_cluster.h +69 -40
  688. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +132 -0
  689. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +97 -0
  690. data/src/core/ext/xds/xds_common_types.cc +238 -123
  691. data/src/core/ext/xds/xds_common_types.h +29 -16
  692. data/src/core/ext/xds/xds_endpoint.cc +266 -156
  693. data/src/core/ext/xds/xds_endpoint.h +19 -15
  694. data/src/core/ext/xds/xds_health_status.cc +80 -0
  695. data/src/core/ext/xds/xds_health_status.h +109 -0
  696. data/src/core/ext/xds/xds_http_fault_filter.cc +68 -59
  697. data/src/core/ext/xds/xds_http_fault_filter.h +19 -25
  698. data/src/core/ext/xds/xds_http_filters.cc +70 -71
  699. data/src/core/ext/xds/xds_http_filters.h +73 -25
  700. data/src/core/ext/xds/xds_http_rbac_filter.cc +168 -225
  701. data/src/core/ext/xds/xds_http_rbac_filter.h +22 -18
  702. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +218 -0
  703. data/src/core/ext/xds/xds_http_stateful_session_filter.h +58 -0
  704. data/src/core/ext/xds/xds_lb_policy_registry.cc +334 -0
  705. data/src/core/ext/xds/xds_lb_policy_registry.h +71 -0
  706. data/src/core/ext/xds/xds_listener.cc +573 -481
  707. data/src/core/ext/xds/xds_listener.h +57 -51
  708. data/src/core/ext/xds/xds_resource_type.h +28 -22
  709. data/src/core/ext/xds/xds_resource_type_impl.h +18 -17
  710. data/src/core/ext/xds/xds_route_config.cc +638 -479
  711. data/src/core/ext/xds/xds_route_config.h +79 -42
  712. data/src/core/ext/xds/xds_routing.cc +21 -7
  713. data/src/core/ext/xds/xds_routing.h +17 -12
  714. data/src/core/ext/xds/xds_server_config_fetcher.cc +244 -200
  715. data/src/core/ext/xds/xds_transport.h +86 -0
  716. data/src/core/ext/xds/xds_transport_grpc.cc +356 -0
  717. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  718. data/src/core/lib/address_utils/parse_address.cc +52 -52
  719. data/src/core/lib/address_utils/parse_address.h +46 -42
  720. data/src/core/lib/address_utils/sockaddr_utils.cc +90 -54
  721. data/src/core/lib/address_utils/sockaddr_utils.h +45 -40
  722. data/src/core/lib/avl/avl.h +100 -13
  723. data/src/core/lib/backoff/backoff.cc +19 -21
  724. data/src/core/lib/backoff/backoff.h +21 -21
  725. data/src/core/lib/channel/call_finalization.h +6 -4
  726. data/src/core/lib/channel/call_tracer.h +27 -9
  727. data/src/core/lib/channel/channel_args.cc +268 -101
  728. data/src/core/lib/channel/channel_args.h +461 -56
  729. data/src/core/lib/channel/channel_args_preconditioning.cc +6 -11
  730. data/src/core/lib/channel/channel_args_preconditioning.h +7 -7
  731. data/src/core/lib/channel/channel_fwd.h +26 -0
  732. data/src/core/lib/channel/channel_stack.cc +92 -52
  733. data/src/core/lib/channel/channel_stack.h +186 -140
  734. data/src/core/lib/channel/channel_stack_builder.cc +26 -104
  735. data/src/core/lib/channel/channel_stack_builder.h +45 -31
  736. data/src/core/lib/channel/channel_stack_builder_impl.cc +126 -0
  737. data/src/core/lib/channel/channel_stack_builder_impl.h +48 -0
  738. data/src/core/lib/channel/channel_trace.cc +29 -36
  739. data/src/core/lib/channel/channel_trace.h +27 -24
  740. data/src/core/lib/channel/channelz.cc +50 -65
  741. data/src/core/lib/channel/channelz.h +50 -33
  742. data/src/core/lib/channel/channelz_registry.cc +28 -36
  743. data/src/core/lib/channel/channelz_registry.h +31 -30
  744. data/src/core/lib/channel/connected_channel.cc +1267 -78
  745. data/src/core/lib/channel/connected_channel.h +22 -23
  746. data/src/core/lib/channel/context.h +25 -21
  747. data/src/core/lib/channel/promise_based_filter.cc +2155 -303
  748. data/src/core/lib/channel/promise_based_filter.h +636 -122
  749. data/src/core/lib/channel/status_util.cc +64 -17
  750. data/src/core/lib/channel/status_util.h +38 -24
  751. data/src/core/lib/compression/compression.cc +24 -19
  752. data/src/core/lib/compression/compression_internal.cc +89 -70
  753. data/src/core/lib/compression/compression_internal.h +28 -27
  754. data/src/core/lib/compression/message_compress.cc +28 -26
  755. data/src/core/lib/compression/message_compress.h +28 -29
  756. data/src/core/lib/config/core_configuration.cc +8 -1
  757. data/src/core/lib/config/core_configuration.h +86 -39
  758. data/src/core/lib/debug/event_log.cc +88 -0
  759. data/src/core/lib/debug/event_log.h +81 -0
  760. data/src/core/lib/debug/histogram_view.cc +69 -0
  761. data/src/core/lib/debug/histogram_view.h +37 -0
  762. data/src/core/lib/debug/stats.cc +48 -152
  763. data/src/core/lib/debug/stats.h +50 -57
  764. data/src/core/lib/debug/stats_data.cc +302 -649
  765. data/src/core/lib/debug/stats_data.h +293 -548
  766. data/src/core/lib/debug/trace.cc +18 -20
  767. data/src/core/lib/debug/trace.h +27 -48
  768. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +16 -17
  769. data/src/core/lib/event_engine/channel_args_endpoint_config.h +16 -9
  770. data/src/core/lib/event_engine/common_closures.h +71 -0
  771. data/src/core/lib/event_engine/default_event_engine.cc +99 -0
  772. data/src/core/lib/event_engine/default_event_engine.h +73 -0
  773. data/src/core/lib/event_engine/default_event_engine_factory.cc +24 -3
  774. data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine_factory.h} +6 -9
  775. data/src/core/lib/event_engine/event_engine.cc +3 -30
  776. data/src/core/lib/event_engine/executor/executor.h +38 -0
  777. data/src/core/lib/event_engine/forkable.cc +106 -0
  778. data/src/core/lib/event_engine/forkable.h +61 -0
  779. data/src/core/lib/event_engine/handle_containers.h +74 -0
  780. data/src/core/lib/event_engine/memory_allocator.cc +11 -3
  781. data/src/core/lib/event_engine/poller.h +62 -0
  782. data/src/core/lib/event_engine/posix.h +158 -0
  783. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +642 -0
  784. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +139 -0
  785. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +899 -0
  786. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
  787. data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
  788. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
  789. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +33 -0
  790. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
  791. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
  792. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +265 -0
  793. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
  794. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1305 -0
  795. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +717 -0
  796. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +640 -0
  797. data/src/core/lib/event_engine/posix_engine/posix_engine.h +259 -0
  798. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
  799. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +289 -0
  800. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +279 -0
  801. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +379 -0
  802. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +91 -0
  803. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +853 -0
  804. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +316 -0
  805. data/src/core/lib/event_engine/posix_engine/timer.cc +311 -0
  806. data/src/core/lib/event_engine/posix_engine/timer.h +194 -0
  807. data/src/core/lib/event_engine/posix_engine/timer_heap.cc +107 -0
  808. data/src/core/lib/event_engine/posix_engine/timer_heap.h +56 -0
  809. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +173 -0
  810. data/src/core/lib/event_engine/posix_engine/timer_manager.h +114 -0
  811. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +332 -0
  812. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +185 -0
  813. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +127 -0
  814. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
  815. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +150 -0
  816. data/src/core/lib/{iomgr/event_engine/promise.h → event_engine/posix_engine/wakeup_fd_pipe.h} +19 -25
  817. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
  818. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
  819. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
  820. data/src/core/lib/event_engine/resolved_address.cc +23 -2
  821. data/src/core/lib/{iomgr/event_engine → event_engine}/resolved_address_internal.h +5 -8
  822. data/src/core/lib/event_engine/shim.cc +56 -0
  823. data/src/core/lib/event_engine/shim.h +33 -0
  824. data/src/core/lib/event_engine/slice.cc +103 -0
  825. data/src/core/lib/event_engine/slice_buffer.cc +50 -0
  826. data/src/core/lib/event_engine/tcp_socket_utils.cc +389 -0
  827. data/src/core/lib/event_engine/tcp_socket_utils.h +90 -0
  828. data/src/core/lib/event_engine/thread_local.cc +29 -0
  829. data/src/core/lib/event_engine/thread_local.h +32 -0
  830. data/src/core/lib/event_engine/thread_pool.cc +253 -0
  831. data/src/core/lib/event_engine/thread_pool.h +141 -0
  832. data/src/core/lib/event_engine/time_util.cc +30 -0
  833. data/src/core/lib/event_engine/time_util.h +32 -0
  834. data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/event_engine/trace.cc} +9 -13
  835. data/src/core/lib/event_engine/trace.h +43 -0
  836. data/src/core/lib/event_engine/utils.cc +44 -0
  837. data/src/core/lib/event_engine/utils.h +44 -0
  838. data/src/core/lib/event_engine/windows/iocp.cc +140 -0
  839. data/src/core/lib/event_engine/windows/iocp.h +69 -0
  840. data/src/core/lib/event_engine/windows/win_socket.cc +219 -0
  841. data/src/core/lib/event_engine/windows/win_socket.h +129 -0
  842. data/src/core/lib/event_engine/windows/windows_endpoint.cc +331 -0
  843. data/src/core/lib/event_engine/windows/windows_endpoint.h +103 -0
  844. data/src/core/lib/event_engine/windows/windows_engine.cc +388 -0
  845. data/src/core/lib/event_engine/windows/windows_engine.h +163 -0
  846. data/src/core/lib/experiments/config.cc +161 -0
  847. data/src/core/lib/experiments/config.h +53 -0
  848. data/src/core/lib/experiments/experiments.cc +81 -0
  849. data/src/core/lib/experiments/experiments.h +117 -0
  850. data/src/core/lib/gpr/alloc.cc +19 -25
  851. data/src/core/lib/gpr/alloc.h +20 -20
  852. data/src/core/lib/gpr/atm.cc +17 -17
  853. data/src/core/lib/gpr/cpu_iphone.cc +24 -24
  854. data/src/core/lib/gpr/cpu_linux.cc +28 -23
  855. data/src/core/lib/gpr/cpu_posix.cc +23 -22
  856. data/src/core/lib/gpr/cpu_windows.cc +20 -18
  857. data/src/core/lib/gpr/log.cc +30 -17
  858. data/src/core/lib/gpr/log_android.cc +22 -20
  859. data/src/core/lib/gpr/log_linux.cc +24 -24
  860. data/src/core/lib/gpr/log_posix.cc +20 -19
  861. data/src/core/lib/gpr/log_windows.cc +25 -25
  862. data/src/core/lib/gpr/spinlock.h +20 -20
  863. data/src/core/lib/gpr/string.cc +25 -24
  864. data/src/core/lib/gpr/string.h +61 -61
  865. data/src/core/lib/gpr/string_posix.cc +24 -24
  866. data/src/core/lib/gpr/string_util_windows.cc +25 -52
  867. data/src/core/lib/gpr/string_windows.cc +24 -24
  868. data/src/core/lib/gpr/sync.cc +25 -25
  869. data/src/core/lib/gpr/sync_abseil.cc +36 -40
  870. data/src/core/lib/gpr/sync_posix.cc +22 -34
  871. data/src/core/lib/gpr/sync_windows.cc +29 -27
  872. data/src/core/lib/gpr/time.cc +34 -30
  873. data/src/core/lib/gpr/time_posix.cc +41 -45
  874. data/src/core/lib/gpr/time_precise.cc +22 -22
  875. data/src/core/lib/gpr/time_precise.h +21 -22
  876. data/src/core/lib/gpr/time_windows.cc +35 -29
  877. data/src/core/lib/gpr/tmpfile.h +24 -24
  878. data/src/core/lib/gpr/tmpfile_msys.cc +21 -20
  879. data/src/core/lib/gpr/tmpfile_posix.cc +22 -20
  880. data/src/core/lib/gpr/tmpfile_windows.cc +28 -29
  881. data/src/core/lib/gpr/useful.h +83 -30
  882. data/src/core/lib/gpr/wrap_memcpy.cc +23 -23
  883. data/src/core/lib/gprpp/atomic_utils.h +20 -20
  884. data/src/core/lib/gprpp/bitset.h +47 -17
  885. data/src/core/lib/gprpp/chunked_vector.h +7 -3
  886. data/src/core/lib/gprpp/construct_destruct.h +4 -3
  887. data/src/core/lib/gprpp/cpp_impl_of.h +7 -3
  888. data/src/core/{ext/xds/xds_resource_type.cc → lib/gprpp/crash.cc} +12 -12
  889. data/src/core/lib/gprpp/crash.h +34 -0
  890. data/src/core/lib/gprpp/debug_location.h +60 -31
  891. data/src/core/lib/gprpp/dual_ref_counted.h +4 -7
  892. data/src/core/lib/gprpp/env.h +53 -0
  893. data/src/core/lib/gprpp/env_linux.cc +80 -0
  894. data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc → lib/gprpp/env_posix.cc} +25 -9
  895. data/src/core/lib/gprpp/env_windows.cc +56 -0
  896. data/src/core/lib/gprpp/examine_stack.cc +17 -17
  897. data/src/core/lib/gprpp/examine_stack.h +21 -22
  898. data/src/core/lib/gprpp/fork.cc +58 -53
  899. data/src/core/lib/gprpp/fork.h +29 -35
  900. data/src/core/lib/gprpp/global_config.h +22 -24
  901. data/src/core/lib/gprpp/global_config_custom.h +20 -20
  902. data/src/core/lib/gprpp/global_config_env.cc +28 -25
  903. data/src/core/lib/gprpp/global_config_env.h +29 -27
  904. data/src/core/lib/gprpp/global_config_generic.h +21 -25
  905. data/src/core/lib/gprpp/host_port.cc +30 -26
  906. data/src/core/lib/gprpp/host_port.h +32 -31
  907. data/src/core/lib/gprpp/load_file.cc +75 -0
  908. data/src/core/lib/gprpp/load_file.h +33 -0
  909. data/src/core/lib/gprpp/manual_constructor.h +21 -89
  910. data/src/core/lib/gprpp/match.h +75 -0
  911. data/src/core/lib/gprpp/memory.h +22 -26
  912. data/src/core/lib/gprpp/mpscq.cc +17 -17
  913. data/src/core/lib/gprpp/mpscq.h +21 -21
  914. data/src/core/lib/gprpp/no_destruct.h +95 -0
  915. data/src/core/lib/gprpp/notification.h +67 -0
  916. data/src/core/lib/gprpp/orphanable.h +22 -25
  917. data/src/core/lib/gprpp/overload.h +59 -0
  918. data/src/core/lib/gprpp/packed_table.h +40 -0
  919. data/src/core/lib/gprpp/per_cpu.h +46 -0
  920. data/src/core/lib/gprpp/ref_counted.h +24 -24
  921. data/src/core/lib/gprpp/ref_counted_ptr.h +42 -55
  922. data/src/core/lib/gprpp/single_set_ptr.h +87 -0
  923. data/src/core/lib/gprpp/sorted_pack.h +98 -0
  924. data/src/core/lib/gprpp/stat.h +3 -5
  925. data/src/core/lib/gprpp/stat_posix.cc +10 -4
  926. data/src/core/lib/gprpp/stat_windows.cc +4 -2
  927. data/src/core/lib/gprpp/status_helper.cc +56 -20
  928. data/src/core/lib/gprpp/status_helper.h +13 -5
  929. data/src/core/lib/gprpp/strerror.cc +43 -0
  930. data/src/core/lib/gprpp/strerror.h +29 -0
  931. data/src/core/lib/gprpp/sync.h +26 -24
  932. data/src/core/lib/gprpp/table.h +22 -4
  933. data/src/core/lib/gprpp/tchar.cc +49 -0
  934. data/src/core/lib/gprpp/tchar.h +33 -0
  935. data/src/core/lib/gprpp/thd.h +25 -28
  936. data/src/core/lib/gprpp/thd_posix.cc +33 -32
  937. data/src/core/lib/gprpp/thd_windows.cc +28 -26
  938. data/src/core/lib/gprpp/time.cc +64 -9
  939. data/src/core/lib/gprpp/time.h +79 -5
  940. data/src/core/lib/gprpp/time_averaged_stats.cc +60 -0
  941. data/src/core/lib/gprpp/time_averaged_stats.h +79 -0
  942. data/src/core/lib/gprpp/time_util.cc +4 -0
  943. data/src/core/lib/gprpp/time_util.h +3 -3
  944. data/src/core/lib/gprpp/unique_type_name.h +104 -0
  945. data/src/core/lib/gprpp/validation_errors.cc +61 -0
  946. data/src/core/lib/gprpp/validation_errors.h +127 -0
  947. data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
  948. data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -28
  949. data/src/core/lib/handshaker/proxy_mapper.h +53 -0
  950. data/src/core/lib/handshaker/proxy_mapper_registry.cc +71 -0
  951. data/src/core/lib/handshaker/proxy_mapper_registry.h +75 -0
  952. data/src/core/lib/http/format_request.cc +54 -24
  953. data/src/core/lib/http/format_request.h +23 -21
  954. data/src/core/lib/http/httpcli.cc +139 -141
  955. data/src/core/lib/http/httpcli.h +86 -38
  956. data/src/core/lib/http/httpcli_security_connector.cc +53 -45
  957. data/src/core/lib/http/httpcli_ssl_credentials.h +6 -4
  958. data/src/core/lib/http/parser.cc +144 -85
  959. data/src/core/lib/http/parser.h +51 -35
  960. data/src/core/lib/iomgr/block_annotate.h +23 -23
  961. data/src/core/lib/iomgr/buffer_list.cc +156 -136
  962. data/src/core/lib/iomgr/buffer_list.h +123 -101
  963. data/src/core/lib/iomgr/call_combiner.cc +32 -64
  964. data/src/core/lib/iomgr/call_combiner.h +24 -25
  965. data/src/core/lib/iomgr/cfstream_handle.cc +33 -36
  966. data/src/core/lib/iomgr/cfstream_handle.h +25 -25
  967. data/src/core/lib/iomgr/{event_engine/pollset.h → closure.cc} +9 -7
  968. data/src/core/lib/iomgr/closure.h +95 -58
  969. data/src/core/lib/iomgr/combiner.cc +20 -39
  970. data/src/core/lib/iomgr/combiner.h +20 -20
  971. data/src/core/lib/iomgr/dualstack_socket_posix.cc +21 -21
  972. data/src/core/lib/iomgr/dynamic_annotations.h +22 -22
  973. data/src/core/lib/iomgr/endpoint.cc +21 -21
  974. data/src/core/lib/iomgr/endpoint.h +53 -51
  975. data/src/core/lib/iomgr/endpoint_cfstream.cc +51 -47
  976. data/src/core/lib/iomgr/endpoint_cfstream.h +32 -32
  977. data/src/core/lib/iomgr/endpoint_pair.h +20 -20
  978. data/src/core/lib/iomgr/endpoint_pair_posix.cc +34 -27
  979. data/src/core/lib/iomgr/endpoint_pair_windows.cc +30 -21
  980. data/src/core/lib/iomgr/error.cc +51 -834
  981. data/src/core/lib/iomgr/error.h +45 -317
  982. data/src/core/lib/iomgr/error_cfstream.cc +18 -23
  983. data/src/core/lib/iomgr/error_cfstream.h +21 -21
  984. data/src/core/lib/iomgr/ev_apple.cc +21 -21
  985. data/src/core/lib/iomgr/ev_apple.h +21 -21
  986. data/src/core/lib/iomgr/ev_epoll1_linux.cc +263 -248
  987. data/src/core/lib/iomgr/ev_epoll1_linux.h +21 -21
  988. data/src/core/lib/iomgr/ev_poll_posix.cc +296 -271
  989. data/src/core/lib/iomgr/ev_poll_posix.h +22 -22
  990. data/src/core/lib/iomgr/ev_posix.cc +88 -122
  991. data/src/core/lib/iomgr/ev_posix.h +93 -87
  992. data/src/core/lib/iomgr/ev_windows.cc +18 -18
  993. data/src/core/lib/iomgr/{event_engine → event_engine_shims}/closure.cc +15 -30
  994. data/src/core/lib/iomgr/{event_engine → event_engine_shims}/closure.h +10 -13
  995. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +430 -0
  996. data/src/core/lib/iomgr/event_engine_shims/endpoint.h +43 -0
  997. data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +91 -0
  998. data/src/core/lib/iomgr/event_engine_shims/tcp_client.h +44 -0
  999. data/src/core/lib/iomgr/exec_ctx.cc +34 -56
  1000. data/src/core/lib/iomgr/exec_ctx.h +152 -177
  1001. data/src/core/lib/iomgr/executor.cc +21 -31
  1002. data/src/core/lib/iomgr/executor.h +27 -30
  1003. data/src/core/lib/iomgr/fork_posix.cc +31 -28
  1004. data/src/core/lib/iomgr/fork_windows.cc +21 -21
  1005. data/src/core/lib/iomgr/gethostname.h +20 -20
  1006. data/src/core/lib/iomgr/gethostname_fallback.cc +17 -17
  1007. data/src/core/lib/iomgr/gethostname_host_name_max.cc +17 -17
  1008. data/src/core/lib/iomgr/gethostname_sysconf.cc +17 -17
  1009. data/src/core/lib/iomgr/grpc_if_nametoindex.h +22 -22
  1010. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +20 -19
  1011. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +20 -19
  1012. data/src/core/lib/iomgr/internal_errqueue.cc +41 -48
  1013. data/src/core/lib/iomgr/internal_errqueue.h +84 -89
  1014. data/src/core/lib/iomgr/iocp_windows.cc +23 -23
  1015. data/src/core/lib/iomgr/iocp_windows.h +21 -21
  1016. data/src/core/lib/iomgr/iomgr.cc +25 -20
  1017. data/src/core/lib/iomgr/iomgr.h +35 -35
  1018. data/src/core/lib/iomgr/iomgr_fwd.h +26 -0
  1019. data/src/core/lib/iomgr/iomgr_internal.cc +17 -17
  1020. data/src/core/lib/iomgr/iomgr_internal.h +28 -28
  1021. data/src/core/lib/iomgr/iomgr_posix.cc +21 -20
  1022. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +21 -19
  1023. data/src/core/lib/iomgr/iomgr_windows.cc +24 -22
  1024. data/src/core/lib/iomgr/load_file.cc +24 -27
  1025. data/src/core/lib/iomgr/load_file.h +22 -22
  1026. data/src/core/lib/iomgr/lockfree_event.cc +114 -131
  1027. data/src/core/lib/iomgr/lockfree_event.h +23 -23
  1028. data/src/core/lib/iomgr/nameser.h +86 -86
  1029. data/src/core/lib/iomgr/polling_entity.cc +25 -21
  1030. data/src/core/lib/iomgr/polling_entity.h +29 -29
  1031. data/src/core/lib/iomgr/pollset.cc +17 -17
  1032. data/src/core/lib/iomgr/pollset.h +55 -55
  1033. data/src/core/lib/iomgr/pollset_set.cc +17 -17
  1034. data/src/core/lib/iomgr/pollset_set.h +26 -28
  1035. data/src/core/lib/iomgr/pollset_set_windows.cc +18 -18
  1036. data/src/core/lib/iomgr/pollset_set_windows.h +20 -20
  1037. data/src/core/lib/iomgr/pollset_windows.cc +32 -31
  1038. data/src/core/lib/iomgr/pollset_windows.h +24 -24
  1039. data/src/core/lib/iomgr/port.h +59 -39
  1040. data/src/core/lib/iomgr/python_util.h +24 -24
  1041. data/src/core/lib/iomgr/resolve_address.cc +34 -20
  1042. data/src/core/lib/iomgr/resolve_address.h +73 -43
  1043. data/src/core/lib/iomgr/resolve_address_impl.h +7 -7
  1044. data/src/core/lib/iomgr/resolve_address_posix.cc +81 -62
  1045. data/src/core/lib/iomgr/resolve_address_posix.h +26 -10
  1046. data/src/core/lib/iomgr/resolve_address_windows.cc +64 -38
  1047. data/src/core/lib/iomgr/resolve_address_windows.h +26 -10
  1048. data/src/core/lib/iomgr/resolved_address.h +3 -3
  1049. data/src/core/lib/iomgr/sockaddr.h +25 -26
  1050. data/src/core/lib/iomgr/sockaddr_posix.h +23 -21
  1051. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +20 -18
  1052. data/src/core/lib/iomgr/sockaddr_windows.h +23 -21
  1053. data/src/core/lib/iomgr/socket_factory_posix.cc +18 -18
  1054. data/src/core/lib/iomgr/socket_factory_posix.h +32 -32
  1055. data/src/core/lib/iomgr/socket_mutator.cc +19 -18
  1056. data/src/core/lib/iomgr/socket_mutator.h +39 -39
  1057. data/src/core/lib/iomgr/socket_utils.h +27 -27
  1058. data/src/core/lib/iomgr/socket_utils_common_posix.cc +82 -101
  1059. data/src/core/lib/iomgr/socket_utils_linux.cc +18 -17
  1060. data/src/core/lib/iomgr/socket_utils_posix.cc +103 -19
  1061. data/src/core/lib/iomgr/socket_utils_posix.h +176 -84
  1062. data/src/core/lib/iomgr/socket_utils_windows.cc +20 -19
  1063. data/src/core/lib/iomgr/socket_windows.cc +37 -36
  1064. data/src/core/lib/iomgr/socket_windows.h +59 -61
  1065. data/src/core/lib/iomgr/systemd_utils.cc +116 -0
  1066. data/src/core/lib/iomgr/systemd_utils.h +33 -0
  1067. data/src/core/lib/iomgr/tcp_client.cc +28 -24
  1068. data/src/core/lib/iomgr/tcp_client.h +49 -38
  1069. data/src/core/lib/iomgr/tcp_client_cfstream.cc +46 -35
  1070. data/src/core/lib/iomgr/tcp_client_posix.cc +244 -106
  1071. data/src/core/lib/iomgr/tcp_client_posix.h +55 -52
  1072. data/src/core/lib/iomgr/tcp_client_windows.cc +73 -53
  1073. data/src/core/lib/iomgr/tcp_posix.cc +562 -361
  1074. data/src/core/lib/iomgr/tcp_posix.h +32 -30
  1075. data/src/core/lib/iomgr/tcp_server.cc +33 -24
  1076. data/src/core/lib/iomgr/tcp_server.h +78 -69
  1077. data/src/core/lib/iomgr/tcp_server_posix.cc +402 -145
  1078. data/src/core/lib/iomgr/tcp_server_utils_posix.h +68 -55
  1079. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +120 -82
  1080. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +46 -43
  1081. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +19 -19
  1082. data/src/core/lib/iomgr/tcp_server_windows.cc +116 -118
  1083. data/src/core/lib/iomgr/tcp_windows.cc +116 -98
  1084. data/src/core/lib/iomgr/tcp_windows.h +34 -35
  1085. data/src/core/lib/iomgr/timer.cc +17 -17
  1086. data/src/core/lib/iomgr/timer.h +68 -68
  1087. data/src/core/lib/iomgr/timer_generic.cc +125 -134
  1088. data/src/core/lib/iomgr/timer_generic.h +21 -21
  1089. data/src/core/lib/iomgr/timer_heap.cc +25 -25
  1090. data/src/core/lib/iomgr/timer_heap.h +22 -22
  1091. data/src/core/lib/iomgr/timer_manager.cc +31 -31
  1092. data/src/core/lib/iomgr/timer_manager.h +27 -27
  1093. data/src/core/lib/iomgr/unix_sockets_posix.cc +20 -21
  1094. data/src/core/lib/iomgr/unix_sockets_posix.h +21 -21
  1095. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +19 -17
  1096. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +23 -23
  1097. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +23 -23
  1098. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +29 -26
  1099. data/src/core/lib/iomgr/wakeup_fd_pipe.h +20 -20
  1100. data/src/core/lib/iomgr/wakeup_fd_posix.cc +33 -30
  1101. data/src/core/lib/iomgr/wakeup_fd_posix.h +52 -54
  1102. data/src/core/lib/json/json.h +23 -27
  1103. data/src/core/{ext/filters/http/message_compress/message_decompress_filter.h → lib/json/json_args.h} +13 -10
  1104. data/src/core/lib/json/json_channel_args.h +42 -0
  1105. data/src/core/lib/json/json_object_loader.cc +217 -0
  1106. data/src/core/lib/json/json_object_loader.h +634 -0
  1107. data/src/core/lib/json/json_reader.cc +123 -90
  1108. data/src/core/lib/json/json_util.cc +14 -34
  1109. data/src/core/lib/json/json_util.h +19 -10
  1110. data/src/core/lib/json/json_writer.cc +62 -57
  1111. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +30 -60
  1112. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +47 -62
  1113. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  1114. data/src/core/lib/load_balancing/lb_policy_registry.cc +142 -0
  1115. data/src/core/lib/load_balancing/lb_policy_registry.h +82 -0
  1116. data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +57 -52
  1117. data/src/core/lib/matchers/matchers.cc +12 -7
  1118. data/src/core/lib/matchers/matchers.h +5 -3
  1119. data/src/core/lib/promise/activity.cc +23 -8
  1120. data/src/core/lib/promise/activity.h +116 -58
  1121. data/src/core/lib/promise/arena_promise.h +115 -72
  1122. data/src/core/lib/promise/context.h +18 -11
  1123. data/src/core/lib/promise/detail/basic_join.h +197 -0
  1124. data/src/core/lib/promise/detail/basic_seq.h +28 -33
  1125. data/src/core/lib/promise/detail/promise_factory.h +61 -14
  1126. data/src/core/lib/promise/detail/promise_like.h +3 -3
  1127. data/src/core/lib/promise/detail/status.h +33 -4
  1128. data/src/core/lib/promise/detail/switch.h +21 -21
  1129. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +23 -15
  1130. data/src/core/lib/promise/if.h +195 -0
  1131. data/src/core/lib/promise/interceptor_list.h +308 -0
  1132. data/src/core/lib/promise/intra_activity_waiter.h +55 -0
  1133. data/src/core/lib/promise/latch.h +191 -0
  1134. data/src/core/lib/promise/loop.h +13 -9
  1135. data/src/core/lib/promise/map.h +4 -6
  1136. data/src/core/lib/promise/pipe.h +608 -0
  1137. data/src/core/lib/promise/poll.h +129 -11
  1138. data/src/core/lib/promise/promise.h +5 -5
  1139. data/src/core/lib/promise/race.h +6 -10
  1140. data/src/core/lib/promise/seq.h +32 -14
  1141. data/src/core/lib/promise/sleep.cc +58 -42
  1142. data/src/core/lib/promise/sleep.h +44 -26
  1143. data/src/core/lib/promise/trace.cc +20 -0
  1144. data/src/core/{ext/filters/max_age/max_age_filter.h → lib/promise/trace.h} +6 -8
  1145. data/src/core/lib/promise/try_join.h +82 -0
  1146. data/src/core/lib/promise/try_seq.h +41 -23
  1147. data/src/core/lib/resolver/resolver.cc +17 -59
  1148. data/src/core/lib/resolver/resolver.h +21 -18
  1149. data/src/core/lib/resolver/resolver_factory.h +11 -10
  1150. data/src/core/lib/resolver/resolver_registry.cc +17 -9
  1151. data/src/core/lib/resolver/resolver_registry.h +15 -5
  1152. data/src/core/lib/resolver/server_address.cc +46 -34
  1153. data/src/core/lib/resolver/server_address.h +36 -35
  1154. data/src/core/lib/resource_quota/api.cc +25 -29
  1155. data/src/core/lib/resource_quota/api.h +14 -5
  1156. data/src/core/lib/resource_quota/arena.cc +85 -27
  1157. data/src/core/lib/resource_quota/arena.h +197 -25
  1158. data/src/core/lib/resource_quota/memory_quota.cc +322 -101
  1159. data/src/core/lib/resource_quota/memory_quota.h +191 -56
  1160. data/src/core/lib/resource_quota/periodic_update.cc +78 -0
  1161. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  1162. data/src/core/lib/resource_quota/resource_quota.h +20 -4
  1163. data/src/core/lib/resource_quota/thread_quota.cc +2 -0
  1164. data/src/core/lib/resource_quota/thread_quota.h +7 -3
  1165. data/src/core/lib/resource_quota/trace.h +3 -3
  1166. data/src/core/lib/security/authorization/authorization_engine.h +3 -3
  1167. data/src/core/lib/security/authorization/authorization_policy_provider.h +17 -3
  1168. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +3 -0
  1169. data/src/core/lib/security/authorization/evaluate_args.cc +17 -8
  1170. data/src/core/lib/security/authorization/evaluate_args.h +9 -6
  1171. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +5 -1
  1172. data/src/core/lib/security/authorization/grpc_authorization_engine.h +10 -3
  1173. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +26 -13
  1174. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +20 -10
  1175. data/src/core/lib/security/authorization/matchers.cc +44 -30
  1176. data/src/core/lib/security/authorization/matchers.h +10 -3
  1177. data/src/core/lib/security/authorization/rbac_policy.cc +6 -2
  1178. data/src/core/lib/security/authorization/rbac_policy.h +10 -3
  1179. data/src/core/{ext/xds → lib/security/certificate_provider}/certificate_provider_factory.h +9 -4
  1180. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +60 -0
  1181. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +70 -0
  1182. data/src/core/lib/security/context/security_context.cc +27 -25
  1183. data/src/core/lib/security/context/security_context.h +64 -35
  1184. data/src/core/lib/security/credentials/alts/alts_credentials.cc +35 -27
  1185. data/src/core/lib/security/credentials/alts/alts_credentials.h +65 -57
  1186. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +19 -19
  1187. data/src/core/lib/security/credentials/alts/check_gcp_environment.h +43 -43
  1188. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +17 -17
  1189. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +18 -17
  1190. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +18 -17
  1191. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +20 -22
  1192. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +18 -18
  1193. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +38 -39
  1194. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +19 -22
  1195. data/src/core/lib/security/credentials/call_creds_util.cc +13 -3
  1196. data/src/core/lib/security/credentials/call_creds_util.h +6 -5
  1197. data/src/core/lib/security/credentials/channel_creds_registry.h +10 -4
  1198. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +13 -3
  1199. data/src/core/lib/security/credentials/composite/composite_credentials.cc +46 -41
  1200. data/src/core/lib/security/credentials/composite/composite_credentials.h +51 -38
  1201. data/src/core/lib/security/credentials/credentials.cc +23 -26
  1202. data/src/core/lib/security/credentials/credentials.h +91 -94
  1203. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +202 -74
  1204. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +21 -3
  1205. data/src/core/lib/security/credentials/external/aws_request_signer.cc +14 -3
  1206. data/src/core/lib/security/credentials/external/aws_request_signer.h +3 -3
  1207. data/src/core/lib/security/credentials/external/external_account_credentials.cc +86 -68
  1208. data/src/core/lib/security/credentials/external/external_account_credentials.h +14 -3
  1209. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +29 -26
  1210. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +9 -3
  1211. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +44 -31
  1212. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +13 -3
  1213. data/src/core/lib/security/credentials/fake/fake_credentials.cc +48 -48
  1214. data/src/core/lib/security/credentials/fake/fake_credentials.h +57 -47
  1215. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +23 -25
  1216. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +148 -112
  1217. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +35 -29
  1218. data/src/core/lib/security/credentials/iam/iam_credentials.cc +35 -24
  1219. data/src/core/lib/security/credentials/iam/iam_credentials.h +37 -23
  1220. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +32 -29
  1221. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +61 -0
  1222. data/src/core/lib/security/credentials/jwt/json_token.cc +40 -29
  1223. data/src/core/lib/security/credentials/jwt/json_token.h +36 -36
  1224. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +37 -30
  1225. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +41 -23
  1226. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +113 -89
  1227. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +49 -47
  1228. data/src/core/lib/security/credentials/local/local_credentials.cc +36 -30
  1229. data/src/core/lib/security/credentials/local/local_credentials.h +36 -26
  1230. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +107 -91
  1231. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +56 -27
  1232. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +42 -36
  1233. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +55 -29
  1234. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +48 -44
  1235. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +43 -23
  1236. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +22 -30
  1237. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +16 -17
  1238. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +65 -48
  1239. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +69 -9
  1240. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +44 -4
  1241. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +75 -13
  1242. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +22 -23
  1243. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +69 -98
  1244. data/src/core/lib/security/credentials/tls/tls_credentials.cc +55 -50
  1245. data/src/core/lib/security/credentials/tls/tls_credentials.h +33 -30
  1246. data/src/core/lib/security/credentials/tls/tls_utils.cc +5 -1
  1247. data/src/core/lib/security/credentials/tls/tls_utils.h +4 -4
  1248. data/src/core/lib/security/credentials/xds/xds_credentials.cc +77 -81
  1249. data/src/core/lib/security/credentials/xds/xds_credentials.h +50 -10
  1250. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +60 -54
  1251. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +49 -47
  1252. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +75 -79
  1253. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +25 -26
  1254. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +15 -6
  1255. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +26 -15
  1256. data/src/core/lib/security/security_connector/load_system_roots.h +20 -20
  1257. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +22 -20
  1258. data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +43 -38
  1259. data/src/core/lib/security/security_connector/load_system_roots_supported.h +45 -0
  1260. data/src/core/lib/security/security_connector/local/local_security_connector.cc +66 -49
  1261. data/src/core/lib/security/security_connector/local/local_security_connector.h +49 -46
  1262. data/src/core/lib/security/security_connector/security_connector.cc +37 -35
  1263. data/src/core/lib/security/security_connector/security_connector.h +67 -45
  1264. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +59 -48
  1265. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +44 -43
  1266. data/src/core/lib/security/security_connector/ssl_utils.cc +47 -39
  1267. data/src/core/lib/security/security_connector/ssl_utils.h +45 -42
  1268. data/src/core/lib/security/security_connector/ssl_utils_config.cc +22 -22
  1269. data/src/core/lib/security/security_connector/ssl_utils_config.h +21 -22
  1270. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +62 -58
  1271. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +48 -28
  1272. data/src/core/lib/security/transport/auth_filters.h +59 -30
  1273. data/src/core/lib/security/transport/client_auth_filter.cc +73 -48
  1274. data/src/core/lib/security/transport/secure_endpoint.cc +305 -181
  1275. data/src/core/lib/security/transport/secure_endpoint.h +29 -28
  1276. data/src/core/lib/security/transport/security_handshaker.cc +142 -110
  1277. data/src/core/lib/security/transport/security_handshaker.h +28 -23
  1278. data/src/core/lib/security/transport/server_auth_filter.cc +157 -266
  1279. data/src/core/lib/security/transport/tsi_error.cc +23 -20
  1280. data/src/core/lib/security/transport/tsi_error.h +20 -20
  1281. data/src/core/lib/security/util/json_util.cc +24 -24
  1282. data/src/core/lib/security/util/json_util.h +21 -23
  1283. data/src/core/lib/service_config/service_config.h +19 -12
  1284. data/src/core/lib/service_config/service_config_call_data.h +15 -5
  1285. data/src/core/lib/service_config/service_config_impl.cc +111 -150
  1286. data/src/core/lib/service_config/service_config_impl.h +27 -27
  1287. data/src/core/lib/service_config/service_config_parser.cc +16 -28
  1288. data/src/core/lib/service_config/service_config_parser.h +18 -19
  1289. data/src/core/lib/slice/b64.cc +26 -26
  1290. data/src/core/lib/slice/b64.h +34 -32
  1291. data/src/core/lib/slice/percent_encoding.cc +24 -30
  1292. data/src/core/lib/slice/percent_encoding.h +28 -34
  1293. data/src/core/lib/slice/slice.cc +59 -46
  1294. data/src/core/lib/slice/slice.h +64 -20
  1295. data/src/core/lib/slice/slice_buffer.cc +136 -76
  1296. data/src/core/lib/slice/slice_buffer.h +168 -0
  1297. data/src/core/lib/slice/slice_internal.h +38 -45
  1298. data/src/core/lib/slice/slice_refcount.cc +3 -18
  1299. data/src/core/lib/slice/slice_refcount.h +53 -19
  1300. data/src/core/lib/slice/slice_string_helpers.cc +17 -33
  1301. data/src/core/lib/slice/slice_string_helpers.h +23 -30
  1302. data/src/core/lib/surface/api_trace.cc +17 -17
  1303. data/src/core/lib/surface/api_trace.h +25 -25
  1304. data/src/core/lib/surface/builtins.cc +7 -2
  1305. data/src/core/lib/surface/builtins.h +3 -3
  1306. data/src/core/lib/surface/byte_buffer.cc +26 -21
  1307. data/src/core/lib/surface/byte_buffer_reader.cc +24 -24
  1308. data/src/core/lib/surface/call.cc +3000 -1131
  1309. data/src/core/lib/surface/call.h +135 -56
  1310. data/src/core/lib/surface/call_details.cc +22 -23
  1311. data/src/core/lib/surface/call_log_batch.cc +25 -18
  1312. data/src/core/lib/surface/call_test_only.h +34 -31
  1313. data/src/core/lib/surface/call_trace.cc +123 -0
  1314. data/src/core/lib/surface/call_trace.h +30 -0
  1315. data/src/core/lib/surface/channel.cc +218 -284
  1316. data/src/core/lib/surface/channel.h +137 -90
  1317. data/src/core/lib/surface/channel_init.cc +19 -20
  1318. data/src/core/lib/surface/channel_init.h +24 -26
  1319. data/src/core/lib/surface/channel_ping.cc +26 -20
  1320. data/src/core/lib/surface/channel_stack_type.cc +21 -19
  1321. data/src/core/lib/surface/channel_stack_type.h +22 -22
  1322. data/src/core/lib/surface/completion_queue.cc +200 -222
  1323. data/src/core/lib/surface/completion_queue.h +42 -40
  1324. data/src/core/lib/surface/completion_queue_factory.cc +34 -28
  1325. data/src/core/lib/surface/completion_queue_factory.h +21 -23
  1326. data/src/core/lib/surface/event_string.cc +19 -24
  1327. data/src/core/lib/surface/event_string.h +21 -21
  1328. data/src/core/lib/surface/init.cc +57 -114
  1329. data/src/core/lib/surface/init.h +20 -28
  1330. data/src/core/lib/surface/init_internally.cc +25 -0
  1331. data/src/core/lib/surface/init_internally.h +37 -0
  1332. data/src/core/lib/surface/lame_client.cc +87 -130
  1333. data/src/core/lib/surface/lame_client.h +62 -24
  1334. data/src/core/lib/surface/metadata_array.cc +18 -17
  1335. data/src/core/lib/surface/server.cc +409 -188
  1336. data/src/core/lib/surface/server.h +57 -26
  1337. data/src/core/lib/surface/validate_metadata.cc +34 -48
  1338. data/src/core/lib/surface/validate_metadata.h +24 -21
  1339. data/src/core/lib/surface/version.cc +21 -21
  1340. data/src/core/lib/transport/bdp_estimator.cc +19 -19
  1341. data/src/core/lib/transport/bdp_estimator.h +22 -24
  1342. data/src/core/lib/transport/connectivity_state.cc +24 -23
  1343. data/src/core/lib/transport/connectivity_state.h +24 -25
  1344. data/src/core/lib/transport/error_utils.cc +57 -79
  1345. data/src/core/lib/transport/error_utils.h +29 -25
  1346. data/src/core/lib/{channel → transport}/handshaker.cc +75 -58
  1347. data/src/core/lib/{channel → transport}/handshaker.h +59 -48
  1348. data/src/core/lib/transport/handshaker_factory.h +74 -0
  1349. data/src/core/lib/transport/handshaker_registry.cc +61 -0
  1350. data/src/core/lib/transport/handshaker_registry.h +69 -0
  1351. data/src/core/lib/transport/http2_errors.h +22 -22
  1352. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +78 -65
  1353. data/src/core/lib/transport/http_connect_handshaker.h +42 -0
  1354. data/src/core/lib/transport/metadata_batch.cc +305 -0
  1355. data/src/core/lib/transport/metadata_batch.h +269 -302
  1356. data/src/core/lib/transport/parsed_metadata.cc +2 -4
  1357. data/src/core/lib/transport/parsed_metadata.h +17 -8
  1358. data/src/core/lib/transport/pid_controller.cc +20 -20
  1359. data/src/core/lib/transport/pid_controller.h +27 -27
  1360. data/src/core/lib/transport/status_conversion.cc +23 -23
  1361. data/src/core/lib/transport/status_conversion.h +24 -24
  1362. data/src/core/lib/transport/tcp_connect_handshaker.cc +245 -0
  1363. data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
  1364. data/src/core/lib/transport/timeout_encoding.cc +24 -28
  1365. data/src/core/lib/transport/timeout_encoding.h +25 -21
  1366. data/src/core/lib/transport/transport.cc +97 -57
  1367. data/src/core/lib/transport/transport.h +252 -207
  1368. data/src/core/lib/transport/transport_fwd.h +20 -0
  1369. data/src/core/lib/transport/transport_impl.h +59 -48
  1370. data/src/core/lib/transport/transport_op_string.cc +40 -39
  1371. data/src/core/lib/uri/uri_parser.cc +12 -4
  1372. data/src/core/lib/uri/uri_parser.h +3 -5
  1373. data/src/core/plugin_registry/grpc_plugin_registry.cc +62 -73
  1374. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +20 -39
  1375. data/src/core/tsi/alts/crypt/aes_gcm.cc +20 -20
  1376. data/src/core/tsi/alts/crypt/gsec.cc +26 -26
  1377. data/src/core/tsi/alts/crypt/gsec.h +336 -336
  1378. data/src/core/tsi/alts/frame_protector/alts_counter.cc +23 -23
  1379. data/src/core/tsi/alts/frame_protector/alts_counter.h +68 -68
  1380. data/src/core/tsi/alts/frame_protector/alts_crypter.cc +19 -19
  1381. data/src/core/tsi/alts/frame_protector/alts_crypter.h +209 -209
  1382. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +72 -71
  1383. data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +40 -40
  1384. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +18 -18
  1385. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +82 -83
  1386. data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +22 -22
  1387. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +22 -22
  1388. data/src/core/tsi/alts/frame_protector/frame_handler.cc +26 -25
  1389. data/src/core/tsi/alts/frame_protector/frame_handler.h +169 -169
  1390. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +117 -97
  1391. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +104 -104
  1392. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +18 -17
  1393. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +43 -44
  1394. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +53 -45
  1395. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +60 -60
  1396. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +24 -24
  1397. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +21 -20
  1398. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +38 -38
  1399. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +19 -19
  1400. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +105 -104
  1401. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +45 -44
  1402. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +40 -41
  1403. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +38 -36
  1404. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +35 -36
  1405. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +67 -68
  1406. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +32 -31
  1407. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +55 -56
  1408. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +54 -53
  1409. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +141 -142
  1410. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +67 -58
  1411. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +43 -44
  1412. data/src/core/tsi/fake_transport_security.cc +146 -110
  1413. data/src/core/tsi/fake_transport_security.h +36 -30
  1414. data/src/core/tsi/local_transport_security.cc +43 -38
  1415. data/src/core/tsi/local_transport_security.h +33 -33
  1416. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +9 -4
  1417. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +3 -3
  1418. data/src/core/tsi/ssl/session_cache/ssl_session.h +23 -21
  1419. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +21 -19
  1420. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +18 -17
  1421. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +31 -22
  1422. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +27 -20
  1423. data/src/core/tsi/ssl_transport_security.cc +356 -390
  1424. data/src/core/tsi/ssl_transport_security.h +210 -201
  1425. data/src/core/tsi/ssl_transport_security_utils.cc +250 -0
  1426. data/src/core/tsi/ssl_transport_security_utils.h +147 -0
  1427. data/src/core/tsi/ssl_types.h +27 -27
  1428. data/src/core/tsi/transport_security.cc +44 -32
  1429. data/src/core/tsi/transport_security.h +49 -48
  1430. data/src/core/tsi/transport_security_grpc.cc +23 -22
  1431. data/src/core/tsi/transport_security_grpc.h +44 -41
  1432. data/src/core/tsi/transport_security_interface.h +346 -332
  1433. data/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.clang +2 -0
  1434. data/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.gcc +7 -0
  1435. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.clang +2 -0
  1436. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.gcc +7 -0
  1437. data/src/ruby/ext/grpc/ext-export.gcc +1 -1
  1438. data/src/ruby/ext/grpc/extconf.rb +98 -20
  1439. data/src/ruby/ext/grpc/rb_call.c +1 -0
  1440. data/src/ruby/ext/grpc/rb_channel.c +1 -0
  1441. data/src/ruby/ext/grpc/rb_channel_args.c +1 -0
  1442. data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
  1443. data/src/ruby/ext/grpc/rb_grpc.c +1 -0
  1444. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +38 -38
  1445. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +60 -60
  1446. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  1447. data/src/ruby/lib/grpc/errors.rb +1 -1
  1448. data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
  1449. data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
  1450. data/src/ruby/lib/grpc/grpc.rb +1 -1
  1451. data/src/ruby/lib/grpc/version.rb +1 -1
  1452. data/src/ruby/pb/generate_proto_ruby.sh +1 -6
  1453. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
  1454. data/src/ruby/pb/test/client.rb +769 -0
  1455. data/src/ruby/pb/test/server.rb +252 -0
  1456. data/src/ruby/pb/test/xds_client.rb +415 -0
  1457. data/src/ruby/spec/channel_spec.rb +5 -43
  1458. data/src/ruby/spec/client_server_spec.rb +20 -8
  1459. data/src/ruby/spec/generic/active_call_spec.rb +12 -3
  1460. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  1461. data/src/ruby/spec/generic/server_interceptors_spec.rb +1 -1
  1462. data/src/ruby/spec/user_agent_spec.rb +1 -1
  1463. data/third_party/abseil-cpp/absl/algorithm/container.h +57 -58
  1464. data/third_party/abseil-cpp/absl/base/attributes.h +88 -41
  1465. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  1466. data/third_party/abseil-cpp/absl/base/config.h +221 -39
  1467. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  1468. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +52 -2
  1469. data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +55 -0
  1470. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +5 -4
  1471. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  1472. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
  1473. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +3 -3
  1474. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  1475. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +2 -2
  1476. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +1 -1
  1477. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  1478. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +39 -28
  1479. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +36 -36
  1480. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +6 -3
  1481. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +10 -6
  1482. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  1483. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +4 -1
  1484. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  1485. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  1486. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +14 -11
  1487. data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +9 -0
  1488. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  1489. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -0
  1490. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
  1491. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -40
  1492. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +62 -0
  1493. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  1494. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  1495. data/third_party/abseil-cpp/absl/base/macros.h +4 -21
  1496. data/third_party/abseil-cpp/absl/base/optimization.h +76 -16
  1497. data/third_party/abseil-cpp/absl/base/options.h +1 -7
  1498. data/third_party/abseil-cpp/absl/base/policy_checks.h +15 -13
  1499. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  1500. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  1501. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  1502. data/third_party/abseil-cpp/absl/container/fixed_array.h +9 -5
  1503. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  1504. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +503 -0
  1505. data/third_party/abseil-cpp/absl/container/inlined_vector.h +84 -25
  1506. data/third_party/abseil-cpp/absl/container/internal/common.h +9 -8
  1507. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +132 -0
  1508. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +23 -29
  1509. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +4 -55
  1510. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +116 -23
  1511. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +40 -54
  1512. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +165 -66
  1513. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +159 -4
  1514. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1121 -470
  1515. data/third_party/abseil-cpp/absl/crc/crc32c.cc +99 -0
  1516. data/third_party/abseil-cpp/absl/crc/crc32c.h +183 -0
  1517. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +256 -0
  1518. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +57 -0
  1519. data/third_party/abseil-cpp/absl/crc/internal/crc.cc +468 -0
  1520. data/third_party/abseil-cpp/absl/crc/internal/crc.h +91 -0
  1521. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +269 -0
  1522. data/third_party/abseil-cpp/absl/crc/internal/crc32c.h +39 -0
  1523. data/third_party/abseil-cpp/absl/crc/internal/crc32c_inline.h +72 -0
  1524. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.cc +130 -0
  1525. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.h +159 -0
  1526. data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +179 -0
  1527. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy.h +119 -0
  1528. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_fallback.cc +75 -0
  1529. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_64.cc +434 -0
  1530. data/third_party/abseil-cpp/absl/crc/internal/crc_non_temporal_memcpy.cc +93 -0
  1531. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +725 -0
  1532. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +79 -0
  1533. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +180 -0
  1534. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  1535. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +67 -38
  1536. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +1 -1
  1537. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +16 -13
  1538. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
  1539. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +19 -12
  1540. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  1541. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
  1542. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +1 -1
  1543. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  1544. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +59 -102
  1545. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +5 -4
  1546. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +41 -11
  1547. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +18 -4
  1548. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
  1549. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +3 -2
  1550. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +164 -101
  1551. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +7 -6
  1552. data/third_party/abseil-cpp/absl/functional/any_invocable.h +316 -0
  1553. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  1554. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
  1555. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +878 -0
  1556. data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
  1557. data/third_party/abseil-cpp/absl/hash/internal/city.cc +10 -10
  1558. data/third_party/abseil-cpp/absl/hash/internal/hash.h +235 -26
  1559. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +3 -14
  1560. data/third_party/abseil-cpp/absl/memory/memory.h +26 -447
  1561. data/third_party/abseil-cpp/absl/meta/type_traits.h +104 -12
  1562. data/third_party/abseil-cpp/absl/numeric/bits.h +1 -1
  1563. data/third_party/abseil-cpp/absl/numeric/int128.cc +14 -10
  1564. data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
  1565. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +33 -10
  1566. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
  1567. data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
  1568. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
  1569. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +4 -2
  1570. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
  1571. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
  1572. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +3 -24
  1573. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +9 -9
  1574. data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
  1575. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
  1576. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
  1577. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
  1578. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +2 -2
  1579. data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
  1580. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
  1581. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
  1582. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
  1583. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
  1584. data/third_party/abseil-cpp/absl/random/random.h +6 -6
  1585. data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
  1586. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
  1587. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  1588. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
  1589. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  1590. data/third_party/abseil-cpp/absl/status/status.cc +193 -14
  1591. data/third_party/abseil-cpp/absl/status/status.h +24 -14
  1592. data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
  1593. data/third_party/abseil-cpp/absl/strings/ascii.cc +5 -5
  1594. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  1595. data/third_party/abseil-cpp/absl/strings/charconv.cc +534 -96
  1596. data/third_party/abseil-cpp/absl/strings/cord.cc +257 -924
  1597. data/third_party/abseil-cpp/absl/strings/cord.h +268 -156
  1598. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  1599. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  1600. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  1601. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +575 -0
  1602. data/third_party/abseil-cpp/absl/strings/escaping.cc +73 -62
  1603. data/third_party/abseil-cpp/absl/strings/escaping.h +24 -19
  1604. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +14 -12
  1605. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +4 -4
  1606. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
  1607. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  1608. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
  1609. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +441 -150
  1610. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +157 -53
  1611. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +70 -73
  1612. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +8 -6
  1613. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
  1614. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
  1615. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
  1616. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
  1617. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +56 -0
  1618. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +103 -0
  1619. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
  1620. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
  1621. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +7 -15
  1622. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +3 -3
  1623. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +19 -43
  1624. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +7 -7
  1625. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +5 -4
  1626. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
  1627. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +93 -0
  1628. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +34 -0
  1629. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +18 -15
  1630. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +7 -9
  1631. data/third_party/abseil-cpp/absl/strings/internal/has_absl_stringify.h +55 -0
  1632. data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +9 -6
  1633. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +14 -7
  1634. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +35 -10
  1635. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +113 -46
  1636. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +127 -30
  1637. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -2
  1638. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +42 -10
  1639. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +56 -289
  1640. data/third_party/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +351 -0
  1641. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
  1642. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +9 -4
  1643. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +215 -181
  1644. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  1645. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +10 -209
  1646. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -103
  1647. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  1648. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -1
  1649. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  1650. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.cc +28 -0
  1651. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +57 -0
  1652. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  1653. data/third_party/abseil-cpp/absl/strings/numbers.cc +42 -39
  1654. data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
  1655. data/third_party/abseil-cpp/absl/strings/str_cat.cc +9 -6
  1656. data/third_party/abseil-cpp/absl/strings/str_cat.h +70 -16
  1657. data/third_party/abseil-cpp/absl/strings/str_format.h +71 -9
  1658. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  1659. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  1660. data/third_party/abseil-cpp/absl/strings/string_view.cc +8 -19
  1661. data/third_party/abseil-cpp/absl/strings/string_view.h +6 -12
  1662. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  1663. data/third_party/abseil-cpp/absl/strings/substitute.cc +8 -6
  1664. data/third_party/abseil-cpp/absl/strings/substitute.h +55 -21
  1665. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  1666. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  1667. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +20 -17
  1668. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +37 -31
  1669. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +22 -8
  1670. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  1671. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  1672. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
  1673. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  1674. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +172 -88
  1675. data/third_party/abseil-cpp/absl/synchronization/mutex.h +102 -55
  1676. data/third_party/abseil-cpp/absl/synchronization/notification.cc +0 -1
  1677. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -3
  1678. data/third_party/abseil-cpp/absl/time/civil_time.cc +26 -0
  1679. data/third_party/abseil-cpp/absl/time/civil_time.h +25 -0
  1680. data/third_party/abseil-cpp/absl/time/clock.cc +17 -11
  1681. data/third_party/abseil-cpp/absl/time/duration.cc +12 -11
  1682. data/third_party/abseil-cpp/absl/time/format.cc +2 -1
  1683. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  1684. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1 -1
  1685. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +26 -5
  1686. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +7 -6
  1687. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +36 -35
  1688. data/third_party/abseil-cpp/absl/time/time.cc +2 -2
  1689. data/third_party/abseil-cpp/absl/time/time.h +268 -169
  1690. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  1691. data/third_party/abseil-cpp/absl/types/internal/span.h +30 -19
  1692. data/third_party/abseil-cpp/absl/types/internal/variant.h +28 -40
  1693. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  1694. data/third_party/abseil-cpp/absl/types/span.h +31 -8
  1695. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +1 -1
  1696. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +1 -2
  1697. data/third_party/re2/re2/bitstate.cc +3 -3
  1698. data/third_party/re2/re2/dfa.cc +13 -13
  1699. data/third_party/re2/re2/nfa.cc +4 -4
  1700. data/third_party/re2/re2/onepass.cc +2 -2
  1701. data/third_party/re2/re2/prefilter_tree.cc +27 -59
  1702. data/third_party/re2/re2/prefilter_tree.h +3 -2
  1703. data/third_party/re2/re2/prog.cc +11 -2
  1704. data/third_party/re2/re2/prog.h +17 -5
  1705. data/third_party/re2/re2/re2.cc +6 -11
  1706. data/third_party/re2/re2/re2.h +1 -1
  1707. data/third_party/re2/re2/regexp.cc +1 -2
  1708. data/third_party/re2/re2/stringpiece.h +10 -7
  1709. data/third_party/re2/re2/unicode_casefold.cc +25 -11
  1710. data/third_party/re2/re2/unicode_groups.cc +319 -151
  1711. data/third_party/re2/re2/walker-inl.h +3 -2
  1712. data/third_party/re2/util/mutex.h +4 -4
  1713. data/third_party/upb/upb/arena.c +277 -0
  1714. data/third_party/upb/upb/arena.h +225 -0
  1715. data/third_party/upb/upb/array.c +114 -0
  1716. data/third_party/upb/upb/array.h +83 -0
  1717. data/third_party/upb/upb/collections.h +36 -0
  1718. data/third_party/upb/upb/decode.c +188 -76
  1719. data/third_party/upb/upb/decode.h +1 -0
  1720. data/third_party/upb/upb/decode_fast.c +1 -1
  1721. data/third_party/upb/upb/def.c +128 -57
  1722. data/third_party/upb/upb/def.h +20 -4
  1723. data/third_party/upb/upb/def.hpp +7 -4
  1724. data/third_party/upb/upb/encode.c +43 -28
  1725. data/third_party/upb/upb/encode.h +16 -6
  1726. data/third_party/upb/upb/extension_registry.c +93 -0
  1727. data/third_party/upb/upb/extension_registry.h +84 -0
  1728. data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +5 -5
  1729. data/third_party/upb/upb/internal/table.h +385 -0
  1730. data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +3 -3
  1731. data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
  1732. data/third_party/upb/upb/json_decode.c +1512 -0
  1733. data/third_party/upb/upb/json_decode.h +47 -0
  1734. data/third_party/upb/upb/json_encode.c +780 -0
  1735. data/third_party/upb/upb/json_encode.h +65 -0
  1736. data/third_party/upb/upb/map.c +108 -0
  1737. data/third_party/upb/upb/map.h +117 -0
  1738. data/third_party/upb/upb/message_value.h +66 -0
  1739. data/third_party/upb/upb/mini_table.c +1147 -0
  1740. data/third_party/upb/upb/mini_table.h +189 -0
  1741. data/third_party/upb/upb/mini_table.hpp +112 -0
  1742. data/third_party/upb/upb/msg.c +6 -68
  1743. data/third_party/upb/upb/msg.h +2 -46
  1744. data/third_party/upb/upb/msg_internal.h +77 -58
  1745. data/third_party/upb/upb/port_def.inc +10 -1
  1746. data/third_party/upb/upb/port_undef.inc +2 -0
  1747. data/third_party/upb/upb/reflection.c +2 -159
  1748. data/third_party/upb/upb/reflection.h +2 -112
  1749. data/third_party/upb/upb/status.c +86 -0
  1750. data/third_party/upb/upb/status.h +66 -0
  1751. data/third_party/upb/upb/table.c +12 -8
  1752. data/third_party/upb/upb/table_internal.h +3 -350
  1753. data/third_party/upb/upb/text_encode.c +3 -2
  1754. data/third_party/upb/upb/upb.c +4 -290
  1755. data/third_party/upb/upb/upb.h +8 -167
  1756. data/third_party/zlib/compress.c +3 -3
  1757. data/third_party/zlib/crc32.c +975 -292
  1758. data/third_party/zlib/crc32.h +9441 -436
  1759. data/third_party/zlib/deflate.c +183 -129
  1760. data/third_party/zlib/deflate.h +12 -15
  1761. data/third_party/zlib/gzguts.h +3 -2
  1762. data/third_party/zlib/gzlib.c +6 -4
  1763. data/third_party/zlib/gzread.c +8 -12
  1764. data/third_party/zlib/gzwrite.c +26 -14
  1765. data/third_party/zlib/infback.c +12 -8
  1766. data/third_party/zlib/inffast.c +14 -14
  1767. data/third_party/zlib/inflate.c +44 -10
  1768. data/third_party/zlib/inflate.h +3 -2
  1769. data/third_party/zlib/inftrees.c +3 -3
  1770. data/third_party/zlib/inftrees.h +1 -1
  1771. data/third_party/zlib/trees.c +85 -107
  1772. data/third_party/zlib/uncompr.c +2 -2
  1773. data/third_party/zlib/zconf.h +16 -3
  1774. data/third_party/zlib/zlib.h +129 -106
  1775. data/third_party/zlib/zutil.c +11 -9
  1776. data/third_party/zlib/zutil.h +13 -9
  1777. metadata +424 -135
  1778. data/include/grpc/impl/codegen/gpr_slice.h +0 -71
  1779. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +0 -42
  1780. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -48
  1781. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +0 -185
  1782. data/src/core/ext/filters/client_channel/lb_policy_registry.h +0 -65
  1783. data/src/core/ext/filters/client_channel/proxy_mapper.h +0 -54
  1784. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -89
  1785. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +0 -50
  1786. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -186
  1787. data/src/core/ext/filters/client_idle/client_idle_filter.cc +0 -201
  1788. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -179
  1789. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +0 -456
  1790. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -53
  1791. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -386
  1792. data/src/core/ext/filters/max_age/max_age_filter.cc +0 -566
  1793. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +0 -67
  1794. data/src/core/ext/xds/certificate_provider_registry.cc +0 -103
  1795. data/src/core/ext/xds/certificate_provider_registry.h +0 -57
  1796. data/src/core/lib/channel/handshaker_factory.h +0 -50
  1797. data/src/core/lib/channel/handshaker_registry.cc +0 -50
  1798. data/src/core/lib/channel/handshaker_registry.h +0 -71
  1799. data/src/core/lib/event_engine/sockaddr.cc +0 -40
  1800. data/src/core/lib/event_engine/sockaddr.h +0 -44
  1801. data/src/core/lib/gpr/env.h +0 -40
  1802. data/src/core/lib/gpr/env_linux.cc +0 -75
  1803. data/src/core/lib/gpr/env_posix.cc +0 -46
  1804. data/src/core/lib/gpr/env_windows.cc +0 -74
  1805. data/src/core/lib/gpr/murmur_hash.cc +0 -82
  1806. data/src/core/lib/gpr/murmur_hash.h +0 -29
  1807. data/src/core/lib/gpr/string_windows.h +0 -32
  1808. data/src/core/lib/gpr/tls.h +0 -157
  1809. data/src/core/lib/gprpp/capture.h +0 -76
  1810. data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +0 -32
  1811. data/src/core/lib/iomgr/error_internal.h +0 -66
  1812. data/src/core/lib/iomgr/ev_epollex_linux.cc +0 -1657
  1813. data/src/core/lib/iomgr/ev_epollex_linux.h +0 -30
  1814. data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
  1815. data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
  1816. data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
  1817. data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
  1818. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
  1819. data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
  1820. data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
  1821. data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
  1822. data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
  1823. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
  1824. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
  1825. data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
  1826. data/src/core/lib/iomgr/executor/threadpool.h +0 -150
  1827. data/src/core/lib/iomgr/is_epollexclusive_available.cc +0 -119
  1828. data/src/core/lib/iomgr/is_epollexclusive_available.h +0 -36
  1829. data/src/core/lib/iomgr/sys_epoll_wrapper.h +0 -30
  1830. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  1831. data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
  1832. data/src/core/lib/profiling/basic_timers.cc +0 -295
  1833. data/src/core/lib/profiling/stap_timers.cc +0 -50
  1834. data/src/core/lib/profiling/timers.h +0 -94
  1835. data/src/core/lib/security/security_connector/load_system_roots_linux.h +0 -46
  1836. data/src/core/lib/slice/slice_api.cc +0 -39
  1837. data/src/core/lib/slice/slice_refcount_base.h +0 -61
  1838. data/src/core/lib/slice/slice_split.cc +0 -100
  1839. data/src/core/lib/slice/slice_split.h +0 -40
  1840. data/src/core/lib/transport/byte_stream.cc +0 -162
  1841. data/src/core/lib/transport/byte_stream.h +0 -166
  1842. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -22,54 +22,81 @@
22
22
 
23
23
  #include <grpc/support/port_platform.h>
24
24
 
25
+ #include <inttypes.h>
25
26
  #include <stdlib.h>
27
+ #include <string.h>
26
28
 
27
29
  #include <algorithm>
28
30
  #include <deque>
29
- #include <functional>
31
+ #include <initializer_list>
30
32
  #include <list>
31
33
  #include <map>
34
+ #include <memory>
32
35
  #include <random>
36
+ #include <set>
33
37
  #include <string>
38
+ #include <type_traits>
34
39
  #include <unordered_map>
35
40
  #include <utility>
41
+ #include <vector>
36
42
 
37
- #include "absl/container/inlined_vector.h"
43
+ #include "absl/base/thread_annotations.h"
38
44
  #include "absl/hash/hash.h"
39
- #include "absl/memory/memory.h"
45
+ #include "absl/status/status.h"
46
+ #include "absl/status/statusor.h"
40
47
  #include "absl/strings/str_cat.h"
48
+ #include "absl/strings/str_format.h"
41
49
  #include "absl/strings/str_join.h"
42
50
  #include "absl/strings/string_view.h"
43
51
  #include "absl/strings/strip.h"
52
+ #include "absl/types/optional.h"
53
+ #include "upb/upb.h"
44
54
  #include "upb/upb.hpp"
45
55
 
56
+ #include <grpc/byte_buffer.h>
57
+ #include <grpc/byte_buffer_reader.h>
58
+ #include <grpc/event_engine/event_engine.h>
46
59
  #include <grpc/grpc.h>
47
- #include <grpc/grpc_security.h>
48
- #include <grpc/impl/codegen/byte_buffer_reader.h>
49
- #include <grpc/impl/codegen/grpc_types.h>
50
- #include <grpc/support/time.h>
60
+ #include <grpc/impl/connectivity_state.h>
61
+ #include <grpc/impl/propagation_bits.h>
62
+ #include <grpc/slice.h>
63
+ #include <grpc/status.h>
64
+ #include <grpc/support/log.h>
51
65
 
52
66
  #include "src/core/ext/filters/client_channel/client_channel.h"
53
- #include "src/core/ext/filters/client_channel/lb_policy.h"
54
67
  #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
55
- #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
56
- #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
57
68
  #include "src/core/lib/backoff/backoff.h"
69
+ #include "src/core/lib/channel/channel_args.h"
70
+ #include "src/core/lib/channel/channelz.h"
58
71
  #include "src/core/lib/config/core_configuration.h"
59
- #include "src/core/lib/gpr/env.h"
60
- #include "src/core/lib/gpr/string.h"
72
+ #include "src/core/lib/debug/trace.h"
73
+ #include "src/core/lib/gprpp/debug_location.h"
61
74
  #include "src/core/lib/gprpp/dual_ref_counted.h"
62
75
  #include "src/core/lib/gprpp/orphanable.h"
63
- #include "src/core/lib/gprpp/ref_counted.h"
76
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
77
+ #include "src/core/lib/gprpp/status_helper.h"
64
78
  #include "src/core/lib/gprpp/sync.h"
79
+ #include "src/core/lib/gprpp/time.h"
80
+ #include "src/core/lib/gprpp/validation_errors.h"
81
+ #include "src/core/lib/gprpp/work_serializer.h"
82
+ #include "src/core/lib/iomgr/closure.h"
83
+ #include "src/core/lib/iomgr/error.h"
65
84
  #include "src/core/lib/iomgr/exec_ctx.h"
66
- #include "src/core/lib/iomgr/timer.h"
85
+ #include "src/core/lib/iomgr/pollset_set.h"
67
86
  #include "src/core/lib/json/json.h"
68
- #include "src/core/lib/json/json_util.h"
87
+ #include "src/core/lib/json/json_args.h"
88
+ #include "src/core/lib/json/json_object_loader.h"
89
+ #include "src/core/lib/load_balancing/lb_policy.h"
90
+ #include "src/core/lib/load_balancing/lb_policy_factory.h"
91
+ #include "src/core/lib/load_balancing/lb_policy_registry.h"
92
+ #include "src/core/lib/load_balancing/subchannel_interface.h"
69
93
  #include "src/core/lib/resolver/resolver_registry.h"
94
+ #include "src/core/lib/resolver/server_address.h"
70
95
  #include "src/core/lib/security/credentials/credentials.h"
71
96
  #include "src/core/lib/security/credentials/fake/fake_credentials.h"
72
97
  #include "src/core/lib/service_config/service_config_impl.h"
98
+ #include "src/core/lib/slice/slice.h"
99
+ #include "src/core/lib/slice/slice_internal.h"
73
100
  #include "src/core/lib/surface/call.h"
74
101
  #include "src/core/lib/surface/channel.h"
75
102
  #include "src/core/lib/transport/connectivity_state.h"
@@ -83,7 +110,9 @@ TraceFlag grpc_lb_rls_trace(false, "rls_lb");
83
110
 
84
111
  namespace {
85
112
 
86
- const char* kRls = "rls";
113
+ using ::grpc_event_engine::experimental::EventEngine;
114
+
115
+ constexpr absl::string_view kRls = "rls_experimental";
87
116
  const char kGrpc[] = "grpc";
88
117
  const char* kRlsRequestPath = "/grpc.lookup.v1.RouteLookupService/RouteLookup";
89
118
  const char* kFakeTargetFieldValue = "fake_target_field_value";
@@ -118,27 +147,26 @@ class RlsLbConfig : public LoadBalancingPolicy::Config {
118
147
  struct RouteLookupConfig {
119
148
  KeyBuilderMap key_builder_map;
120
149
  std::string lookup_service;
121
- Duration lookup_service_timeout;
122
- Duration max_age;
123
- Duration stale_age;
150
+ Duration lookup_service_timeout = kDefaultLookupServiceTimeout;
151
+ Duration max_age = kMaxMaxAge;
152
+ Duration stale_age = kMaxMaxAge;
124
153
  int64_t cache_size_bytes = 0;
125
154
  std::string default_target;
155
+
156
+ static const JsonLoaderInterface* JsonLoader(const JsonArgs&);
157
+ void JsonPostLoad(const Json& json, const JsonArgs& args,
158
+ ValidationErrors* errors);
126
159
  };
127
160
 
128
- RlsLbConfig(RouteLookupConfig route_lookup_config,
129
- std::string rls_channel_service_config, Json child_policy_config,
130
- std::string child_policy_config_target_field_name,
131
- RefCountedPtr<LoadBalancingPolicy::Config>
132
- default_child_policy_parsed_config)
133
- : route_lookup_config_(std::move(route_lookup_config)),
134
- rls_channel_service_config_(std::move(rls_channel_service_config)),
135
- child_policy_config_(std::move(child_policy_config)),
136
- child_policy_config_target_field_name_(
137
- std::move(child_policy_config_target_field_name)),
138
- default_child_policy_parsed_config_(
139
- std::move(default_child_policy_parsed_config)) {}
140
-
141
- const char* name() const override { return kRls; }
161
+ RlsLbConfig() = default;
162
+
163
+ RlsLbConfig(const RlsLbConfig&) = delete;
164
+ RlsLbConfig& operator=(const RlsLbConfig&) = delete;
165
+
166
+ RlsLbConfig(RlsLbConfig&& other) = delete;
167
+ RlsLbConfig& operator=(RlsLbConfig&& other) = delete;
168
+
169
+ absl::string_view name() const override { return kRls; }
142
170
 
143
171
  const KeyBuilderMap& key_builder_map() const {
144
172
  return route_lookup_config_.key_builder_map;
@@ -169,6 +197,10 @@ class RlsLbConfig : public LoadBalancingPolicy::Config {
169
197
  return default_child_policy_parsed_config_;
170
198
  }
171
199
 
200
+ static const JsonLoaderInterface* JsonLoader(const JsonArgs&);
201
+ void JsonPostLoad(const Json& json, const JsonArgs&,
202
+ ValidationErrors* errors);
203
+
172
204
  private:
173
205
  RouteLookupConfig route_lookup_config_;
174
206
  std::string rls_channel_service_config_;
@@ -183,8 +215,8 @@ class RlsLb : public LoadBalancingPolicy {
183
215
  public:
184
216
  explicit RlsLb(Args args);
185
217
 
186
- const char* name() const override { return kRls; }
187
- void UpdateLocked(UpdateArgs args) override;
218
+ absl::string_view name() const override { return kRls; }
219
+ absl::Status UpdateLocked(UpdateArgs args) override;
188
220
  void ExitIdleLocked() override;
189
221
  void ResetBackoffLocked() override;
190
222
 
@@ -269,8 +301,7 @@ class RlsLb : public LoadBalancingPolicy {
269
301
  //
270
302
  // Both methods grab the data they need from the parent object.
271
303
  void StartUpdate() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_);
272
- // Does not take ownership of channel_args.
273
- void MaybeFinishUpdate() ABSL_LOCKS_EXCLUDED(&RlsLb::mu_);
304
+ absl::Status MaybeFinishUpdate() ABSL_LOCKS_EXCLUDED(&RlsLb::mu_);
274
305
 
275
306
  void ExitIdleLocked() {
276
307
  if (child_policy_ != nullptr) child_policy_->ExitIdleLocked();
@@ -301,12 +332,13 @@ class RlsLb : public LoadBalancingPolicy {
301
332
  }
302
333
 
303
334
  RefCountedPtr<SubchannelInterface> CreateSubchannel(
304
- ServerAddress address, const grpc_channel_args& args) override;
335
+ ServerAddress address, const ChannelArgs& args) override;
305
336
  void UpdateState(grpc_connectivity_state state,
306
337
  const absl::Status& status,
307
- std::unique_ptr<SubchannelPicker> picker) override;
338
+ RefCountedPtr<SubchannelPicker> picker) override;
308
339
  void RequestReresolution() override;
309
340
  absl::string_view GetAuthority() override;
341
+ grpc_event_engine::experimental::EventEngine* GetEventEngine() override;
310
342
  void AddTraceEvent(TraceSeverity severity,
311
343
  absl::string_view message) override;
312
344
 
@@ -324,7 +356,7 @@ class RlsLb : public LoadBalancingPolicy {
324
356
 
325
357
  grpc_connectivity_state connectivity_state_ ABSL_GUARDED_BY(&RlsLb::mu_) =
326
358
  GRPC_CHANNEL_IDLE;
327
- std::unique_ptr<LoadBalancingPolicy::SubchannelPicker> picker_
359
+ RefCountedPtr<LoadBalancingPolicy::SubchannelPicker> picker_
328
360
  ABSL_GUARDED_BY(&RlsLb::mu_);
329
361
  };
330
362
 
@@ -430,12 +462,11 @@ class RlsLb : public LoadBalancingPolicy {
430
462
  void Orphan() override ABSL_NO_THREAD_SAFETY_ANALYSIS;
431
463
 
432
464
  private:
433
- static void OnBackoffTimer(void* args, grpc_error_handle error);
465
+ void OnBackoffTimerLocked();
434
466
 
435
467
  RefCountedPtr<Entry> entry_;
436
- bool armed_ ABSL_GUARDED_BY(&RlsLb::mu_) = true;
437
- grpc_timer backoff_timer_;
438
- grpc_closure backoff_timer_callback_;
468
+ absl::optional<EventEngine::TaskHandle> backoff_timer_task_handle_
469
+ ABSL_GUARDED_BY(&RlsLb::mu_);
439
470
  };
440
471
 
441
472
  RefCountedPtr<RlsLb> lb_policy_;
@@ -491,7 +522,10 @@ class RlsLb : public LoadBalancingPolicy {
491
522
  void Shutdown() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_);
492
523
 
493
524
  private:
494
- static void OnCleanupTimer(void* arg, grpc_error_handle error);
525
+ // Shared logic for starting the cleanup timer
526
+ void StartCleanupTimer() ABSL_EXCLUSIVE_LOCKS_REQUIRED(&RlsLb::mu_);
527
+
528
+ void OnCleanupTimer();
495
529
 
496
530
  // Returns the entry size for a given key.
497
531
  static size_t EntrySizeForKey(const RequestKey& key);
@@ -509,8 +543,7 @@ class RlsLb : public LoadBalancingPolicy {
509
543
  std::list<RequestKey> lru_list_ ABSL_GUARDED_BY(&RlsLb::mu_);
510
544
  std::unordered_map<RequestKey, OrphanablePtr<Entry>, absl::Hash<RequestKey>>
511
545
  map_ ABSL_GUARDED_BY(&RlsLb::mu_);
512
- grpc_timer cleanup_timer_;
513
- grpc_closure timer_callback_;
546
+ absl::optional<EventEngine::TaskHandle> cleanup_timer_handle_;
514
547
  };
515
548
 
516
549
  // Channel for communicating with the RLS server.
@@ -668,6 +701,7 @@ class RlsLb : public LoadBalancingPolicy {
668
701
  // Mutex to guard LB policy state that is accessed by the picker.
669
702
  Mutex mu_;
670
703
  bool is_shutdown_ ABSL_GUARDED_BY(mu_) = false;
704
+ bool update_in_progress_ = false;
671
705
  Cache cache_ ABSL_GUARDED_BY(mu_);
672
706
  // Maps an RLS request key to an RlsRequest object that represents a pending
673
707
  // RLS request.
@@ -682,7 +716,7 @@ class RlsLb : public LoadBalancingPolicy {
682
716
 
683
717
  // Accessed only from within WorkSerializer.
684
718
  absl::StatusOr<ServerAddressList> addresses_;
685
- const grpc_channel_args* channel_args_ = nullptr;
719
+ ChannelArgs channel_args_;
686
720
  RefCountedPtr<RlsLbConfig> config_;
687
721
  RefCountedPtr<ChildPolicyWrapper> default_child_policy_;
688
722
  std::map<std::string /*target*/, ChildPolicyWrapper*> child_policy_map_;
@@ -699,7 +733,7 @@ RlsLb::ChildPolicyWrapper::ChildPolicyWrapper(RefCountedPtr<RlsLb> lb_policy,
699
733
  : nullptr),
700
734
  lb_policy_(lb_policy),
701
735
  target_(std::move(target)),
702
- picker_(absl::make_unique<QueuePicker>(std::move(lb_policy))) {
736
+ picker_(MakeRefCounted<QueuePicker>(std::move(lb_policy))) {
703
737
  lb_policy_->child_policy_map_.emplace(target_, this);
704
738
  }
705
739
 
@@ -718,28 +752,32 @@ void RlsLb::ChildPolicyWrapper::Orphan() {
718
752
  picker_.reset();
719
753
  }
720
754
 
721
- grpc_error_handle InsertOrUpdateChildPolicyField(const std::string& field,
722
- const std::string& value,
723
- Json* config) {
755
+ bool InsertOrUpdateChildPolicyField(const std::string& field,
756
+ const std::string& value, Json* config,
757
+ ValidationErrors* errors) {
724
758
  if (config->type() != Json::Type::ARRAY) {
725
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
726
- "child policy configuration is not an array");
759
+ errors->AddError("is not an array");
760
+ return false;
727
761
  }
728
- std::vector<grpc_error_handle> error_list;
729
- for (Json& child_json : *config->mutable_array()) {
762
+ bool success = true;
763
+ for (size_t i = 0; i < config->array_value().size(); ++i) {
764
+ Json& child_json = (*config->mutable_array())[i];
765
+ ValidationErrors::ScopedField json_field(errors, absl::StrCat("[", i, "]"));
730
766
  if (child_json.type() != Json::Type::OBJECT) {
731
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
732
- "child policy item is not an object"));
767
+ errors->AddError("is not an object");
768
+ success = false;
733
769
  } else {
734
770
  Json::Object& child = *child_json.mutable_object();
735
771
  if (child.size() != 1) {
736
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
737
- "child policy item contains more than one field"));
772
+ errors->AddError("child policy object contains more than one field");
773
+ success = false;
738
774
  } else {
775
+ ValidationErrors::ScopedField json_field(
776
+ errors, absl::StrCat("[\"", child.begin()->first, "\"]"));
739
777
  Json& child_config_json = child.begin()->second;
740
778
  if (child_config_json.type() != Json::Type::OBJECT) {
741
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
742
- "child policy item config is not an object"));
779
+ errors->AddError("child policy config is not an object");
780
+ success = false;
743
781
  } else {
744
782
  Json::Object& child_config = *child_config_json.mutable_object();
745
783
  child_config[field] = Json(value);
@@ -747,18 +785,15 @@ grpc_error_handle InsertOrUpdateChildPolicyField(const std::string& field,
747
785
  }
748
786
  }
749
787
  }
750
- return GRPC_ERROR_CREATE_FROM_VECTOR_AND_CPP_STRING(
751
- absl::StrCat("errors when inserting field \"", field,
752
- "\" for child policy"),
753
- &error_list);
788
+ return success;
754
789
  }
755
790
 
756
791
  void RlsLb::ChildPolicyWrapper::StartUpdate() {
757
792
  Json child_policy_config = lb_policy_->config_->child_policy_config();
758
- grpc_error_handle error = InsertOrUpdateChildPolicyField(
793
+ ValidationErrors errors;
794
+ GPR_ASSERT(InsertOrUpdateChildPolicyField(
759
795
  lb_policy_->config_->child_policy_config_target_field_name(), target_,
760
- &child_policy_config);
761
- GPR_ASSERT(error == GRPC_ERROR_NONE);
796
+ &child_policy_config, &errors));
762
797
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
763
798
  gpr_log(
764
799
  GPR_INFO,
@@ -766,35 +801,36 @@ void RlsLb::ChildPolicyWrapper::StartUpdate() {
766
801
  lb_policy_.get(), this, target_.c_str(),
767
802
  child_policy_config.Dump().c_str());
768
803
  }
769
- pending_config_ = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
770
- child_policy_config, &error);
804
+ auto config =
805
+ CoreConfiguration::Get().lb_policy_registry().ParseLoadBalancingConfig(
806
+ child_policy_config);
771
807
  // Returned RLS target fails the validation.
772
- if (error != GRPC_ERROR_NONE) {
808
+ if (!config.ok()) {
773
809
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
774
810
  gpr_log(GPR_INFO,
775
811
  "[rlslb %p] ChildPolicyWrapper=%p [%s]: config failed to parse: "
776
- "%s; config: %s",
812
+ "%s",
777
813
  lb_policy_.get(), this, target_.c_str(),
778
- grpc_error_std_string(error).c_str(),
779
- child_policy_config.Dump().c_str());
814
+ config.status().ToString().c_str());
780
815
  }
781
816
  pending_config_.reset();
782
- picker_ = absl::make_unique<TransientFailurePicker>(
783
- grpc_error_to_absl_status(error));
784
- GRPC_ERROR_UNREF(error);
817
+ picker_ = MakeRefCounted<TransientFailurePicker>(
818
+ absl::UnavailableError(config.status().message()));
785
819
  child_policy_.reset();
820
+ } else {
821
+ pending_config_ = std::move(*config);
786
822
  }
787
823
  }
788
824
 
789
- void RlsLb::ChildPolicyWrapper::MaybeFinishUpdate() {
825
+ absl::Status RlsLb::ChildPolicyWrapper::MaybeFinishUpdate() {
790
826
  // If pending_config_ is not set, that means StartUpdate() failed, so
791
827
  // there's nothing to do here.
792
- if (pending_config_ == nullptr) return;
828
+ if (pending_config_ == nullptr) return absl::OkStatus();
793
829
  // If child policy doesn't yet exist, create it.
794
830
  if (child_policy_ == nullptr) {
795
831
  Args create_args;
796
832
  create_args.work_serializer = lb_policy_->work_serializer();
797
- create_args.channel_control_helper = absl::make_unique<ChildPolicyHelper>(
833
+ create_args.channel_control_helper = std::make_unique<ChildPolicyHelper>(
798
834
  WeakRef(DEBUG_LOCATION, "ChildPolicyHelper"));
799
835
  create_args.args = lb_policy_->channel_args_;
800
836
  child_policy_ = MakeOrphanable<ChildPolicyHandler>(std::move(create_args),
@@ -818,8 +854,8 @@ void RlsLb::ChildPolicyWrapper::MaybeFinishUpdate() {
818
854
  UpdateArgs update_args;
819
855
  update_args.config = std::move(pending_config_);
820
856
  update_args.addresses = lb_policy_->addresses_;
821
- update_args.args = grpc_channel_args_copy(lb_policy_->channel_args_);
822
- child_policy_->UpdateLocked(std::move(update_args));
857
+ update_args.args = lb_policy_->channel_args_;
858
+ return child_policy_->UpdateLocked(std::move(update_args));
823
859
  }
824
860
 
825
861
  //
@@ -828,7 +864,7 @@ void RlsLb::ChildPolicyWrapper::MaybeFinishUpdate() {
828
864
 
829
865
  RefCountedPtr<SubchannelInterface>
830
866
  RlsLb::ChildPolicyWrapper::ChildPolicyHelper::CreateSubchannel(
831
- ServerAddress address, const grpc_channel_args& args) {
867
+ ServerAddress address, const ChannelArgs& args) {
832
868
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
833
869
  gpr_log(GPR_INFO,
834
870
  "[rlslb %p] ChildPolicyWrapper=%p [%s] ChildPolicyHelper=%p: "
@@ -843,7 +879,7 @@ RlsLb::ChildPolicyWrapper::ChildPolicyHelper::CreateSubchannel(
843
879
 
844
880
  void RlsLb::ChildPolicyWrapper::ChildPolicyHelper::UpdateState(
845
881
  grpc_connectivity_state state, const absl::Status& status,
846
- std::unique_ptr<SubchannelPicker> picker) {
882
+ RefCountedPtr<SubchannelPicker> picker) {
847
883
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
848
884
  gpr_log(GPR_INFO,
849
885
  "[rlslb %p] ChildPolicyWrapper=%p [%s] ChildPolicyHelper=%p: "
@@ -884,6 +920,11 @@ absl::string_view RlsLb::ChildPolicyWrapper::ChildPolicyHelper::GetAuthority() {
884
920
  return wrapper_->lb_policy_->channel_control_helper()->GetAuthority();
885
921
  }
886
922
 
923
+ grpc_event_engine::experimental::EventEngine*
924
+ RlsLb::ChildPolicyWrapper::ChildPolicyHelper::GetEventEngine() {
925
+ return wrapper_->lb_policy_->channel_control_helper()->GetEventEngine();
926
+ }
927
+
887
928
  void RlsLb::ChildPolicyWrapper::ChildPolicyHelper::AddTraceEvent(
888
929
  TraceSeverity severity, absl::string_view message) {
889
930
  if (wrapper_->is_shutdown_) return;
@@ -989,7 +1030,7 @@ LoadBalancingPolicy::PickResult RlsLb::Picker::Pick(PickArgs args) {
989
1030
  gpr_log(GPR_INFO, "[rlslb %p] picker=%p: request keys: %s",
990
1031
  lb_policy_.get(), this, key.ToString().c_str());
991
1032
  }
992
- Timestamp now = ExecCtx::Get()->Now();
1033
+ Timestamp now = Timestamp::Now();
993
1034
  MutexLock lock(&lb_policy_->mu_);
994
1035
  if (lb_policy_->is_shutdown_) {
995
1036
  return PickResult::Fail(
@@ -1059,7 +1100,8 @@ LoadBalancingPolicy::PickResult RlsLb::Picker::Pick(PickArgs args) {
1059
1100
  "[rlslb %p] picker=%p: RLS call in backoff; failing pick",
1060
1101
  lb_policy_.get(), this);
1061
1102
  }
1062
- return PickResult::Fail(entry->status());
1103
+ return PickResult::Fail(absl::UnavailableError(
1104
+ absl::StrCat("RLS request failed: ", entry->status().ToString())));
1063
1105
  }
1064
1106
  }
1065
1107
  // RLS call pending. Queue the pick.
@@ -1077,46 +1119,50 @@ LoadBalancingPolicy::PickResult RlsLb::Picker::Pick(PickArgs args) {
1077
1119
  RlsLb::Cache::Entry::BackoffTimer::BackoffTimer(RefCountedPtr<Entry> entry,
1078
1120
  Timestamp backoff_time)
1079
1121
  : entry_(std::move(entry)) {
1080
- GRPC_CLOSURE_INIT(&backoff_timer_callback_, OnBackoffTimer, this, nullptr);
1081
- Ref(DEBUG_LOCATION, "BackoffTimer").release();
1082
- grpc_timer_init(&backoff_timer_, backoff_time, &backoff_timer_callback_);
1122
+ backoff_timer_task_handle_ =
1123
+ entry_->lb_policy_->channel_control_helper()->GetEventEngine()->RunAfter(
1124
+ backoff_time - Timestamp::Now(),
1125
+ [self = Ref(DEBUG_LOCATION, "BackoffTimer")]() mutable {
1126
+ ApplicationCallbackExecCtx callback_exec_ctx;
1127
+ ExecCtx exec_ctx;
1128
+ auto self_ptr = self.get();
1129
+ self_ptr->entry_->lb_policy_->work_serializer()->Run(
1130
+ [self = std::move(self)]() { self->OnBackoffTimerLocked(); },
1131
+ DEBUG_LOCATION);
1132
+ });
1083
1133
  }
1084
1134
 
1085
1135
  void RlsLb::Cache::Entry::BackoffTimer::Orphan() {
1086
- if (armed_) {
1087
- armed_ = false;
1088
- grpc_timer_cancel(&backoff_timer_);
1136
+ if (backoff_timer_task_handle_.has_value() &&
1137
+ entry_->lb_policy_->channel_control_helper()->GetEventEngine()->Cancel(
1138
+ *backoff_timer_task_handle_)) {
1139
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1140
+ gpr_log(GPR_INFO, "[rlslb %p] cache entry=%p %s, backoff timer canceled",
1141
+ entry_->lb_policy_.get(), entry_.get(),
1142
+ entry_->is_shutdown_ ? "(shut down)"
1143
+ : entry_->lru_iterator_->ToString().c_str());
1144
+ }
1089
1145
  }
1146
+ backoff_timer_task_handle_.reset();
1090
1147
  Unref(DEBUG_LOCATION, "Orphan");
1091
1148
  }
1092
1149
 
1093
- void RlsLb::Cache::Entry::BackoffTimer::OnBackoffTimer(
1094
- void* arg, grpc_error_handle /*error*/) {
1095
- auto* self = static_cast<BackoffTimer*>(arg);
1096
- self->entry_->lb_policy_->work_serializer()->Run(
1097
- [self]() {
1098
- RefCountedPtr<BackoffTimer> backoff_timer(self);
1099
- {
1100
- MutexLock lock(&self->entry_->lb_policy_->mu_);
1101
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1102
- gpr_log(GPR_INFO,
1103
- "[rlslb %p] cache entry=%p %s, armed_=%d: "
1104
- "backoff timer fired",
1105
- self->entry_->lb_policy_.get(), self->entry_.get(),
1106
- self->entry_->is_shutdown_
1107
- ? "(shut down)"
1108
- : self->entry_->lru_iterator_->ToString().c_str(),
1109
- self->armed_);
1110
- }
1111
- bool cancelled = !self->armed_;
1112
- self->armed_ = false;
1113
- if (cancelled) return;
1114
- }
1115
- // The pick was in backoff state and there could be a pick queued if
1116
- // wait_for_ready is true. We'll update the picker for that case.
1117
- self->entry_->lb_policy_->UpdatePickerLocked();
1118
- },
1119
- DEBUG_LOCATION);
1150
+ void RlsLb::Cache::Entry::BackoffTimer::OnBackoffTimerLocked() {
1151
+ {
1152
+ MutexLock lock(&entry_->lb_policy_->mu_);
1153
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1154
+ gpr_log(GPR_INFO, "[rlslb %p] cache entry=%p %s, backoff timer fired",
1155
+ entry_->lb_policy_.get(), entry_.get(),
1156
+ entry_->is_shutdown_ ? "(shut down)"
1157
+ : entry_->lru_iterator_->ToString().c_str());
1158
+ }
1159
+ // Skip the update if Orphaned
1160
+ if (!backoff_timer_task_handle_.has_value()) return;
1161
+ backoff_timer_task_handle_.reset();
1162
+ }
1163
+ // The pick was in backoff state and there could be a pick queued if
1164
+ // wait_for_ready is true. We'll update the picker for that case.
1165
+ entry_->lb_policy_->UpdatePickerLocked();
1120
1166
  }
1121
1167
 
1122
1168
  //
@@ -1124,7 +1170,7 @@ void RlsLb::Cache::Entry::BackoffTimer::OnBackoffTimer(
1124
1170
  //
1125
1171
 
1126
1172
  std::unique_ptr<BackOff> MakeCacheEntryBackoff() {
1127
- return absl::make_unique<BackOff>(
1173
+ return std::make_unique<BackOff>(
1128
1174
  BackOff::Options()
1129
1175
  .set_initial_backoff(kCacheBackoffInitial)
1130
1176
  .set_multiplier(kCacheBackoffMultiplier)
@@ -1138,7 +1184,7 @@ RlsLb::Cache::Entry::Entry(RefCountedPtr<RlsLb> lb_policy,
1138
1184
  GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace) ? "CacheEntry" : nullptr),
1139
1185
  lb_policy_(std::move(lb_policy)),
1140
1186
  backoff_state_(MakeCacheEntryBackoff()),
1141
- min_expiration_time_(ExecCtx::Get()->Now() + kMinExpirationTime),
1187
+ min_expiration_time_(Timestamp::Now() + kMinExpirationTime),
1142
1188
  lru_iterator_(lb_policy_->cache_.lru_list_.insert(
1143
1189
  lb_policy_->cache_.lru_list_.end(), key)) {}
1144
1190
 
@@ -1166,46 +1212,48 @@ size_t RlsLb::Cache::Entry::Size() const {
1166
1212
  }
1167
1213
 
1168
1214
  LoadBalancingPolicy::PickResult RlsLb::Cache::Entry::Pick(PickArgs args) {
1169
- for (const auto& child_policy_wrapper : child_policy_wrappers_) {
1215
+ size_t i = 0;
1216
+ ChildPolicyWrapper* child_policy_wrapper = nullptr;
1217
+ // Skip targets before the last one that are in state TRANSIENT_FAILURE.
1218
+ for (; i < child_policy_wrappers_.size(); ++i) {
1219
+ child_policy_wrapper = child_policy_wrappers_[i].get();
1170
1220
  if (child_policy_wrapper->connectivity_state() ==
1171
- GRPC_CHANNEL_TRANSIENT_FAILURE) {
1221
+ GRPC_CHANNEL_TRANSIENT_FAILURE &&
1222
+ i < child_policy_wrappers_.size() - 1) {
1172
1223
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1173
1224
  gpr_log(GPR_INFO,
1174
- "[rlslb %p] cache entry=%p %s: target %s in state "
1175
- "TRANSIENT_FAILURE; skipping",
1225
+ "[rlslb %p] cache entry=%p %s: target %s (%" PRIuPTR
1226
+ " of %" PRIuPTR ") in state TRANSIENT_FAILURE; skipping",
1176
1227
  lb_policy_.get(), this, lru_iterator_->ToString().c_str(),
1177
- child_policy_wrapper->target().c_str());
1228
+ child_policy_wrapper->target().c_str(), i,
1229
+ child_policy_wrappers_.size());
1178
1230
  }
1179
1231
  continue;
1180
1232
  }
1181
- // Child policy not in TRANSIENT_FAILURE, so delegate.
1182
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1183
- gpr_log(
1184
- GPR_INFO,
1185
- "[rlslb %p] cache entry=%p %s: target %s in state %s; "
1186
- "delegating",
1187
- lb_policy_.get(), this, lru_iterator_->ToString().c_str(),
1188
- child_policy_wrapper->target().c_str(),
1189
- ConnectivityStateName(child_policy_wrapper->connectivity_state()));
1190
- }
1191
- // Add header data.
1192
- if (!header_data_.empty()) {
1193
- char* copied_header_data =
1194
- static_cast<char*>(args.call_state->Alloc(header_data_.length() + 1));
1195
- strcpy(copied_header_data, header_data_.c_str());
1196
- args.initial_metadata->Add(kRlsHeaderKey, copied_header_data);
1197
- }
1198
- return child_policy_wrapper->Pick(args);
1233
+ break;
1199
1234
  }
1200
- // No child policy found.
1235
+ // Child policy not in TRANSIENT_FAILURE or is the last target in
1236
+ // the list, so delegate.
1201
1237
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1202
1238
  gpr_log(GPR_INFO,
1203
- "[rlslb %p] cache entry=%p %s: no healthy target found; "
1204
- "failing pick",
1205
- lb_policy_.get(), this, lru_iterator_->ToString().c_str());
1206
- }
1207
- return PickResult::Fail(
1208
- absl::UnavailableError("all RLS targets unreachable"));
1239
+ "[rlslb %p] cache entry=%p %s: target %s (%" PRIuPTR " of %" PRIuPTR
1240
+ ") in state %s; delegating",
1241
+ lb_policy_.get(), this, lru_iterator_->ToString().c_str(),
1242
+ child_policy_wrapper->target().c_str(), i,
1243
+ child_policy_wrappers_.size(),
1244
+ ConnectivityStateName(child_policy_wrapper->connectivity_state()));
1245
+ }
1246
+ // Add header data.
1247
+ // Note that even if the target we're using is in TRANSIENT_FAILURE,
1248
+ // the pick might still succeed (e.g., if the child is ring_hash), so
1249
+ // we need to pass the right header info down in all cases.
1250
+ if (!header_data_.empty()) {
1251
+ char* copied_header_data =
1252
+ static_cast<char*>(args.call_state->Alloc(header_data_.length() + 1));
1253
+ strcpy(copied_header_data, header_data_.c_str());
1254
+ args.initial_metadata->Add(kRlsHeaderKey, copied_header_data);
1255
+ }
1256
+ return child_policy_wrapper->Pick(args);
1209
1257
  }
1210
1258
 
1211
1259
  void RlsLb::Cache::Entry::ResetBackoff() {
@@ -1214,12 +1262,12 @@ void RlsLb::Cache::Entry::ResetBackoff() {
1214
1262
  }
1215
1263
 
1216
1264
  bool RlsLb::Cache::Entry::ShouldRemove() const {
1217
- Timestamp now = ExecCtx::Get()->Now();
1265
+ Timestamp now = Timestamp::Now();
1218
1266
  return data_expiration_time_ < now && backoff_expiration_time_ < now;
1219
1267
  }
1220
1268
 
1221
1269
  bool RlsLb::Cache::Entry::CanEvict() const {
1222
- Timestamp now = ExecCtx::Get()->Now();
1270
+ Timestamp now = Timestamp::Now();
1223
1271
  return min_expiration_time_ < now;
1224
1272
  }
1225
1273
 
@@ -1245,7 +1293,7 @@ RlsLb::Cache::Entry::OnRlsResponseLocked(
1245
1293
  backoff_state_ = MakeCacheEntryBackoff();
1246
1294
  }
1247
1295
  backoff_time_ = backoff_state_->NextAttemptTime();
1248
- Timestamp now = ExecCtx::Get()->Now();
1296
+ Timestamp now = Timestamp::Now();
1249
1297
  backoff_expiration_time_ = now + (backoff_time_ - now) * 2;
1250
1298
  backoff_timer_ = MakeOrphanable<BackoffTimer>(
1251
1299
  Ref(DEBUG_LOCATION, "BackoffTimer"), backoff_time_);
@@ -1254,7 +1302,7 @@ RlsLb::Cache::Entry::OnRlsResponseLocked(
1254
1302
  }
1255
1303
  // Request succeeded, so store the result.
1256
1304
  header_data_ = std::move(response.header_data);
1257
- Timestamp now = ExecCtx::Get()->Now();
1305
+ Timestamp now = Timestamp::Now();
1258
1306
  data_expiration_time_ = now + lb_policy_->config_->max_age();
1259
1307
  stale_time_ = now + lb_policy_->config_->stale_age();
1260
1308
  status_ = absl::OkStatus();
@@ -1320,11 +1368,7 @@ RlsLb::Cache::Entry::OnRlsResponseLocked(
1320
1368
  //
1321
1369
 
1322
1370
  RlsLb::Cache::Cache(RlsLb* lb_policy) : lb_policy_(lb_policy) {
1323
- Timestamp now = ExecCtx::Get()->Now();
1324
- lb_policy_->Ref(DEBUG_LOCATION, "CacheCleanupTimer").release();
1325
- GRPC_CLOSURE_INIT(&timer_callback_, OnCleanupTimer, this, nullptr);
1326
- grpc_timer_init(&cleanup_timer_, now + kCacheCleanupTimerInterval,
1327
- &timer_callback_);
1371
+ StartCleanupTimer();
1328
1372
  }
1329
1373
 
1330
1374
  RlsLb::Cache::Entry* RlsLb::Cache::Find(const RequestKey& key) {
@@ -1378,38 +1422,49 @@ void RlsLb::Cache::ResetAllBackoff() {
1378
1422
  void RlsLb::Cache::Shutdown() {
1379
1423
  map_.clear();
1380
1424
  lru_list_.clear();
1381
- grpc_timer_cancel(&cleanup_timer_);
1425
+ if (cleanup_timer_handle_.has_value() &&
1426
+ lb_policy_->channel_control_helper()->GetEventEngine()->Cancel(
1427
+ *cleanup_timer_handle_)) {
1428
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1429
+ gpr_log(GPR_INFO, "[rlslb %p] cache cleanup timer canceled", lb_policy_);
1430
+ }
1431
+ }
1432
+ cleanup_timer_handle_.reset();
1382
1433
  }
1383
1434
 
1384
- void RlsLb::Cache::OnCleanupTimer(void* arg, grpc_error_handle error) {
1385
- Cache* cache = static_cast<Cache*>(arg);
1386
- (void)GRPC_ERROR_REF(error);
1387
- cache->lb_policy_->work_serializer()->Run(
1388
- [cache, error]() {
1389
- RefCountedPtr<RlsLb> lb_policy(cache->lb_policy_);
1390
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1391
- gpr_log(GPR_INFO, "[rlslb %p] cache cleanup timer fired (%s)",
1392
- cache->lb_policy_, grpc_error_std_string(error).c_str());
1393
- }
1394
- if (error == GRPC_ERROR_CANCELLED) return;
1395
- MutexLock lock(&lb_policy->mu_);
1396
- if (lb_policy->is_shutdown_) return;
1397
- for (auto it = cache->map_.begin(); it != cache->map_.end();) {
1398
- if (GPR_UNLIKELY(it->second->ShouldRemove() &&
1399
- it->second->CanEvict())) {
1400
- cache->size_ -= it->second->Size();
1401
- it = cache->map_.erase(it);
1402
- } else {
1403
- ++it;
1404
- }
1405
- }
1406
- Timestamp now = ExecCtx::Get()->Now();
1407
- lb_policy.release();
1408
- grpc_timer_init(&cache->cleanup_timer_,
1409
- now + kCacheCleanupTimerInterval,
1410
- &cache->timer_callback_);
1411
- },
1412
- DEBUG_LOCATION);
1435
+ void RlsLb::Cache::StartCleanupTimer() {
1436
+ cleanup_timer_handle_ =
1437
+ lb_policy_->channel_control_helper()->GetEventEngine()->RunAfter(
1438
+ kCacheCleanupTimerInterval,
1439
+ [this, lb_policy = lb_policy_->Ref(DEBUG_LOCATION,
1440
+ "CacheCleanupTimer")]() mutable {
1441
+ ApplicationCallbackExecCtx callback_exec_ctx;
1442
+ ExecCtx exec_ctx;
1443
+ lb_policy_->work_serializer()->Run(
1444
+ [this, lb_policy = std::move(lb_policy)]() {
1445
+ // The lb_policy ref is held until the callback completes
1446
+ OnCleanupTimer();
1447
+ },
1448
+ DEBUG_LOCATION);
1449
+ });
1450
+ }
1451
+
1452
+ void RlsLb::Cache::OnCleanupTimer() {
1453
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1454
+ gpr_log(GPR_INFO, "[rlslb %p] cache cleanup timer fired", lb_policy_);
1455
+ }
1456
+ MutexLock lock(&lb_policy_->mu_);
1457
+ if (!cleanup_timer_handle_.has_value()) return;
1458
+ if (lb_policy_->is_shutdown_) return;
1459
+ for (auto it = map_.begin(); it != map_.end();) {
1460
+ if (GPR_UNLIKELY(it->second->ShouldRemove() && it->second->CanEvict())) {
1461
+ size_ -= it->second->Size();
1462
+ it = map_.erase(it);
1463
+ } else {
1464
+ ++it;
1465
+ }
1466
+ }
1467
+ StartCleanupTimer();
1413
1468
  }
1414
1469
 
1415
1470
  size_t RlsLb::Cache::EntrySizeForKey(const RequestKey& key) {
@@ -1472,7 +1527,7 @@ void RlsLb::RlsChannel::StateWatcher::OnConnectivityStateChange(
1472
1527
  //
1473
1528
 
1474
1529
  bool RlsLb::RlsChannel::Throttle::ShouldThrottle() {
1475
- Timestamp now = ExecCtx::Get()->Now();
1530
+ Timestamp now = Timestamp::Now();
1476
1531
  while (!requests_.empty() && now - requests_.front() > window_size_) {
1477
1532
  requests_.pop_front();
1478
1533
  }
@@ -1500,7 +1555,7 @@ bool RlsLb::RlsChannel::Throttle::ShouldThrottle() {
1500
1555
  }
1501
1556
 
1502
1557
  void RlsLb::RlsChannel::Throttle::RegisterResponse(bool success) {
1503
- Timestamp now = ExecCtx::Get()->Now();
1558
+ Timestamp now = Timestamp::Now();
1504
1559
  requests_.push_back(now);
1505
1560
  if (!success) failures_.push_back(now);
1506
1561
  }
@@ -1516,41 +1571,32 @@ RlsLb::RlsChannel::RlsChannel(RefCountedPtr<RlsLb> lb_policy)
1516
1571
  // Get channel creds from parent channel.
1517
1572
  // TODO(roth): Once we eliminate insecure builds, get this via a
1518
1573
  // method on the helper instead of digging through channel args.
1519
- grpc_channel_credentials* creds =
1520
- grpc_channel_credentials_find_in_args(lb_policy_->channel_args_);
1574
+ auto* creds = lb_policy_->channel_args_.GetObject<grpc_channel_credentials>();
1521
1575
  // Use the parent channel's authority.
1522
1576
  std::string authority(lb_policy_->channel_control_helper()->GetAuthority());
1523
- absl::InlinedVector<grpc_arg, 3> args = {
1524
- grpc_channel_arg_string_create(
1525
- const_cast<char*>(GRPC_ARG_DEFAULT_AUTHORITY),
1526
- const_cast<char*>(authority.c_str())),
1527
- grpc_channel_arg_integer_create(
1528
- const_cast<char*>(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL), 1),
1529
- };
1577
+ ChannelArgs args = ChannelArgs()
1578
+ .Set(GRPC_ARG_DEFAULT_AUTHORITY, authority)
1579
+ .Set(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL, 1);
1530
1580
  // Propagate fake security connector expected targets, if any.
1531
1581
  // (This is ugly, but it seems better than propagating all channel args
1532
1582
  // from the parent channel by default and then having a giant
1533
1583
  // exclude list of args to strip out, like we do in grpclb.)
1534
- const char* fake_security_expected_targets = grpc_channel_args_find_string(
1535
- lb_policy_->channel_args_, GRPC_ARG_FAKE_SECURITY_EXPECTED_TARGETS);
1536
- if (fake_security_expected_targets != nullptr) {
1537
- args.push_back(grpc_channel_arg_string_create(
1538
- const_cast<char*>(GRPC_ARG_FAKE_SECURITY_EXPECTED_TARGETS),
1539
- const_cast<char*>(fake_security_expected_targets)));
1584
+ absl::optional<absl::string_view> fake_security_expected_targets =
1585
+ lb_policy_->channel_args_.GetString(
1586
+ GRPC_ARG_FAKE_SECURITY_EXPECTED_TARGETS);
1587
+ if (fake_security_expected_targets.has_value()) {
1588
+ args = args.Set(GRPC_ARG_FAKE_SECURITY_EXPECTED_TARGETS,
1589
+ *fake_security_expected_targets);
1540
1590
  }
1541
1591
  // Add service config args if needed.
1542
1592
  const std::string& service_config =
1543
1593
  lb_policy_->config_->rls_channel_service_config();
1544
1594
  if (!service_config.empty()) {
1545
- args.push_back(grpc_channel_arg_string_create(
1546
- const_cast<char*>(GRPC_ARG_SERVICE_CONFIG),
1547
- const_cast<char*>(service_config.c_str())));
1548
- args.push_back(grpc_channel_arg_integer_create(
1549
- const_cast<char*>(GRPC_ARG_SERVICE_CONFIG_DISABLE_RESOLUTION), 1));
1595
+ args = args.Set(GRPC_ARG_SERVICE_CONFIG, service_config)
1596
+ .Set(GRPC_ARG_SERVICE_CONFIG_DISABLE_RESOLUTION, 1);
1550
1597
  }
1551
- grpc_channel_args rls_channel_args = {args.size(), args.data()};
1552
1598
  channel_ = grpc_channel_create(lb_policy_->config_->lookup_service().c_str(),
1553
- creds, &rls_channel_args);
1599
+ creds, args.ToC().get());
1554
1600
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1555
1601
  gpr_log(GPR_INFO, "[rlslb %p] RlsChannel=%p: created channel %p for %s",
1556
1602
  lb_policy_.get(), this, channel_,
@@ -1561,14 +1607,14 @@ RlsLb::RlsChannel::RlsChannel(RefCountedPtr<RlsLb> lb_policy)
1561
1607
  channelz::ChannelNode* child_channelz_node =
1562
1608
  grpc_channel_get_channelz_node(channel_);
1563
1609
  channelz::ChannelNode* parent_channelz_node =
1564
- grpc_channel_args_find_pointer<channelz::ChannelNode>(
1565
- lb_policy_->channel_args_, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
1610
+ lb_policy_->channel_args_.GetObject<channelz::ChannelNode>();
1566
1611
  if (child_channelz_node != nullptr && parent_channelz_node != nullptr) {
1567
1612
  parent_channelz_node->AddChildChannel(child_channelz_node->uuid());
1568
1613
  parent_channelz_node_ = parent_channelz_node->Ref();
1569
1614
  }
1570
1615
  // Start connectivity watch.
1571
- ClientChannel* client_channel = ClientChannel::GetFromChannel(channel_);
1616
+ ClientChannel* client_channel =
1617
+ ClientChannel::GetFromChannel(Channel::FromC(channel_));
1572
1618
  GPR_ASSERT(client_channel != nullptr);
1573
1619
  watcher_ = new StateWatcher(Ref(DEBUG_LOCATION, "StateWatcher"));
1574
1620
  client_channel->AddConnectivityWatcher(
@@ -1593,7 +1639,8 @@ void RlsLb::RlsChannel::Orphan() {
1593
1639
  }
1594
1640
  // Stop connectivity watch.
1595
1641
  if (watcher_ != nullptr) {
1596
- ClientChannel* client_channel = ClientChannel::GetFromChannel(channel_);
1642
+ ClientChannel* client_channel =
1643
+ ClientChannel::GetFromChannel(Channel::FromC(channel_));
1597
1644
  GPR_ASSERT(client_channel != nullptr);
1598
1645
  client_channel->RemoveConnectivityWatcher(watcher_);
1599
1646
  watcher_ = nullptr;
@@ -1657,7 +1704,7 @@ RlsLb::RlsRequest::RlsRequest(RefCountedPtr<RlsLb> lb_policy, RequestKey key,
1657
1704
  DEBUG_LOCATION,
1658
1705
  GRPC_CLOSURE_INIT(&call_start_cb_, StartCall,
1659
1706
  Ref(DEBUG_LOCATION, "StartCall").release(), nullptr),
1660
- GRPC_ERROR_NONE);
1707
+ absl::OkStatus());
1661
1708
  }
1662
1709
 
1663
1710
  RlsLb::RlsRequest::~RlsRequest() { GPR_ASSERT(call_ == nullptr); }
@@ -1688,7 +1735,7 @@ void RlsLb::RlsRequest::StartCallLocked() {
1688
1735
  MutexLock lock(&lb_policy_->mu_);
1689
1736
  if (lb_policy_->is_shutdown_) return;
1690
1737
  }
1691
- Timestamp now = ExecCtx::Get()->Now();
1738
+ Timestamp now = Timestamp::Now();
1692
1739
  deadline_ = now + lb_policy_->config_->lookup_service_timeout();
1693
1740
  grpc_metadata_array_init(&recv_initial_metadata_);
1694
1741
  grpc_metadata_array_init(&recv_trailing_metadata_);
@@ -1728,7 +1775,6 @@ void RlsLb::RlsRequest::StartCallLocked() {
1728
1775
 
1729
1776
  void RlsLb::RlsRequest::OnRlsCallComplete(void* arg, grpc_error_handle error) {
1730
1777
  auto* request = static_cast<RlsRequest*>(arg);
1731
- (void)GRPC_ERROR_REF(error);
1732
1778
  request->lb_policy_->work_serializer()->Run(
1733
1779
  [request, error]() {
1734
1780
  request->OnRlsCallCompleteLocked(error);
@@ -1744,12 +1790,12 @@ void RlsLb::RlsRequest::OnRlsCallCompleteLocked(grpc_error_handle error) {
1744
1790
  "[rlslb %p] rls_request=%p %s, error=%s, status={%d, %s} RLS call "
1745
1791
  "response received",
1746
1792
  lb_policy_.get(), this, key_.ToString().c_str(),
1747
- grpc_error_std_string(error).c_str(), status_recv_,
1793
+ StatusToString(error).c_str(), status_recv_,
1748
1794
  status_message.c_str());
1749
1795
  }
1750
1796
  // Parse response.
1751
1797
  ResponseInfo response;
1752
- if (error != GRPC_ERROR_NONE) {
1798
+ if (!error.ok()) {
1753
1799
  grpc_status_code code;
1754
1800
  std::string message;
1755
1801
  grpc_error_get_status(error, deadline_, &code, &message,
@@ -1767,7 +1813,7 @@ void RlsLb::RlsRequest::OnRlsCallCompleteLocked(grpc_error_handle error) {
1767
1813
  grpc_byte_buffer_destroy(recv_message_);
1768
1814
  grpc_metadata_array_destroy(&recv_initial_metadata_);
1769
1815
  grpc_metadata_array_destroy(&recv_trailing_metadata_);
1770
- grpc_slice_unref_internal(status_details_recv_);
1816
+ CSliceUnref(status_details_recv_);
1771
1817
  grpc_call_unref(call_);
1772
1818
  call_ = nullptr;
1773
1819
  // Return result to cache.
@@ -1789,7 +1835,9 @@ void RlsLb::RlsRequest::OnRlsCallCompleteLocked(grpc_error_handle error) {
1789
1835
  // Now that we've released the lock, finish the update on any newly
1790
1836
  // created child policies.
1791
1837
  for (ChildPolicyWrapper* child : child_policies_to_finish_update) {
1792
- child->MaybeFinishUpdate();
1838
+ // TODO(roth): If the child reports an error with the update, we
1839
+ // need to propagate that back to the resolver somehow.
1840
+ (void)child->MaybeFinishUpdate();
1793
1841
  }
1794
1842
  }
1795
1843
 
@@ -1816,7 +1864,7 @@ grpc_byte_buffer* RlsLb::RlsRequest::MakeRequestProto() {
1816
1864
  grpc_lookup_v1_RouteLookupRequest_serialize(req, arena.ptr(), &len);
1817
1865
  grpc_slice send_slice = grpc_slice_from_copied_buffer(buf, len);
1818
1866
  grpc_byte_buffer* byte_buffer = grpc_raw_byte_buffer_create(&send_slice, 1);
1819
- grpc_slice_unref_internal(send_slice);
1867
+ CSliceUnref(send_slice);
1820
1868
  return byte_buffer;
1821
1869
  }
1822
1870
 
@@ -1831,7 +1879,7 @@ RlsLb::ResponseInfo RlsLb::RlsRequest::ParseResponseProto() {
1831
1879
  grpc_lookup_v1_RouteLookupResponse_parse(
1832
1880
  reinterpret_cast<const char*>(GRPC_SLICE_START_PTR(recv_slice)),
1833
1881
  GRPC_SLICE_LENGTH(recv_slice), arena.ptr());
1834
- grpc_slice_unref_internal(recv_slice);
1882
+ CSliceUnref(recv_slice);
1835
1883
  if (response == nullptr) {
1836
1884
  response_info.status = absl::InternalError("cannot parse RLS response");
1837
1885
  return response_info;
@@ -1860,28 +1908,28 @@ RlsLb::ResponseInfo RlsLb::RlsRequest::ParseResponseProto() {
1860
1908
  // RlsLb
1861
1909
  //
1862
1910
 
1863
- std::string GetServerUri(const grpc_channel_args* args) {
1864
- const char* server_uri_str =
1865
- grpc_channel_args_find_string(args, GRPC_ARG_SERVER_URI);
1866
- GPR_ASSERT(server_uri_str != nullptr);
1867
- absl::StatusOr<URI> uri = URI::Parse(server_uri_str);
1911
+ std::string GetServerUri(const ChannelArgs& args) {
1912
+ auto server_uri_str = args.GetString(GRPC_ARG_SERVER_URI);
1913
+ GPR_ASSERT(server_uri_str.has_value());
1914
+ absl::StatusOr<URI> uri = URI::Parse(*server_uri_str);
1868
1915
  GPR_ASSERT(uri.ok());
1869
1916
  return std::string(absl::StripPrefix(uri->path(), "/"));
1870
1917
  }
1871
1918
 
1872
1919
  RlsLb::RlsLb(Args args)
1873
1920
  : LoadBalancingPolicy(std::move(args)),
1874
- server_name_(GetServerUri(args.args)),
1921
+ server_name_(GetServerUri(channel_args())),
1875
1922
  cache_(this) {
1876
1923
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1877
1924
  gpr_log(GPR_INFO, "[rlslb %p] policy created", this);
1878
1925
  }
1879
1926
  }
1880
1927
 
1881
- void RlsLb::UpdateLocked(UpdateArgs args) {
1928
+ absl::Status RlsLb::UpdateLocked(UpdateArgs args) {
1882
1929
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1883
1930
  gpr_log(GPR_INFO, "[rlslb %p] policy updated", this);
1884
1931
  }
1932
+ update_in_progress_ = true;
1885
1933
  // Swap out config.
1886
1934
  RefCountedPtr<RlsLbConfig> old_config = std::move(config_);
1887
1935
  config_ = std::move(args.config);
@@ -1902,14 +1950,12 @@ void RlsLb::UpdateLocked(UpdateArgs args) {
1902
1950
  old_addresses = addresses_;
1903
1951
  }
1904
1952
  // Swap out channel args.
1905
- grpc_channel_args_destroy(channel_args_);
1906
- channel_args_ = grpc_channel_args_copy(args.args);
1953
+ channel_args_ = std::move(args.args);
1907
1954
  // Determine whether we need to update all child policies.
1908
1955
  bool update_child_policies =
1909
1956
  old_config == nullptr ||
1910
1957
  old_config->child_policy_config() != config_->child_policy_config() ||
1911
- old_addresses != addresses_ ||
1912
- grpc_channel_args_compare(args.args, channel_args_) != 0;
1958
+ old_addresses != addresses_ || args.args != channel_args_;
1913
1959
  // If default target changes, swap out child policy.
1914
1960
  bool created_default_child = false;
1915
1961
  if (old_config == nullptr ||
@@ -1951,7 +1997,7 @@ void RlsLb::UpdateLocked(UpdateArgs args) {
1951
1997
  // Resize cache if needed.
1952
1998
  if (old_config == nullptr ||
1953
1999
  config_->cache_size_bytes() != old_config->cache_size_bytes()) {
1954
- cache_.Resize(config_->cache_size_bytes());
2000
+ cache_.Resize(static_cast<size_t>(config_->cache_size_bytes()));
1955
2001
  }
1956
2002
  // Start update of child policies if needed.
1957
2003
  if (update_child_policies) {
@@ -1970,20 +2016,30 @@ void RlsLb::UpdateLocked(UpdateArgs args) {
1970
2016
  }
1971
2017
  }
1972
2018
  // Now that we've released the lock, finish update of child policies.
2019
+ std::vector<std::string> errors;
1973
2020
  if (update_child_policies) {
1974
2021
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1975
2022
  gpr_log(GPR_INFO, "[rlslb %p] finishing child policy updates", this);
1976
2023
  }
1977
2024
  for (auto& p : child_policy_map_) {
1978
- p.second->MaybeFinishUpdate();
2025
+ absl::Status status = p.second->MaybeFinishUpdate();
2026
+ if (!status.ok()) {
2027
+ errors.emplace_back(
2028
+ absl::StrCat("target ", p.first, ": ", status.ToString()));
2029
+ }
1979
2030
  }
1980
2031
  } else if (created_default_child) {
1981
2032
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
1982
2033
  gpr_log(GPR_INFO, "[rlslb %p] finishing default child policy update",
1983
2034
  this);
1984
2035
  }
1985
- default_child_policy_->MaybeFinishUpdate();
2036
+ absl::Status status = default_child_policy_->MaybeFinishUpdate();
2037
+ if (!status.ok()) {
2038
+ errors.emplace_back(absl::StrCat("target ", config_->default_target(),
2039
+ ": ", status.ToString()));
2040
+ }
1986
2041
  }
2042
+ update_in_progress_ = false;
1987
2043
  // In principle, we need to update the picker here only if the config
1988
2044
  // fields used by the picker have changed. However, it seems fragile
1989
2045
  // to check individual fields, since the picker logic could change in
@@ -1991,6 +2047,12 @@ void RlsLb::UpdateLocked(UpdateArgs args) {
1991
2047
  // remember to update the code here. So for now, we just unconditionally
1992
2048
  // update the picker here, even though it's probably redundant.
1993
2049
  UpdatePickerLocked();
2050
+ // Return status.
2051
+ if (!errors.empty()) {
2052
+ return absl::UnavailableError(absl::StrCat(
2053
+ "errors from children: [", absl::StrJoin(errors, "; "), "]"));
2054
+ }
2055
+ return absl::OkStatus();
1994
2056
  }
1995
2057
 
1996
2058
  void RlsLb::ExitIdleLocked() {
@@ -2018,9 +2080,7 @@ void RlsLb::ShutdownLocked() {
2018
2080
  MutexLock lock(&mu_);
2019
2081
  is_shutdown_ = true;
2020
2082
  config_.reset(DEBUG_LOCATION, "ShutdownLocked");
2021
- if (channel_args_ != nullptr) {
2022
- grpc_channel_args_destroy(channel_args_);
2023
- }
2083
+ channel_args_ = ChannelArgs();
2024
2084
  cache_.Shutdown();
2025
2085
  request_map_.clear();
2026
2086
  rls_channel_.reset();
@@ -2036,7 +2096,7 @@ void RlsLb::UpdatePickerAsync() {
2036
2096
  GRPC_CLOSURE_CREATE(UpdatePickerCallback,
2037
2097
  Ref(DEBUG_LOCATION, "UpdatePickerCallback").release(),
2038
2098
  grpc_schedule_on_exec_ctx),
2039
- GRPC_ERROR_NONE);
2099
+ absl::OkStatus());
2040
2100
  }
2041
2101
 
2042
2102
  void RlsLb::UpdatePickerCallback(void* arg, grpc_error_handle /*error*/) {
@@ -2051,6 +2111,12 @@ void RlsLb::UpdatePickerCallback(void* arg, grpc_error_handle /*error*/) {
2051
2111
  }
2052
2112
 
2053
2113
  void RlsLb::UpdatePickerLocked() {
2114
+ // If we're in the process of propagating an update from our parent to
2115
+ // our children, ignore any updates that come from the children. We
2116
+ // will instead return a new picker once the update has been seen by
2117
+ // all children. This avoids unnecessary picker churn while an update
2118
+ // is being propagated to our children.
2119
+ if (update_in_progress_) return;
2054
2120
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_rls_trace)) {
2055
2121
  gpr_log(GPR_INFO, "[rlslb %p] updating picker", this);
2056
2122
  }
@@ -2096,456 +2162,366 @@ void RlsLb::UpdatePickerLocked() {
2096
2162
  status = absl::UnavailableError("no children available");
2097
2163
  }
2098
2164
  channel_control_helper()->UpdateState(
2099
- state, status, absl::make_unique<Picker>(Ref(DEBUG_LOCATION, "Picker")));
2165
+ state, status, MakeRefCounted<Picker>(Ref(DEBUG_LOCATION, "Picker")));
2100
2166
  }
2101
2167
 
2102
2168
  //
2103
2169
  // RlsLbFactory
2104
2170
  //
2105
2171
 
2106
- grpc_error_handle ParseJsonHeaders(size_t idx, const Json& json,
2107
- std::string* key,
2108
- std::vector<std::string>* headers) {
2109
- if (json.type() != Json::Type::OBJECT) {
2110
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
2111
- "field:headers index:", idx, " error:type should be OBJECT"));
2112
- }
2113
- std::vector<grpc_error_handle> error_list;
2114
- // requiredMatch must not be present.
2115
- if (json.object_value().find("requiredMatch") != json.object_value().end()) {
2116
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2117
- "field:requiredMatch error:must not be present"));
2118
- }
2119
- // Find key.
2120
- if (ParseJsonObjectField(json.object_value(), "key", key, &error_list) &&
2121
- key->empty()) {
2122
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2123
- "field:key error:must be non-empty"));
2124
- }
2125
- // Find headers.
2126
- const Json::Array* headers_json = nullptr;
2127
- ParseJsonObjectField(json.object_value(), "names", &headers_json,
2128
- &error_list);
2129
- if (headers_json != nullptr) {
2130
- if (headers_json->empty()) {
2131
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2132
- "field:names error:list is empty"));
2133
- } else {
2134
- size_t name_idx = 0;
2135
- for (const Json& name_json : *headers_json) {
2136
- if (name_json.type() != Json::Type::STRING) {
2137
- error_list.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
2138
- "field:names index:", name_idx, " error:type should be STRING")));
2139
- } else if (name_json.string_value().empty()) {
2140
- error_list.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
2141
- absl::StrCat("field:names index:", name_idx,
2142
- " error:header name must be non-empty")));
2143
- } else {
2144
- headers->push_back(name_json.string_value());
2172
+ struct GrpcKeyBuilder {
2173
+ struct Name {
2174
+ std::string service;
2175
+ std::string method;
2176
+
2177
+ static const JsonLoaderInterface* JsonLoader(const JsonArgs&) {
2178
+ static const auto* loader = JsonObjectLoader<Name>()
2179
+ .Field("service", &Name::service)
2180
+ .OptionalField("method", &Name::method)
2181
+ .Finish();
2182
+ return loader;
2183
+ }
2184
+ };
2185
+
2186
+ struct NameMatcher {
2187
+ std::string key;
2188
+ std::vector<std::string> names;
2189
+ absl::optional<bool> required_match;
2190
+
2191
+ static const JsonLoaderInterface* JsonLoader(const JsonArgs&) {
2192
+ static const auto* loader =
2193
+ JsonObjectLoader<NameMatcher>()
2194
+ .Field("key", &NameMatcher::key)
2195
+ .Field("names", &NameMatcher::names)
2196
+ .OptionalField("requiredMatch", &NameMatcher::required_match)
2197
+ .Finish();
2198
+ return loader;
2199
+ }
2200
+
2201
+ void JsonPostLoad(const Json&, const JsonArgs&, ValidationErrors* errors) {
2202
+ // key must be non-empty.
2203
+ {
2204
+ ValidationErrors::ScopedField field(errors, ".key");
2205
+ if (!errors->FieldHasErrors() && key.empty()) {
2206
+ errors->AddError("must be non-empty");
2145
2207
  }
2146
- ++name_idx;
2147
2208
  }
2148
- }
2149
- }
2150
- return GRPC_ERROR_CREATE_FROM_VECTOR_AND_CPP_STRING(
2151
- absl::StrCat("field:headers index:", idx), &error_list);
2152
- }
2153
-
2154
- std::string ParseJsonMethodName(size_t idx, const Json& json,
2155
- grpc_error_handle* error) {
2156
- if (json.type() != Json::Type::OBJECT) {
2157
- *error = GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
2158
- "field:names index:", idx, " error:type should be OBJECT"));
2159
- return "";
2160
- }
2161
- std::vector<grpc_error_handle> error_list;
2162
- // Find service name.
2163
- absl::string_view service_name;
2164
- ParseJsonObjectField(json.object_value(), "service", &service_name,
2165
- &error_list);
2166
- // Find method name.
2167
- absl::string_view method_name;
2168
- ParseJsonObjectField(json.object_value(), "method", &method_name, &error_list,
2169
- /*required=*/false);
2170
- // Return error, if any.
2171
- *error = GRPC_ERROR_CREATE_FROM_VECTOR_AND_CPP_STRING(
2172
- absl::StrCat("field:names index:", idx), &error_list);
2173
- // Construct path.
2174
- return absl::StrCat("/", service_name, "/", method_name);
2175
- }
2176
-
2177
- grpc_error_handle ParseGrpcKeybuilder(
2178
- size_t idx, const Json& json, RlsLbConfig::KeyBuilderMap* key_builder_map) {
2179
- if (json.type() != Json::Type::OBJECT) {
2180
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
2181
- "field:grpc_keybuilders index:", idx, " error:type should be OBJECT"));
2182
- }
2183
- std::vector<grpc_error_handle> error_list;
2184
- // Parse names.
2185
- std::set<std::string> names;
2186
- const Json::Array* names_array = nullptr;
2187
- if (ParseJsonObjectField(json.object_value(), "names", &names_array,
2188
- &error_list)) {
2189
- if (names_array->empty()) {
2190
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2191
- "field:names error:list is empty"));
2192
- } else {
2193
- size_t name_idx = 0;
2194
- for (const Json& name_json : *names_array) {
2195
- grpc_error_handle child_error = GRPC_ERROR_NONE;
2196
- std::string name =
2197
- ParseJsonMethodName(name_idx++, name_json, &child_error);
2198
- if (child_error != GRPC_ERROR_NONE) {
2199
- error_list.push_back(child_error);
2200
- } else {
2201
- bool inserted = names.insert(name).second;
2202
- if (!inserted) {
2203
- error_list.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
2204
- absl::StrCat("field:names error:duplicate entry for ", name)));
2209
+ // List of header names must be non-empty.
2210
+ {
2211
+ ValidationErrors::ScopedField field(errors, ".names");
2212
+ if (!errors->FieldHasErrors() && names.empty()) {
2213
+ errors->AddError("must be non-empty");
2214
+ }
2215
+ // Individual header names must be non-empty.
2216
+ for (size_t i = 0; i < names.size(); ++i) {
2217
+ ValidationErrors::ScopedField field(errors,
2218
+ absl::StrCat("[", i, "]"));
2219
+ if (!errors->FieldHasErrors() && names[i].empty()) {
2220
+ errors->AddError("must be non-empty");
2205
2221
  }
2206
2222
  }
2207
2223
  }
2208
- }
2209
- }
2210
- // Helper function to check for duplicate keys.
2211
- std::set<std::string> all_keys;
2212
- auto duplicate_key_check_func = [&all_keys,
2213
- &error_list](const std::string& key) {
2214
- auto it = all_keys.find(key);
2215
- if (it != all_keys.end()) {
2216
- error_list.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
2217
- absl::StrCat("key \"", key, "\" listed multiple times")));
2218
- } else {
2219
- all_keys.insert(key);
2224
+ // requiredMatch must not be present.
2225
+ {
2226
+ ValidationErrors::ScopedField field(errors, ".requiredMatch");
2227
+ if (required_match.has_value()) {
2228
+ errors->AddError("must not be present");
2229
+ }
2230
+ }
2220
2231
  }
2221
2232
  };
2222
- // Parse headers.
2223
- RlsLbConfig::KeyBuilder key_builder;
2224
- const Json::Array* headers_array = nullptr;
2225
- ParseJsonObjectField(json.object_value(), "headers", &headers_array,
2226
- &error_list, /*required=*/false);
2227
- if (headers_array != nullptr) {
2228
- size_t header_idx = 0;
2229
- for (const Json& header_json : *headers_array) {
2230
- std::string key;
2231
- std::vector<std::string> headers;
2232
- grpc_error_handle child_error =
2233
- ParseJsonHeaders(header_idx++, header_json, &key, &headers);
2234
- if (child_error != GRPC_ERROR_NONE) {
2235
- error_list.push_back(child_error);
2236
- } else {
2237
- duplicate_key_check_func(key);
2238
- key_builder.header_keys.emplace(key, std::move(headers));
2239
- }
2233
+
2234
+ struct ExtraKeys {
2235
+ absl::optional<std::string> host_key;
2236
+ absl::optional<std::string> service_key;
2237
+ absl::optional<std::string> method_key;
2238
+
2239
+ static const JsonLoaderInterface* JsonLoader(const JsonArgs&) {
2240
+ static const auto* loader =
2241
+ JsonObjectLoader<ExtraKeys>()
2242
+ .OptionalField("host", &ExtraKeys::host_key)
2243
+ .OptionalField("service", &ExtraKeys::service_key)
2244
+ .OptionalField("method", &ExtraKeys::method_key)
2245
+ .Finish();
2246
+ return loader;
2240
2247
  }
2248
+
2249
+ void JsonPostLoad(const Json&, const JsonArgs&, ValidationErrors* errors) {
2250
+ auto check_field = [&](const std::string& field_name,
2251
+ absl::optional<std::string>* struct_field) {
2252
+ ValidationErrors::ScopedField field(errors,
2253
+ absl::StrCat(".", field_name));
2254
+ if (struct_field->has_value() && (*struct_field)->empty()) {
2255
+ errors->AddError("must be non-empty if set");
2256
+ }
2257
+ };
2258
+ check_field("host", &host_key);
2259
+ check_field("service", &service_key);
2260
+ check_field("method", &method_key);
2261
+ }
2262
+ };
2263
+
2264
+ std::vector<Name> names;
2265
+ std::vector<NameMatcher> headers;
2266
+ ExtraKeys extra_keys;
2267
+ std::map<std::string /*key*/, std::string /*value*/> constant_keys;
2268
+
2269
+ static const JsonLoaderInterface* JsonLoader(const JsonArgs&) {
2270
+ static const auto* loader =
2271
+ JsonObjectLoader<GrpcKeyBuilder>()
2272
+ .Field("names", &GrpcKeyBuilder::names)
2273
+ .OptionalField("headers", &GrpcKeyBuilder::headers)
2274
+ .OptionalField("extraKeys", &GrpcKeyBuilder::extra_keys)
2275
+ .OptionalField("constantKeys", &GrpcKeyBuilder::constant_keys)
2276
+ .Finish();
2277
+ return loader;
2241
2278
  }
2242
- // Parse extraKeys.
2243
- const Json::Object* extra_keys = nullptr;
2244
- ParseJsonObjectField(json.object_value(), "extraKeys", &extra_keys,
2245
- &error_list, /*required=*/false);
2246
- if (extra_keys != nullptr) {
2247
- std::vector<grpc_error_handle> extra_keys_errors;
2248
- if (ParseJsonObjectField(*extra_keys, "host", &key_builder.host_key,
2249
- &extra_keys_errors, /*required=*/false) &&
2250
- key_builder.host_key.empty()) {
2251
- extra_keys_errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2252
- "field:host error:must be non-empty"));
2279
+
2280
+ void JsonPostLoad(const Json&, const JsonArgs&, ValidationErrors* errors) {
2281
+ // The names field must be non-empty.
2282
+ {
2283
+ ValidationErrors::ScopedField field(errors, ".names");
2284
+ if (!errors->FieldHasErrors() && names.empty()) {
2285
+ errors->AddError("must be non-empty");
2286
+ }
2253
2287
  }
2254
- if (!key_builder.host_key.empty()) {
2255
- duplicate_key_check_func(key_builder.host_key);
2288
+ // Make sure no key in constantKeys is empty.
2289
+ if (constant_keys.find("") != constant_keys.end()) {
2290
+ ValidationErrors::ScopedField field(errors, ".constantKeys[\"\"]");
2291
+ errors->AddError("key must be non-empty");
2256
2292
  }
2257
- if (ParseJsonObjectField(*extra_keys, "service", &key_builder.service_key,
2258
- &extra_keys_errors, /*required=*/false) &&
2259
- key_builder.service_key.empty()) {
2260
- extra_keys_errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2261
- "field:service error:must be non-empty"));
2293
+ // Check for duplicate keys.
2294
+ std::set<absl::string_view> keys_seen;
2295
+ auto duplicate_key_check_func = [&keys_seen, errors](
2296
+ const std::string& key,
2297
+ const std::string& field_name) {
2298
+ if (key.empty()) return; // Already generated an error about this.
2299
+ ValidationErrors::ScopedField field(errors, field_name);
2300
+ auto it = keys_seen.find(key);
2301
+ if (it != keys_seen.end()) {
2302
+ errors->AddError(absl::StrCat("duplicate key \"", key, "\""));
2303
+ } else {
2304
+ keys_seen.insert(key);
2305
+ }
2306
+ };
2307
+ for (size_t i = 0; i < headers.size(); ++i) {
2308
+ NameMatcher& header = headers[i];
2309
+ duplicate_key_check_func(header.key,
2310
+ absl::StrCat(".headers[", i, "].key"));
2262
2311
  }
2263
- if (!key_builder.service_key.empty()) {
2264
- duplicate_key_check_func(key_builder.service_key);
2312
+ for (const auto& p : constant_keys) {
2313
+ duplicate_key_check_func(
2314
+ p.first, absl::StrCat(".constantKeys[\"", p.first, "\"]"));
2265
2315
  }
2266
- if (ParseJsonObjectField(*extra_keys, "method", &key_builder.method_key,
2267
- &extra_keys_errors, /*required=*/false) &&
2268
- key_builder.method_key.empty()) {
2269
- extra_keys_errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2270
- "field:method error:must be non-empty"));
2316
+ if (extra_keys.host_key.has_value()) {
2317
+ duplicate_key_check_func(*extra_keys.host_key, ".extraKeys.host");
2271
2318
  }
2272
- if (!key_builder.method_key.empty()) {
2273
- duplicate_key_check_func(key_builder.method_key);
2319
+ if (extra_keys.service_key.has_value()) {
2320
+ duplicate_key_check_func(*extra_keys.service_key, ".extraKeys.service");
2274
2321
  }
2275
- if (!extra_keys_errors.empty()) {
2276
- error_list.push_back(
2277
- GRPC_ERROR_CREATE_FROM_VECTOR("field:extraKeys", &extra_keys_errors));
2322
+ if (extra_keys.method_key.has_value()) {
2323
+ duplicate_key_check_func(*extra_keys.method_key, ".extraKeys.method");
2278
2324
  }
2279
2325
  }
2280
- // Parse constantKeys.
2281
- const Json::Object* constant_keys = nullptr;
2282
- ParseJsonObjectField(json.object_value(), "constantKeys", &constant_keys,
2283
- &error_list, /*required=*/false);
2284
- if (constant_keys != nullptr) {
2285
- std::vector<grpc_error_handle> constant_keys_errors;
2286
- for (const auto& p : *constant_keys) {
2287
- const std::string& key = p.first;
2288
- const Json& value = p.second;
2289
- if (key.empty()) {
2290
- constant_keys_errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2291
- "error:keys must be non-empty"));
2326
+ };
2327
+
2328
+ const JsonLoaderInterface* RlsLbConfig::RouteLookupConfig::JsonLoader(
2329
+ const JsonArgs&) {
2330
+ static const auto* loader =
2331
+ JsonObjectLoader<RouteLookupConfig>()
2332
+ // Note: Some fields require manual processing and are handled in
2333
+ // JsonPostLoad() instead.
2334
+ .Field("lookupService", &RouteLookupConfig::lookup_service)
2335
+ .OptionalField("lookupServiceTimeout",
2336
+ &RouteLookupConfig::lookup_service_timeout)
2337
+ .OptionalField("maxAge", &RouteLookupConfig::max_age)
2338
+ .OptionalField("staleAge", &RouteLookupConfig::stale_age)
2339
+ .Field("cacheSizeBytes", &RouteLookupConfig::cache_size_bytes)
2340
+ .OptionalField("defaultTarget", &RouteLookupConfig::default_target)
2341
+ .Finish();
2342
+ return loader;
2343
+ }
2344
+
2345
+ void RlsLbConfig::RouteLookupConfig::JsonPostLoad(const Json& json,
2346
+ const JsonArgs& args,
2347
+ ValidationErrors* errors) {
2348
+ // Parse grpcKeybuilders.
2349
+ auto grpc_keybuilders = LoadJsonObjectField<std::vector<GrpcKeyBuilder>>(
2350
+ json.object_value(), args, "grpcKeybuilders", errors);
2351
+ if (grpc_keybuilders.has_value()) {
2352
+ ValidationErrors::ScopedField field(errors, ".grpcKeybuilders");
2353
+ for (size_t i = 0; i < grpc_keybuilders->size(); ++i) {
2354
+ ValidationErrors::ScopedField field(errors, absl::StrCat("[", i, "]"));
2355
+ auto& grpc_keybuilder = (*grpc_keybuilders)[i];
2356
+ // Construct KeyBuilder.
2357
+ RlsLbConfig::KeyBuilder key_builder;
2358
+ for (const auto& header : grpc_keybuilder.headers) {
2359
+ key_builder.header_keys.emplace(header.key, header.names);
2360
+ }
2361
+ if (grpc_keybuilder.extra_keys.host_key.has_value()) {
2362
+ key_builder.host_key = std::move(*grpc_keybuilder.extra_keys.host_key);
2363
+ }
2364
+ if (grpc_keybuilder.extra_keys.service_key.has_value()) {
2365
+ key_builder.service_key =
2366
+ std::move(*grpc_keybuilder.extra_keys.service_key);
2367
+ }
2368
+ if (grpc_keybuilder.extra_keys.method_key.has_value()) {
2369
+ key_builder.method_key =
2370
+ std::move(*grpc_keybuilder.extra_keys.method_key);
2371
+ }
2372
+ key_builder.constant_keys = std::move(grpc_keybuilder.constant_keys);
2373
+ // Add entries to map.
2374
+ for (const auto& name : grpc_keybuilder.names) {
2375
+ std::string path = absl::StrCat("/", name.service, "/", name.method);
2376
+ bool inserted = key_builder_map.emplace(path, key_builder).second;
2377
+ if (!inserted) {
2378
+ errors->AddError(absl::StrCat("duplicate entry for \"", path, "\""));
2379
+ }
2292
2380
  }
2293
- duplicate_key_check_func(key);
2294
- ExtractJsonString(value, key, &key_builder.constant_keys[key],
2295
- &constant_keys_errors);
2296
- }
2297
- if (!constant_keys_errors.empty()) {
2298
- error_list.push_back(GRPC_ERROR_CREATE_FROM_VECTOR(
2299
- "field:constantKeys", &constant_keys_errors));
2300
- }
2301
- }
2302
- // Insert key_builder into key_builder_map.
2303
- for (const std::string& name : names) {
2304
- bool inserted = key_builder_map->emplace(name, key_builder).second;
2305
- if (!inserted) {
2306
- error_list.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
2307
- absl::StrCat("field:names error:duplicate entry for ", name)));
2308
2381
  }
2309
2382
  }
2310
- return GRPC_ERROR_CREATE_FROM_VECTOR_AND_CPP_STRING(
2311
- absl::StrCat("index:", idx), &error_list);
2312
- }
2313
-
2314
- RlsLbConfig::KeyBuilderMap ParseGrpcKeybuilders(
2315
- const Json::Array& key_builder_list, grpc_error_handle* error) {
2316
- RlsLbConfig::KeyBuilderMap key_builder_map;
2317
- if (key_builder_list.empty()) {
2318
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2319
- "field:grpcKeybuilders error:list is empty");
2320
- return key_builder_map;
2321
- }
2322
- std::vector<grpc_error_handle> error_list;
2323
- size_t idx = 0;
2324
- for (const Json& key_builder : key_builder_list) {
2325
- grpc_error_handle child_error =
2326
- ParseGrpcKeybuilder(idx++, key_builder, &key_builder_map);
2327
- if (child_error != GRPC_ERROR_NONE) error_list.push_back(child_error);
2328
- }
2329
- *error = GRPC_ERROR_CREATE_FROM_VECTOR("field:grpcKeybuilders", &error_list);
2330
- return key_builder_map;
2331
- }
2332
-
2333
- RlsLbConfig::RouteLookupConfig ParseRouteLookupConfig(
2334
- const Json::Object& json, grpc_error_handle* error) {
2335
- std::vector<grpc_error_handle> error_list;
2336
- RlsLbConfig::RouteLookupConfig route_lookup_config;
2337
- // Parse grpcKeybuilders.
2338
- const Json::Array* keybuilder_list = nullptr;
2339
- ParseJsonObjectField(json, "grpcKeybuilders", &keybuilder_list, &error_list);
2340
- if (keybuilder_list != nullptr) {
2341
- grpc_error_handle child_error = GRPC_ERROR_NONE;
2342
- route_lookup_config.key_builder_map =
2343
- ParseGrpcKeybuilders(*keybuilder_list, &child_error);
2344
- if (child_error != GRPC_ERROR_NONE) error_list.push_back(child_error);
2345
- }
2346
- // Parse lookupService.
2347
- if (ParseJsonObjectField(json, "lookupService",
2348
- &route_lookup_config.lookup_service, &error_list)) {
2349
- if (!CoreConfiguration::Get().resolver_registry().IsValidTarget(
2350
- route_lookup_config.lookup_service)) {
2351
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2352
- "field:lookupService error:must be valid gRPC target URI"));
2383
+ // Validate lookupService.
2384
+ {
2385
+ ValidationErrors::ScopedField field(errors, ".lookupService");
2386
+ if (!errors->FieldHasErrors() &&
2387
+ !CoreConfiguration::Get().resolver_registry().IsValidTarget(
2388
+ lookup_service)) {
2389
+ errors->AddError("must be valid gRPC target URI");
2353
2390
  }
2354
2391
  }
2355
- // Parse lookupServiceTimeout.
2356
- route_lookup_config.lookup_service_timeout = kDefaultLookupServiceTimeout;
2357
- ParseJsonObjectFieldAsDuration(json, "lookupServiceTimeout",
2358
- &route_lookup_config.lookup_service_timeout,
2359
- &error_list, /*required=*/false);
2360
- // Parse maxAge.
2361
- route_lookup_config.max_age = kMaxMaxAge;
2362
- bool max_age_set = ParseJsonObjectFieldAsDuration(
2363
- json, "maxAge", &route_lookup_config.max_age, &error_list,
2364
- /*required=*/false);
2365
2392
  // Clamp maxAge to the max allowed value.
2366
- if (route_lookup_config.max_age > kMaxMaxAge) {
2367
- route_lookup_config.max_age = kMaxMaxAge;
2368
- }
2369
- // Parse staleAge.
2370
- route_lookup_config.stale_age = kMaxMaxAge;
2371
- bool stale_age_set = ParseJsonObjectFieldAsDuration(
2372
- json, "staleAge", &route_lookup_config.stale_age, &error_list,
2373
- /*required=*/false);
2393
+ if (max_age > kMaxMaxAge) max_age = kMaxMaxAge;
2374
2394
  // If staleAge is set, then maxAge must also be set.
2375
- if (stale_age_set && !max_age_set) {
2376
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2377
- "field:maxAge error:must be set if staleAge is set"));
2395
+ if (json.object_value().find("staleAge") != json.object_value().end() &&
2396
+ json.object_value().find("maxAge") == json.object_value().end()) {
2397
+ ValidationErrors::ScopedField field(errors, ".maxAge");
2398
+ errors->AddError("must be set if staleAge is set");
2378
2399
  }
2379
2400
  // Ignore staleAge if greater than or equal to maxAge.
2380
- if (route_lookup_config.stale_age >= route_lookup_config.max_age) {
2381
- route_lookup_config.stale_age = route_lookup_config.max_age;
2382
- }
2383
- // Parse cacheSizeBytes.
2384
- ParseJsonObjectField(json, "cacheSizeBytes",
2385
- &route_lookup_config.cache_size_bytes, &error_list);
2386
- if (route_lookup_config.cache_size_bytes <= 0) {
2387
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2388
- "field:cacheSizeBytes error:must be greater than 0"));
2401
+ if (stale_age >= max_age) stale_age = max_age;
2402
+ // Validate cacheSizeBytes.
2403
+ {
2404
+ ValidationErrors::ScopedField field(errors, ".cacheSizeBytes");
2405
+ if (!errors->FieldHasErrors() && cache_size_bytes <= 0) {
2406
+ errors->AddError("must be greater than 0");
2407
+ }
2389
2408
  }
2390
2409
  // Clamp cacheSizeBytes to the max allowed value.
2391
- if (route_lookup_config.cache_size_bytes > kMaxCacheSizeBytes) {
2392
- route_lookup_config.cache_size_bytes = kMaxCacheSizeBytes;
2393
- }
2394
- // Parse defaultTarget.
2395
- if (ParseJsonObjectField(json, "defaultTarget",
2396
- &route_lookup_config.default_target, &error_list,
2397
- /*required=*/false)) {
2398
- if (route_lookup_config.default_target.empty()) {
2399
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2400
- "field:defaultTarget error:must be non-empty if set"));
2410
+ if (cache_size_bytes > kMaxCacheSizeBytes) {
2411
+ cache_size_bytes = kMaxCacheSizeBytes;
2412
+ }
2413
+ // Validate defaultTarget.
2414
+ {
2415
+ ValidationErrors::ScopedField field(errors, ".defaultTarget");
2416
+ if (!errors->FieldHasErrors() &&
2417
+ json.object_value().find("defaultTarget") !=
2418
+ json.object_value().end() &&
2419
+ default_target.empty()) {
2420
+ errors->AddError("must be non-empty if set");
2401
2421
  }
2402
2422
  }
2403
- *error =
2404
- GRPC_ERROR_CREATE_FROM_VECTOR("field:routeLookupConfig", &error_list);
2405
- return route_lookup_config;
2406
- }
2407
-
2408
- grpc_error_handle ValidateChildPolicyList(
2409
- const Json& child_policy_list,
2410
- const std::string& child_policy_config_target_field_name,
2411
- const std::string& default_target, Json* child_policy_config,
2412
- RefCountedPtr<LoadBalancingPolicy::Config>*
2413
- default_child_policy_parsed_config) {
2414
- // Add target to each entry in the config proto.
2415
- *child_policy_config = child_policy_list;
2416
- std::string target =
2417
- default_target.empty() ? kFakeTargetFieldValue : default_target;
2418
- grpc_error_handle error = InsertOrUpdateChildPolicyField(
2419
- child_policy_config_target_field_name, target, child_policy_config);
2420
- if (error != GRPC_ERROR_NONE) return error;
2421
- // Parse the config.
2422
- RefCountedPtr<LoadBalancingPolicy::Config> parsed_config =
2423
- LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
2424
- *child_policy_config, &error);
2425
- if (error != GRPC_ERROR_NONE) return error;
2426
- // Find the chosen config and return it in JSON form.
2427
- // We remove all non-selected configs, and in the selected config, we leave
2428
- // the target field in place, set to the default value. This slightly
2429
- // optimizes what we need to do later when we update a child policy for a
2430
- // given target.
2431
- if (parsed_config != nullptr) {
2432
- for (Json& config : *(child_policy_config->mutable_array())) {
2433
- if (config.object_value().begin()->first == parsed_config->name()) {
2434
- Json save_config = std::move(config);
2435
- child_policy_config->mutable_array()->clear();
2436
- child_policy_config->mutable_array()->push_back(std::move(save_config));
2437
- break;
2438
- }
2423
+ }
2424
+
2425
+ const JsonLoaderInterface* RlsLbConfig::JsonLoader(const JsonArgs&) {
2426
+ static const auto* loader =
2427
+ JsonObjectLoader<RlsLbConfig>()
2428
+ // Note: Some fields require manual processing and are handled in
2429
+ // JsonPostLoad() instead.
2430
+ .Field("routeLookupConfig", &RlsLbConfig::route_lookup_config_)
2431
+ .Field("childPolicyConfigTargetFieldName",
2432
+ &RlsLbConfig::child_policy_config_target_field_name_)
2433
+ .Finish();
2434
+ return loader;
2435
+ }
2436
+
2437
+ void RlsLbConfig::JsonPostLoad(const Json& json, const JsonArgs&,
2438
+ ValidationErrors* errors) {
2439
+ // Parse routeLookupChannelServiceConfig.
2440
+ auto it = json.object_value().find("routeLookupChannelServiceConfig");
2441
+ if (it != json.object_value().end()) {
2442
+ ValidationErrors::ScopedField field(errors,
2443
+ ".routeLookupChannelServiceConfig");
2444
+ // Don't need to save the result here, just need the errors (if any).
2445
+ ServiceConfigImpl::Create(ChannelArgs(), it->second, errors);
2446
+ }
2447
+ // Validate childPolicyConfigTargetFieldName.
2448
+ {
2449
+ ValidationErrors::ScopedField field(errors,
2450
+ ".childPolicyConfigTargetFieldName");
2451
+ if (!errors->FieldHasErrors() &&
2452
+ child_policy_config_target_field_name_.empty()) {
2453
+ errors->AddError("must be non-empty");
2439
2454
  }
2440
2455
  }
2441
- // If default target is set, return the parsed config.
2442
- if (!default_target.empty()) {
2443
- *default_child_policy_parsed_config = std::move(parsed_config);
2456
+ // Parse childPolicy.
2457
+ {
2458
+ ValidationErrors::ScopedField field(errors, ".childPolicy");
2459
+ auto it = json.object_value().find("childPolicy");
2460
+ if (it == json.object_value().end()) {
2461
+ errors->AddError("field not present");
2462
+ } else {
2463
+ // Add target to all child policy configs in the list.
2464
+ child_policy_config_ = it->second;
2465
+ std::string target = route_lookup_config_.default_target.empty()
2466
+ ? kFakeTargetFieldValue
2467
+ : route_lookup_config_.default_target;
2468
+ if (InsertOrUpdateChildPolicyField(child_policy_config_target_field_name_,
2469
+ target, &child_policy_config_,
2470
+ errors)) {
2471
+ // Parse the config.
2472
+ auto parsed_config =
2473
+ CoreConfiguration::Get()
2474
+ .lb_policy_registry()
2475
+ .ParseLoadBalancingConfig(child_policy_config_);
2476
+ if (!parsed_config.ok()) {
2477
+ errors->AddError(parsed_config.status().message());
2478
+ } else {
2479
+ // Find the chosen config and return it in JSON form.
2480
+ // We remove all non-selected configs, and in the selected config,
2481
+ // we leave the target field in place, set to the default value.
2482
+ // This slightly optimizes what we need to do later when we update
2483
+ // a child policy for a given target.
2484
+ for (Json& config : *(child_policy_config_.mutable_array())) {
2485
+ if (config.object_value().begin()->first ==
2486
+ (*parsed_config)->name()) {
2487
+ Json save_config = std::move(config);
2488
+ child_policy_config_.mutable_array()->clear();
2489
+ child_policy_config_.mutable_array()->push_back(
2490
+ std::move(save_config));
2491
+ break;
2492
+ }
2493
+ }
2494
+ // If default target is set, set the default child config.
2495
+ if (!route_lookup_config_.default_target.empty()) {
2496
+ default_child_policy_parsed_config_ = std::move(*parsed_config);
2497
+ }
2498
+ }
2499
+ }
2500
+ }
2444
2501
  }
2445
- return GRPC_ERROR_NONE;
2446
2502
  }
2447
2503
 
2448
2504
  class RlsLbFactory : public LoadBalancingPolicyFactory {
2449
2505
  public:
2450
- const char* name() const override { return kRls; }
2506
+ absl::string_view name() const override { return kRls; }
2451
2507
 
2452
2508
  OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
2453
2509
  LoadBalancingPolicy::Args args) const override {
2454
2510
  return MakeOrphanable<RlsLb>(std::move(args));
2455
2511
  }
2456
2512
 
2457
- RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
2458
- const Json& config, grpc_error_handle* error) const override {
2459
- std::vector<grpc_error_handle> error_list;
2460
- // Parse routeLookupConfig.
2461
- RlsLbConfig::RouteLookupConfig route_lookup_config;
2462
- const Json::Object* route_lookup_config_json = nullptr;
2463
- if (ParseJsonObjectField(config.object_value(), "routeLookupConfig",
2464
- &route_lookup_config_json, &error_list)) {
2465
- grpc_error_handle child_error = GRPC_ERROR_NONE;
2466
- route_lookup_config =
2467
- ParseRouteLookupConfig(*route_lookup_config_json, &child_error);
2468
- if (child_error != GRPC_ERROR_NONE) error_list.push_back(child_error);
2469
- }
2470
- // Parse routeLookupChannelServiceConfig.
2471
- std::string rls_channel_service_config;
2472
- const Json::Object* rls_channel_service_config_json_obj = nullptr;
2473
- if (ParseJsonObjectField(config.object_value(),
2474
- "routeLookupChannelServiceConfig",
2475
- &rls_channel_service_config_json_obj, &error_list,
2476
- /*required=*/false)) {
2477
- grpc_error_handle child_error = GRPC_ERROR_NONE;
2478
- Json rls_channel_service_config_json(
2479
- *rls_channel_service_config_json_obj);
2480
- rls_channel_service_config = rls_channel_service_config_json.Dump();
2481
- auto service_config = MakeRefCounted<ServiceConfigImpl>(
2482
- /*args=*/nullptr, rls_channel_service_config,
2483
- std::move(rls_channel_service_config_json), &child_error);
2484
- if (child_error != GRPC_ERROR_NONE) {
2485
- error_list.push_back(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
2486
- "field:routeLookupChannelServiceConfig", &child_error, 1));
2487
- GRPC_ERROR_UNREF(child_error);
2488
- }
2489
- }
2490
- // Parse childPolicyConfigTargetFieldName.
2491
- std::string child_policy_config_target_field_name;
2492
- if (ParseJsonObjectField(
2493
- config.object_value(), "childPolicyConfigTargetFieldName",
2494
- &child_policy_config_target_field_name, &error_list)) {
2495
- if (child_policy_config_target_field_name.empty()) {
2496
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2497
- "field:childPolicyConfigTargetFieldName error:must be non-empty"));
2498
- }
2499
- }
2500
- // Parse childPolicy.
2501
- Json child_policy_config;
2502
- RefCountedPtr<LoadBalancingPolicy::Config>
2503
- default_child_policy_parsed_config;
2504
- auto it = config.object_value().find("childPolicy");
2505
- if (it == config.object_value().end()) {
2506
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2507
- "field:childPolicy error:does not exist."));
2508
- } else if (it->second.type() != Json::Type::ARRAY) {
2509
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2510
- "field:childPolicy error:type should be ARRAY"));
2511
- } else {
2512
- grpc_error_handle child_error = ValidateChildPolicyList(
2513
- it->second, child_policy_config_target_field_name,
2514
- route_lookup_config.default_target, &child_policy_config,
2515
- &default_child_policy_parsed_config);
2516
- if (child_error != GRPC_ERROR_NONE) {
2517
- error_list.push_back(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
2518
- "field:childPolicy", &child_error, 1));
2519
- GRPC_ERROR_UNREF(child_error);
2520
- }
2521
- }
2522
- // Return result.
2523
- *error = GRPC_ERROR_CREATE_FROM_VECTOR(
2524
- "errors parsing RLS LB policy config", &error_list);
2525
- return MakeRefCounted<RlsLbConfig>(
2526
- std::move(route_lookup_config), std::move(rls_channel_service_config),
2527
- std::move(child_policy_config),
2528
- std::move(child_policy_config_target_field_name),
2529
- std::move(default_child_policy_parsed_config));
2513
+ absl::StatusOr<RefCountedPtr<LoadBalancingPolicy::Config>>
2514
+ ParseLoadBalancingConfig(const Json& json) const override {
2515
+ return LoadRefCountedFromJson<RlsLbConfig>(
2516
+ json, JsonArgs(), "errors validing RLS LB policy config");
2530
2517
  }
2531
2518
  };
2532
2519
 
2533
- bool RlsEnabled() {
2534
- char* value = gpr_getenv("GRPC_EXPERIMENTAL_ENABLE_RLS_LB_POLICY");
2535
- bool parsed_value;
2536
- bool parse_succeeded = gpr_parse_bool_value(value, &parsed_value);
2537
- gpr_free(value);
2538
- return parse_succeeded && parsed_value;
2539
- }
2540
-
2541
2520
  } // namespace
2542
2521
 
2543
- void RlsLbPluginInit() {
2544
- if (!RlsEnabled()) return;
2545
- LoadBalancingPolicyRegistry::Builder::RegisterLoadBalancingPolicyFactory(
2546
- absl::make_unique<RlsLbFactory>());
2522
+ void RegisterRlsLbPolicy(CoreConfiguration::Builder* builder) {
2523
+ builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory(
2524
+ std::make_unique<RlsLbFactory>());
2547
2525
  }
2548
2526
 
2549
- void RlsLbPluginShutdown() {}
2550
-
2551
2527
  } // namespace grpc_core