grpc 1.48.0 → 1.49.1

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

Potentially problematic release.


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

Files changed (715) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +104 -41
  3. data/include/grpc/event_engine/event_engine.h +19 -16
  4. data/include/grpc/impl/codegen/grpc_types.h +3 -8
  5. data/include/grpc/impl/codegen/port_platform.h +0 -8
  6. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +3 -3
  7. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +2 -2
  8. data/src/core/ext/filters/client_channel/client_channel.cc +125 -200
  9. data/src/core/ext/filters/client_channel/client_channel.h +15 -8
  10. data/src/core/ext/filters/client_channel/client_channel_factory.cc +0 -29
  11. data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -10
  12. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  13. data/src/core/ext/filters/client_channel/config_selector.h +12 -4
  14. data/src/core/ext/filters/client_channel/connector.h +4 -5
  15. data/src/core/ext/filters/client_channel/http_proxy.cc +53 -65
  16. data/src/core/ext/filters/client_channel/http_proxy.h +12 -9
  17. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +14 -12
  18. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +6 -6
  19. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +102 -131
  20. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +12 -3
  21. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +5 -1
  22. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +1 -0
  23. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -2
  24. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
  25. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +169 -63
  26. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +25 -1
  27. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +15 -19
  28. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +66 -78
  29. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +44 -44
  30. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +6 -5
  31. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +65 -77
  32. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +15 -14
  33. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +19 -14
  34. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +63 -67
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +40 -49
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +81 -97
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +53 -61
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +171 -102
  39. data/src/core/ext/filters/client_channel/proxy_mapper.h +13 -14
  40. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +19 -16
  41. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +8 -7
  42. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +4 -8
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +431 -145
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +170 -99
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +20 -7
  46. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +17 -15
  47. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +7 -17
  48. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +11 -0
  49. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +38 -17
  50. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +3 -4
  51. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +5 -6
  52. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -13
  53. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +162 -165
  54. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +37 -30
  55. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +7 -10
  56. data/src/core/ext/filters/client_channel/retry_filter.cc +0 -7
  57. data/src/core/ext/filters/client_channel/retry_service_config.cc +30 -19
  58. data/src/core/ext/filters/client_channel/retry_service_config.h +6 -9
  59. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +6 -7
  60. data/src/core/ext/filters/client_channel/subchannel.cc +49 -89
  61. data/src/core/ext/filters/client_channel/subchannel.h +8 -8
  62. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +1 -1
  63. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +6 -76
  64. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +16 -25
  65. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +3 -4
  66. data/src/core/ext/filters/deadline/deadline_filter.cc +6 -6
  67. data/src/core/ext/filters/deadline/deadline_filter.h +2 -3
  68. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -3
  69. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +1 -1
  70. data/src/core/ext/filters/fault_injection/service_config_parser.cc +17 -12
  71. data/src/core/ext/filters/fault_injection/service_config_parser.h +4 -5
  72. data/src/core/ext/filters/http/client/http_client_filter.cc +2 -3
  73. data/src/core/ext/filters/http/client/http_client_filter.h +1 -1
  74. data/src/core/ext/filters/http/client_authority_filter.cc +1 -2
  75. data/src/core/ext/filters/http/client_authority_filter.h +1 -1
  76. data/src/core/ext/filters/http/server/http_server_filter.cc +2 -3
  77. data/src/core/ext/filters/http/server/http_server_filter.h +1 -1
  78. data/src/core/ext/filters/message_size/message_size_filter.cc +13 -7
  79. data/src/core/ext/filters/message_size/message_size_filter.h +3 -6
  80. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +16 -12
  81. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -6
  82. data/src/core/ext/filters/server_config_selector/server_config_selector.h +5 -0
  83. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +3 -5
  84. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +35 -62
  85. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +62 -89
  86. data/src/core/ext/transport/chttp2/server/chttp2_server.h +4 -6
  87. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +130 -165
  88. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -2
  89. data/src/core/ext/transport/chttp2/transport/flow_control.cc +67 -2
  90. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -0
  91. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +7 -1
  92. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +25 -8
  93. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -0
  94. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +0 -1
  95. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +8 -2
  96. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -10
  97. data/src/core/ext/transport/chttp2/transport/internal.h +2 -1
  98. data/src/core/ext/transport/inproc/inproc_transport.cc +40 -74
  99. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +5 -5
  100. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +30 -10
  101. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +4 -4
  102. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +24 -8
  103. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +8 -327
  104. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +83 -1723
  105. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +352 -0
  106. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1768 -0
  107. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +2 -2
  108. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +12 -4
  109. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +6 -4
  110. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +33 -4
  111. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +1 -1
  112. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +6 -2
  113. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +1 -1
  114. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +6 -2
  115. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +6 -2
  116. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +12 -4
  117. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +1 -1
  118. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +6 -2
  119. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  120. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -3
  121. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +14 -14
  122. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +90 -30
  123. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +21 -19
  124. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +124 -34
  125. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +3 -3
  126. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +18 -6
  127. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +23 -22
  128. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +153 -48
  129. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +1 -1
  130. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +6 -2
  131. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +1 -1
  132. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +6 -2
  133. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +11 -11
  134. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +84 -28
  135. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +7 -7
  136. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +42 -14
  137. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +1 -1
  138. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +6 -2
  139. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -23
  140. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +156 -48
  141. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +7 -7
  142. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +42 -14
  143. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
  144. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +6 -2
  145. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +1 -1
  146. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +6 -2
  147. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +2 -2
  148. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +12 -4
  149. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +12 -12
  150. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +78 -26
  151. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +9 -9
  152. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +54 -18
  153. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +1 -1
  154. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +6 -2
  155. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +21 -20
  156. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +117 -44
  157. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
  158. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +6 -2
  159. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +2 -2
  160. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +12 -4
  161. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +6 -2
  162. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
  163. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +6 -2
  164. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +1 -1
  165. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +6 -2
  166. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +3 -3
  167. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +18 -6
  168. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +5 -5
  169. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +36 -12
  170. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +3 -3
  171. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +30 -10
  172. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +1 -1
  173. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +6 -2
  174. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +37 -13
  175. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +170 -15
  176. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +5 -5
  177. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +42 -14
  178. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +1 -1
  179. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +6 -2
  180. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +7 -4
  181. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +36 -4
  182. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +1 -1
  183. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +6 -2
  184. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +6 -6
  185. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +48 -16
  186. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +8 -8
  187. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +54 -18
  188. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +21 -9
  189. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +100 -14
  190. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +7 -22
  191. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +36 -77
  192. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +121 -76
  193. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +647 -163
  194. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +3 -3
  195. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +18 -6
  196. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +34 -15
  197. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +161 -22
  198. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +1 -1
  199. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +6 -2
  200. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +1 -1
  201. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +6 -2
  202. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +2 -2
  203. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +12 -4
  204. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +1 -1
  205. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +6 -2
  206. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +1 -1
  207. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +6 -2
  208. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +46 -0
  209. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +98 -0
  210. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +1 -1
  211. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +6 -2
  212. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +2 -2
  213. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +12 -4
  214. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -0
  215. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -0
  216. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +2 -2
  217. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +12 -4
  218. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +1 -1
  219. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +6 -2
  220. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +1 -1
  221. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +6 -2
  222. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +2 -2
  223. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +30 -10
  224. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +2 -2
  225. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +18 -6
  226. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +11 -4
  227. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +58 -4
  228. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +1 -1
  229. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +6 -2
  230. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +35 -27
  231. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +177 -52
  232. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +6 -2
  233. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +1 -1
  234. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +6 -2
  235. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +10 -8
  236. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +66 -14
  237. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +3 -3
  238. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +18 -6
  239. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +5 -5
  240. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +42 -14
  241. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +2 -2
  242. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +12 -4
  243. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  244. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +6 -2
  245. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +131 -16
  246. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +632 -12
  247. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +2 -2
  248. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +12 -4
  249. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +5 -5
  250. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +30 -10
  251. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +1 -1
  252. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +6 -2
  253. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +4 -4
  254. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +24 -8
  255. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +4 -4
  256. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +24 -8
  257. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +2 -2
  258. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +12 -4
  259. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +1 -1
  260. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +6 -2
  261. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
  262. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +6 -2
  263. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
  264. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +6 -2
  265. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +3 -3
  266. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +18 -6
  267. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +1 -1
  268. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +12 -4
  269. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +2 -2
  270. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +12 -4
  271. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
  272. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +18 -6
  273. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
  274. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +42 -14
  275. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +5 -5
  276. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +30 -10
  277. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +3 -3
  278. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +18 -6
  279. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +1 -1
  280. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +6 -2
  281. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +12 -4
  282. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +2 -2
  283. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -6
  284. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
  285. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
  286. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
  287. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +6 -2
  288. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +6 -2
  289. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
  290. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +11 -11
  291. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +66 -22
  292. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +9 -9
  293. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +72 -24
  294. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  295. data/src/core/ext/upb-generated/google/api/http.upb.h +18 -6
  296. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +1 -1
  297. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +6 -2
  298. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  299. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -2
  300. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +44 -43
  301. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +177 -55
  302. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  303. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +6 -2
  304. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  305. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +6 -2
  306. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +2 -2
  307. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +18 -6
  308. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  309. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +6 -2
  310. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +6 -6
  311. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +54 -18
  312. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  313. data/src/core/ext/upb-generated/google/rpc/status.upb.h +6 -2
  314. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +2 -2
  315. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +24 -8
  316. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +6 -2
  317. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +7 -7
  318. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +60 -20
  319. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +1 -1
  320. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +12 -4
  321. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  322. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +12 -4
  323. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +6 -6
  324. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +54 -18
  325. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +2 -2
  326. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +12 -4
  327. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +7 -7
  328. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +42 -14
  329. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  330. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +23 -11
  331. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
  332. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -3
  333. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -3
  334. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
  335. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -3
  336. data/src/core/ext/upb-generated/validate/validate.upb.c +22 -22
  337. data/src/core/ext/upb-generated/validate/validate.upb.h +139 -47
  338. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +3 -3
  339. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +23 -11
  340. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +1 -1
  341. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +7 -3
  342. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +3 -3
  343. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +27 -11
  344. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +1 -1
  345. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +7 -3
  346. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  347. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +6 -2
  348. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +2 -2
  349. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +12 -4
  350. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  351. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +6 -2
  352. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +1 -1
  353. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +6 -2
  354. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  355. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +6 -2
  356. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  357. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +12 -4
  358. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  359. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +6 -2
  360. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +6 -2
  361. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +1 -1
  362. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +6 -2
  363. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +6 -6
  364. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +54 -18
  365. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +2 -2
  366. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +12 -4
  367. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +1 -1
  368. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +12 -4
  369. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +1 -1
  370. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +6 -2
  371. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +67 -274
  372. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +0 -85
  373. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +256 -0
  374. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +115 -0
  375. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +14 -11
  376. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +107 -107
  377. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +191 -187
  378. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +156 -154
  379. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +186 -183
  380. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +136 -134
  381. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +16 -16
  382. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +162 -139
  383. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  384. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +39 -31
  385. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +12 -8
  386. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  387. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +72 -75
  388. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +0 -5
  389. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +713 -670
  390. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -0
  391. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +150 -139
  392. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +5 -0
  393. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +47 -0
  394. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
  395. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +16 -12
  396. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
  397. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +477 -466
  398. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
  399. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +153 -84
  400. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +35 -0
  401. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -113
  402. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -28
  403. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  404. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
  405. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +92 -90
  406. data/src/core/ext/xds/upb_utils.h +0 -21
  407. data/src/core/ext/xds/xds_api.cc +53 -86
  408. data/src/core/ext/xds/xds_api.h +19 -28
  409. data/src/core/ext/xds/xds_bootstrap.cc +39 -52
  410. data/src/core/ext/xds/xds_bootstrap.h +28 -8
  411. data/src/core/ext/xds/xds_certificate_provider.h +9 -0
  412. data/src/core/ext/xds/xds_channel_stack_modifier.cc +6 -4
  413. data/src/core/ext/xds/xds_channel_stack_modifier.h +8 -0
  414. data/src/core/ext/xds/xds_client.cc +555 -1214
  415. data/src/core/ext/xds/xds_client.h +16 -44
  416. data/src/core/ext/xds/xds_client_grpc.cc +291 -0
  417. data/src/core/ext/xds/xds_client_grpc.h +102 -0
  418. data/src/core/ext/xds/xds_cluster.cc +92 -103
  419. data/src/core/ext/xds/xds_cluster.h +6 -5
  420. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +10 -14
  421. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -0
  422. data/src/core/ext/xds/xds_common_types.cc +134 -110
  423. data/src/core/ext/xds/xds_common_types.h +6 -7
  424. data/src/core/ext/xds/xds_endpoint.cc +80 -80
  425. data/src/core/ext/xds/xds_endpoint.h +4 -4
  426. data/src/core/ext/xds/xds_http_fault_filter.cc +4 -11
  427. data/src/core/ext/xds/xds_http_fault_filter.h +3 -3
  428. data/src/core/ext/xds/xds_http_filters.h +3 -3
  429. data/src/core/ext/xds/xds_http_rbac_filter.cc +39 -58
  430. data/src/core/ext/xds/xds_http_rbac_filter.h +3 -3
  431. data/src/core/ext/xds/xds_lb_policy_registry.cc +17 -20
  432. data/src/core/ext/xds/xds_lb_policy_registry.h +4 -4
  433. data/src/core/ext/xds/xds_listener.cc +329 -299
  434. data/src/core/ext/xds/xds_listener.h +4 -4
  435. data/src/core/ext/xds/xds_resource_type.h +13 -2
  436. data/src/core/ext/xds/xds_route_config.cc +180 -177
  437. data/src/core/ext/xds/xds_route_config.h +31 -17
  438. data/src/core/ext/xds/xds_routing.cc +3 -6
  439. data/src/core/ext/xds/xds_routing.h +7 -9
  440. data/src/core/ext/xds/xds_server_config_fetcher.cc +76 -81
  441. data/src/core/ext/xds/xds_transport.h +86 -0
  442. data/src/core/ext/xds/xds_transport_grpc.cc +349 -0
  443. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  444. data/src/core/lib/address_utils/parse_address.cc +19 -17
  445. data/src/core/lib/address_utils/parse_address.h +8 -5
  446. data/src/core/lib/avl/avl.h +47 -25
  447. data/src/core/lib/channel/call_tracer.h +1 -1
  448. data/src/core/lib/channel/channel_args.cc +88 -19
  449. data/src/core/lib/channel/channel_args.h +113 -62
  450. data/src/core/lib/channel/channel_stack.cc +0 -1
  451. data/src/core/lib/channel/channel_stack_builder.cc +3 -3
  452. data/src/core/lib/channel/channel_stack_builder.h +2 -2
  453. data/src/core/lib/channel/channel_stack_builder_impl.cc +2 -4
  454. data/src/core/lib/channel/channelz.cc +27 -37
  455. data/src/core/lib/channel/channelz.h +9 -0
  456. data/src/core/lib/channel/promise_based_filter.h +0 -1
  457. data/src/core/lib/config/core_configuration.h +48 -35
  458. data/src/core/lib/debug/stats.cc +12 -15
  459. data/src/core/lib/debug/stats.h +11 -3
  460. data/src/core/lib/event_engine/{event_engine.cc → default_event_engine.cc} +9 -5
  461. data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine.h} +4 -8
  462. data/src/core/lib/event_engine/default_event_engine_factory.cc +20 -3
  463. data/src/core/lib/event_engine/default_event_engine_factory.h +33 -0
  464. data/src/core/lib/event_engine/executor/executor.h +38 -0
  465. data/src/core/lib/event_engine/executor/threaded_executor.cc +36 -0
  466. data/src/core/lib/event_engine/executor/threaded_executor.h +44 -0
  467. data/src/core/lib/event_engine/forkable.cc +101 -0
  468. data/src/core/lib/event_engine/forkable.h +61 -0
  469. data/src/core/lib/event_engine/poller.h +54 -0
  470. data/src/core/lib/event_engine/{iomgr_engine/iomgr_engine.cc → posix_engine/posix_engine.cc} +30 -47
  471. data/src/core/lib/event_engine/{iomgr_engine/iomgr_engine.h → posix_engine/posix_engine.h} +27 -28
  472. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer.cc +4 -5
  473. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer.h +8 -8
  474. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_heap.cc +4 -4
  475. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_heap.h +5 -5
  476. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_manager.cc +46 -10
  477. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_manager.h +17 -8
  478. data/src/core/lib/event_engine/promise.h +11 -2
  479. data/src/core/lib/event_engine/socket_notifier.h +55 -0
  480. data/src/core/lib/event_engine/{iomgr_engine/thread_pool.cc → thread_pool.cc} +49 -14
  481. data/src/core/lib/event_engine/{iomgr_engine/thread_pool.h → thread_pool.h} +21 -10
  482. data/src/core/lib/event_engine/utils.cc +49 -0
  483. data/src/core/lib/event_engine/utils.h +40 -0
  484. data/src/core/lib/event_engine/windows/iocp.cc +149 -0
  485. data/src/core/lib/event_engine/windows/iocp.h +68 -0
  486. data/src/core/lib/event_engine/windows/win_socket.cc +196 -0
  487. data/src/core/lib/event_engine/windows/win_socket.h +120 -0
  488. data/src/core/lib/event_engine/windows/windows_engine.cc +159 -0
  489. data/src/core/lib/event_engine/windows/windows_engine.h +120 -0
  490. data/src/core/lib/gpr/time.cc +11 -9
  491. data/src/core/lib/gpr/useful.h +29 -0
  492. data/src/core/lib/gprpp/bitset.h +3 -13
  493. data/src/core/lib/gprpp/debug_location.h +39 -7
  494. data/src/core/lib/gprpp/manual_constructor.h +0 -1
  495. data/src/core/lib/gprpp/no_destruct.h +94 -0
  496. data/src/core/lib/gprpp/ref_counted_ptr.h +0 -1
  497. data/src/core/lib/gprpp/status_helper.cc +1 -0
  498. data/src/core/lib/gprpp/table.h +0 -1
  499. data/src/core/lib/{event_engine/iomgr_engine → gprpp}/time_averaged_stats.cc +3 -5
  500. data/src/core/lib/{event_engine/iomgr_engine → gprpp}/time_averaged_stats.h +5 -7
  501. data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
  502. data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -27
  503. data/src/core/lib/http/httpcli.cc +12 -24
  504. data/src/core/lib/http/httpcli_security_connector.cc +11 -11
  505. data/src/core/lib/iomgr/call_combiner.cc +0 -26
  506. data/src/core/lib/iomgr/closure.h +0 -9
  507. data/src/core/lib/iomgr/combiner.cc +0 -20
  508. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
  509. data/src/core/lib/iomgr/error.cc +0 -773
  510. data/src/core/lib/iomgr/error.h +0 -145
  511. data/src/core/lib/iomgr/error_cfstream.cc +0 -5
  512. data/src/core/lib/iomgr/ev_poll_posix.cc +17 -9
  513. data/src/core/lib/iomgr/exec_ctx.cc +0 -12
  514. data/src/core/lib/iomgr/executor.cc +0 -10
  515. data/src/core/lib/iomgr/executor.h +0 -3
  516. data/src/core/lib/iomgr/lockfree_event.cc +0 -17
  517. data/src/core/lib/iomgr/port.h +3 -0
  518. data/src/core/lib/iomgr/resolve_address.h +29 -6
  519. data/src/core/lib/iomgr/resolve_address_posix.cc +42 -8
  520. data/src/core/lib/iomgr/resolve_address_posix.h +19 -5
  521. data/src/core/lib/iomgr/resolve_address_windows.cc +44 -10
  522. data/src/core/lib/iomgr/resolve_address_windows.h +19 -5
  523. data/src/core/lib/iomgr/socket_windows.h +0 -2
  524. data/src/core/lib/iomgr/tcp_posix.cc +118 -6
  525. data/src/core/lib/iomgr/timer_generic.cc +6 -8
  526. data/src/core/lib/json/json.h +19 -22
  527. data/src/core/lib/json/json_args.h +34 -0
  528. data/src/core/lib/json/json_object_loader.cc +233 -0
  529. data/src/core/lib/json/json_object_loader.h +618 -0
  530. data/src/core/lib/json/json_reader.cc +86 -62
  531. data/src/core/lib/json/json_util.cc +8 -36
  532. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +3 -44
  533. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +15 -24
  534. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  535. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy_registry.cc +49 -72
  536. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy_registry.h +27 -27
  537. data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +6 -6
  538. data/src/core/lib/promise/activity.h +56 -8
  539. data/src/core/lib/promise/arena_promise.h +84 -81
  540. data/src/core/lib/promise/context.h +0 -1
  541. data/src/core/lib/promise/detail/basic_seq.h +43 -23
  542. data/src/core/lib/promise/detail/promise_factory.h +0 -1
  543. data/src/core/lib/promise/map.h +0 -1
  544. data/src/core/lib/promise/seq.h +25 -4
  545. data/src/core/lib/promise/sleep.cc +38 -42
  546. data/src/core/lib/promise/sleep.h +27 -24
  547. data/src/core/lib/promise/try_seq.h +26 -6
  548. data/src/core/lib/resolver/resolver.cc +0 -47
  549. data/src/core/lib/resolver/resolver.h +2 -12
  550. data/src/core/lib/resolver/resolver_factory.h +2 -3
  551. data/src/core/lib/resolver/resolver_registry.cc +1 -1
  552. data/src/core/lib/resolver/resolver_registry.h +2 -3
  553. data/src/core/lib/resolver/server_address.cc +11 -15
  554. data/src/core/lib/resolver/server_address.h +4 -8
  555. data/src/core/lib/resource_quota/api.cc +1 -1
  556. data/src/core/lib/resource_quota/arena.cc +21 -1
  557. data/src/core/lib/resource_quota/arena.h +24 -2
  558. data/src/core/lib/resource_quota/memory_quota.cc +157 -17
  559. data/src/core/lib/resource_quota/memory_quota.h +98 -17
  560. data/src/core/lib/resource_quota/periodic_update.cc +79 -0
  561. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  562. data/src/core/lib/security/authorization/evaluate_args.cc +10 -7
  563. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -2
  564. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -1
  565. data/src/core/lib/security/authorization/matchers.cc +13 -10
  566. data/src/core/lib/security/authorization/rbac_policy.cc +0 -1
  567. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -3
  568. data/src/core/lib/security/credentials/alts/alts_credentials.h +3 -4
  569. data/src/core/lib/security/credentials/composite/composite_credentials.cc +3 -7
  570. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -4
  571. data/src/core/lib/security/credentials/credentials.h +16 -12
  572. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +18 -11
  573. data/src/core/lib/security/credentials/external/external_account_credentials.cc +32 -23
  574. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -6
  575. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -6
  576. data/src/core/lib/security/credentials/fake/fake_credentials.cc +3 -12
  577. data/src/core/lib/security/credentials/fake/fake_credentials.h +0 -4
  578. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +29 -26
  579. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +1 -3
  580. data/src/core/lib/security/credentials/iam/iam_credentials.cc +0 -1
  581. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +3 -3
  582. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +3 -4
  583. data/src/core/lib/security/credentials/jwt/json_token.cc +12 -3
  584. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -8
  585. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +11 -13
  586. data/src/core/lib/security/credentials/local/local_credentials.cc +3 -4
  587. data/src/core/lib/security/credentials/local/local_credentials.h +3 -4
  588. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +17 -18
  589. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +0 -1
  590. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +13 -21
  591. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +3 -4
  592. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +6 -0
  593. data/src/core/lib/security/credentials/tls/tls_credentials.cc +13 -25
  594. data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -4
  595. data/src/core/lib/security/credentials/xds/xds_credentials.cc +13 -30
  596. data/src/core/lib/security/credentials/xds/xds_credentials.h +3 -3
  597. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +10 -18
  598. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +26 -38
  599. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
  600. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +5 -5
  601. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +6 -5
  602. data/src/core/lib/security/security_connector/local/local_security_connector.cc +13 -11
  603. data/src/core/lib/security/security_connector/local/local_security_connector.h +2 -2
  604. data/src/core/lib/security/security_connector/security_connector.h +5 -3
  605. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +5 -4
  606. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +5 -5
  607. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +5 -5
  608. data/src/core/lib/security/transport/auth_filters.h +1 -1
  609. data/src/core/lib/security/transport/client_auth_filter.cc +3 -4
  610. data/src/core/lib/security/transport/security_handshaker.cc +32 -44
  611. data/src/core/lib/security/transport/security_handshaker.h +2 -1
  612. data/src/core/lib/service_config/service_config.h +11 -0
  613. data/src/core/lib/service_config/service_config_impl.cc +98 -97
  614. data/src/core/lib/service_config/service_config_impl.h +11 -13
  615. data/src/core/lib/service_config/service_config_parser.cc +26 -27
  616. data/src/core/lib/service_config/service_config_parser.h +10 -22
  617. data/src/core/lib/slice/percent_encoding.cc +4 -13
  618. data/src/core/lib/slice/slice.cc +10 -4
  619. data/src/core/lib/surface/call.cc +8 -2
  620. data/src/core/lib/surface/channel.cc +6 -6
  621. data/src/core/lib/surface/channel.h +1 -1
  622. data/src/core/lib/surface/completion_queue.cc +0 -2
  623. data/src/core/lib/surface/completion_queue.h +0 -3
  624. data/src/core/lib/surface/init.cc +2 -6
  625. data/src/core/lib/surface/lame_client.cc +2 -3
  626. data/src/core/lib/surface/lame_client.h +1 -1
  627. data/src/core/lib/surface/server.cc +7 -12
  628. data/src/core/lib/surface/server.h +7 -7
  629. data/src/core/lib/surface/validate_metadata.cc +4 -14
  630. data/src/core/lib/surface/version.cc +2 -2
  631. data/src/core/lib/transport/connectivity_state.cc +0 -1
  632. data/src/core/lib/transport/connectivity_state.h +1 -1
  633. data/src/core/lib/transport/error_utils.cc +0 -36
  634. data/src/core/lib/transport/handshaker.cc +7 -9
  635. data/src/core/lib/transport/handshaker.h +4 -5
  636. data/src/core/lib/transport/handshaker_factory.h +2 -3
  637. data/src/core/lib/transport/handshaker_registry.cc +2 -1
  638. data/src/core/lib/transport/handshaker_registry.h +2 -4
  639. data/src/core/lib/transport/http_connect_handshaker.cc +16 -16
  640. data/src/core/lib/transport/metadata_batch.cc +5 -0
  641. data/src/core/lib/transport/metadata_batch.h +52 -7
  642. data/src/core/lib/transport/parsed_metadata.h +0 -1
  643. data/src/core/lib/transport/tcp_connect_handshaker.cc +12 -18
  644. data/src/core/lib/transport/transport.h +0 -7
  645. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +40 -21
  646. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
  647. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +14 -7
  648. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +1 -1
  649. data/src/core/tsi/fake_transport_security.cc +53 -30
  650. data/src/core/tsi/local_transport_security.cc +9 -5
  651. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +10 -1
  652. data/src/core/tsi/ssl_transport_security.cc +47 -23
  653. data/src/core/tsi/transport_security.cc +18 -6
  654. data/src/core/tsi/transport_security.h +2 -1
  655. data/src/core/tsi/transport_security_interface.h +17 -5
  656. data/src/ruby/ext/grpc/extconf.rb +2 -0
  657. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  658. data/src/ruby/lib/grpc/version.rb +1 -1
  659. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
  660. data/third_party/abseil-cpp/absl/functional/any_invocable.h +313 -0
  661. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +857 -0
  662. data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
  663. data/third_party/upb/upb/arena.c +277 -0
  664. data/third_party/upb/upb/arena.h +225 -0
  665. data/third_party/upb/upb/array.c +114 -0
  666. data/third_party/upb/upb/array.h +83 -0
  667. data/third_party/upb/upb/collections.h +36 -0
  668. data/third_party/upb/upb/decode.c +161 -65
  669. data/third_party/upb/upb/decode.h +1 -0
  670. data/third_party/upb/upb/decode_fast.c +1 -1
  671. data/third_party/upb/upb/def.c +10 -2
  672. data/third_party/upb/upb/def.h +8 -1
  673. data/third_party/upb/upb/def.hpp +7 -4
  674. data/third_party/upb/upb/encode.c +29 -20
  675. data/third_party/upb/upb/encode.h +16 -6
  676. data/third_party/upb/upb/extension_registry.c +93 -0
  677. data/third_party/upb/upb/extension_registry.h +84 -0
  678. data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +5 -5
  679. data/third_party/upb/upb/internal/table.h +385 -0
  680. data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +3 -3
  681. data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
  682. data/third_party/upb/upb/json_decode.c +1512 -0
  683. data/third_party/upb/upb/json_decode.h +47 -0
  684. data/third_party/upb/upb/json_encode.c +7 -3
  685. data/third_party/upb/upb/json_encode.h +6 -3
  686. data/third_party/upb/upb/map.c +108 -0
  687. data/third_party/upb/upb/map.h +117 -0
  688. data/third_party/upb/upb/message_value.h +66 -0
  689. data/third_party/upb/upb/mini_table.c +1147 -0
  690. data/third_party/upb/upb/mini_table.h +189 -0
  691. data/third_party/upb/upb/mini_table.hpp +112 -0
  692. data/third_party/upb/upb/msg.c +2 -62
  693. data/third_party/upb/upb/msg.h +2 -45
  694. data/third_party/upb/upb/msg_internal.h +28 -22
  695. data/third_party/upb/upb/port_def.inc +2 -1
  696. data/third_party/upb/upb/port_undef.inc +1 -0
  697. data/third_party/upb/upb/reflection.c +2 -159
  698. data/third_party/upb/upb/reflection.h +2 -112
  699. data/third_party/upb/upb/status.c +86 -0
  700. data/third_party/upb/upb/status.h +66 -0
  701. data/third_party/upb/upb/table.c +2 -2
  702. data/third_party/upb/upb/table_internal.h +3 -352
  703. data/third_party/upb/upb/text_encode.c +3 -2
  704. data/third_party/upb/upb/upb.c +4 -290
  705. data/third_party/upb/upb/upb.h +7 -196
  706. metadata +88 -36
  707. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -50
  708. data/src/core/lib/iomgr/error_internal.h +0 -66
  709. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
  710. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
  711. data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
  712. data/src/core/lib/iomgr/executor/threadpool.h +0 -150
  713. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  714. data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
  715. data/src/core/lib/promise/detail/switch.h +0 -1455
