grpc 1.46.3 → 1.53.1

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 (1803) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +419 -241
  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 -791
  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 +836 -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 +67 -61
  69. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +26 -6
  70. data/src/core/ext/filters/channel_idle/idle_filter_state.h +6 -4
  71. data/src/core/ext/filters/client_channel/backend_metric.cc +19 -12
  72. data/src/core/ext/filters/client_channel/backend_metric.h +21 -11
  73. data/src/core/ext/filters/client_channel/backup_poller.cc +34 -34
  74. data/src/core/ext/filters/client_channel/backup_poller.h +26 -28
  75. data/src/core/ext/filters/client_channel/channel_connectivity.cc +89 -44
  76. data/src/core/ext/filters/client_channel/client_channel.cc +401 -451
  77. data/src/core/ext/filters/client_channel/client_channel.h +68 -26
  78. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +19 -23
  79. data/src/core/ext/filters/client_channel/client_channel_channelz.h +33 -23
  80. data/src/core/ext/filters/client_channel/client_channel_factory.cc +19 -43
  81. data/src/core/ext/filters/client_channel/client_channel_factory.h +11 -11
  82. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +22 -47
  83. data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
  84. data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +33 -27
  85. data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
  86. data/src/core/ext/filters/client_channel/config_selector.h +29 -23
  87. data/src/core/ext/filters/client_channel/connector.h +19 -10
  88. data/src/core/ext/filters/client_channel/dynamic_filters.cc +40 -54
  89. data/src/core/ext/filters/client_channel/dynamic_filters.h +20 -11
  90. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
  91. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +24 -21
  92. data/src/core/ext/filters/client_channel/health/health_check_client.cc +16 -4
  93. data/src/core/ext/filters/client_channel/health/health_check_client.h +5 -3
  94. data/src/core/ext/filters/client_channel/http_proxy.cc +100 -112
  95. data/src/core/ext/filters/client_channel/http_proxy.h +38 -31
  96. data/src/core/ext/filters/client_channel/lb_call_state_internal.h +39 -0
  97. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +8 -5
  98. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +4 -3
  99. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
  100. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +37 -16
  101. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +18 -13
  102. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +71 -131
  103. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +41 -24
  104. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +410 -375
  105. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +26 -27
  106. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +15 -3
  107. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +9 -7
  108. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +18 -20
  109. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +27 -22
  110. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +28 -19
  111. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +26 -25
  112. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +338 -0
  113. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
  114. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric_internal.h +117 -0
  115. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1129 -0
  116. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +94 -0
  117. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +174 -180
  118. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +366 -407
  119. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +491 -405
  120. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +19 -9
  121. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +619 -634
  122. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +261 -234
  123. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +165 -143
  124. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +128 -0
  125. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.h +71 -0
  126. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +972 -0
  127. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +223 -220
  128. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +214 -153
  129. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
  130. data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +19 -15
  131. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +3 -3
  132. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +178 -256
  133. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +199 -210
  134. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +382 -368
  135. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +819 -0
  136. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +67 -0
  137. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +369 -0
  138. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
  139. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +22 -21
  140. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +34 -19
  141. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +531 -163
  142. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +50 -44
  143. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +31 -30
  144. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +89 -84
  145. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +300 -209
  146. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +82 -61
  147. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +18 -18
  148. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +20 -19
  149. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
  150. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +22 -22
  151. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +54 -22
  152. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +21 -34
  153. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +19 -5
  154. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +135 -63
  155. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +136 -68
  156. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +29 -14
  157. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +21 -27
  158. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +368 -305
  159. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +6 -4
  160. data/src/core/ext/filters/client_channel/retry_filter.cc +166 -163
  161. data/src/core/ext/filters/client_channel/retry_filter.h +4 -3
  162. data/src/core/ext/filters/client_channel/retry_service_config.cc +197 -229
  163. data/src/core/ext/filters/client_channel/retry_service_config.h +29 -26
  164. data/src/core/ext/filters/client_channel/retry_throttle.cc +28 -37
  165. data/src/core/ext/filters/client_channel/retry_throttle.h +36 -29
  166. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +34 -17
  167. data/src/core/ext/filters/client_channel/subchannel.cc +332 -384
  168. data/src/core/ext/filters/client_channel/subchannel.h +112 -82
  169. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
  170. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +17 -77
  171. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +41 -47
  172. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +34 -108
  173. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +20 -12
  174. data/src/core/ext/filters/deadline/deadline_filter.cc +94 -76
  175. data/src/core/ext/filters/deadline/deadline_filter.h +14 -12
  176. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +44 -22
  177. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +20 -11
  178. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
  179. data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +34 -13
  180. data/src/core/ext/filters/http/client/http_client_filter.cc +76 -54
  181. data/src/core/ext/filters/http/client/http_client_filter.h +36 -23
  182. data/src/core/ext/filters/http/client_authority_filter.cc +33 -38
  183. data/src/core/ext/filters/http/client_authority_filter.h +27 -24
  184. data/src/core/ext/filters/http/http_filters_plugin.cc +46 -55
  185. data/src/core/ext/filters/http/message_compress/compression_filter.cc +307 -0
  186. data/src/core/ext/filters/http/message_compress/compression_filter.h +139 -0
  187. data/src/core/ext/filters/http/server/http_server_filter.cc +111 -271
  188. data/src/core/ext/filters/http/server/http_server_filter.h +58 -24
  189. data/src/core/ext/filters/message_size/message_size_filter.cc +117 -137
  190. data/src/core/ext/filters/message_size/message_size_filter.h +34 -17
  191. data/src/core/ext/filters/rbac/rbac_filter.cc +29 -16
  192. data/src/core/ext/filters/rbac/rbac_filter.h +11 -3
  193. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +736 -523
  194. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +18 -7
  195. data/src/core/ext/filters/server_config_selector/server_config_selector.h +20 -8
  196. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +28 -12
  197. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +4 -3
  198. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +219 -0
  199. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +66 -0
  200. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +82 -0
  201. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +93 -0
  202. data/src/core/ext/transport/chttp2/alpn/alpn.cc +18 -18
  203. data/src/core/ext/transport/chttp2/alpn/alpn.h +24 -24
  204. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +185 -241
  205. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +38 -30
  206. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +204 -211
  207. data/src/core/ext/transport/chttp2/server/chttp2_server.h +26 -26
  208. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +24 -24
  209. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +35 -34
  210. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +43 -38
  211. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +35 -31
  212. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +801 -1067
  213. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +28 -23
  214. data/src/core/ext/transport/chttp2/transport/context_list.cc +23 -19
  215. data/src/core/ext/transport/chttp2/transport/context_list.h +32 -29
  216. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +251 -0
  217. data/src/core/ext/transport/chttp2/transport/decode_huff.h +971 -0
  218. data/src/core/ext/transport/chttp2/transport/flow_control.cc +350 -300
  219. data/src/core/ext/transport/chttp2/transport/flow_control.h +248 -325
  220. data/src/core/ext/transport/chttp2/transport/frame.h +22 -26
  221. data/src/core/ext/transport/chttp2/transport/frame_data.cc +85 -234
  222. data/src/core/ext/transport/chttp2/transport/frame_data.h +38 -61
  223. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +41 -36
  224. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +24 -22
  225. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +31 -25
  226. data/src/core/ext/transport/chttp2/transport/frame_ping.h +25 -22
  227. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +35 -26
  228. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +24 -21
  229. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +44 -77
  230. data/src/core/ext/transport/chttp2/transport/frame_settings.h +27 -23
  231. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +34 -33
  232. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +24 -21
  233. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +10 -4
  234. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +221 -372
  235. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +338 -158
  236. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +6 -1
  237. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +16 -5
  238. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +516 -751
  239. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +38 -27
  240. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +86 -76
  241. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +79 -49
  242. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +21 -19
  243. data/src/core/ext/transport/chttp2/transport/http2_settings.h +39 -38
  244. data/src/core/ext/transport/chttp2/transport/http_trace.cc +19 -0
  245. data/src/core/ext/transport/chttp2/transport/http_trace.h +24 -0
  246. data/src/core/ext/transport/chttp2/transport/huffsyms.cc +20 -20
  247. data/src/core/ext/transport/chttp2/transport/huffsyms.h +21 -21
  248. data/src/core/ext/transport/chttp2/transport/internal.h +248 -296
  249. data/src/core/ext/transport/chttp2/transport/parsing.cc +363 -132
  250. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +30 -30
  251. data/src/core/ext/transport/chttp2/transport/stream_map.cc +24 -24
  252. data/src/core/ext/transport/chttp2/transport/stream_map.h +34 -33
  253. data/src/core/ext/transport/chttp2/transport/varint.cc +19 -20
  254. data/src/core/ext/transport/chttp2/transport/varint.h +39 -34
  255. data/src/core/ext/transport/chttp2/transport/writing.cc +121 -94
  256. data/src/core/ext/transport/inproc/inproc_plugin.cc +17 -18
  257. data/src/core/ext/transport/inproc/inproc_transport.cc +227 -274
  258. data/src/core/ext/transport/inproc/inproc_transport.h +23 -21
  259. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +5 -5
  260. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +30 -10
  261. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +6 -5
  262. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +33 -8
  263. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +8 -327
  264. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +83 -1723
  265. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +388 -0
  266. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1953 -0
  267. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +2 -2
  268. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +12 -4
  269. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +6 -4
  270. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +33 -4
  271. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +1 -1
  272. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +6 -2
  273. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +1 -1
  274. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +6 -2
  275. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +6 -2
  276. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +12 -4
  277. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +1 -1
  278. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +6 -2
  279. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  280. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -3
  281. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +14 -14
  282. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +90 -30
  283. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +25 -19
  284. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +168 -34
  285. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +3 -3
  286. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +18 -6
  287. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +35 -43
  288. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +195 -116
  289. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +1 -1
  290. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +6 -2
  291. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +1 -1
  292. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +6 -2
  293. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +11 -11
  294. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +84 -28
  295. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +35 -12
  296. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +179 -14
  297. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +1 -1
  298. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +6 -2
  299. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -23
  300. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +156 -48
  301. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +7 -7
  302. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +42 -14
  303. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
  304. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +6 -2
  305. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +1 -1
  306. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +6 -2
  307. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +2 -2
  308. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +12 -4
  309. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +12 -12
  310. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +78 -26
  311. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +23 -20
  312. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +137 -69
  313. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +1 -1
  314. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +6 -2
  315. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +23 -21
  316. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +132 -44
  317. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
  318. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +6 -2
  319. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +2 -2
  320. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +12 -4
  321. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +17 -2
  322. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +67 -2
  323. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
  324. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +6 -2
  325. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +1 -1
  326. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +6 -2
  327. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +3 -3
  328. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +18 -6
  329. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +15 -9
  330. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +73 -18
  331. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +3 -3
  332. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +30 -10
  333. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +1 -1
  334. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +6 -2
  335. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +39 -13
  336. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +194 -15
  337. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +5 -5
  338. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +42 -14
  339. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +5 -3
  340. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +28 -2
  341. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +7 -4
  342. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +36 -4
  343. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +1 -1
  344. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +6 -2
  345. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +6 -6
  346. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +48 -16
  347. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +8 -8
  348. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +54 -18
  349. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +26 -11
  350. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +124 -14
  351. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +19 -15
  352. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +78 -69
  353. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +168 -82
  354. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +887 -166
  355. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +3 -3
  356. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +18 -6
  357. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +34 -15
  358. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +161 -22
  359. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +3 -2
  360. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +15 -2
  361. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +1 -1
  362. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +6 -2
  363. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +2 -2
  364. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +12 -4
  365. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +1 -1
  366. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +6 -2
  367. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +1 -1
  368. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +6 -2
  369. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +47 -0
  370. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +107 -0
  371. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +1 -1
  372. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +6 -2
  373. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +2 -2
  374. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +12 -4
  375. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -0
  376. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -0
  377. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +2 -2
  378. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +12 -4
  379. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +7 -6
  380. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +27 -14
  381. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +1 -1
  382. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +6 -2
  383. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +2 -2
  384. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +30 -10
  385. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +2 -2
  386. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +18 -6
  387. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +11 -4
  388. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +58 -4
  389. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +6 -3
  390. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +29 -2
  391. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c +62 -0
  392. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +179 -0
  393. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +38 -27
  394. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +207 -52
  395. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c +46 -0
  396. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +98 -0
  397. 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
  398. 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
  399. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.c +111 -0
  400. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +444 -0
  401. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +56 -0
  402. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +192 -0
  403. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  404. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +98 -0
  405. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +10 -8
  406. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +66 -14
  407. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +3 -3
  408. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +18 -6
  409. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +13 -11
  410. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +73 -23
  411. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +2 -2
  412. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +12 -4
  413. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  414. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +6 -2
  415. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +133 -16
  416. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +656 -12
  417. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +2 -2
  418. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +12 -4
  419. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +5 -5
  420. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +30 -10
  421. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +1 -1
  422. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +6 -2
  423. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +4 -4
  424. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +24 -8
  425. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.c +47 -0
  426. data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.h +113 -0
  427. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +4 -4
  428. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +24 -8
  429. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +2 -2
  430. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +12 -4
  431. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +1 -1
  432. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +6 -2
  433. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
  434. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +6 -2
  435. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
  436. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +6 -2
  437. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +3 -3
  438. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +18 -6
  439. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.c +43 -0
  440. data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.h +114 -0
  441. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +1 -1
  442. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +12 -4
  443. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +2 -2
  444. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +12 -4
  445. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
  446. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +18 -6
  447. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
  448. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +42 -14
  449. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +5 -5
  450. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +30 -10
  451. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +3 -3
  452. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +18 -6
  453. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +1 -1
  454. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +6 -2
  455. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +12 -4
  456. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +2 -2
  457. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -6
  458. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
  459. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
  460. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +3 -1
  461. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
  462. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +6 -2
  463. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +6 -2
  464. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
  465. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +11 -11
  466. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +66 -22
  467. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +9 -9
  468. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +72 -24
  469. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  470. data/src/core/ext/upb-generated/google/api/http.upb.h +18 -6
  471. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +1 -1
  472. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +6 -2
  473. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  474. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -2
  475. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +44 -43
  476. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +177 -55
  477. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  478. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +6 -2
  479. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  480. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +6 -2
  481. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +2 -2
  482. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +18 -6
  483. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  484. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +6 -2
  485. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +6 -6
  486. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +54 -18
  487. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  488. data/src/core/ext/upb-generated/google/rpc/status.upb.h +6 -2
  489. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +2 -2
  490. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +24 -8
  491. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +6 -2
  492. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +7 -7
  493. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +60 -20
  494. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +1 -1
  495. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +12 -4
  496. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  497. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +12 -4
  498. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +6 -6
  499. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +54 -18
  500. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +2 -2
  501. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +12 -4
  502. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +7 -7
  503. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +42 -14
  504. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  505. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +23 -11
  506. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
  507. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -3
  508. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -3
  509. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
  510. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -3
  511. data/src/core/ext/upb-generated/validate/validate.upb.c +22 -22
  512. data/src/core/ext/upb-generated/validate/validate.upb.h +139 -47
  513. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +3 -3
  514. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +23 -11
  515. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +1 -1
  516. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +7 -3
  517. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +3 -3
  518. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +27 -11
  519. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +1 -1
  520. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +7 -3
  521. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  522. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +6 -2
  523. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.c +47 -0
  524. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.h +107 -0
  525. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +2 -2
  526. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +12 -4
  527. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  528. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +6 -2
  529. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +1 -1
  530. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +6 -2
  531. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  532. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +6 -2
  533. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  534. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +12 -4
  535. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  536. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +6 -2
  537. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +3 -2
  538. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +15 -2
  539. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +46 -0
  540. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +113 -0
  541. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.c +46 -0
  542. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.h +98 -0
  543. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.c +62 -0
  544. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.h +174 -0
  545. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.c +36 -0
  546. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.h +74 -0
  547. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.c +65 -0
  548. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.h +191 -0
  549. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +6 -6
  550. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +54 -18
  551. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.c +127 -0
  552. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.h +474 -0
  553. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +2 -2
  554. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +12 -4
  555. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +1 -1
  556. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +12 -4
  557. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.c +67 -0
  558. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.h +214 -0
  559. data/src/core/ext/upb-generated/xds/type/v3/range.upb.c +64 -0
  560. data/src/core/ext/upb-generated/xds/type/v3/range.upb.h +208 -0
  561. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +1 -2
  562. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +6 -2
  563. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +54 -53
  564. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +67 -274
  565. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +0 -85
  566. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +277 -0
  567. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +125 -0
  568. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +14 -11
  569. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +107 -107
  570. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +199 -187
  571. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +232 -222
  572. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +0 -5
  573. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +95 -75
  574. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +5 -0
  575. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +187 -183
  576. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +81 -75
  577. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +190 -186
  578. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +7 -3
  579. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +5 -0
  580. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +16 -16
  581. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +71 -66
  582. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +164 -137
  583. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  584. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +16 -12
  585. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +39 -31
  586. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +140 -129
  587. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  588. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +82 -74
  589. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +2 -2
  590. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +740 -667
  591. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +20 -0
  592. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +150 -139
  593. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +5 -0
  594. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +16 -14
  595. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +48 -0
  596. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
  597. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +16 -12
  598. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +20 -18
  599. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
  600. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +53 -42
  601. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +60 -0
  602. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +40 -0
  603. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +485 -467
  604. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +50 -0
  605. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +35 -0
  606. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
  607. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +149 -145
  608. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +156 -84
  609. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +35 -0
  610. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -113
  611. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.c +48 -0
  612. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.h +35 -0
  613. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -28
  614. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.c +40 -0
  615. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.h +40 -0
  616. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  617. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
  618. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +10 -9
  619. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +92 -90
  620. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.c +45 -0
  621. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.h +35 -0
  622. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.c +43 -0
  623. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.h +35 -0
  624. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.c +51 -0
  625. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.h +40 -0
  626. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.c +36 -0
  627. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.h +35 -0
  628. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.c +55 -0
  629. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.h +40 -0
  630. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +9 -9
  631. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.c +71 -0
  632. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.h +60 -0
  633. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.c +60 -0
  634. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.h +40 -0
  635. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.c +36 -0
  636. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.h +45 -0
  637. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +4 -7
  638. data/src/core/ext/xds/certificate_provider_store.cc +69 -5
  639. data/src/core/ext/xds/certificate_provider_store.h +22 -5
  640. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +17 -10
  641. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +12 -4
  642. data/src/core/ext/xds/upb_utils.h +3 -25
  643. data/src/core/ext/xds/xds_api.cc +90 -196
  644. data/src/core/ext/xds/xds_api.h +41 -39
  645. data/src/core/ext/xds/xds_bootstrap.cc +5 -537
  646. data/src/core/ext/xds/xds_bootstrap.h +41 -96
  647. data/src/core/ext/xds/xds_bootstrap_grpc.cc +362 -0
  648. data/src/core/ext/xds/xds_bootstrap_grpc.h +184 -0
  649. data/src/core/ext/xds/xds_certificate_provider.cc +35 -26
  650. data/src/core/ext/xds/xds_certificate_provider.h +29 -5
  651. data/src/core/ext/xds/xds_channel_args.h +3 -3
  652. data/src/core/ext/xds/xds_channel_stack_modifier.cc +17 -7
  653. data/src/core/ext/xds/xds_channel_stack_modifier.h +16 -4
  654. data/src/core/ext/xds/xds_client.cc +849 -1316
  655. data/src/core/ext/xds/xds_client.h +57 -61
  656. data/src/core/ext/xds/xds_client_grpc.cc +235 -0
  657. data/src/core/ext/xds/xds_client_grpc.h +79 -0
  658. data/src/core/ext/xds/xds_client_stats.cc +24 -25
  659. data/src/core/ext/xds/xds_client_stats.h +26 -24
  660. data/src/core/ext/xds/xds_cluster.cc +505 -247
  661. data/src/core/ext/xds/xds_cluster.h +69 -40
  662. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +67 -77
  663. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +47 -29
  664. data/src/core/ext/xds/xds_common_types.cc +238 -123
  665. data/src/core/ext/xds/xds_common_types.h +29 -16
  666. data/src/core/ext/xds/xds_endpoint.cc +265 -162
  667. data/src/core/ext/xds/xds_endpoint.h +19 -15
  668. data/src/core/ext/xds/xds_health_status.cc +80 -0
  669. data/src/core/ext/xds/xds_health_status.h +109 -0
  670. data/src/core/ext/xds/xds_http_fault_filter.cc +67 -58
  671. data/src/core/ext/xds/xds_http_fault_filter.h +19 -25
  672. data/src/core/ext/xds/xds_http_filters.cc +70 -71
  673. data/src/core/ext/xds/xds_http_filters.h +73 -25
  674. data/src/core/ext/xds/xds_http_rbac_filter.cc +168 -225
  675. data/src/core/ext/xds/xds_http_rbac_filter.h +22 -18
  676. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +218 -0
  677. data/src/core/ext/xds/xds_http_stateful_session_filter.h +58 -0
  678. data/src/core/ext/xds/xds_lb_policy_registry.cc +334 -0
  679. data/src/core/ext/xds/xds_lb_policy_registry.h +71 -0
  680. data/src/core/ext/xds/xds_listener.cc +573 -481
  681. data/src/core/ext/xds/xds_listener.h +57 -51
  682. data/src/core/ext/xds/xds_resource_type.h +28 -22
  683. data/src/core/ext/xds/xds_resource_type_impl.h +18 -17
  684. data/src/core/ext/xds/xds_route_config.cc +592 -570
  685. data/src/core/ext/xds/xds_route_config.h +74 -40
  686. data/src/core/ext/xds/xds_routing.cc +21 -7
  687. data/src/core/ext/xds/xds_routing.h +17 -12
  688. data/src/core/ext/xds/xds_server_config_fetcher.cc +227 -178
  689. data/src/core/ext/xds/xds_transport.h +86 -0
  690. data/src/core/ext/xds/xds_transport_grpc.cc +356 -0
  691. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  692. data/src/core/lib/address_utils/parse_address.cc +52 -52
  693. data/src/core/lib/address_utils/parse_address.h +46 -42
  694. data/src/core/lib/address_utils/sockaddr_utils.cc +90 -54
  695. data/src/core/lib/address_utils/sockaddr_utils.h +45 -40
  696. data/src/core/lib/avl/avl.h +57 -33
  697. data/src/core/lib/backoff/backoff.cc +19 -21
  698. data/src/core/lib/backoff/backoff.h +21 -21
  699. data/src/core/lib/backoff/random_early_detection.cc +31 -0
  700. data/src/core/lib/backoff/random_early_detection.h +59 -0
  701. data/src/core/lib/channel/call_finalization.h +6 -4
  702. data/src/core/lib/channel/call_tracer.h +23 -8
  703. data/src/core/lib/channel/channel_args.cc +149 -61
  704. data/src/core/lib/channel/channel_args.h +308 -104
  705. data/src/core/lib/channel/channel_args_preconditioning.cc +4 -3
  706. data/src/core/lib/channel/channel_args_preconditioning.h +6 -5
  707. data/src/core/lib/channel/channel_fwd.h +26 -0
  708. data/src/core/lib/channel/channel_stack.cc +92 -52
  709. data/src/core/lib/channel/channel_stack.h +184 -135
  710. data/src/core/lib/channel/channel_stack_builder.cc +26 -39
  711. data/src/core/lib/channel/channel_stack_builder.h +33 -40
  712. data/src/core/lib/channel/channel_stack_builder_impl.cc +84 -60
  713. data/src/core/lib/channel/channel_stack_builder_impl.h +9 -9
  714. data/src/core/lib/channel/channel_trace.cc +29 -36
  715. data/src/core/lib/channel/channel_trace.h +27 -24
  716. data/src/core/lib/channel/channelz.cc +50 -65
  717. data/src/core/lib/channel/channelz.h +50 -33
  718. data/src/core/lib/channel/channelz_registry.cc +28 -36
  719. data/src/core/lib/channel/channelz_registry.h +31 -30
  720. data/src/core/lib/channel/connected_channel.cc +1267 -78
  721. data/src/core/lib/channel/connected_channel.h +21 -23
  722. data/src/core/lib/channel/context.h +25 -21
  723. data/src/core/lib/channel/promise_based_filter.cc +1896 -377
  724. data/src/core/lib/channel/promise_based_filter.h +592 -92
  725. data/src/core/lib/channel/status_util.cc +64 -17
  726. data/src/core/lib/channel/status_util.h +38 -24
  727. data/src/core/lib/compression/compression.cc +24 -19
  728. data/src/core/lib/compression/compression_internal.cc +88 -63
  729. data/src/core/lib/compression/compression_internal.h +28 -27
  730. data/src/core/lib/compression/message_compress.cc +28 -26
  731. data/src/core/lib/compression/message_compress.h +28 -29
  732. data/src/core/lib/config/core_configuration.cc +8 -1
  733. data/src/core/lib/config/core_configuration.h +86 -39
  734. data/src/core/lib/debug/event_log.cc +88 -0
  735. data/src/core/lib/debug/event_log.h +81 -0
  736. data/src/core/lib/debug/histogram_view.cc +69 -0
  737. data/src/core/lib/debug/histogram_view.h +37 -0
  738. data/src/core/lib/debug/stats.cc +48 -152
  739. data/src/core/lib/debug/stats.h +50 -57
  740. data/src/core/lib/debug/stats_data.cc +302 -645
  741. data/src/core/lib/debug/stats_data.h +293 -545
  742. data/src/core/lib/debug/trace.cc +18 -20
  743. data/src/core/lib/debug/trace.h +27 -48
  744. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +16 -17
  745. data/src/core/lib/event_engine/channel_args_endpoint_config.h +16 -9
  746. data/src/core/lib/event_engine/common_closures.h +71 -0
  747. data/src/core/lib/event_engine/default_event_engine.cc +99 -0
  748. data/src/core/lib/event_engine/default_event_engine.h +73 -0
  749. data/src/core/lib/event_engine/default_event_engine_factory.cc +24 -3
  750. data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine_factory.h} +6 -9
  751. data/src/core/lib/event_engine/event_engine.cc +3 -30
  752. data/src/core/lib/event_engine/executor/executor.h +38 -0
  753. data/src/core/lib/event_engine/forkable.cc +106 -0
  754. data/src/core/lib/event_engine/forkable.h +61 -0
  755. data/src/core/lib/event_engine/handle_containers.h +74 -0
  756. data/src/core/lib/event_engine/memory_allocator.cc +11 -3
  757. data/src/core/lib/event_engine/poller.h +62 -0
  758. data/src/core/lib/event_engine/posix.h +158 -0
  759. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +642 -0
  760. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +139 -0
  761. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +899 -0
  762. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
  763. data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
  764. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
  765. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +33 -0
  766. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
  767. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
  768. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +265 -0
  769. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
  770. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1305 -0
  771. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +717 -0
  772. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +640 -0
  773. data/src/core/lib/event_engine/posix_engine/posix_engine.h +259 -0
  774. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
  775. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +289 -0
  776. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +279 -0
  777. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +379 -0
  778. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +91 -0
  779. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +853 -0
  780. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +316 -0
  781. data/src/core/lib/event_engine/posix_engine/timer.cc +311 -0
  782. data/src/core/lib/event_engine/posix_engine/timer.h +194 -0
  783. data/src/core/lib/event_engine/posix_engine/timer_heap.cc +107 -0
  784. data/src/core/lib/event_engine/posix_engine/timer_heap.h +56 -0
  785. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +173 -0
  786. data/src/core/lib/event_engine/posix_engine/timer_manager.h +114 -0
  787. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +332 -0
  788. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +185 -0
  789. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +127 -0
  790. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
  791. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +150 -0
  792. data/src/core/lib/{iomgr/event_engine/promise.h → event_engine/posix_engine/wakeup_fd_pipe.h} +19 -25
  793. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
  794. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
  795. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
  796. data/src/core/lib/event_engine/resolved_address.cc +23 -2
  797. data/src/core/lib/{iomgr/event_engine → event_engine}/resolved_address_internal.h +5 -8
  798. data/src/core/lib/event_engine/shim.cc +56 -0
  799. data/src/core/lib/event_engine/shim.h +33 -0
  800. data/src/core/lib/event_engine/slice.cc +103 -0
  801. data/src/core/lib/event_engine/slice_buffer.cc +50 -0
  802. data/src/core/lib/event_engine/tcp_socket_utils.cc +389 -0
  803. data/src/core/lib/event_engine/tcp_socket_utils.h +90 -0
  804. data/src/core/lib/event_engine/thread_local.cc +29 -0
  805. data/src/core/lib/event_engine/thread_local.h +32 -0
  806. data/src/core/lib/event_engine/thread_pool.cc +253 -0
  807. data/src/core/lib/event_engine/thread_pool.h +141 -0
  808. data/src/core/lib/event_engine/time_util.cc +30 -0
  809. data/src/core/lib/event_engine/time_util.h +32 -0
  810. data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.cc} +9 -17
  811. data/src/core/lib/event_engine/trace.h +43 -0
  812. data/src/core/lib/event_engine/utils.cc +44 -0
  813. data/src/core/lib/event_engine/utils.h +44 -0
  814. data/src/core/lib/event_engine/windows/iocp.cc +140 -0
  815. data/src/core/lib/event_engine/windows/iocp.h +69 -0
  816. data/src/core/lib/event_engine/windows/win_socket.cc +219 -0
  817. data/src/core/lib/event_engine/windows/win_socket.h +129 -0
  818. data/src/core/lib/event_engine/windows/windows_endpoint.cc +331 -0
  819. data/src/core/lib/event_engine/windows/windows_endpoint.h +103 -0
  820. data/src/core/lib/event_engine/windows/windows_engine.cc +388 -0
  821. data/src/core/lib/event_engine/windows/windows_engine.h +163 -0
  822. data/src/core/lib/experiments/config.cc +161 -0
  823. data/src/core/lib/experiments/config.h +53 -0
  824. data/src/core/lib/experiments/experiments.cc +81 -0
  825. data/src/core/lib/experiments/experiments.h +117 -0
  826. data/src/core/lib/gpr/alloc.cc +19 -25
  827. data/src/core/lib/gpr/alloc.h +20 -20
  828. data/src/core/lib/gpr/atm.cc +17 -17
  829. data/src/core/lib/gpr/cpu_iphone.cc +24 -24
  830. data/src/core/lib/gpr/cpu_linux.cc +28 -23
  831. data/src/core/lib/gpr/cpu_posix.cc +23 -22
  832. data/src/core/lib/gpr/cpu_windows.cc +20 -18
  833. data/src/core/lib/gpr/log.cc +30 -17
  834. data/src/core/lib/gpr/log_android.cc +22 -20
  835. data/src/core/lib/gpr/log_linux.cc +24 -24
  836. data/src/core/lib/gpr/log_posix.cc +20 -19
  837. data/src/core/lib/gpr/log_windows.cc +25 -25
  838. data/src/core/lib/gpr/spinlock.h +20 -20
  839. data/src/core/lib/gpr/string.cc +25 -24
  840. data/src/core/lib/gpr/string.h +61 -61
  841. data/src/core/lib/gpr/string_posix.cc +24 -24
  842. data/src/core/lib/gpr/string_util_windows.cc +25 -52
  843. data/src/core/lib/gpr/string_windows.cc +24 -24
  844. data/src/core/lib/gpr/sync.cc +25 -25
  845. data/src/core/lib/gpr/sync_abseil.cc +36 -40
  846. data/src/core/lib/gpr/sync_posix.cc +22 -34
  847. data/src/core/lib/gpr/sync_windows.cc +29 -27
  848. data/src/core/lib/gpr/time.cc +34 -30
  849. data/src/core/lib/gpr/time_posix.cc +41 -45
  850. data/src/core/lib/gpr/time_precise.cc +22 -22
  851. data/src/core/lib/gpr/time_precise.h +21 -22
  852. data/src/core/lib/gpr/time_windows.cc +35 -29
  853. data/src/core/lib/gpr/tmpfile.h +24 -24
  854. data/src/core/lib/gpr/tmpfile_msys.cc +21 -20
  855. data/src/core/lib/gpr/tmpfile_posix.cc +22 -20
  856. data/src/core/lib/gpr/tmpfile_windows.cc +28 -29
  857. data/src/core/lib/gpr/useful.h +83 -30
  858. data/src/core/lib/gpr/wrap_memcpy.cc +23 -23
  859. data/src/core/lib/gprpp/atomic_utils.h +20 -20
  860. data/src/core/lib/gprpp/bitset.h +35 -17
  861. data/src/core/lib/gprpp/chunked_vector.h +7 -3
  862. data/src/core/lib/gprpp/construct_destruct.h +4 -3
  863. data/src/core/lib/gprpp/cpp_impl_of.h +3 -3
  864. data/src/core/{ext/xds/xds_resource_type.cc → lib/gprpp/crash.cc} +12 -12
  865. data/src/core/lib/gprpp/crash.h +34 -0
  866. data/src/core/lib/gprpp/debug_location.h +60 -31
  867. data/src/core/lib/gprpp/dual_ref_counted.h +4 -7
  868. data/src/core/lib/gprpp/env.h +53 -0
  869. data/src/core/lib/gprpp/env_linux.cc +80 -0
  870. 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
  871. data/src/core/lib/gprpp/env_windows.cc +56 -0
  872. data/src/core/lib/gprpp/examine_stack.cc +17 -17
  873. data/src/core/lib/gprpp/examine_stack.h +21 -22
  874. data/src/core/lib/gprpp/fork.cc +58 -53
  875. data/src/core/lib/gprpp/fork.h +29 -35
  876. data/src/core/lib/gprpp/global_config.h +22 -24
  877. data/src/core/lib/gprpp/global_config_custom.h +20 -20
  878. data/src/core/lib/gprpp/global_config_env.cc +28 -25
  879. data/src/core/lib/gprpp/global_config_env.h +29 -27
  880. data/src/core/lib/gprpp/global_config_generic.h +21 -25
  881. data/src/core/lib/gprpp/host_port.cc +30 -26
  882. data/src/core/lib/gprpp/host_port.h +32 -31
  883. data/src/core/lib/gprpp/load_file.cc +75 -0
  884. data/src/core/lib/gprpp/load_file.h +33 -0
  885. data/src/core/lib/gprpp/manual_constructor.h +21 -89
  886. data/src/core/lib/gprpp/match.h +5 -3
  887. data/src/core/lib/gprpp/memory.h +22 -26
  888. data/src/core/lib/gprpp/mpscq.cc +17 -17
  889. data/src/core/lib/gprpp/mpscq.h +21 -21
  890. data/src/core/lib/gprpp/no_destruct.h +95 -0
  891. data/src/core/lib/gprpp/notification.h +67 -0
  892. data/src/core/lib/gprpp/orphanable.h +22 -25
  893. data/src/core/lib/gprpp/overload.h +3 -3
  894. data/src/core/lib/gprpp/packed_table.h +40 -0
  895. data/src/core/lib/gprpp/per_cpu.h +46 -0
  896. data/src/core/lib/gprpp/ref_counted.h +22 -24
  897. data/src/core/lib/gprpp/ref_counted_ptr.h +42 -55
  898. data/src/core/lib/gprpp/single_set_ptr.h +3 -3
  899. data/src/core/lib/gprpp/sorted_pack.h +98 -0
  900. data/src/core/lib/gprpp/stat.h +3 -5
  901. data/src/core/lib/gprpp/stat_posix.cc +10 -4
  902. data/src/core/lib/gprpp/stat_windows.cc +4 -2
  903. data/src/core/lib/gprpp/status_helper.cc +55 -35
  904. data/src/core/lib/gprpp/status_helper.h +13 -5
  905. data/src/core/lib/gprpp/strerror.cc +43 -0
  906. data/src/core/lib/gprpp/strerror.h +29 -0
  907. data/src/core/lib/gprpp/sync.h +26 -24
  908. data/src/core/lib/gprpp/table.h +22 -4
  909. data/src/core/lib/gprpp/tchar.cc +49 -0
  910. data/src/core/lib/gprpp/tchar.h +33 -0
  911. data/src/core/lib/gprpp/thd.h +25 -28
  912. data/src/core/lib/gprpp/thd_posix.cc +33 -32
  913. data/src/core/lib/gprpp/thd_windows.cc +28 -26
  914. data/src/core/lib/gprpp/time.cc +52 -9
  915. data/src/core/lib/gprpp/time.h +78 -4
  916. data/src/core/lib/gprpp/time_averaged_stats.cc +60 -0
  917. data/src/core/lib/gprpp/time_averaged_stats.h +79 -0
  918. data/src/core/lib/gprpp/time_util.cc +4 -0
  919. data/src/core/lib/gprpp/time_util.h +3 -3
  920. data/src/core/lib/gprpp/unique_type_name.h +104 -0
  921. data/src/core/lib/gprpp/validation_errors.cc +61 -0
  922. data/src/core/lib/gprpp/validation_errors.h +127 -0
  923. data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
  924. data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -28
  925. data/src/core/lib/handshaker/proxy_mapper.h +53 -0
  926. data/src/core/lib/handshaker/proxy_mapper_registry.cc +71 -0
  927. data/src/core/lib/handshaker/proxy_mapper_registry.h +75 -0
  928. data/src/core/lib/http/format_request.cc +53 -22
  929. data/src/core/lib/http/format_request.h +23 -21
  930. data/src/core/lib/http/httpcli.cc +139 -141
  931. data/src/core/lib/http/httpcli.h +86 -38
  932. data/src/core/lib/http/httpcli_security_connector.cc +50 -42
  933. data/src/core/lib/http/httpcli_ssl_credentials.h +6 -4
  934. data/src/core/lib/http/parser.cc +78 -90
  935. data/src/core/lib/http/parser.h +38 -35
  936. data/src/core/lib/iomgr/block_annotate.h +23 -23
  937. data/src/core/lib/iomgr/buffer_list.cc +156 -136
  938. data/src/core/lib/iomgr/buffer_list.h +123 -101
  939. data/src/core/lib/iomgr/call_combiner.cc +32 -64
  940. data/src/core/lib/iomgr/call_combiner.h +24 -25
  941. data/src/core/lib/iomgr/cfstream_handle.cc +33 -36
  942. data/src/core/lib/iomgr/cfstream_handle.h +25 -25
  943. data/src/core/lib/iomgr/{event_engine/pollset.h → closure.cc} +9 -7
  944. data/src/core/lib/iomgr/closure.h +95 -58
  945. data/src/core/lib/iomgr/combiner.cc +20 -39
  946. data/src/core/lib/iomgr/combiner.h +20 -20
  947. data/src/core/lib/iomgr/dualstack_socket_posix.cc +21 -21
  948. data/src/core/lib/iomgr/dynamic_annotations.h +22 -22
  949. data/src/core/lib/iomgr/endpoint.cc +21 -21
  950. data/src/core/lib/iomgr/endpoint.h +53 -51
  951. data/src/core/lib/iomgr/endpoint_cfstream.cc +51 -47
  952. data/src/core/lib/iomgr/endpoint_cfstream.h +32 -32
  953. data/src/core/lib/iomgr/endpoint_pair.h +22 -22
  954. data/src/core/lib/iomgr/endpoint_pair_posix.cc +36 -29
  955. data/src/core/lib/iomgr/endpoint_pair_windows.cc +31 -22
  956. data/src/core/lib/iomgr/error.cc +51 -834
  957. data/src/core/lib/iomgr/error.h +45 -317
  958. data/src/core/lib/iomgr/error_cfstream.cc +18 -23
  959. data/src/core/lib/iomgr/error_cfstream.h +21 -21
  960. data/src/core/lib/iomgr/ev_apple.cc +21 -21
  961. data/src/core/lib/iomgr/ev_apple.h +21 -21
  962. data/src/core/lib/iomgr/ev_epoll1_linux.cc +263 -248
  963. data/src/core/lib/iomgr/ev_epoll1_linux.h +21 -21
  964. data/src/core/lib/iomgr/ev_poll_posix.cc +296 -271
  965. data/src/core/lib/iomgr/ev_poll_posix.h +22 -22
  966. data/src/core/lib/iomgr/ev_posix.cc +88 -121
  967. data/src/core/lib/iomgr/ev_posix.h +93 -87
  968. data/src/core/lib/iomgr/ev_windows.cc +18 -18
  969. data/src/core/lib/iomgr/{event_engine → event_engine_shims}/closure.cc +15 -30
  970. data/src/core/lib/iomgr/{event_engine → event_engine_shims}/closure.h +10 -13
  971. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +430 -0
  972. data/src/core/lib/iomgr/event_engine_shims/endpoint.h +43 -0
  973. data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +91 -0
  974. data/src/core/lib/iomgr/event_engine_shims/tcp_client.h +44 -0
  975. data/src/core/lib/iomgr/exec_ctx.cc +34 -56
  976. data/src/core/lib/iomgr/exec_ctx.h +152 -177
  977. data/src/core/lib/iomgr/executor.cc +21 -31
  978. data/src/core/lib/iomgr/executor.h +27 -30
  979. data/src/core/lib/iomgr/fork_posix.cc +30 -27
  980. data/src/core/lib/iomgr/fork_windows.cc +21 -21
  981. data/src/core/lib/iomgr/gethostname.h +20 -20
  982. data/src/core/lib/iomgr/gethostname_fallback.cc +17 -17
  983. data/src/core/lib/iomgr/gethostname_host_name_max.cc +17 -17
  984. data/src/core/lib/iomgr/gethostname_sysconf.cc +17 -17
  985. data/src/core/lib/iomgr/grpc_if_nametoindex.h +22 -22
  986. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +20 -19
  987. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +20 -19
  988. data/src/core/lib/iomgr/internal_errqueue.cc +41 -48
  989. data/src/core/lib/iomgr/internal_errqueue.h +84 -89
  990. data/src/core/lib/iomgr/iocp_windows.cc +23 -23
  991. data/src/core/lib/iomgr/iocp_windows.h +21 -21
  992. data/src/core/lib/iomgr/iomgr.cc +25 -20
  993. data/src/core/lib/iomgr/iomgr.h +35 -35
  994. data/src/core/lib/iomgr/iomgr_fwd.h +26 -0
  995. data/src/core/lib/iomgr/iomgr_internal.cc +17 -17
  996. data/src/core/lib/iomgr/iomgr_internal.h +28 -28
  997. data/src/core/lib/iomgr/iomgr_posix.cc +21 -20
  998. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +21 -19
  999. data/src/core/lib/iomgr/iomgr_windows.cc +24 -22
  1000. data/src/core/lib/iomgr/load_file.cc +24 -27
  1001. data/src/core/lib/iomgr/load_file.h +22 -22
  1002. data/src/core/lib/iomgr/lockfree_event.cc +114 -131
  1003. data/src/core/lib/iomgr/lockfree_event.h +23 -23
  1004. data/src/core/lib/iomgr/nameser.h +86 -86
  1005. data/src/core/lib/iomgr/polling_entity.cc +25 -21
  1006. data/src/core/lib/iomgr/polling_entity.h +29 -29
  1007. data/src/core/lib/iomgr/pollset.cc +17 -17
  1008. data/src/core/lib/iomgr/pollset.h +55 -55
  1009. data/src/core/lib/iomgr/pollset_set.cc +17 -17
  1010. data/src/core/lib/iomgr/pollset_set.h +26 -28
  1011. data/src/core/lib/iomgr/pollset_set_windows.cc +18 -18
  1012. data/src/core/lib/iomgr/pollset_set_windows.h +20 -20
  1013. data/src/core/lib/iomgr/pollset_windows.cc +32 -31
  1014. data/src/core/lib/iomgr/pollset_windows.h +24 -24
  1015. data/src/core/lib/iomgr/port.h +59 -37
  1016. data/src/core/lib/iomgr/python_util.h +24 -24
  1017. data/src/core/lib/iomgr/resolve_address.cc +34 -20
  1018. data/src/core/lib/iomgr/resolve_address.h +73 -43
  1019. data/src/core/lib/iomgr/resolve_address_impl.h +7 -7
  1020. data/src/core/lib/iomgr/resolve_address_posix.cc +81 -62
  1021. data/src/core/lib/iomgr/resolve_address_posix.h +26 -10
  1022. data/src/core/lib/iomgr/resolve_address_windows.cc +64 -38
  1023. data/src/core/lib/iomgr/resolve_address_windows.h +26 -10
  1024. data/src/core/lib/iomgr/resolved_address.h +3 -3
  1025. data/src/core/lib/iomgr/sockaddr.h +25 -26
  1026. data/src/core/lib/iomgr/sockaddr_posix.h +23 -21
  1027. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +20 -18
  1028. data/src/core/lib/iomgr/sockaddr_windows.h +23 -21
  1029. data/src/core/lib/iomgr/socket_factory_posix.cc +18 -18
  1030. data/src/core/lib/iomgr/socket_factory_posix.h +32 -32
  1031. data/src/core/lib/iomgr/socket_mutator.cc +19 -18
  1032. data/src/core/lib/iomgr/socket_mutator.h +39 -39
  1033. data/src/core/lib/iomgr/socket_utils.h +27 -27
  1034. data/src/core/lib/iomgr/socket_utils_common_posix.cc +82 -101
  1035. data/src/core/lib/iomgr/socket_utils_linux.cc +18 -17
  1036. data/src/core/lib/iomgr/socket_utils_posix.cc +103 -19
  1037. data/src/core/lib/iomgr/socket_utils_posix.h +176 -84
  1038. data/src/core/lib/iomgr/socket_utils_windows.cc +20 -19
  1039. data/src/core/lib/iomgr/socket_windows.cc +37 -36
  1040. data/src/core/lib/iomgr/socket_windows.h +59 -61
  1041. data/src/core/lib/iomgr/systemd_utils.cc +116 -0
  1042. data/src/core/lib/iomgr/systemd_utils.h +33 -0
  1043. data/src/core/lib/iomgr/tcp_client.cc +28 -24
  1044. data/src/core/lib/iomgr/tcp_client.h +49 -38
  1045. data/src/core/lib/iomgr/tcp_client_cfstream.cc +46 -35
  1046. data/src/core/lib/iomgr/tcp_client_posix.cc +243 -105
  1047. data/src/core/lib/iomgr/tcp_client_posix.h +55 -52
  1048. data/src/core/lib/iomgr/tcp_client_windows.cc +73 -53
  1049. data/src/core/lib/iomgr/tcp_posix.cc +505 -362
  1050. data/src/core/lib/iomgr/tcp_posix.h +32 -30
  1051. data/src/core/lib/iomgr/tcp_server.cc +33 -24
  1052. data/src/core/lib/iomgr/tcp_server.h +78 -69
  1053. data/src/core/lib/iomgr/tcp_server_posix.cc +381 -133
  1054. data/src/core/lib/iomgr/tcp_server_utils_posix.h +68 -55
  1055. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +120 -82
  1056. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +46 -43
  1057. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +19 -19
  1058. data/src/core/lib/iomgr/tcp_server_windows.cc +116 -118
  1059. data/src/core/lib/iomgr/tcp_windows.cc +116 -98
  1060. data/src/core/lib/iomgr/tcp_windows.h +34 -35
  1061. data/src/core/lib/iomgr/timer.cc +17 -17
  1062. data/src/core/lib/iomgr/timer.h +68 -68
  1063. data/src/core/lib/iomgr/timer_generic.cc +125 -134
  1064. data/src/core/lib/iomgr/timer_generic.h +21 -21
  1065. data/src/core/lib/iomgr/timer_heap.cc +25 -25
  1066. data/src/core/lib/iomgr/timer_heap.h +22 -22
  1067. data/src/core/lib/iomgr/timer_manager.cc +31 -31
  1068. data/src/core/lib/iomgr/timer_manager.h +27 -27
  1069. data/src/core/lib/iomgr/unix_sockets_posix.cc +20 -21
  1070. data/src/core/lib/iomgr/unix_sockets_posix.h +21 -21
  1071. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +19 -17
  1072. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +23 -23
  1073. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +23 -23
  1074. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +29 -26
  1075. data/src/core/lib/iomgr/wakeup_fd_pipe.h +20 -20
  1076. data/src/core/lib/iomgr/wakeup_fd_posix.cc +33 -30
  1077. data/src/core/lib/iomgr/wakeup_fd_posix.h +52 -54
  1078. data/src/core/lib/json/json.h +23 -27
  1079. data/src/core/{ext/filters/http/message_compress/message_decompress_filter.h → lib/json/json_args.h} +13 -10
  1080. data/src/core/lib/json/json_channel_args.h +42 -0
  1081. data/src/core/lib/json/json_object_loader.cc +217 -0
  1082. data/src/core/lib/json/json_object_loader.h +634 -0
  1083. data/src/core/lib/json/json_reader.cc +123 -90
  1084. data/src/core/lib/json/json_util.cc +14 -34
  1085. data/src/core/lib/json/json_util.h +17 -8
  1086. data/src/core/lib/json/json_writer.cc +62 -57
  1087. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +30 -60
  1088. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +47 -62
  1089. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  1090. data/src/core/lib/load_balancing/lb_policy_registry.cc +142 -0
  1091. data/src/core/lib/load_balancing/lb_policy_registry.h +82 -0
  1092. data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +57 -52
  1093. data/src/core/lib/matchers/matchers.cc +12 -7
  1094. data/src/core/lib/matchers/matchers.h +5 -3
  1095. data/src/core/lib/promise/activity.cc +23 -8
  1096. data/src/core/lib/promise/activity.h +116 -58
  1097. data/src/core/lib/promise/arena_promise.h +115 -72
  1098. data/src/core/lib/promise/context.h +18 -11
  1099. data/src/core/lib/promise/detail/basic_join.h +197 -0
  1100. data/src/core/lib/promise/detail/basic_seq.h +28 -33
  1101. data/src/core/lib/promise/detail/promise_factory.h +61 -14
  1102. data/src/core/lib/promise/detail/promise_like.h +3 -3
  1103. data/src/core/lib/promise/detail/status.h +31 -3
  1104. data/src/core/lib/promise/detail/switch.h +21 -21
  1105. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +23 -15
  1106. data/src/core/lib/promise/if.h +195 -0
  1107. data/src/core/lib/promise/interceptor_list.h +308 -0
  1108. data/src/core/lib/promise/intra_activity_waiter.h +9 -3
  1109. data/src/core/lib/promise/latch.h +109 -22
  1110. data/src/core/lib/promise/loop.h +13 -9
  1111. data/src/core/lib/promise/map.h +4 -6
  1112. data/src/core/lib/promise/pipe.h +608 -0
  1113. data/src/core/lib/promise/poll.h +129 -11
  1114. data/src/core/lib/promise/promise.h +5 -5
  1115. data/src/core/lib/promise/race.h +6 -10
  1116. data/src/core/lib/promise/seq.h +32 -14
  1117. data/src/core/lib/promise/sleep.cc +58 -42
  1118. data/src/core/lib/promise/sleep.h +44 -26
  1119. data/src/core/lib/promise/trace.cc +20 -0
  1120. data/src/core/lib/promise/trace.h +24 -0
  1121. data/src/core/lib/promise/try_join.h +82 -0
  1122. data/src/core/lib/promise/try_seq.h +41 -23
  1123. data/src/core/lib/resolver/resolver.cc +17 -59
  1124. data/src/core/lib/resolver/resolver.h +21 -18
  1125. data/src/core/lib/resolver/resolver_factory.h +11 -10
  1126. data/src/core/lib/resolver/resolver_registry.cc +17 -9
  1127. data/src/core/lib/resolver/resolver_registry.h +15 -5
  1128. data/src/core/lib/resolver/server_address.cc +46 -34
  1129. data/src/core/lib/resolver/server_address.h +36 -35
  1130. data/src/core/lib/resource_quota/api.cc +23 -2
  1131. data/src/core/lib/resource_quota/api.h +13 -4
  1132. data/src/core/lib/resource_quota/arena.cc +85 -27
  1133. data/src/core/lib/resource_quota/arena.h +197 -25
  1134. data/src/core/lib/resource_quota/memory_quota.cc +322 -101
  1135. data/src/core/lib/resource_quota/memory_quota.h +191 -56
  1136. data/src/core/lib/resource_quota/periodic_update.cc +78 -0
  1137. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  1138. data/src/core/lib/resource_quota/resource_quota.h +12 -4
  1139. data/src/core/lib/resource_quota/thread_quota.cc +2 -0
  1140. data/src/core/lib/resource_quota/thread_quota.h +7 -3
  1141. data/src/core/lib/resource_quota/trace.h +3 -3
  1142. data/src/core/lib/security/authorization/authorization_engine.h +3 -3
  1143. data/src/core/lib/security/authorization/authorization_policy_provider.h +10 -3
  1144. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +3 -0
  1145. data/src/core/lib/security/authorization/evaluate_args.cc +17 -8
  1146. data/src/core/lib/security/authorization/evaluate_args.h +9 -6
  1147. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +5 -1
  1148. data/src/core/lib/security/authorization/grpc_authorization_engine.h +10 -3
  1149. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +19 -3
  1150. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +16 -5
  1151. data/src/core/lib/security/authorization/matchers.cc +44 -30
  1152. data/src/core/lib/security/authorization/matchers.h +10 -3
  1153. data/src/core/lib/security/authorization/rbac_policy.cc +6 -2
  1154. data/src/core/lib/security/authorization/rbac_policy.h +10 -3
  1155. data/src/core/{ext/xds → lib/security/certificate_provider}/certificate_provider_factory.h +9 -4
  1156. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +60 -0
  1157. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +70 -0
  1158. data/src/core/lib/security/context/security_context.cc +27 -25
  1159. data/src/core/lib/security/context/security_context.h +56 -34
  1160. data/src/core/lib/security/credentials/alts/alts_credentials.cc +31 -24
  1161. data/src/core/lib/security/credentials/alts/alts_credentials.h +63 -59
  1162. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +19 -19
  1163. data/src/core/lib/security/credentials/alts/check_gcp_environment.h +43 -43
  1164. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +17 -17
  1165. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +18 -17
  1166. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +18 -17
  1167. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +20 -22
  1168. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +18 -18
  1169. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +38 -39
  1170. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +19 -22
  1171. data/src/core/lib/security/credentials/call_creds_util.cc +10 -0
  1172. data/src/core/lib/security/credentials/call_creds_util.h +4 -3
  1173. data/src/core/lib/security/credentials/channel_creds_registry.h +10 -4
  1174. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +13 -3
  1175. data/src/core/lib/security/credentials/composite/composite_credentials.cc +34 -34
  1176. data/src/core/lib/security/credentials/composite/composite_credentials.h +45 -33
  1177. data/src/core/lib/security/credentials/credentials.cc +23 -26
  1178. data/src/core/lib/security/credentials/credentials.h +79 -65
  1179. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +202 -74
  1180. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +21 -3
  1181. data/src/core/lib/security/credentials/external/aws_request_signer.cc +14 -3
  1182. data/src/core/lib/security/credentials/external/aws_request_signer.h +3 -3
  1183. data/src/core/lib/security/credentials/external/external_account_credentials.cc +86 -68
  1184. data/src/core/lib/security/credentials/external/external_account_credentials.h +14 -3
  1185. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +29 -26
  1186. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +9 -3
  1187. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +44 -31
  1188. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +13 -3
  1189. data/src/core/lib/security/credentials/fake/fake_credentials.cc +43 -39
  1190. data/src/core/lib/security/credentials/fake/fake_credentials.h +51 -44
  1191. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +23 -25
  1192. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +146 -114
  1193. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +33 -27
  1194. data/src/core/lib/security/credentials/iam/iam_credentials.cc +31 -21
  1195. data/src/core/lib/security/credentials/iam/iam_credentials.h +33 -23
  1196. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +15 -5
  1197. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +14 -10
  1198. data/src/core/lib/security/credentials/jwt/json_token.cc +40 -29
  1199. data/src/core/lib/security/credentials/jwt/json_token.h +36 -36
  1200. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +32 -29
  1201. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +37 -23
  1202. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +113 -89
  1203. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +49 -47
  1204. data/src/core/lib/security/credentials/local/local_credentials.cc +32 -26
  1205. data/src/core/lib/security/credentials/local/local_credentials.h +34 -28
  1206. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +95 -87
  1207. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +46 -25
  1208. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +35 -31
  1209. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +48 -24
  1210. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +44 -42
  1211. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +39 -27
  1212. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +22 -30
  1213. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +16 -17
  1214. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +65 -48
  1215. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +27 -16
  1216. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +36 -4
  1217. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +37 -14
  1218. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +22 -23
  1219. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +3 -3
  1220. data/src/core/lib/security/credentials/tls/tls_credentials.cc +46 -44
  1221. data/src/core/lib/security/credentials/tls/tls_credentials.h +30 -27
  1222. data/src/core/lib/security/credentials/tls/tls_utils.cc +5 -1
  1223. data/src/core/lib/security/credentials/tls/tls_utils.h +4 -4
  1224. data/src/core/lib/security/credentials/xds/xds_credentials.cc +33 -35
  1225. data/src/core/lib/security/credentials/xds/xds_credentials.h +24 -10
  1226. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +60 -54
  1227. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +49 -47
  1228. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +75 -79
  1229. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +25 -26
  1230. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +15 -6
  1231. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +26 -15
  1232. data/src/core/lib/security/security_connector/load_system_roots.h +20 -20
  1233. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +22 -20
  1234. data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +43 -38
  1235. data/src/core/lib/security/security_connector/load_system_roots_supported.h +45 -0
  1236. data/src/core/lib/security/security_connector/local/local_security_connector.cc +64 -47
  1237. data/src/core/lib/security/security_connector/local/local_security_connector.h +49 -46
  1238. data/src/core/lib/security/security_connector/security_connector.cc +37 -35
  1239. data/src/core/lib/security/security_connector/security_connector.h +58 -45
  1240. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +55 -46
  1241. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +44 -43
  1242. data/src/core/lib/security/security_connector/ssl_utils.cc +47 -39
  1243. data/src/core/lib/security/security_connector/ssl_utils.h +45 -42
  1244. data/src/core/lib/security/security_connector/ssl_utils_config.cc +22 -22
  1245. data/src/core/lib/security/security_connector/ssl_utils_config.h +21 -22
  1246. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +58 -56
  1247. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +48 -28
  1248. data/src/core/lib/security/transport/auth_filters.h +53 -24
  1249. data/src/core/lib/security/transport/client_auth_filter.cc +57 -40
  1250. data/src/core/lib/security/transport/secure_endpoint.cc +130 -75
  1251. data/src/core/lib/security/transport/secure_endpoint.h +28 -27
  1252. data/src/core/lib/security/transport/security_handshaker.cc +144 -114
  1253. data/src/core/lib/security/transport/security_handshaker.h +28 -23
  1254. data/src/core/lib/security/transport/server_auth_filter.cc +157 -266
  1255. data/src/core/lib/security/transport/tsi_error.cc +23 -20
  1256. data/src/core/lib/security/transport/tsi_error.h +20 -20
  1257. data/src/core/lib/security/util/json_util.cc +24 -24
  1258. data/src/core/lib/security/util/json_util.h +21 -23
  1259. data/src/core/lib/service_config/service_config.h +19 -12
  1260. data/src/core/lib/service_config/service_config_call_data.h +15 -5
  1261. data/src/core/lib/service_config/service_config_impl.cc +111 -150
  1262. data/src/core/lib/service_config/service_config_impl.h +27 -27
  1263. data/src/core/lib/service_config/service_config_parser.cc +16 -28
  1264. data/src/core/lib/service_config/service_config_parser.h +18 -19
  1265. data/src/core/lib/slice/b64.cc +26 -26
  1266. data/src/core/lib/slice/b64.h +34 -32
  1267. data/src/core/lib/slice/percent_encoding.cc +24 -30
  1268. data/src/core/lib/slice/percent_encoding.h +28 -34
  1269. data/src/core/lib/slice/slice.cc +59 -46
  1270. data/src/core/lib/slice/slice.h +64 -20
  1271. data/src/core/lib/slice/slice_buffer.cc +136 -76
  1272. data/src/core/lib/slice/slice_buffer.h +168 -0
  1273. data/src/core/lib/slice/slice_internal.h +38 -45
  1274. data/src/core/lib/slice/slice_refcount.cc +3 -18
  1275. data/src/core/lib/slice/slice_refcount.h +53 -19
  1276. data/src/core/lib/slice/slice_string_helpers.cc +17 -33
  1277. data/src/core/lib/slice/slice_string_helpers.h +23 -30
  1278. data/src/core/lib/surface/api_trace.cc +17 -17
  1279. data/src/core/lib/surface/api_trace.h +25 -25
  1280. data/src/core/lib/surface/builtins.cc +7 -2
  1281. data/src/core/lib/surface/builtins.h +3 -3
  1282. data/src/core/lib/surface/byte_buffer.cc +26 -21
  1283. data/src/core/lib/surface/byte_buffer_reader.cc +24 -24
  1284. data/src/core/lib/surface/call.cc +2232 -483
  1285. data/src/core/lib/surface/call.h +135 -42
  1286. data/src/core/lib/surface/call_details.cc +22 -23
  1287. data/src/core/lib/surface/call_log_batch.cc +25 -18
  1288. data/src/core/lib/surface/call_test_only.h +34 -31
  1289. data/src/core/lib/surface/call_trace.cc +123 -0
  1290. data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/surface/call_trace.h} +12 -10
  1291. data/src/core/lib/surface/channel.cc +217 -284
  1292. data/src/core/lib/surface/channel.h +137 -90
  1293. data/src/core/lib/surface/channel_init.cc +17 -17
  1294. data/src/core/lib/surface/channel_init.h +22 -20
  1295. data/src/core/lib/surface/channel_ping.cc +26 -20
  1296. data/src/core/lib/surface/channel_stack_type.cc +21 -19
  1297. data/src/core/lib/surface/channel_stack_type.h +22 -22
  1298. data/src/core/lib/surface/completion_queue.cc +200 -222
  1299. data/src/core/lib/surface/completion_queue.h +42 -40
  1300. data/src/core/lib/surface/completion_queue_factory.cc +34 -28
  1301. data/src/core/lib/surface/completion_queue_factory.h +21 -23
  1302. data/src/core/lib/surface/event_string.cc +19 -24
  1303. data/src/core/lib/surface/event_string.h +21 -21
  1304. data/src/core/lib/surface/init.cc +57 -114
  1305. data/src/core/lib/surface/init.h +20 -28
  1306. data/src/core/lib/surface/init_internally.cc +25 -0
  1307. data/src/core/lib/surface/init_internally.h +37 -0
  1308. data/src/core/lib/surface/lame_client.cc +87 -130
  1309. data/src/core/lib/surface/lame_client.h +62 -24
  1310. data/src/core/lib/surface/metadata_array.cc +18 -17
  1311. data/src/core/lib/surface/server.cc +406 -174
  1312. data/src/core/lib/surface/server.h +56 -24
  1313. data/src/core/lib/surface/validate_metadata.cc +64 -77
  1314. data/src/core/lib/surface/validate_metadata.h +33 -21
  1315. data/src/core/lib/surface/version.cc +21 -21
  1316. data/src/core/lib/transport/bdp_estimator.cc +19 -19
  1317. data/src/core/lib/transport/bdp_estimator.h +22 -24
  1318. data/src/core/lib/transport/connectivity_state.cc +24 -23
  1319. data/src/core/lib/transport/connectivity_state.h +24 -25
  1320. data/src/core/lib/transport/error_utils.cc +57 -79
  1321. data/src/core/lib/transport/error_utils.h +29 -25
  1322. data/src/core/lib/{channel → transport}/handshaker.cc +75 -58
  1323. data/src/core/lib/{channel → transport}/handshaker.h +59 -48
  1324. data/src/core/lib/transport/handshaker_factory.h +74 -0
  1325. data/src/core/lib/transport/handshaker_registry.cc +61 -0
  1326. data/src/core/lib/transport/handshaker_registry.h +69 -0
  1327. data/src/core/lib/transport/http2_errors.h +22 -22
  1328. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +78 -65
  1329. data/src/core/lib/transport/http_connect_handshaker.h +42 -0
  1330. data/src/core/lib/transport/metadata_batch.cc +305 -0
  1331. data/src/core/lib/transport/metadata_batch.h +405 -304
  1332. data/src/core/lib/transport/parsed_metadata.cc +2 -4
  1333. data/src/core/lib/transport/parsed_metadata.h +33 -14
  1334. data/src/core/lib/transport/pid_controller.cc +20 -20
  1335. data/src/core/lib/transport/pid_controller.h +27 -27
  1336. data/src/core/lib/transport/status_conversion.cc +23 -23
  1337. data/src/core/lib/transport/status_conversion.h +24 -24
  1338. data/src/core/lib/transport/tcp_connect_handshaker.cc +245 -0
  1339. data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
  1340. data/src/core/lib/transport/timeout_encoding.cc +24 -28
  1341. data/src/core/lib/transport/timeout_encoding.h +25 -21
  1342. data/src/core/lib/transport/transport.cc +97 -57
  1343. data/src/core/lib/transport/transport.h +243 -213
  1344. data/src/core/lib/transport/transport_fwd.h +20 -0
  1345. data/src/core/lib/transport/transport_impl.h +55 -45
  1346. data/src/core/lib/transport/transport_op_string.cc +40 -39
  1347. data/src/core/lib/uri/uri_parser.cc +12 -4
  1348. data/src/core/lib/uri/uri_parser.h +3 -5
  1349. data/src/core/plugin_registry/grpc_plugin_registry.cc +60 -69
  1350. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +20 -39
  1351. data/src/core/tsi/alts/crypt/aes_gcm.cc +20 -20
  1352. data/src/core/tsi/alts/crypt/gsec.cc +26 -26
  1353. data/src/core/tsi/alts/crypt/gsec.h +336 -336
  1354. data/src/core/tsi/alts/frame_protector/alts_counter.cc +23 -23
  1355. data/src/core/tsi/alts/frame_protector/alts_counter.h +68 -68
  1356. data/src/core/tsi/alts/frame_protector/alts_crypter.cc +19 -19
  1357. data/src/core/tsi/alts/frame_protector/alts_crypter.h +209 -209
  1358. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +72 -71
  1359. data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +40 -40
  1360. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +18 -18
  1361. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +82 -83
  1362. data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +22 -22
  1363. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +22 -22
  1364. data/src/core/tsi/alts/frame_protector/frame_handler.cc +26 -25
  1365. data/src/core/tsi/alts/frame_protector/frame_handler.h +169 -169
  1366. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +117 -97
  1367. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +104 -104
  1368. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +18 -17
  1369. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +43 -44
  1370. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +51 -43
  1371. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +60 -60
  1372. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +24 -24
  1373. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +21 -20
  1374. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +38 -38
  1375. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +19 -19
  1376. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +105 -104
  1377. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +45 -44
  1378. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +40 -41
  1379. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +38 -36
  1380. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +35 -36
  1381. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +67 -68
  1382. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +32 -31
  1383. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +55 -56
  1384. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +54 -53
  1385. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +141 -142
  1386. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +67 -58
  1387. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +43 -44
  1388. data/src/core/tsi/fake_transport_security.cc +146 -110
  1389. data/src/core/tsi/fake_transport_security.h +36 -30
  1390. data/src/core/tsi/local_transport_security.cc +43 -38
  1391. data/src/core/tsi/local_transport_security.h +33 -33
  1392. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +9 -4
  1393. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +3 -3
  1394. data/src/core/tsi/ssl/session_cache/ssl_session.h +23 -21
  1395. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +21 -19
  1396. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +18 -17
  1397. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +31 -22
  1398. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +27 -20
  1399. data/src/core/tsi/ssl_transport_security.cc +299 -370
  1400. data/src/core/tsi/ssl_transport_security.h +206 -203
  1401. data/src/core/tsi/ssl_transport_security_utils.cc +250 -0
  1402. data/src/core/tsi/ssl_transport_security_utils.h +147 -0
  1403. data/src/core/tsi/ssl_types.h +27 -27
  1404. data/src/core/tsi/transport_security.cc +44 -32
  1405. data/src/core/tsi/transport_security.h +49 -48
  1406. data/src/core/tsi/transport_security_grpc.cc +23 -22
  1407. data/src/core/tsi/transport_security_grpc.h +44 -41
  1408. data/src/core/tsi/transport_security_interface.h +344 -332
  1409. data/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.clang +2 -0
  1410. data/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.gcc +7 -0
  1411. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.clang +2 -0
  1412. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.gcc +7 -0
  1413. data/src/ruby/ext/grpc/ext-export.gcc +1 -1
  1414. data/src/ruby/ext/grpc/extconf.rb +98 -20
  1415. data/src/ruby/ext/grpc/rb_call.c +1 -0
  1416. data/src/ruby/ext/grpc/rb_channel.c +1 -0
  1417. data/src/ruby/ext/grpc/rb_channel_args.c +1 -0
  1418. data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
  1419. data/src/ruby/ext/grpc/rb_grpc.c +1 -0
  1420. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +38 -38
  1421. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +60 -60
  1422. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  1423. data/src/ruby/lib/grpc/errors.rb +1 -1
  1424. data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
  1425. data/src/ruby/lib/grpc/version.rb +1 -1
  1426. data/src/ruby/pb/generate_proto_ruby.sh +0 -6
  1427. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
  1428. data/src/ruby/spec/channel_spec.rb +5 -43
  1429. data/src/ruby/spec/client_server_spec.rb +20 -8
  1430. data/src/ruby/spec/generic/active_call_spec.rb +12 -3
  1431. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  1432. data/src/ruby/spec/generic/server_interceptors_spec.rb +1 -1
  1433. data/src/ruby/spec/user_agent_spec.rb +1 -1
  1434. data/third_party/abseil-cpp/absl/algorithm/container.h +57 -58
  1435. data/third_party/abseil-cpp/absl/base/attributes.h +88 -41
  1436. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  1437. data/third_party/abseil-cpp/absl/base/config.h +221 -39
  1438. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  1439. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +52 -2
  1440. data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +55 -0
  1441. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +5 -4
  1442. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  1443. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
  1444. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +3 -3
  1445. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  1446. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +2 -2
  1447. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +1 -1
  1448. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  1449. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +39 -28
  1450. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +36 -36
  1451. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +6 -3
  1452. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +10 -6
  1453. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  1454. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +4 -1
  1455. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  1456. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  1457. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +14 -11
  1458. data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +9 -0
  1459. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  1460. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -0
  1461. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
  1462. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -40
  1463. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +62 -0
  1464. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  1465. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  1466. data/third_party/abseil-cpp/absl/base/macros.h +4 -21
  1467. data/third_party/abseil-cpp/absl/base/optimization.h +76 -16
  1468. data/third_party/abseil-cpp/absl/base/options.h +1 -7
  1469. data/third_party/abseil-cpp/absl/base/policy_checks.h +15 -13
  1470. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  1471. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  1472. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  1473. data/third_party/abseil-cpp/absl/container/fixed_array.h +9 -5
  1474. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  1475. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +503 -0
  1476. data/third_party/abseil-cpp/absl/container/inlined_vector.h +84 -25
  1477. data/third_party/abseil-cpp/absl/container/internal/common.h +9 -8
  1478. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +132 -0
  1479. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +23 -29
  1480. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +4 -55
  1481. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +116 -23
  1482. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +40 -54
  1483. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +165 -66
  1484. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +159 -4
  1485. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1121 -470
  1486. data/third_party/abseil-cpp/absl/crc/crc32c.cc +99 -0
  1487. data/third_party/abseil-cpp/absl/crc/crc32c.h +183 -0
  1488. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +256 -0
  1489. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +57 -0
  1490. data/third_party/abseil-cpp/absl/crc/internal/crc.cc +468 -0
  1491. data/third_party/abseil-cpp/absl/crc/internal/crc.h +91 -0
  1492. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +269 -0
  1493. data/third_party/abseil-cpp/absl/crc/internal/crc32c.h +39 -0
  1494. data/third_party/abseil-cpp/absl/crc/internal/crc32c_inline.h +72 -0
  1495. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.cc +130 -0
  1496. data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.h +159 -0
  1497. data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +179 -0
  1498. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy.h +119 -0
  1499. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_fallback.cc +75 -0
  1500. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_64.cc +434 -0
  1501. data/third_party/abseil-cpp/absl/crc/internal/crc_non_temporal_memcpy.cc +93 -0
  1502. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +725 -0
  1503. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +79 -0
  1504. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +180 -0
  1505. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  1506. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +67 -38
  1507. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +1 -1
  1508. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +16 -13
  1509. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
  1510. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +19 -12
  1511. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  1512. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
  1513. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +1 -1
  1514. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  1515. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +59 -102
  1516. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +5 -4
  1517. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +41 -11
  1518. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +18 -4
  1519. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
  1520. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +3 -2
  1521. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +164 -101
  1522. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +7 -6
  1523. data/third_party/abseil-cpp/absl/functional/any_invocable.h +316 -0
  1524. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  1525. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
  1526. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +878 -0
  1527. data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
  1528. data/third_party/abseil-cpp/absl/hash/internal/city.cc +10 -10
  1529. data/third_party/abseil-cpp/absl/hash/internal/hash.h +235 -26
  1530. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +3 -14
  1531. data/third_party/abseil-cpp/absl/memory/memory.h +26 -447
  1532. data/third_party/abseil-cpp/absl/meta/type_traits.h +104 -12
  1533. data/third_party/abseil-cpp/absl/numeric/bits.h +1 -1
  1534. data/third_party/abseil-cpp/absl/numeric/int128.cc +14 -10
  1535. data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
  1536. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +33 -10
  1537. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
  1538. data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
  1539. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
  1540. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +4 -2
  1541. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
  1542. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
  1543. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +3 -24
  1544. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +9 -9
  1545. data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
  1546. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
  1547. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
  1548. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
  1549. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +2 -2
  1550. data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
  1551. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
  1552. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
  1553. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
  1554. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
  1555. data/third_party/abseil-cpp/absl/random/random.h +6 -6
  1556. data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
  1557. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
  1558. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  1559. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
  1560. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  1561. data/third_party/abseil-cpp/absl/status/status.cc +193 -14
  1562. data/third_party/abseil-cpp/absl/status/status.h +24 -14
  1563. data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
  1564. data/third_party/abseil-cpp/absl/strings/ascii.cc +5 -5
  1565. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  1566. data/third_party/abseil-cpp/absl/strings/charconv.cc +534 -96
  1567. data/third_party/abseil-cpp/absl/strings/cord.cc +257 -924
  1568. data/third_party/abseil-cpp/absl/strings/cord.h +268 -156
  1569. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  1570. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  1571. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  1572. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +575 -0
  1573. data/third_party/abseil-cpp/absl/strings/escaping.cc +73 -62
  1574. data/third_party/abseil-cpp/absl/strings/escaping.h +24 -19
  1575. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +14 -12
  1576. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +4 -4
  1577. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
  1578. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  1579. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
  1580. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +441 -150
  1581. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +157 -53
  1582. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +70 -73
  1583. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +8 -6
  1584. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
  1585. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
  1586. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
  1587. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
  1588. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +56 -0
  1589. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +103 -0
  1590. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
  1591. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
  1592. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +7 -15
  1593. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +3 -3
  1594. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +19 -43
  1595. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +7 -7
  1596. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +5 -4
  1597. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
  1598. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +93 -0
  1599. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +34 -0
  1600. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +18 -15
  1601. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +7 -9
  1602. data/third_party/abseil-cpp/absl/strings/internal/has_absl_stringify.h +55 -0
  1603. data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +9 -6
  1604. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +14 -7
  1605. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +35 -10
  1606. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +113 -46
  1607. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +127 -30
  1608. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -2
  1609. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +42 -10
  1610. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +56 -289
  1611. data/third_party/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +351 -0
  1612. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
  1613. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +9 -4
  1614. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +215 -181
  1615. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  1616. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +10 -209
  1617. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -103
  1618. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  1619. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -1
  1620. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  1621. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.cc +28 -0
  1622. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +57 -0
  1623. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  1624. data/third_party/abseil-cpp/absl/strings/numbers.cc +42 -39
  1625. data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
  1626. data/third_party/abseil-cpp/absl/strings/str_cat.cc +9 -6
  1627. data/third_party/abseil-cpp/absl/strings/str_cat.h +70 -16
  1628. data/third_party/abseil-cpp/absl/strings/str_format.h +71 -9
  1629. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  1630. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  1631. data/third_party/abseil-cpp/absl/strings/string_view.cc +8 -19
  1632. data/third_party/abseil-cpp/absl/strings/string_view.h +6 -12
  1633. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  1634. data/third_party/abseil-cpp/absl/strings/substitute.cc +8 -6
  1635. data/third_party/abseil-cpp/absl/strings/substitute.h +55 -21
  1636. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  1637. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  1638. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +20 -17
  1639. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +37 -31
  1640. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +22 -8
  1641. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  1642. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  1643. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
  1644. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  1645. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +172 -88
  1646. data/third_party/abseil-cpp/absl/synchronization/mutex.h +102 -55
  1647. data/third_party/abseil-cpp/absl/synchronization/notification.cc +0 -1
  1648. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -3
  1649. data/third_party/abseil-cpp/absl/time/civil_time.cc +26 -0
  1650. data/third_party/abseil-cpp/absl/time/civil_time.h +25 -0
  1651. data/third_party/abseil-cpp/absl/time/clock.cc +17 -11
  1652. data/third_party/abseil-cpp/absl/time/duration.cc +12 -11
  1653. data/third_party/abseil-cpp/absl/time/format.cc +2 -1
  1654. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  1655. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1 -1
  1656. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +26 -5
  1657. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +7 -6
  1658. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +36 -35
  1659. data/third_party/abseil-cpp/absl/time/time.cc +2 -2
  1660. data/third_party/abseil-cpp/absl/time/time.h +268 -169
  1661. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  1662. data/third_party/abseil-cpp/absl/types/internal/span.h +30 -19
  1663. data/third_party/abseil-cpp/absl/types/internal/variant.h +28 -40
  1664. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  1665. data/third_party/abseil-cpp/absl/types/span.h +31 -8
  1666. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +1 -1
  1667. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +1 -2
  1668. data/third_party/re2/re2/bitstate.cc +3 -3
  1669. data/third_party/re2/re2/dfa.cc +13 -13
  1670. data/third_party/re2/re2/nfa.cc +4 -4
  1671. data/third_party/re2/re2/onepass.cc +2 -2
  1672. data/third_party/re2/re2/prefilter_tree.cc +27 -59
  1673. data/third_party/re2/re2/prefilter_tree.h +3 -2
  1674. data/third_party/re2/re2/prog.cc +11 -2
  1675. data/third_party/re2/re2/prog.h +17 -5
  1676. data/third_party/re2/re2/re2.cc +6 -11
  1677. data/third_party/re2/re2/re2.h +1 -1
  1678. data/third_party/re2/re2/regexp.cc +1 -2
  1679. data/third_party/re2/re2/stringpiece.h +10 -7
  1680. data/third_party/re2/re2/unicode_casefold.cc +25 -11
  1681. data/third_party/re2/re2/unicode_groups.cc +319 -151
  1682. data/third_party/re2/re2/walker-inl.h +3 -2
  1683. data/third_party/re2/util/mutex.h +4 -4
  1684. data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
  1685. data/third_party/upb/upb/arena.c +277 -0
  1686. data/third_party/upb/upb/arena.h +225 -0
  1687. data/third_party/upb/upb/array.c +114 -0
  1688. data/third_party/upb/upb/array.h +83 -0
  1689. data/third_party/upb/upb/collections.h +36 -0
  1690. data/third_party/upb/upb/decode.c +161 -65
  1691. data/third_party/upb/upb/decode.h +1 -0
  1692. data/third_party/upb/upb/decode_fast.c +1 -1
  1693. data/third_party/upb/upb/def.c +10 -2
  1694. data/third_party/upb/upb/def.h +8 -1
  1695. data/third_party/upb/upb/def.hpp +7 -4
  1696. data/third_party/upb/upb/encode.c +29 -20
  1697. data/third_party/upb/upb/encode.h +16 -6
  1698. data/third_party/upb/upb/extension_registry.c +93 -0
  1699. data/third_party/upb/upb/extension_registry.h +84 -0
  1700. data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +5 -5
  1701. data/third_party/upb/upb/internal/table.h +385 -0
  1702. data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +3 -3
  1703. data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
  1704. data/third_party/upb/upb/json_decode.c +1512 -0
  1705. data/third_party/upb/upb/json_decode.h +47 -0
  1706. data/third_party/upb/upb/json_encode.c +7 -3
  1707. data/third_party/upb/upb/json_encode.h +6 -3
  1708. data/third_party/upb/upb/map.c +108 -0
  1709. data/third_party/upb/upb/map.h +117 -0
  1710. data/third_party/upb/upb/message_value.h +66 -0
  1711. data/third_party/upb/upb/mini_table.c +1147 -0
  1712. data/third_party/upb/upb/mini_table.h +189 -0
  1713. data/third_party/upb/upb/mini_table.hpp +112 -0
  1714. data/third_party/upb/upb/msg.c +2 -62
  1715. data/third_party/upb/upb/msg.h +2 -45
  1716. data/third_party/upb/upb/msg_internal.h +28 -22
  1717. data/third_party/upb/upb/port_def.inc +2 -1
  1718. data/third_party/upb/upb/port_undef.inc +1 -0
  1719. data/third_party/upb/upb/reflection.c +2 -159
  1720. data/third_party/upb/upb/reflection.h +2 -112
  1721. data/third_party/upb/upb/status.c +86 -0
  1722. data/third_party/upb/upb/status.h +66 -0
  1723. data/third_party/upb/upb/table.c +2 -2
  1724. data/third_party/upb/upb/table_internal.h +3 -352
  1725. data/third_party/upb/upb/text_encode.c +3 -2
  1726. data/third_party/upb/upb/upb.c +4 -290
  1727. data/third_party/upb/upb/upb.h +7 -196
  1728. data/third_party/zlib/compress.c +3 -3
  1729. data/third_party/zlib/crc32.c +21 -12
  1730. data/third_party/zlib/deflate.c +112 -106
  1731. data/third_party/zlib/deflate.h +2 -2
  1732. data/third_party/zlib/gzlib.c +1 -1
  1733. data/third_party/zlib/gzread.c +3 -5
  1734. data/third_party/zlib/gzwrite.c +1 -1
  1735. data/third_party/zlib/infback.c +10 -7
  1736. data/third_party/zlib/inflate.c +5 -2
  1737. data/third_party/zlib/inftrees.c +2 -2
  1738. data/third_party/zlib/inftrees.h +1 -1
  1739. data/third_party/zlib/trees.c +61 -62
  1740. data/third_party/zlib/uncompr.c +2 -2
  1741. data/third_party/zlib/zconf.h +16 -3
  1742. data/third_party/zlib/zlib.h +10 -10
  1743. data/third_party/zlib/zutil.c +9 -7
  1744. data/third_party/zlib/zutil.h +1 -0
  1745. metadata +372 -102
  1746. data/include/grpc/impl/codegen/gpr_slice.h +0 -71
  1747. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +0 -42
  1748. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -48
  1749. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +0 -185
  1750. data/src/core/ext/filters/client_channel/lb_policy_registry.h +0 -65
  1751. data/src/core/ext/filters/client_channel/proxy_mapper.h +0 -54
  1752. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -89
  1753. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +0 -50
  1754. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -186
  1755. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -179
  1756. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +0 -456
  1757. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -53
  1758. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -386
  1759. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +0 -61
  1760. data/src/core/ext/xds/certificate_provider_registry.cc +0 -103
  1761. data/src/core/ext/xds/certificate_provider_registry.h +0 -57
  1762. data/src/core/lib/channel/handshaker_factory.h +0 -50
  1763. data/src/core/lib/channel/handshaker_registry.cc +0 -50
  1764. data/src/core/lib/channel/handshaker_registry.h +0 -71
  1765. data/src/core/lib/event_engine/sockaddr.cc +0 -40
  1766. data/src/core/lib/event_engine/sockaddr.h +0 -44
  1767. data/src/core/lib/gpr/env.h +0 -40
  1768. data/src/core/lib/gpr/env_linux.cc +0 -75
  1769. data/src/core/lib/gpr/env_posix.cc +0 -46
  1770. data/src/core/lib/gpr/env_windows.cc +0 -74
  1771. data/src/core/lib/gpr/murmur_hash.cc +0 -82
  1772. data/src/core/lib/gpr/murmur_hash.h +0 -29
  1773. data/src/core/lib/gpr/string_windows.h +0 -32
  1774. data/src/core/lib/gpr/tls.h +0 -158
  1775. data/src/core/lib/gprpp/capture.h +0 -76
  1776. data/src/core/lib/iomgr/error_internal.h +0 -66
  1777. data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
  1778. data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
  1779. data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
  1780. data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
  1781. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
  1782. data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
  1783. data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
  1784. data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
  1785. data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
  1786. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
  1787. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
  1788. data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
  1789. data/src/core/lib/iomgr/executor/threadpool.h +0 -150
  1790. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  1791. data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
  1792. data/src/core/lib/profiling/basic_timers.cc +0 -295
  1793. data/src/core/lib/profiling/stap_timers.cc +0 -50
  1794. data/src/core/lib/profiling/timers.h +0 -94
  1795. data/src/core/lib/promise/call_push_pull.h +0 -144
  1796. data/src/core/lib/security/security_connector/load_system_roots_linux.h +0 -46
  1797. data/src/core/lib/slice/slice_api.cc +0 -39
  1798. data/src/core/lib/slice/slice_refcount_base.h +0 -61
  1799. data/src/core/lib/slice/slice_split.cc +0 -100
  1800. data/src/core/lib/slice/slice_split.h +0 -40
  1801. data/src/core/lib/transport/byte_stream.cc +0 -164
  1802. data/src/core/lib/transport/byte_stream.h +0 -166
  1803. 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,11 +110,13 @@ TraceFlag grpc_lb_rls_trace(false, "rls_lb");
83
110
 
84
111
  namespace {
85
112
 
86
- const char* kRls = "rls_experimental";
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";
90
- const char* kRlsHeaderKey = "X-Google-RLS-Data";
119
+ const char* kRlsHeaderKey = "x-google-rls-data";
91
120
 
92
121
  const Duration kDefaultLookupServiceTimeout = Duration::Seconds(10);
93
122
  const Duration kMaxMaxAge = Duration::Minutes(5);
@@ -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,447 +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
2520
  } // namespace
2534
2521
 
2535
- void RlsLbPluginInit() {
2536
- LoadBalancingPolicyRegistry::Builder::RegisterLoadBalancingPolicyFactory(
2537
- absl::make_unique<RlsLbFactory>());
2522
+ void RegisterRlsLbPolicy(CoreConfiguration::Builder* builder) {
2523
+ builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory(
2524
+ std::make_unique<RlsLbFactory>());
2538
2525
  }
2539
2526
 
2540
- void RlsLbPluginShutdown() {}
2541
-
2542
2527
  } // namespace grpc_core