grpc 1.47.0 → 1.53.0

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

Potentially problematic release.


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

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