@@ -32,23 +32,20 @@
32
32
  #include "absl/status/status.h"
33
33
  #include "absl/status/statusor.h"
34
34
  #include "absl/strings/str_cat.h"
35
+ #include "absl/strings/str_join.h"
35
36
  #include "absl/strings/string_view.h"
36
37
  #include "absl/types/optional.h"
37
38
  #include "absl/types/variant.h"
38
39
 
39
40
  #include <grpc/impl/codegen/connectivity_state.h>
40
- #include <grpc/impl/codegen/grpc_types.h>
41
41
  #include <grpc/support/log.h>
42
42
 
43
- #include "src/core/ext/filters/client_channel/lb_policy.h"
44
43
  #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
45
44
  #include "src/core/ext/filters/client_channel/lb_policy/xds/xds.h"
46
45
  #include "src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h"
47
- #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
48
- #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
49
- #include "src/core/ext/filters/client_channel/subchannel_interface.h"
50
46
  #include "src/core/ext/xds/xds_bootstrap.h"
51
47
  #include "src/core/ext/xds/xds_client.h"
48
+ #include "src/core/ext/xds/xds_client_grpc.h"
52
49
  #include "src/core/ext/xds/xds_client_stats.h"
53
50
  #include "src/core/ext/xds/xds_endpoint.h"
54
51
  #include "src/core/lib/channel/channel_args.h"
@@ -62,6 +59,10 @@
62
59
  #include "src/core/lib/iomgr/error.h"
63
60
  #include "src/core/lib/iomgr/pollset_set.h"
64
61
  #include "src/core/lib/json/json.h"
62
+ #include "src/core/lib/load_balancing/lb_policy.h"
63
+ #include "src/core/lib/load_balancing/lb_policy_factory.h"
64
+ #include "src/core/lib/load_balancing/lb_policy_registry.h"
65
+ #include "src/core/lib/load_balancing/subchannel_interface.h"
65
66
  #include "src/core/lib/resolver/server_address.h"
66
67
  #include "src/core/lib/transport/connectivity_state.h"
67
68
 
@@ -137,7 +138,7 @@ CircuitBreakerCallCounterMap::CallCounter::~CallCounter() {
137
138
  // LB policy
138
139
  //
139
140
 
140
- constexpr char kXdsClusterImpl[] = "xds_cluster_impl_experimental";
141
+ constexpr absl::string_view kXdsClusterImpl = "xds_cluster_impl_experimental";
141
142
 
142
143
  // Config for xDS Cluster Impl LB policy.
143
144
  class XdsClusterImplLbConfig : public LoadBalancingPolicy::Config {
@@ -155,7 +156,7 @@ class XdsClusterImplLbConfig : public LoadBalancingPolicy::Config {
155
156
  max_concurrent_requests_(max_concurrent_requests),
156
157
  drop_config_(std::move(drop_config)) {}
157
158
 
158
- const char* name() const override { return kXdsClusterImpl; }
159
+ absl::string_view name() const override { return kXdsClusterImpl; }
159
160
 
160
161
  RefCountedPtr<LoadBalancingPolicy::Config> child_policy() const {
161
162
  return child_policy_;
@@ -185,7 +186,7 @@ class XdsClusterImplLb : public LoadBalancingPolicy {
185
186
  public:
186
187
  XdsClusterImplLb(RefCountedPtr<XdsClient> xds_client, Args args);
187
188
 
188
- const char* name() const override { return kXdsClusterImpl; }
189
+ absl::string_view name() const override { return kXdsClusterImpl; }
189
190
 
190
191
  void UpdateLocked(UpdateArgs args) override;
191
192
  void ExitIdleLocked() override;
@@ -247,7 +248,7 @@ class XdsClusterImplLb : public LoadBalancingPolicy {
247
248
  }
248
249
 
249
250
  RefCountedPtr<SubchannelInterface> CreateSubchannel(
250
- ServerAddress address, const grpc_channel_args& args) override;
251
+ ServerAddress address, const ChannelArgs& args) override;
251
252
  void UpdateState(grpc_connectivity_state state, const absl::Status& status,
252
253
  std::unique_ptr<SubchannelPicker> picker) override;
253
254
  void RequestReresolution() override;
@@ -264,9 +265,10 @@ class XdsClusterImplLb : public LoadBalancingPolicy {
264
265
  void ShutdownLocked() override;
265
266
 
266
267
  OrphanablePtr<LoadBalancingPolicy> CreateChildPolicyLocked(
267
- const grpc_channel_args* args);
268
+ const ChannelArgs& args);
268
269
  void UpdateChildPolicyLocked(absl::StatusOr<ServerAddressList> addresses,
269
- const grpc_channel_args* args);
270
+ std::string resolution_note,
271
+ const ChannelArgs& args);
270
272
 
271
273
  void MaybeUpdatePickerLocked();
272
274
 
@@ -465,7 +467,7 @@ void XdsClusterImplLb::ShutdownLocked() {
465
467
  // the child.
466
468
  picker_.reset();
467
469
  drop_stats_.reset();
468
- xds_client_.reset();
470
+ xds_client_.reset(DEBUG_LOCATION, "XdsClusterImpl");
469
471
  }
470
472
 
471
473
  void XdsClusterImplLb::ExitIdleLocked() {
@@ -519,7 +521,8 @@ void XdsClusterImplLb::UpdateLocked(UpdateArgs args) {
519
521
  MaybeUpdatePickerLocked();
520
522
  }
521
523
  // Update child policy.
522
- UpdateChildPolicyLocked(std::move(args.addresses), args.args);
524
+ UpdateChildPolicyLocked(std::move(args.addresses),
525
+ std::move(args.resolution_note), args.args);
523
526
  }
524
527
 
525
528
  void XdsClusterImplLb::MaybeUpdatePickerLocked() {
@@ -553,7 +556,7 @@ void XdsClusterImplLb::MaybeUpdatePickerLocked() {
553
556
  }
554
557
 
555
558
  OrphanablePtr<LoadBalancingPolicy> XdsClusterImplLb::CreateChildPolicyLocked(
556
- const grpc_channel_args* args) {
559
+ const ChannelArgs& args) {
557
560
  LoadBalancingPolicy::Args lb_policy_args;
558
561
  lb_policy_args.work_serializer = work_serializer();
559
562
  lb_policy_args.args = args;
@@ -576,8 +579,8 @@ OrphanablePtr<LoadBalancingPolicy> XdsClusterImplLb::CreateChildPolicyLocked(
576
579
  }
577
580
 
578
581
  void XdsClusterImplLb::UpdateChildPolicyLocked(
579
- absl::StatusOr<ServerAddressList> addresses,
580
- const grpc_channel_args* args) {
582
+ absl::StatusOr<ServerAddressList> addresses, std::string resolution_note,
583
+ const ChannelArgs& args) {
581
584
  // Create policy if needed.
582
585
  if (child_policy_ == nullptr) {
583
586
  child_policy_ = CreateChildPolicyLocked(args);
@@ -585,11 +588,10 @@ void XdsClusterImplLb::UpdateChildPolicyLocked(
585
588
  // Construct update args.
586
589
  UpdateArgs update_args;
587
590
  update_args.addresses = std::move(addresses);
591
+ update_args.resolution_note = std::move(resolution_note);
588
592
  update_args.config = config_->child_policy();
589
- grpc_arg cluster_arg = grpc_channel_arg_string_create(
590
- const_cast<char*>(GRPC_ARG_XDS_CLUSTER_NAME),
591
- const_cast<char*>(config_->cluster_name().c_str()));
592
- update_args.args = grpc_channel_args_copy_and_add(args, &cluster_arg, 1);
593
+ update_args.args =
594
+ args.Set(GRPC_ARG_XDS_CLUSTER_NAME, config_->cluster_name());
593
595
  // Update the policy.
594
596
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_cluster_impl_lb_trace)) {
595
597
  gpr_log(GPR_INFO,
@@ -604,7 +606,7 @@ void XdsClusterImplLb::UpdateChildPolicyLocked(
604
606
  //
605
607
 
606
608
  RefCountedPtr<SubchannelInterface> XdsClusterImplLb::Helper::CreateSubchannel(
607
- ServerAddress address, const grpc_channel_args& args) {
609
+ ServerAddress address, const ChannelArgs& args) {
608
610
  if (xds_cluster_impl_policy_->shutting_down_) return nullptr;
609
611
  // If load reporting is enabled, wrap the subchannel such that it
610
612
  // includes the locality stats object, which will be used by the EdsPicker.
@@ -690,8 +692,8 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
690
692
  public:
691
693
  OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
692
694
  LoadBalancingPolicy::Args args) const override {
693
- RefCountedPtr<XdsClient> xds_client =
694
- XdsClient::GetFromChannelArgs(*args.args);
695
+ auto xds_client = args.args.GetObjectRef<GrpcXdsClient>(DEBUG_LOCATION,
696
+ "XdsClusterImplLb");
695
697
  if (xds_client == nullptr) {
696
698
  gpr_log(GPR_ERROR,
697
699
  "XdsClient not present in channel args -- cannot instantiate "
@@ -702,48 +704,41 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
702
704
  std::move(args));
703
705
  }
704
706
 
705
- const char* name() const override { return kXdsClusterImpl; }
707
+ absl::string_view name() const override { return kXdsClusterImpl; }
706
708
 
707
- RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
708
- const Json& json, grpc_error_handle* error) const override {
709
- GPR_DEBUG_ASSERT(error != nullptr && GRPC_ERROR_IS_NONE(*error));
709
+ absl::StatusOr<RefCountedPtr<LoadBalancingPolicy::Config>>
710
+ ParseLoadBalancingConfig(const Json& json) const override {
710
711
  if (json.type() == Json::Type::JSON_NULL) {
711
712
  // This policy was configured in the deprecated loadBalancingPolicy
712
713
  // field or in the client API.
713
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
714
+ return absl::InvalidArgumentError(
714
715
  "field:loadBalancingPolicy error:xds_cluster_impl policy requires "
715
716
  "configuration. Please use loadBalancingConfig field of service "
716
717
  "config instead.");
717
- return nullptr;
718
718
  }
719
- std::vector<grpc_error_handle> error_list;
719
+ std::vector<std::string> errors;
720
720
  // Child policy.
721
721
  RefCountedPtr<LoadBalancingPolicy::Config> child_policy;
722
722
  auto it = json.object_value().find("childPolicy");
723
723
  if (it == json.object_value().end()) {
724
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
725
- "field:childPolicy error:required field missing"));
724
+ errors.emplace_back("field:childPolicy error:required field missing");
726
725
  } else {
727
- grpc_error_handle parse_error = GRPC_ERROR_NONE;
728
- child_policy = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
729
- it->second, &parse_error);
730
- if (child_policy == nullptr) {
731
- GPR_DEBUG_ASSERT(!GRPC_ERROR_IS_NONE(parse_error));
732
- std::vector<grpc_error_handle> child_errors;
733
- child_errors.push_back(parse_error);
734
- error_list.push_back(
735
- GRPC_ERROR_CREATE_FROM_VECTOR("field:childPolicy", &child_errors));
726
+ auto config =
727
+ LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(it->second);
728
+ if (!config.ok()) {
729
+ errors.emplace_back(absl::StrCat("field:childPolicy error:",
730
+ config.status().message()));
731
+ } else {
732
+ child_policy = std::move(*config);
736
733
  }
737
734
  }
738
735
  // Cluster name.
739
736
  std::string cluster_name;
740
737
  it = json.object_value().find("clusterName");
741
738
  if (it == json.object_value().end()) {
742
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
743
- "field:clusterName error:required field missing"));
739
+ errors.emplace_back("field:clusterName error:required field missing");
744
740
  } else if (it->second.type() != Json::Type::STRING) {
745
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
746
- "field:clusterName error:type should be string"));
741
+ errors.emplace_back("field:clusterName error:type should be string");
747
742
  } else {
748
743
  cluster_name = it->second.string_value();
749
744
  }
@@ -752,8 +747,7 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
752
747
  it = json.object_value().find("edsServiceName");
753
748
  if (it != json.object_value().end()) {
754
749
  if (it->second.type() != Json::Type::STRING) {
755
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
756
- "field:edsServiceName error:type should be string"));
750
+ errors.emplace_back("field:edsServiceName error:type should be string");
757
751
  } else {
758
752
  eds_service_name = it->second.string_value();
759
753
  }
@@ -763,16 +757,17 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
763
757
  it = json.object_value().find("lrsLoadReportingServer");
764
758
  if (it != json.object_value().end()) {
765
759
  if (it->second.type() != Json::Type::OBJECT) {
766
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
767
- "field:lrsLoadReportingServer error:type should be object"));
760
+ errors.emplace_back(
761
+ "field:lrsLoadReportingServer error:type should be object");
768
762
  } else {
769
763
  grpc_error_handle parser_error;
770
764
  lrs_load_reporting_server = XdsBootstrap::XdsServer::Parse(
771
765
  it->second.object_value(), &parser_error);
772
766
  if (!GRPC_ERROR_IS_NONE(parser_error)) {
773
- error_list.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
774
- absl::StrCat("errors parsing lrs_load_reporting_server")));
775
- error_list.push_back(parser_error);
767
+ errors.emplace_back(
768
+ absl::StrCat("error parsing lrs_load_reporting_server: ",
769
+ grpc_error_std_string(parser_error)));
770
+ GRPC_ERROR_UNREF(parser_error);
776
771
  }
777
772
  }
778
773
  }
@@ -781,8 +776,8 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
781
776
  it = json.object_value().find("maxConcurrentRequests");
782
777
  if (it != json.object_value().end()) {
783
778
  if (it->second.type() != Json::Type::NUMBER) {
784
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
785
- "field:max_concurrent_requests error:must be of type number"));
779
+ errors.emplace_back(
780
+ "field:max_concurrent_requests error:must be of type number");
786
781
  } else {
787
782
  max_concurrent_requests =
788
783
  gpr_parse_nonnegative_int(it->second.string_value().c_str());
@@ -792,20 +787,15 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
792
787
  auto drop_config = MakeRefCounted<XdsEndpointResource::DropConfig>();
793
788
  it = json.object_value().find("dropCategories");
794
789
  if (it == json.object_value().end()) {
795
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
796
- "field:dropCategories error:required field missing"));
790
+ errors.emplace_back("field:dropCategories error:required field missing");
797
791
  } else {
798
- std::vector<grpc_error_handle> child_errors =
799
- ParseDropCategories(it->second, drop_config.get());
800
- if (!child_errors.empty()) {
801
- error_list.push_back(GRPC_ERROR_CREATE_FROM_VECTOR(
802
- "field:dropCategories", &child_errors));
803
- }
792
+ absl::Status status = ParseDropCategories(it->second, drop_config.get());
793
+ if (!status.ok()) errors.emplace_back(status.message());
804
794
  }
805
- if (!error_list.empty()) {
806
- *error = GRPC_ERROR_CREATE_FROM_VECTOR(
807
- "xds_cluster_impl_experimental LB policy config", &error_list);
808
- return nullptr;
795
+ if (!errors.empty()) {
796
+ return absl::InvalidArgumentError(absl::StrCat(
797
+ "errors parseing xds_cluster_impl_experimental LB policy config: [",
798
+ absl::StrJoin(errors, "; "), "]"));
809
799
  }
810
800
  return MakeRefCounted<XdsClusterImplLbConfig>(
811
801
  std::move(child_policy), std::move(cluster_name),
@@ -814,65 +804,59 @@ class XdsClusterImplLbFactory : public LoadBalancingPolicyFactory {
814
804
  }
815
805
 
816
806
  private:
817
- static std::vector<grpc_error_handle> ParseDropCategories(
807
+ static absl::Status ParseDropCategories(
818
808
  const Json& json, XdsEndpointResource::DropConfig* drop_config) {
819
- std::vector<grpc_error_handle> error_list;
820
809
  if (json.type() != Json::Type::ARRAY) {
821
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
822
- "dropCategories field is not an array"));
823
- return error_list;
810
+ return absl::InvalidArgumentError("dropCategories field is not an array");
824
811
  }
812
+ std::vector<std::string> errors;
825
813
  for (size_t i = 0; i < json.array_value().size(); ++i) {
826
814
  const Json& entry = json.array_value()[i];
827
- std::vector<grpc_error_handle> child_errors =
828
- ParseDropCategory(entry, drop_config);
829
- if (!child_errors.empty()) {
830
- grpc_error_handle error = GRPC_ERROR_CREATE_FROM_CPP_STRING(
831
- absl::StrCat("errors parsing index ", i));
832
- for (size_t i = 0; i < child_errors.size(); ++i) {
833
- error = grpc_error_add_child(error, child_errors[i]);
834
- }
835
- error_list.push_back(error);
815
+ absl::Status status = ParseDropCategory(entry, drop_config);
816
+ if (!status.ok()) {
817
+ errors.emplace_back(
818
+ absl::StrCat("error parsing index ", i, ": ", status.message()));
836
819
  }
837
820
  }
838
- return error_list;
821
+ if (!errors.empty()) {
822
+ return absl::InvalidArgumentError(
823
+ absl::StrCat("errors parsing dropCategories field: [",
824
+ absl::StrJoin(errors, "; "), "]"));
825
+ }
826
+ return absl::OkStatus();
839
827
  }
840
828
 
841
- static std::vector<grpc_error_handle> ParseDropCategory(
829
+ static absl::Status ParseDropCategory(
842
830
  const Json& json, XdsEndpointResource::DropConfig* drop_config) {
843
- std::vector<grpc_error_handle> error_list;
844
831
  if (json.type() != Json::Type::OBJECT) {
845
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
846
- "dropCategories entry is not an object"));
847
- return error_list;
832
+ return absl::InvalidArgumentError(
833
+ "dropCategories entry is not an object");
848
834
  }
835
+ std::vector<std::string> errors;
849
836
  std::string category;
850
837
  auto it = json.object_value().find("category");
851
838
  if (it == json.object_value().end()) {
852
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
853
- "\"category\" field not present"));
839
+ errors.emplace_back("\"category\" field not present");
854
840
  } else if (it->second.type() != Json::Type::STRING) {
855
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
856
- "\"category\" field is not a string"));
841
+ errors.emplace_back("\"category\" field is not a string");
857
842
  } else {
858
843
  category = it->second.string_value();
859
844
  }
860
845
  uint32_t requests_per_million = 0;
861
846
  it = json.object_value().find("requests_per_million");
862
847
  if (it == json.object_value().end()) {
863
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
864
- "\"requests_per_million\" field is not present"));
848
+ errors.emplace_back("\"requests_per_million\" field is not present");
865
849
  } else if (it->second.type() != Json::Type::NUMBER) {
866
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
867
- "\"requests_per_million\" field is not a number"));
850
+ errors.emplace_back("\"requests_per_million\" field is not a number");
868
851
  } else {
869
852
  requests_per_million =
870
853
  gpr_parse_nonnegative_int(it->second.string_value().c_str());
871
854
  }
872
- if (error_list.empty()) {
873
- drop_config->AddCategory(std::move(category), requests_per_million);
855
+ if (!errors.empty()) {
856
+ return absl::InvalidArgumentError(absl::StrJoin(errors, "; "));
874
857
  }
875
- return error_list;
858
+ drop_config->AddCategory(std::move(category), requests_per_million);
859
+ return absl::OkStatus();
876
860
  }
877
861
  };
878
862
 
@@ -30,19 +30,15 @@
30
30
  #include "absl/status/status.h"
31
31
  #include "absl/status/statusor.h"
32
32
  #include "absl/strings/str_cat.h"
33
+ #include "absl/strings/str_join.h"
33
34
  #include "absl/strings/string_view.h"
34
35
 
35
36
  #include <grpc/impl/codegen/connectivity_state.h>
36
- #include <grpc/impl/codegen/grpc_types.h>
37
37
  #include <grpc/support/log.h>
38
38
 
39
39
  #include "src/core/ext/filters/client_channel/client_channel.h"
40
- #include "src/core/ext/filters/client_channel/lb_policy.h"
41
40
  #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
42
- #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
43
- #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
44
41
  #include "src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h"
45
- #include "src/core/ext/filters/client_channel/subchannel_interface.h"
46
42
  #include "src/core/lib/channel/channel_args.h"
47
43
  #include "src/core/lib/debug/trace.h"
48
44
  #include "src/core/lib/gprpp/debug_location.h"
@@ -50,13 +46,17 @@
50
46
  #include "src/core/lib/gprpp/ref_counted.h"
51
47
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
52
48
  #include "src/core/lib/gprpp/time.h"
49
+ #include "src/core/lib/gprpp/work_serializer.h"
53
50
  #include "src/core/lib/iomgr/closure.h"
54
51
  #include "src/core/lib/iomgr/error.h"
55
52
  #include "src/core/lib/iomgr/exec_ctx.h"
56
53
  #include "src/core/lib/iomgr/pollset_set.h"
57
54
  #include "src/core/lib/iomgr/timer.h"
58
- #include "src/core/lib/iomgr/work_serializer.h"
59
55
  #include "src/core/lib/json/json.h"
56
+ #include "src/core/lib/load_balancing/lb_policy.h"
57
+ #include "src/core/lib/load_balancing/lb_policy_factory.h"
58
+ #include "src/core/lib/load_balancing/lb_policy_registry.h"
59
+ #include "src/core/lib/load_balancing/subchannel_interface.h"
60
60
  #include "src/core/lib/resolver/server_address.h"
61
61
  #include "src/core/lib/transport/connectivity_state.h"
62
62
 
@@ -68,7 +68,8 @@ TraceFlag grpc_xds_cluster_manager_lb_trace(false, "xds_cluster_manager_lb");
68
68
 
69
69
  namespace {
70
70
 
71
- constexpr char kXdsClusterManager[] = "xds_cluster_manager_experimental";
71
+ constexpr absl::string_view kXdsClusterManager =
72
+ "xds_cluster_manager_experimental";
72
73
 
73
74
  // Config for xds_cluster_manager LB policy.
74
75
  class XdsClusterManagerLbConfig : public LoadBalancingPolicy::Config {
@@ -79,7 +80,7 @@ class XdsClusterManagerLbConfig : public LoadBalancingPolicy::Config {
79
80
  explicit XdsClusterManagerLbConfig(ClusterMap cluster_map)
80
81
  : cluster_map_(std::move(cluster_map)) {}
81
82
 
82
- const char* name() const override { return kXdsClusterManager; }
83
+ absl::string_view name() const override { return kXdsClusterManager; }
83
84
 
84
85
  const ClusterMap& cluster_map() const { return cluster_map_; }
85
86
 
@@ -92,7 +93,7 @@ class XdsClusterManagerLb : public LoadBalancingPolicy {
92
93
  public:
93
94
  explicit XdsClusterManagerLb(Args args);
94
95
 
95
- const char* name() const override { return kXdsClusterManager; }
96
+ absl::string_view name() const override { return kXdsClusterManager; }
96
97
 
97
98
  void UpdateLocked(UpdateArgs args) override;
98
99
  void ExitIdleLocked() override;
@@ -144,7 +145,7 @@ class XdsClusterManagerLb : public LoadBalancingPolicy {
144
145
 
145
146
  void UpdateLocked(RefCountedPtr<LoadBalancingPolicy::Config> config,
146
147
  const absl::StatusOr<ServerAddressList>& addresses,
147
- const grpc_channel_args* args);
148
+ const ChannelArgs& args);
148
149
  void ExitIdleLocked();
149
150
  void ResetBackoffLocked();
150
151
  void DeactivateLocked();
@@ -167,7 +168,7 @@ class XdsClusterManagerLb : public LoadBalancingPolicy {
167
168
  }
168
169
 
169
170
  RefCountedPtr<SubchannelInterface> CreateSubchannel(
170
- ServerAddress address, const grpc_channel_args& args) override;
171
+ ServerAddress address, const ChannelArgs& args) override;
171
172
  void UpdateState(grpc_connectivity_state state,
172
173
  const absl::Status& status,
173
174
  std::unique_ptr<SubchannelPicker> picker) override;
@@ -182,7 +183,7 @@ class XdsClusterManagerLb : public LoadBalancingPolicy {
182
183
 
183
184
  // Methods for dealing with the child policy.
184
185
  OrphanablePtr<LoadBalancingPolicy> CreateChildPolicyLocked(
185
- const grpc_channel_args* args);
186
+ const ChannelArgs& args);
186
187
 
187
188
  static void OnDelayedRemovalTimer(void* arg, grpc_error_handle error);
188
189
  void OnDelayedRemovalTimerLocked(grpc_error_handle error);
@@ -441,7 +442,7 @@ void XdsClusterManagerLb::ClusterChild::Orphan() {
441
442
 
442
443
  OrphanablePtr<LoadBalancingPolicy>
443
444
  XdsClusterManagerLb::ClusterChild::CreateChildPolicyLocked(
444
- const grpc_channel_args* args) {
445
+ const ChannelArgs& args) {
445
446
  LoadBalancingPolicy::Args lb_policy_args;
446
447
  lb_policy_args.work_serializer =
447
448
  xds_cluster_manager_policy_->work_serializer();
@@ -471,7 +472,7 @@ XdsClusterManagerLb::ClusterChild::CreateChildPolicyLocked(
471
472
  void XdsClusterManagerLb::ClusterChild::UpdateLocked(
472
473
  RefCountedPtr<LoadBalancingPolicy::Config> config,
473
474
  const absl::StatusOr<ServerAddressList>& addresses,
474
- const grpc_channel_args* args) {
475
+ const ChannelArgs& args) {
475
476
  if (xds_cluster_manager_policy_->shutting_down_) return;
476
477
  // Update child weight.
477
478
  // Reactivate if needed.
@@ -487,7 +488,7 @@ void XdsClusterManagerLb::ClusterChild::UpdateLocked(
487
488
  UpdateArgs update_args;
488
489
  update_args.config = std::move(config);
489
490
  update_args.addresses = addresses;
490
- update_args.args = grpc_channel_args_copy(args);
491
+ update_args.args = args;
491
492
  // Update the policy.
492
493
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_cluster_manager_lb_trace)) {
493
494
  gpr_log(GPR_INFO,
@@ -547,7 +548,7 @@ void XdsClusterManagerLb::ClusterChild::OnDelayedRemovalTimerLocked(
547
548
 
548
549
  RefCountedPtr<SubchannelInterface>
549
550
  XdsClusterManagerLb::ClusterChild::Helper::CreateSubchannel(
550
- ServerAddress address, const grpc_channel_args& args) {
551
+ ServerAddress address, const ChannelArgs& args) {
551
552
  if (xds_cluster_manager_child_->xds_cluster_manager_policy_->shutting_down_) {
552
553
  return nullptr;
553
554
  }
@@ -623,89 +624,80 @@ class XdsClusterManagerLbFactory : public LoadBalancingPolicyFactory {
623
624
  return MakeOrphanable<XdsClusterManagerLb>(std::move(args));
624
625
  }
625
626
 
626
- const char* name() const override { return kXdsClusterManager; }
627
+ absl::string_view name() const override { return kXdsClusterManager; }
627
628
 
628
- RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
629
- const Json& json, grpc_error_handle* error) const override {
630
- GPR_DEBUG_ASSERT(error != nullptr && GRPC_ERROR_IS_NONE(*error));
629
+ absl::StatusOr<RefCountedPtr<LoadBalancingPolicy::Config>>
630
+ ParseLoadBalancingConfig(const Json& json) const override {
631
631
  if (json.type() == Json::Type::JSON_NULL) {
632
632
  // xds_cluster_manager was mentioned as a policy in the deprecated
633
633
  // loadBalancingPolicy field or in the client API.
634
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
634
+ return absl::InvalidArgumentError(
635
635
  "field:loadBalancingPolicy error:xds_cluster_manager policy requires "
636
636
  "configuration. Please use loadBalancingConfig field of service "
637
637
  "config instead.");
638
- return nullptr;
639
638
  }
640
- std::vector<grpc_error_handle> error_list;
639
+ std::vector<std::string> errors;
641
640
  XdsClusterManagerLbConfig::ClusterMap cluster_map;
642
641
  std::set<std::string /*cluster_name*/> clusters_to_be_used;
643
642
  auto it = json.object_value().find("children");
644
643
  if (it == json.object_value().end()) {
645
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
646
- "field:children error:required field not present"));
644
+ errors.emplace_back("field:children error:required field not present");
647
645
  } else if (it->second.type() != Json::Type::OBJECT) {
648
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
649
- "field:children error:type should be object"));
646
+ errors.emplace_back("field:children error:type should be object");
650
647
  } else {
651
648
  for (const auto& p : it->second.object_value()) {
652
649
  const std::string& child_name = p.first;
653
650
  if (child_name.empty()) {
654
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
655
- "field:children element error: name cannot be empty"));
651
+ errors.emplace_back("field:children error: name cannot be empty");
656
652
  continue;
657
653
  }
658
- RefCountedPtr<LoadBalancingPolicy::Config> child_config;
659
- std::vector<grpc_error_handle> child_errors =
660
- ParseChildConfig(p.second, &child_config);
661
- if (!child_errors.empty()) {
662
- error_list.push_back(GRPC_ERROR_CREATE_FROM_VECTOR_AND_CPP_STRING(
663
- absl::StrCat("field:children name:", child_name), &child_errors));
654
+ auto config = ParseChildConfig(p.second);
655
+ if (!config.ok()) {
656
+ errors.emplace_back(
657
+ absl::StrCat("field:children name:", child_name,
658
+ " error:", config.status().message()));
664
659
  } else {
665
- cluster_map[child_name] = std::move(child_config);
660
+ cluster_map[child_name] = std::move(*config);
666
661
  clusters_to_be_used.insert(child_name);
667
662
  }
668
663
  }
669
664
  }
670
665
  if (cluster_map.empty()) {
671
- error_list.push_back(
672
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("no valid children configured"));
666
+ errors.emplace_back("no valid children configured");
673
667
  }
674
- if (!error_list.empty()) {
675
- *error = GRPC_ERROR_CREATE_FROM_VECTOR(
676
- "xds_cluster_manager_experimental LB policy config", &error_list);
677
- return nullptr;
668
+ if (!errors.empty()) {
669
+ return absl::InvalidArgumentError(absl::StrCat(
670
+ "errors parsing xds_cluster_manager_experimental LB policy config: [",
671
+ absl::StrJoin(errors, "; "), "]"));
678
672
  }
679
673
  return MakeRefCounted<XdsClusterManagerLbConfig>(std::move(cluster_map));
680
674
  }
681
675
 
682
676
  private:
683
- static std::vector<grpc_error_handle> ParseChildConfig(
684
- const Json& json,
685
- RefCountedPtr<LoadBalancingPolicy::Config>* child_config) {
686
- std::vector<grpc_error_handle> error_list;
677
+ static absl::StatusOr<RefCountedPtr<LoadBalancingPolicy::Config>>
678
+ ParseChildConfig(const Json& json) {
687
679
  if (json.type() != Json::Type::OBJECT) {
688
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
689
- "value should be of type object"));
690
- return error_list;
680
+ return absl::InvalidArgumentError("value should be of type object");
691
681
  }
682
+ RefCountedPtr<LoadBalancingPolicy::Config> child_config;
683
+ std::vector<std::string> errors;
692
684
  auto it = json.object_value().find("childPolicy");
693
685
  if (it == json.object_value().end()) {
694
- error_list.push_back(
695
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("did not find childPolicy"));
686
+ errors.emplace_back("did not find childPolicy");
696
687
  } else {
697
- grpc_error_handle parse_error = GRPC_ERROR_NONE;
698
- *child_config = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
699
- it->second, &parse_error);
700
- if (*child_config == nullptr) {
701
- GPR_DEBUG_ASSERT(!GRPC_ERROR_IS_NONE(parse_error));
702
- std::vector<grpc_error_handle> child_errors;
703
- child_errors.push_back(parse_error);
704
- error_list.push_back(
705
- GRPC_ERROR_CREATE_FROM_VECTOR("field:childPolicy", &child_errors));
688
+ auto config =
689
+ LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(it->second);
690
+ if (!config.ok()) {
691
+ errors.emplace_back(absl::StrCat("field:childPolicy error:",
692
+ config.status().message()));
693
+ } else {
694
+ child_config = std::move(*config);
706
695
  }
707
696
  }
708
- return error_list;
697
+ if (!errors.empty()) {
698
+ return absl::InvalidArgumentError(absl::StrJoin(errors, "; "));
699
+ }
700
+ return child_config;
709
701
  }
710
702
  };
711
703