grpc 1.48.0 → 1.50.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 (846) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +114 -150
  3. data/include/grpc/event_engine/endpoint_config.h +11 -5
  4. data/include/grpc/event_engine/event_engine.h +20 -17
  5. data/include/grpc/impl/codegen/atm_gcc_atomic.h +19 -28
  6. data/include/grpc/impl/codegen/atm_gcc_sync.h +0 -2
  7. data/include/grpc/impl/codegen/atm_windows.h +0 -2
  8. data/include/grpc/impl/codegen/grpc_types.h +9 -8
  9. data/include/grpc/impl/codegen/port_platform.h +0 -8
  10. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +6 -6
  11. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +2 -2
  12. data/src/core/ext/filters/client_channel/backup_poller.cc +4 -6
  13. data/src/core/ext/filters/client_channel/client_channel.cc +154 -218
  14. data/src/core/ext/filters/client_channel/client_channel.h +16 -9
  15. data/src/core/ext/filters/client_channel/client_channel_factory.cc +0 -29
  16. data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -10
  17. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +0 -16
  18. data/src/core/ext/filters/client_channel/config_selector.h +12 -4
  19. data/src/core/ext/filters/client_channel/connector.h +4 -5
  20. data/src/core/ext/filters/client_channel/http_proxy.cc +55 -74
  21. data/src/core/ext/filters/client_channel/http_proxy.h +15 -11
  22. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +20 -16
  23. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +11 -10
  24. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +0 -2
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +181 -194
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +12 -3
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +5 -1
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +1 -0
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -2
  30. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +20 -11
  31. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +250 -146
  33. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +41 -1
  34. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +35 -32
  35. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +195 -299
  36. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +237 -250
  37. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +12 -7
  38. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +431 -498
  39. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +31 -30
  40. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +27 -27
  41. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +108 -124
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +68 -76
  43. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +131 -227
  44. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +126 -121
  45. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +325 -304
  46. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +4 -8
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +431 -145
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +172 -101
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +20 -7
  50. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +18 -16
  51. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +7 -17
  52. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +11 -0
  53. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +51 -32
  54. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +87 -41
  55. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +16 -6
  56. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -13
  57. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +167 -168
  58. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +40 -32
  59. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +7 -10
  60. data/src/core/ext/filters/client_channel/retry_filter.cc +25 -36
  61. data/src/core/ext/filters/client_channel/retry_service_config.cc +30 -19
  62. data/src/core/ext/filters/client_channel/retry_service_config.h +6 -9
  63. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +6 -7
  64. data/src/core/ext/filters/client_channel/subchannel.cc +86 -121
  65. data/src/core/ext/filters/client_channel/subchannel.h +20 -11
  66. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +1 -1
  67. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +6 -76
  68. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +16 -25
  69. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +4 -6
  70. data/src/core/ext/filters/deadline/deadline_filter.cc +6 -6
  71. data/src/core/ext/filters/deadline/deadline_filter.h +2 -3
  72. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +24 -19
  73. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +9 -1
  74. data/src/core/ext/filters/fault_injection/service_config_parser.cc +17 -12
  75. data/src/core/ext/filters/fault_injection/service_config_parser.h +4 -5
  76. data/src/core/ext/filters/http/client/http_client_filter.cc +3 -5
  77. data/src/core/ext/filters/http/client/http_client_filter.h +1 -1
  78. data/src/core/ext/filters/http/client_authority_filter.cc +1 -2
  79. data/src/core/ext/filters/http/client_authority_filter.h +1 -1
  80. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +2 -4
  81. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -2
  82. data/src/core/ext/filters/http/server/http_server_filter.cc +3 -5
  83. data/src/core/ext/filters/http/server/http_server_filter.h +1 -1
  84. data/src/core/ext/filters/message_size/message_size_filter.cc +13 -7
  85. data/src/core/ext/filters/message_size/message_size_filter.h +3 -6
  86. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +16 -12
  87. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -6
  88. data/src/core/ext/filters/server_config_selector/server_config_selector.h +5 -0
  89. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +3 -5
  90. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +40 -63
  91. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +86 -107
  92. data/src/core/ext/transport/chttp2/server/chttp2_server.h +4 -6
  93. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -1
  94. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +155 -295
  95. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -2
  96. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +287 -0
  97. data/src/core/ext/transport/chttp2/transport/decode_huff.h +1018 -0
  98. data/src/core/ext/transport/chttp2/transport/flow_control.cc +139 -42
  99. data/src/core/ext/transport/chttp2/transport/flow_control.h +12 -6
  100. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +1 -2
  101. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +7 -1
  102. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +27 -28
  103. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -0
  104. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +0 -1
  105. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +8 -2
  106. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +30 -38
  107. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +1 -10
  108. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +11 -6
  109. data/src/core/ext/transport/chttp2/transport/internal.h +4 -1
  110. data/src/core/ext/transport/chttp2/transport/parsing.cc +44 -0
  111. data/src/core/ext/transport/chttp2/transport/writing.cc +3 -14
  112. data/src/core/ext/transport/inproc/inproc_transport.cc +41 -77
  113. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +5 -5
  114. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +30 -10
  115. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +4 -4
  116. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +24 -8
  117. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +8 -327
  118. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +83 -1723
  119. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +352 -0
  120. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1768 -0
  121. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +2 -2
  122. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +12 -4
  123. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +6 -4
  124. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +33 -4
  125. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +1 -1
  126. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +6 -2
  127. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +1 -1
  128. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +6 -2
  129. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +6 -2
  130. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +12 -4
  131. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +1 -1
  132. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +6 -2
  133. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  134. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -3
  135. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +14 -14
  136. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +90 -30
  137. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +21 -19
  138. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +124 -34
  139. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +3 -3
  140. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +18 -6
  141. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +23 -22
  142. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +153 -48
  143. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +1 -1
  144. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +6 -2
  145. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +1 -1
  146. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +6 -2
  147. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +11 -11
  148. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +84 -28
  149. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +7 -7
  150. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +42 -14
  151. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +1 -1
  152. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +6 -2
  153. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -23
  154. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +156 -48
  155. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +7 -7
  156. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +42 -14
  157. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
  158. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +6 -2
  159. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +1 -1
  160. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +6 -2
  161. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +2 -2
  162. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +12 -4
  163. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +12 -12
  164. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +78 -26
  165. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +9 -9
  166. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +54 -18
  167. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +1 -1
  168. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +6 -2
  169. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +21 -20
  170. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +117 -44
  171. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
  172. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +6 -2
  173. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +2 -2
  174. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +12 -4
  175. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +6 -2
  176. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
  177. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +6 -2
  178. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +1 -1
  179. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +6 -2
  180. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +3 -3
  181. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +18 -6
  182. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +5 -5
  183. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +36 -12
  184. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +3 -3
  185. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +30 -10
  186. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +1 -1
  187. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +6 -2
  188. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +37 -13
  189. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +170 -15
  190. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +5 -5
  191. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +42 -14
  192. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +1 -1
  193. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +6 -2
  194. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +7 -4
  195. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +36 -4
  196. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +1 -1
  197. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +6 -2
  198. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +6 -6
  199. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +48 -16
  200. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +8 -8
  201. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +54 -18
  202. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +21 -9
  203. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +100 -14
  204. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +7 -22
  205. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +36 -77
  206. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +121 -76
  207. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +647 -163
  208. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +3 -3
  209. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +18 -6
  210. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +34 -15
  211. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +161 -22
  212. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +1 -1
  213. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +6 -2
  214. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +1 -1
  215. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +6 -2
  216. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +2 -2
  217. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +12 -4
  218. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +1 -1
  219. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +6 -2
  220. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +1 -1
  221. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +6 -2
  222. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +46 -0
  223. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +98 -0
  224. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +1 -1
  225. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +6 -2
  226. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +2 -2
  227. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +12 -4
  228. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -0
  229. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -0
  230. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +2 -2
  231. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +12 -4
  232. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +1 -1
  233. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +6 -2
  234. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +1 -1
  235. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +6 -2
  236. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +2 -2
  237. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +30 -10
  238. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +2 -2
  239. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +18 -6
  240. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +11 -4
  241. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +58 -4
  242. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +1 -1
  243. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +6 -2
  244. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +35 -27
  245. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +177 -52
  246. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +6 -2
  247. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +1 -1
  248. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +6 -2
  249. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +10 -8
  250. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +66 -14
  251. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +3 -3
  252. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +18 -6
  253. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +5 -5
  254. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +42 -14
  255. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +2 -2
  256. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +12 -4
  257. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  258. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +6 -2
  259. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +131 -16
  260. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +632 -12
  261. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +2 -2
  262. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +12 -4
  263. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +5 -5
  264. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +30 -10
  265. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +1 -1
  266. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +6 -2
  267. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +4 -4
  268. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +24 -8
  269. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +4 -4
  270. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +24 -8
  271. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +2 -2
  272. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +12 -4
  273. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +1 -1
  274. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +6 -2
  275. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
  276. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +6 -2
  277. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
  278. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +6 -2
  279. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +3 -3
  280. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +18 -6
  281. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +1 -1
  282. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +12 -4
  283. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +2 -2
  284. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +12 -4
  285. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
  286. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +18 -6
  287. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
  288. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +42 -14
  289. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +5 -5
  290. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +30 -10
  291. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +3 -3
  292. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +18 -6
  293. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +1 -1
  294. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +6 -2
  295. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +12 -4
  296. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +2 -2
  297. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -6
  298. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
  299. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
  300. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
  301. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +6 -2
  302. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +6 -2
  303. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
  304. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +11 -11
  305. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +66 -22
  306. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +9 -9
  307. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +72 -24
  308. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  309. data/src/core/ext/upb-generated/google/api/http.upb.h +18 -6
  310. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +1 -1
  311. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +6 -2
  312. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  313. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -2
  314. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +44 -43
  315. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +177 -55
  316. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  317. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +6 -2
  318. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  319. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +6 -2
  320. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +2 -2
  321. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +18 -6
  322. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  323. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +6 -2
  324. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +6 -6
  325. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +54 -18
  326. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  327. data/src/core/ext/upb-generated/google/rpc/status.upb.h +6 -2
  328. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +2 -2
  329. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +24 -8
  330. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +6 -2
  331. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +7 -7
  332. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +60 -20
  333. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +1 -1
  334. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +12 -4
  335. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  336. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +12 -4
  337. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +6 -6
  338. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +54 -18
  339. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +2 -2
  340. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +12 -4
  341. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +7 -7
  342. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +42 -14
  343. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  344. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +23 -11
  345. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
  346. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -3
  347. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -3
  348. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
  349. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -3
  350. data/src/core/ext/upb-generated/validate/validate.upb.c +22 -22
  351. data/src/core/ext/upb-generated/validate/validate.upb.h +139 -47
  352. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +3 -3
  353. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +23 -11
  354. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +1 -1
  355. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +7 -3
  356. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +3 -3
  357. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +27 -11
  358. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +1 -1
  359. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +7 -3
  360. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  361. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +6 -2
  362. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +2 -2
  363. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +12 -4
  364. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  365. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +6 -2
  366. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +1 -1
  367. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +6 -2
  368. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  369. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +6 -2
  370. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  371. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +12 -4
  372. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  373. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +6 -2
  374. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +6 -2
  375. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +1 -1
  376. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +6 -2
  377. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +6 -6
  378. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +54 -18
  379. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +2 -2
  380. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +12 -4
  381. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +1 -1
  382. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +12 -4
  383. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +1 -1
  384. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +6 -2
  385. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +67 -274
  386. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +0 -85
  387. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +256 -0
  388. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +115 -0
  389. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +14 -11
  390. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +107 -107
  391. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +191 -187
  392. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +156 -154
  393. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +186 -183
  394. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +136 -134
  395. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +16 -16
  396. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +162 -139
  397. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  398. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +39 -31
  399. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +12 -8
  400. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  401. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +72 -75
  402. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +0 -5
  403. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +713 -670
  404. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -0
  405. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +150 -139
  406. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +5 -0
  407. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +47 -0
  408. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
  409. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +16 -12
  410. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
  411. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +477 -466
  412. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
  413. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +153 -84
  414. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +35 -0
  415. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -113
  416. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -28
  417. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  418. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
  419. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +92 -90
  420. data/src/core/ext/xds/certificate_provider_store.cc +63 -3
  421. data/src/core/ext/xds/certificate_provider_store.h +9 -1
  422. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +5 -5
  423. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +1 -1
  424. data/src/core/ext/xds/upb_utils.h +0 -21
  425. data/src/core/ext/xds/xds_api.cc +73 -102
  426. data/src/core/ext/xds/xds_api.h +26 -28
  427. data/src/core/ext/xds/xds_bootstrap.cc +5 -550
  428. data/src/core/ext/xds/xds_bootstrap.h +39 -91
  429. data/src/core/ext/xds/xds_bootstrap_grpc.cc +370 -0
  430. data/src/core/ext/xds/xds_bootstrap_grpc.h +169 -0
  431. data/src/core/ext/xds/xds_certificate_provider.h +9 -0
  432. data/src/core/ext/xds/xds_channel_stack_modifier.cc +6 -4
  433. data/src/core/ext/xds/xds_channel_stack_modifier.h +8 -0
  434. data/src/core/ext/xds/xds_client.cc +732 -1317
  435. data/src/core/ext/xds/xds_client.h +33 -59
  436. data/src/core/ext/xds/xds_client_grpc.cc +229 -0
  437. data/src/core/ext/xds/xds_client_grpc.h +79 -0
  438. data/src/core/ext/xds/xds_client_stats.cc +4 -4
  439. data/src/core/ext/xds/xds_cluster.cc +162 -165
  440. data/src/core/ext/xds/xds_cluster.h +8 -7
  441. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +12 -14
  442. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -0
  443. data/src/core/ext/xds/xds_common_types.cc +140 -108
  444. data/src/core/ext/xds/xds_common_types.h +6 -7
  445. data/src/core/ext/xds/xds_endpoint.cc +87 -85
  446. data/src/core/ext/xds/xds_endpoint.h +4 -5
  447. data/src/core/ext/xds/xds_http_fault_filter.cc +4 -11
  448. data/src/core/ext/xds/xds_http_fault_filter.h +3 -3
  449. data/src/core/ext/xds/xds_http_filters.h +3 -3
  450. data/src/core/ext/xds/xds_http_rbac_filter.cc +39 -58
  451. data/src/core/ext/xds/xds_http_rbac_filter.h +3 -3
  452. data/src/core/ext/xds/xds_lb_policy_registry.cc +21 -22
  453. data/src/core/ext/xds/xds_lb_policy_registry.h +4 -4
  454. data/src/core/ext/xds/xds_listener.cc +348 -313
  455. data/src/core/ext/xds/xds_listener.h +4 -5
  456. data/src/core/ext/xds/xds_resource_type.h +23 -9
  457. data/src/core/ext/xds/xds_route_config.cc +193 -191
  458. data/src/core/ext/xds/xds_route_config.h +31 -17
  459. data/src/core/ext/xds/xds_routing.cc +3 -6
  460. data/src/core/ext/xds/xds_routing.h +7 -9
  461. data/src/core/ext/xds/xds_server_config_fetcher.cc +81 -84
  462. data/src/core/ext/xds/xds_transport.h +86 -0
  463. data/src/core/ext/xds/xds_transport_grpc.cc +357 -0
  464. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  465. data/src/core/lib/address_utils/parse_address.cc +19 -17
  466. data/src/core/lib/address_utils/parse_address.h +8 -5
  467. data/src/core/lib/avl/avl.h +47 -25
  468. data/src/core/lib/backoff/backoff.cc +2 -4
  469. data/src/core/lib/channel/call_finalization.h +1 -3
  470. data/src/core/lib/channel/call_tracer.h +1 -1
  471. data/src/core/lib/channel/channel_args.cc +88 -19
  472. data/src/core/lib/channel/channel_args.h +218 -67
  473. data/src/core/lib/channel/channel_stack.cc +0 -1
  474. data/src/core/lib/channel/channel_stack_builder.cc +3 -3
  475. data/src/core/lib/channel/channel_stack_builder.h +2 -2
  476. data/src/core/lib/channel/channel_stack_builder_impl.cc +2 -4
  477. data/src/core/lib/channel/channel_trace.cc +3 -4
  478. data/src/core/lib/channel/channelz.cc +27 -37
  479. data/src/core/lib/channel/channelz.h +9 -0
  480. data/src/core/lib/channel/promise_based_filter.cc +18 -19
  481. data/src/core/lib/channel/promise_based_filter.h +0 -1
  482. data/src/core/lib/channel/status_util.cc +27 -0
  483. data/src/core/lib/channel/status_util.h +10 -0
  484. data/src/core/lib/config/core_configuration.cc +5 -1
  485. data/src/core/lib/config/core_configuration.h +81 -35
  486. data/src/core/lib/debug/stats.cc +39 -46
  487. data/src/core/lib/debug/stats.h +11 -13
  488. data/src/core/lib/debug/stats_data.cc +118 -614
  489. data/src/core/lib/debug/stats_data.h +67 -465
  490. data/src/core/lib/debug/trace.cc +0 -2
  491. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +12 -20
  492. data/src/core/lib/event_engine/channel_args_endpoint_config.h +13 -7
  493. data/src/core/lib/event_engine/{event_engine.cc → default_event_engine.cc} +9 -5
  494. data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine.h} +4 -8
  495. data/src/core/lib/event_engine/default_event_engine_factory.cc +20 -3
  496. data/src/core/lib/event_engine/default_event_engine_factory.h +33 -0
  497. data/src/core/lib/event_engine/executor/executor.h +38 -0
  498. data/src/core/lib/event_engine/executor/threaded_executor.cc +36 -0
  499. data/src/core/lib/event_engine/executor/threaded_executor.h +44 -0
  500. data/src/core/lib/event_engine/forkable.cc +101 -0
  501. data/src/core/lib/event_engine/forkable.h +61 -0
  502. data/src/core/lib/event_engine/poller.h +56 -0
  503. data/src/core/lib/event_engine/{iomgr_engine/iomgr_engine.cc → posix_engine/posix_engine.cc} +30 -47
  504. data/src/core/lib/event_engine/{iomgr_engine/iomgr_engine.h → posix_engine/posix_engine.h} +27 -28
  505. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer.cc +4 -5
  506. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer.h +8 -8
  507. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_heap.cc +4 -4
  508. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_heap.h +5 -5
  509. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_manager.cc +87 -30
  510. data/src/core/lib/event_engine/{iomgr_engine → posix_engine}/timer_manager.h +40 -9
  511. data/src/core/lib/event_engine/socket_notifier.h +55 -0
  512. data/src/core/lib/event_engine/thread_pool.cc +195 -0
  513. data/src/core/lib/event_engine/thread_pool.h +114 -0
  514. data/src/core/lib/event_engine/time_util.cc +30 -0
  515. data/src/core/lib/event_engine/time_util.h +32 -0
  516. data/src/core/lib/event_engine/utils.cc +44 -0
  517. data/src/core/lib/event_engine/utils.h +36 -0
  518. data/src/core/lib/event_engine/windows/iocp.cc +155 -0
  519. data/src/core/lib/event_engine/windows/iocp.h +69 -0
  520. data/src/core/lib/event_engine/windows/win_socket.cc +196 -0
  521. data/src/core/lib/event_engine/windows/win_socket.h +120 -0
  522. data/src/core/lib/event_engine/windows/windows_engine.cc +159 -0
  523. data/src/core/lib/event_engine/windows/windows_engine.h +120 -0
  524. data/src/core/lib/experiments/config.cc +146 -0
  525. data/src/core/lib/experiments/config.h +43 -0
  526. data/src/core/lib/experiments/experiments.cc +75 -0
  527. data/src/core/lib/experiments/experiments.h +56 -0
  528. data/src/core/lib/gpr/alloc.cc +1 -9
  529. data/src/core/lib/gpr/log_windows.cc +0 -1
  530. data/src/core/lib/gpr/string_util_windows.cc +3 -30
  531. data/src/core/lib/gpr/sync_abseil.cc +0 -14
  532. data/src/core/lib/gpr/sync_posix.cc +0 -14
  533. data/src/core/lib/gpr/time.cc +11 -9
  534. data/src/core/lib/gpr/time_posix.cc +0 -6
  535. data/src/core/lib/gpr/time_precise.h +1 -1
  536. data/src/core/lib/gpr/tmpfile_windows.cc +5 -7
  537. data/src/core/lib/gpr/useful.h +40 -0
  538. data/src/core/lib/gprpp/bitset.h +3 -13
  539. data/src/core/lib/gprpp/debug_location.h +39 -7
  540. data/src/core/lib/{gpr → gprpp}/env.h +25 -12
  541. data/src/core/lib/{gpr → gprpp}/env_linux.cc +20 -15
  542. data/src/core/lib/{gpr → gprpp}/env_posix.cc +11 -10
  543. data/src/core/lib/gprpp/env_windows.cc +56 -0
  544. data/src/core/lib/gprpp/fork.cc +14 -22
  545. data/src/core/lib/gprpp/fork.h +0 -8
  546. data/src/core/lib/gprpp/global_config_env.cc +7 -6
  547. data/src/core/lib/gprpp/manual_constructor.h +0 -1
  548. data/src/core/lib/gprpp/no_destruct.h +94 -0
  549. data/src/core/lib/gprpp/notification.h +67 -0
  550. data/src/core/lib/gprpp/packed_table.h +40 -0
  551. data/src/core/lib/gprpp/ref_counted_ptr.h +20 -34
  552. data/src/core/lib/gprpp/sorted_pack.h +98 -0
  553. data/src/core/lib/gprpp/status_helper.cc +1 -0
  554. data/src/core/lib/gprpp/status_helper.h +6 -0
  555. data/src/core/lib/gprpp/table.h +9 -2
  556. data/src/core/lib/gprpp/tchar.cc +49 -0
  557. data/src/core/lib/gprpp/tchar.h +33 -0
  558. data/src/core/lib/gprpp/time.cc +21 -0
  559. data/src/core/lib/gprpp/time.h +55 -0
  560. data/src/core/lib/{event_engine/iomgr_engine → gprpp}/time_averaged_stats.cc +3 -5
  561. data/src/core/lib/{event_engine/iomgr_engine → gprpp}/time_averaged_stats.h +5 -7
  562. data/src/core/lib/gprpp/validation_errors.cc +61 -0
  563. data/src/core/lib/gprpp/validation_errors.h +110 -0
  564. data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
  565. data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -27
  566. data/src/core/{ext/filters/client_channel → lib/handshaker}/proxy_mapper.h +16 -17
  567. data/src/core/lib/handshaker/proxy_mapper_registry.cc +71 -0
  568. data/src/core/lib/handshaker/proxy_mapper_registry.h +75 -0
  569. data/src/core/lib/http/httpcli.cc +12 -24
  570. data/src/core/lib/http/httpcli_security_connector.cc +11 -11
  571. data/src/core/lib/iomgr/call_combiner.cc +0 -34
  572. data/src/core/lib/iomgr/closure.h +0 -10
  573. data/src/core/lib/iomgr/combiner.cc +0 -20
  574. data/src/core/lib/iomgr/endpoint_pair_posix.cc +14 -9
  575. data/src/core/lib/iomgr/endpoint_pair_windows.cc +2 -2
  576. data/src/core/lib/iomgr/error.cc +0 -773
  577. data/src/core/lib/iomgr/error.h +0 -145
  578. data/src/core/lib/iomgr/error_cfstream.cc +0 -5
  579. data/src/core/lib/iomgr/ev_epoll1_linux.cc +1 -38
  580. data/src/core/lib/iomgr/ev_poll_posix.cc +19 -26
  581. data/src/core/lib/iomgr/exec_ctx.cc +0 -22
  582. data/src/core/lib/iomgr/exec_ctx.h +7 -31
  583. data/src/core/lib/iomgr/executor.cc +0 -10
  584. data/src/core/lib/iomgr/executor.h +0 -3
  585. data/src/core/lib/iomgr/iocp_windows.cc +1 -2
  586. data/src/core/lib/iomgr/iomgr.cc +6 -8
  587. data/src/core/lib/iomgr/iomgr_fwd.h +1 -0
  588. data/src/core/lib/iomgr/lockfree_event.cc +0 -17
  589. data/src/core/lib/iomgr/pollset.h +1 -1
  590. data/src/core/lib/iomgr/pollset_set.h +0 -1
  591. data/src/core/lib/iomgr/port.h +3 -0
  592. data/src/core/lib/iomgr/resolve_address.h +30 -6
  593. data/src/core/lib/iomgr/resolve_address_impl.h +1 -0
  594. data/src/core/lib/iomgr/resolve_address_posix.cc +43 -8
  595. data/src/core/lib/iomgr/resolve_address_posix.h +19 -5
  596. data/src/core/lib/iomgr/resolve_address_windows.cc +45 -10
  597. data/src/core/lib/iomgr/resolve_address_windows.h +19 -5
  598. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +2 -1
  599. data/src/core/lib/iomgr/socket_utils_common_posix.cc +12 -34
  600. data/src/core/lib/iomgr/socket_utils_posix.cc +83 -1
  601. data/src/core/lib/iomgr/socket_utils_posix.h +98 -6
  602. data/src/core/lib/iomgr/socket_windows.h +0 -2
  603. data/src/core/lib/iomgr/tcp_client.cc +6 -7
  604. data/src/core/lib/iomgr/tcp_client.h +11 -11
  605. data/src/core/lib/iomgr/tcp_client_cfstream.cc +6 -6
  606. data/src/core/lib/iomgr/tcp_client_posix.cc +33 -29
  607. data/src/core/lib/iomgr/tcp_client_posix.h +12 -9
  608. data/src/core/lib/iomgr/tcp_client_windows.cc +6 -6
  609. data/src/core/lib/iomgr/tcp_posix.cc +249 -120
  610. data/src/core/lib/iomgr/tcp_posix.h +3 -1
  611. data/src/core/lib/iomgr/tcp_server.cc +5 -4
  612. data/src/core/lib/iomgr/tcp_server.h +9 -6
  613. data/src/core/lib/iomgr/tcp_server_posix.cc +17 -28
  614. data/src/core/lib/iomgr/tcp_server_utils_posix.h +2 -2
  615. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +3 -3
  616. data/src/core/lib/iomgr/tcp_server_windows.cc +6 -7
  617. data/src/core/lib/iomgr/tcp_windows.cc +0 -1
  618. data/src/core/lib/iomgr/tcp_windows.h +0 -1
  619. data/src/core/lib/iomgr/timer_generic.cc +10 -12
  620. data/src/core/lib/iomgr/timer_manager.cc +1 -2
  621. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +0 -2
  622. data/src/core/lib/json/json.h +19 -22
  623. data/src/core/lib/json/json_args.h +34 -0
  624. data/src/core/lib/json/json_object_loader.cc +202 -0
  625. data/src/core/lib/json/json_object_loader.h +598 -0
  626. data/src/core/lib/json/json_reader.cc +86 -62
  627. data/src/core/lib/json/json_util.cc +9 -36
  628. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +3 -44
  629. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +20 -29
  630. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  631. data/src/core/lib/load_balancing/lb_policy_registry.cc +141 -0
  632. data/src/core/lib/load_balancing/lb_policy_registry.h +82 -0
  633. data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +6 -6
  634. data/src/core/lib/promise/activity.h +57 -10
  635. data/src/core/lib/promise/arena_promise.h +84 -81
  636. data/src/core/lib/promise/context.h +1 -2
  637. data/src/core/lib/promise/detail/basic_seq.h +43 -23
  638. data/src/core/lib/promise/detail/promise_factory.h +0 -1
  639. data/src/core/lib/promise/map.h +0 -1
  640. data/src/core/lib/promise/seq.h +25 -4
  641. data/src/core/lib/promise/sleep.cc +50 -42
  642. data/src/core/lib/promise/sleep.h +32 -23
  643. data/src/core/lib/promise/try_seq.h +26 -6
  644. data/src/core/lib/resolver/resolver.cc +0 -47
  645. data/src/core/lib/resolver/resolver.h +15 -15
  646. data/src/core/lib/resolver/resolver_factory.h +2 -3
  647. data/src/core/lib/resolver/resolver_registry.cc +1 -1
  648. data/src/core/lib/resolver/resolver_registry.h +2 -3
  649. data/src/core/lib/resolver/server_address.cc +11 -15
  650. data/src/core/lib/resolver/server_address.h +4 -8
  651. data/src/core/lib/resource_quota/api.cc +10 -1
  652. data/src/core/lib/resource_quota/api.h +6 -0
  653. data/src/core/lib/resource_quota/arena.cc +19 -1
  654. data/src/core/lib/resource_quota/arena.h +24 -2
  655. data/src/core/lib/resource_quota/memory_quota.cc +143 -19
  656. data/src/core/lib/resource_quota/memory_quota.h +85 -17
  657. data/src/core/lib/resource_quota/periodic_update.cc +78 -0
  658. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  659. data/src/core/lib/security/authorization/evaluate_args.cc +10 -7
  660. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -2
  661. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -1
  662. data/src/core/lib/security/authorization/matchers.cc +13 -10
  663. data/src/core/lib/security/authorization/rbac_policy.cc +0 -1
  664. data/src/core/{ext/xds → lib/security/certificate_provider}/certificate_provider_factory.h +3 -3
  665. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +60 -0
  666. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +70 -0
  667. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -3
  668. data/src/core/lib/security/credentials/alts/alts_credentials.h +3 -4
  669. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +1 -0
  670. data/src/core/lib/security/credentials/composite/composite_credentials.cc +3 -7
  671. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -4
  672. data/src/core/lib/security/credentials/credentials.h +16 -12
  673. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +33 -27
  674. data/src/core/lib/security/credentials/external/external_account_credentials.cc +34 -24
  675. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -6
  676. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -6
  677. data/src/core/lib/security/credentials/fake/fake_credentials.cc +3 -12
  678. data/src/core/lib/security/credentials/fake/fake_credentials.h +0 -4
  679. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +5 -8
  680. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +35 -32
  681. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +1 -3
  682. data/src/core/lib/security/credentials/iam/iam_credentials.cc +0 -1
  683. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +3 -3
  684. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +3 -4
  685. data/src/core/lib/security/credentials/jwt/json_token.cc +12 -3
  686. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -8
  687. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +14 -15
  688. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +1 -1
  689. data/src/core/lib/security/credentials/local/local_credentials.cc +3 -4
  690. data/src/core/lib/security/credentials/local/local_credentials.h +3 -4
  691. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +18 -20
  692. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +0 -1
  693. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +13 -21
  694. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +3 -4
  695. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +4 -3
  696. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +10 -2
  697. data/src/core/lib/security/credentials/tls/tls_credentials.cc +13 -25
  698. data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -4
  699. data/src/core/lib/security/credentials/tls/tls_utils.cc +3 -1
  700. data/src/core/lib/security/credentials/xds/xds_credentials.cc +13 -30
  701. data/src/core/lib/security/credentials/xds/xds_credentials.h +3 -3
  702. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +10 -18
  703. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +26 -38
  704. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
  705. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +5 -5
  706. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +6 -5
  707. data/src/core/lib/security/security_connector/local/local_security_connector.cc +13 -11
  708. data/src/core/lib/security/security_connector/local/local_security_connector.h +2 -2
  709. data/src/core/lib/security/security_connector/security_connector.h +5 -3
  710. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +5 -4
  711. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +5 -5
  712. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +5 -5
  713. data/src/core/lib/security/transport/auth_filters.h +1 -1
  714. data/src/core/lib/security/transport/client_auth_filter.cc +15 -5
  715. data/src/core/lib/security/transport/secure_endpoint.cc +0 -4
  716. data/src/core/lib/security/transport/security_handshaker.cc +32 -44
  717. data/src/core/lib/security/transport/security_handshaker.h +2 -1
  718. data/src/core/lib/service_config/service_config.h +11 -0
  719. data/src/core/lib/service_config/service_config_impl.cc +98 -97
  720. data/src/core/lib/service_config/service_config_impl.h +11 -13
  721. data/src/core/lib/service_config/service_config_parser.cc +26 -27
  722. data/src/core/lib/service_config/service_config_parser.h +10 -22
  723. data/src/core/lib/slice/percent_encoding.cc +4 -13
  724. data/src/core/lib/slice/slice.cc +10 -4
  725. data/src/core/lib/surface/call.cc +9 -13
  726. data/src/core/lib/surface/channel.cc +9 -8
  727. data/src/core/lib/surface/channel.h +1 -1
  728. data/src/core/lib/surface/completion_queue.cc +16 -30
  729. data/src/core/lib/surface/completion_queue.h +1 -4
  730. data/src/core/lib/surface/completion_queue_factory.cc +5 -0
  731. data/src/core/lib/surface/init.cc +17 -16
  732. data/src/core/lib/surface/init_internally.cc +24 -0
  733. data/src/core/lib/surface/init_internally.h +28 -0
  734. data/src/core/lib/surface/lame_client.cc +2 -3
  735. data/src/core/lib/surface/lame_client.h +1 -1
  736. data/src/core/lib/surface/server.cc +8 -19
  737. data/src/core/lib/surface/server.h +11 -13
  738. data/src/core/lib/surface/validate_metadata.cc +4 -14
  739. data/src/core/lib/surface/version.cc +2 -2
  740. data/src/core/lib/transport/bdp_estimator.cc +1 -3
  741. data/src/core/lib/transport/connectivity_state.cc +0 -1
  742. data/src/core/lib/transport/connectivity_state.h +1 -1
  743. data/src/core/lib/transport/error_utils.cc +0 -36
  744. data/src/core/lib/transport/handshaker.cc +7 -9
  745. data/src/core/lib/transport/handshaker.h +4 -5
  746. data/src/core/lib/transport/handshaker_factory.h +2 -3
  747. data/src/core/lib/transport/handshaker_registry.cc +2 -1
  748. data/src/core/lib/transport/handshaker_registry.h +2 -4
  749. data/src/core/lib/transport/http_connect_handshaker.cc +16 -16
  750. data/src/core/lib/transport/metadata_batch.cc +7 -3
  751. data/src/core/lib/transport/metadata_batch.h +61 -14
  752. data/src/core/lib/transport/parsed_metadata.h +4 -3
  753. data/src/core/lib/transport/status_conversion.cc +1 -3
  754. data/src/core/lib/transport/tcp_connect_handshaker.cc +20 -22
  755. data/src/core/lib/transport/transport.h +0 -8
  756. data/src/core/lib/transport/transport_impl.h +0 -1
  757. data/src/core/plugin_registry/grpc_plugin_registry.cc +23 -46
  758. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +13 -25
  759. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +40 -21
  760. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
  761. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +14 -7
  762. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +1 -1
  763. data/src/core/tsi/fake_transport_security.cc +53 -30
  764. data/src/core/tsi/local_transport_security.cc +9 -5
  765. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +10 -1
  766. data/src/core/tsi/ssl_transport_security.cc +47 -23
  767. data/src/core/tsi/transport_security.cc +18 -6
  768. data/src/core/tsi/transport_security.h +2 -1
  769. data/src/core/tsi/transport_security_interface.h +17 -5
  770. data/src/ruby/ext/grpc/extconf.rb +2 -0
  771. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  772. data/src/ruby/lib/grpc/version.rb +1 -1
  773. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
  774. data/src/ruby/spec/channel_spec.rb +5 -0
  775. data/src/ruby/spec/generic/server_interceptors_spec.rb +1 -1
  776. data/src/ruby/spec/user_agent_spec.rb +1 -1
  777. data/third_party/abseil-cpp/absl/functional/any_invocable.h +313 -0
  778. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +857 -0
  779. data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
  780. data/third_party/upb/upb/arena.c +277 -0
  781. data/third_party/upb/upb/arena.h +225 -0
  782. data/third_party/upb/upb/array.c +114 -0
  783. data/third_party/upb/upb/array.h +83 -0
  784. data/third_party/upb/upb/collections.h +36 -0
  785. data/third_party/upb/upb/decode.c +161 -65
  786. data/third_party/upb/upb/decode.h +1 -0
  787. data/third_party/upb/upb/decode_fast.c +1 -1
  788. data/third_party/upb/upb/def.c +10 -2
  789. data/third_party/upb/upb/def.h +8 -1
  790. data/third_party/upb/upb/def.hpp +7 -4
  791. data/third_party/upb/upb/encode.c +29 -20
  792. data/third_party/upb/upb/encode.h +16 -6
  793. data/third_party/upb/upb/extension_registry.c +93 -0
  794. data/third_party/upb/upb/extension_registry.h +84 -0
  795. data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +5 -5
  796. data/third_party/upb/upb/internal/table.h +385 -0
  797. data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +3 -3
  798. data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
  799. data/third_party/upb/upb/json_decode.c +1512 -0
  800. data/third_party/upb/upb/json_decode.h +47 -0
  801. data/third_party/upb/upb/json_encode.c +7 -3
  802. data/third_party/upb/upb/json_encode.h +6 -3
  803. data/third_party/upb/upb/map.c +108 -0
  804. data/third_party/upb/upb/map.h +117 -0
  805. data/third_party/upb/upb/message_value.h +66 -0
  806. data/third_party/upb/upb/mini_table.c +1147 -0
  807. data/third_party/upb/upb/mini_table.h +189 -0
  808. data/third_party/upb/upb/mini_table.hpp +112 -0
  809. data/third_party/upb/upb/msg.c +2 -62
  810. data/third_party/upb/upb/msg.h +2 -45
  811. data/third_party/upb/upb/msg_internal.h +28 -22
  812. data/third_party/upb/upb/port_def.inc +2 -1
  813. data/third_party/upb/upb/port_undef.inc +1 -0
  814. data/third_party/upb/upb/reflection.c +2 -159
  815. data/third_party/upb/upb/reflection.h +2 -112
  816. data/third_party/upb/upb/status.c +86 -0
  817. data/third_party/upb/upb/status.h +66 -0
  818. data/third_party/upb/upb/table.c +2 -2
  819. data/third_party/upb/upb/table_internal.h +3 -352
  820. data/third_party/upb/upb/text_encode.c +3 -2
  821. data/third_party/upb/upb/upb.c +4 -290
  822. data/third_party/upb/upb/upb.h +7 -196
  823. metadata +117 -51
  824. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -50
  825. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +0 -190
  826. data/src/core/ext/filters/client_channel/lb_policy_registry.h +0 -70
  827. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -90
  828. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +0 -55
  829. data/src/core/ext/xds/certificate_provider_registry.cc +0 -103
  830. data/src/core/ext/xds/certificate_provider_registry.h +0 -59
  831. data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +0 -123
  832. data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +0 -70
  833. data/src/core/lib/event_engine/promise.h +0 -69
  834. data/src/core/lib/gpr/env_windows.cc +0 -74
  835. data/src/core/lib/gpr/string_windows.h +0 -32
  836. data/src/core/lib/iomgr/error_internal.h +0 -66
  837. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
  838. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
  839. data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
  840. data/src/core/lib/iomgr/executor/threadpool.h +0 -150
  841. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  842. data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
  843. data/src/core/lib/profiling/basic_timers.cc +0 -295
  844. data/src/core/lib/profiling/stap_timers.cc +0 -50
  845. data/src/core/lib/profiling/timers.h +0 -94
  846. data/src/core/lib/promise/detail/switch.h +0 -1455
@@ -27,11 +27,11 @@
27
27
  #include <utility>
28
28
  #include <vector>
29
29
 
30
- #include "absl/container/inlined_vector.h"
31
30
  #include "absl/memory/memory.h"
32
31
  #include "absl/status/status.h"
33
32
  #include "absl/status/statusor.h"
34
33
  #include "absl/strings/str_cat.h"
34
+ #include "absl/strings/str_join.h"
35
35
  #include "absl/strings/string_view.h"
36
36
  #include "absl/types/optional.h"
37
37
 
@@ -39,34 +39,36 @@
39
39
  #include <grpc/impl/codegen/grpc_types.h>
40
40
  #include <grpc/support/log.h>
41
41
 
42
- #include "src/core/ext/filters/client_channel/lb_policy.h"
43
42
  #include "src/core/ext/filters/client_channel/lb_policy/address_filtering.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/outlier_detection/outlier_detection.h"
46
45
  #include "src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h"
47
46
  #include "src/core/ext/filters/client_channel/lb_policy/xds/xds.h"
48
47
  #include "src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h"
49
- #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
50
- #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
51
48
  #include "src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h"
52
- #include "src/core/ext/filters/client_channel/subchannel_interface.h"
53
49
  #include "src/core/ext/xds/xds_bootstrap.h"
50
+ #include "src/core/ext/xds/xds_bootstrap_grpc.h"
54
51
  #include "src/core/ext/xds/xds_client.h"
52
+ #include "src/core/ext/xds/xds_client_grpc.h"
55
53
  #include "src/core/ext/xds/xds_client_stats.h"
56
54
  #include "src/core/ext/xds/xds_endpoint.h"
57
55
  #include "src/core/ext/xds/xds_resource_type_impl.h"
58
56
  #include "src/core/lib/channel/channel_args.h"
59
57
  #include "src/core/lib/config/core_configuration.h"
60
58
  #include "src/core/lib/debug/trace.h"
61
- #include "src/core/lib/gpr/string.h"
62
59
  #include "src/core/lib/gprpp/debug_location.h"
63
60
  #include "src/core/lib/gprpp/orphanable.h"
64
61
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
65
- #include "src/core/lib/gprpp/time.h"
66
- #include "src/core/lib/iomgr/error.h"
62
+ #include "src/core/lib/gprpp/validation_errors.h"
63
+ #include "src/core/lib/gprpp/work_serializer.h"
67
64
  #include "src/core/lib/iomgr/pollset_set.h"
68
- #include "src/core/lib/iomgr/work_serializer.h"
69
65
  #include "src/core/lib/json/json.h"
66
+ #include "src/core/lib/json/json_args.h"
67
+ #include "src/core/lib/json/json_object_loader.h"
68
+ #include "src/core/lib/load_balancing/lb_policy.h"
69
+ #include "src/core/lib/load_balancing/lb_policy_factory.h"
70
+ #include "src/core/lib/load_balancing/lb_policy_registry.h"
71
+ #include "src/core/lib/load_balancing/subchannel_interface.h"
70
72
  #include "src/core/lib/resolver/resolver.h"
71
73
  #include "src/core/lib/resolver/resolver_registry.h"
72
74
  #include "src/core/lib/resolver/server_address.h"
@@ -82,14 +84,15 @@ const char* kXdsLocalityNameAttributeKey = "xds_locality_name";
82
84
 
83
85
  namespace {
84
86
 
85
- constexpr char kXdsClusterResolver[] = "xds_cluster_resolver_experimental";
87
+ constexpr absl::string_view kXdsClusterResolver =
88
+ "xds_cluster_resolver_experimental";
86
89
 
87
90
  // Config for EDS LB policy.
88
91
  class XdsClusterResolverLbConfig : public LoadBalancingPolicy::Config {
89
92
  public:
90
93
  struct DiscoveryMechanism {
91
94
  std::string cluster_name;
92
- absl::optional<XdsBootstrap::XdsServer> lrs_load_reporting_server;
95
+ absl::optional<GrpcXdsBootstrap::GrpcXdsServer> lrs_load_reporting_server;
93
96
  uint32_t max_concurrent_requests;
94
97
  enum DiscoveryMechanismType {
95
98
  EDS,
@@ -98,6 +101,13 @@ class XdsClusterResolverLbConfig : public LoadBalancingPolicy::Config {
98
101
  DiscoveryMechanismType type;
99
102
  std::string eds_service_name;
100
103
  std::string dns_hostname;
104
+
105
+ // This is type Json::Object instead of OutlierDetectionConfig, because we
106
+ // don't actually need to validate the contents of the outlier detection
107
+ // config here. In this case, the JSON is generated by the CDS policy
108
+ // instead of coming from service config, so it's not actually any better
109
+ // to catch the problem here than it is to catch it in the
110
+ // outlier_detection policy itself, so here we just act as a pass-through.
101
111
  absl::optional<Json::Object> outlier_detection_lb_config;
102
112
 
103
113
  bool operator==(const DiscoveryMechanism& other) const {
@@ -109,23 +119,37 @@ class XdsClusterResolverLbConfig : public LoadBalancingPolicy::Config {
109
119
  dns_hostname == other.dns_hostname &&
110
120
  outlier_detection_lb_config == other.outlier_detection_lb_config);
111
121
  }
122
+
123
+ static const JsonLoaderInterface* JsonLoader(const JsonArgs&);
124
+ void JsonPostLoad(const Json& json, const JsonArgs& args,
125
+ ValidationErrors* errors);
112
126
  };
113
127
 
114
- XdsClusterResolverLbConfig(
115
- std::vector<DiscoveryMechanism> discovery_mechanisms, Json xds_lb_policy)
116
- : discovery_mechanisms_(std::move(discovery_mechanisms)),
117
- xds_lb_policy_(std::move(xds_lb_policy)) {}
128
+ XdsClusterResolverLbConfig() = default;
129
+
130
+ XdsClusterResolverLbConfig(const XdsClusterResolverLbConfig&) = delete;
131
+ XdsClusterResolverLbConfig& operator=(const XdsClusterResolverLbConfig&) =
132
+ delete;
133
+
134
+ XdsClusterResolverLbConfig(XdsClusterResolverLbConfig&& other) = delete;
135
+ XdsClusterResolverLbConfig& operator=(XdsClusterResolverLbConfig&& other) =
136
+ delete;
137
+
138
+ absl::string_view name() const override { return kXdsClusterResolver; }
118
139
 
119
- const char* name() const override { return kXdsClusterResolver; }
120
140
  const std::vector<DiscoveryMechanism>& discovery_mechanisms() const {
121
141
  return discovery_mechanisms_;
122
142
  }
123
143
 
124
144
  const Json& xds_lb_policy() const { return xds_lb_policy_; }
125
145
 
146
+ static const JsonLoaderInterface* JsonLoader(const JsonArgs&);
147
+ void JsonPostLoad(const Json& json, const JsonArgs& args,
148
+ ValidationErrors* errors);
149
+
126
150
  private:
127
151
  std::vector<DiscoveryMechanism> discovery_mechanisms_;
128
- Json xds_lb_policy_;
152
+ Json xds_lb_policy_ = Json::Object{{"ROUND_ROBIN", Json::Object()}};
129
153
  };
130
154
 
131
155
  // Xds Cluster Resolver LB policy.
@@ -133,9 +157,9 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
133
157
  public:
134
158
  XdsClusterResolverLb(RefCountedPtr<XdsClient> xds_client, Args args);
135
159
 
136
- const char* name() const override { return kXdsClusterResolver; }
160
+ absl::string_view name() const override { return kXdsClusterResolver; }
137
161
 
138
- void UpdateLocked(UpdateArgs args) override;
162
+ absl::Status UpdateLocked(UpdateArgs args) override;
139
163
  void ResetBackoffLocked() override;
140
164
  void ExitIdleLocked() override;
141
165
 
@@ -224,16 +248,44 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
224
248
  // in methods of this class rather than in lambdas to work around an MSVC
225
249
  // bug.
226
250
  void OnResourceChangedHelper(XdsEndpointResource update) {
251
+ std::string resolution_note;
252
+ if (update.priorities.empty()) {
253
+ resolution_note = absl::StrCat(
254
+ "EDS resource ", discovery_mechanism_->GetEdsResourceName(),
255
+ " contains no localities");
256
+ } else {
257
+ std::set<std::string> empty_localities;
258
+ for (const auto& priority : update.priorities) {
259
+ for (const auto& p : priority.localities) {
260
+ if (p.second.endpoints.empty()) {
261
+ empty_localities.insert(p.first->AsHumanReadableString());
262
+ }
263
+ }
264
+ }
265
+ if (!empty_localities.empty()) {
266
+ resolution_note = absl::StrCat(
267
+ "EDS resource ", discovery_mechanism_->GetEdsResourceName(),
268
+ " contains empty localities: [",
269
+ absl::StrJoin(empty_localities, "; "), "]");
270
+ }
271
+ }
227
272
  discovery_mechanism_->parent()->OnEndpointChanged(
228
- discovery_mechanism_->index(), std::move(update));
273
+ discovery_mechanism_->index(), std::move(update),
274
+ std::move(resolution_note));
229
275
  }
230
276
  void OnErrorHelper(absl::Status status) {
231
- discovery_mechanism_->parent()->OnError(discovery_mechanism_->index(),
232
- status);
277
+ discovery_mechanism_->parent()->OnError(
278
+ discovery_mechanism_->index(),
279
+ absl::StrCat("EDS watcher error for resource ",
280
+ discovery_mechanism_->GetEdsResourceName(), " (",
281
+ status.ToString(), ")"));
233
282
  }
234
283
  void OnResourceDoesNotExistHelper() {
235
284
  discovery_mechanism_->parent()->OnResourceDoesNotExist(
236
- discovery_mechanism_->index());
285
+ discovery_mechanism_->index(),
286
+ absl::StrCat("EDS resource ",
287
+ discovery_mechanism_->GetEdsResourceName(),
288
+ " does not exist"));
237
289
  }
238
290
  RefCountedPtr<EdsDiscoveryMechanism> discovery_mechanism_;
239
291
  };
@@ -288,6 +340,11 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
288
340
  // access protected member in base class.
289
341
  friend class ResolverResultHandler;
290
342
 
343
+ absl::string_view GetDnsHostname() const {
344
+ auto& config = parent()->config_->discovery_mechanisms()[index()];
345
+ return config.dns_hostname;
346
+ }
347
+
291
348
  OrphanablePtr<Resolver> resolver_;
292
349
  };
293
350
 
@@ -295,6 +352,8 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
295
352
  OrphanablePtr<DiscoveryMechanism> discovery_mechanism;
296
353
  // Most recent update reported by the discovery mechanism.
297
354
  absl::optional<XdsEndpointResource> latest_update;
355
+ // Last resolution note reported by the discovery mechanism, if any.
356
+ std::string resolution_note;
298
357
  // State used to retain child policy names for priority policy.
299
358
  std::vector<size_t /*child_number*/> priority_child_numbers;
300
359
  size_t next_available_child_number = 0;
@@ -317,7 +376,7 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
317
376
  }
318
377
 
319
378
  RefCountedPtr<SubchannelInterface> CreateSubchannel(
320
- ServerAddress address, const grpc_channel_args& args) override;
379
+ ServerAddress address, const ChannelArgs& args) override;
321
380
  void UpdateState(grpc_connectivity_state state, const absl::Status& status,
322
381
  std::unique_ptr<SubchannelPicker> picker) override;
323
382
  // This is a no-op, because we get the addresses from the xds
@@ -335,25 +394,26 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
335
394
 
336
395
  void ShutdownLocked() override;
337
396
 
338
- void OnEndpointChanged(size_t index, XdsEndpointResource update);
339
- void OnError(size_t index, absl::Status status);
340
- void OnResourceDoesNotExist(size_t index);
397
+ void OnEndpointChanged(size_t index, XdsEndpointResource update,
398
+ std::string resolution_note);
399
+ void OnError(size_t index, std::string resolution_note);
400
+ void OnResourceDoesNotExist(size_t index, std::string resolution_note);
341
401
 
342
402
  void MaybeDestroyChildPolicyLocked();
343
403
 
344
- void UpdateChildPolicyLocked();
404
+ absl::Status UpdateChildPolicyLocked();
345
405
  OrphanablePtr<LoadBalancingPolicy> CreateChildPolicyLocked(
346
- const grpc_channel_args* args);
406
+ const ChannelArgs& args);
347
407
  ServerAddressList CreateChildPolicyAddressesLocked();
408
+ std::string CreateChildPolicyResolutionNoteLocked();
348
409
  RefCountedPtr<Config> CreateChildPolicyConfigLocked();
349
- grpc_channel_args* CreateChildPolicyArgsLocked(
350
- const grpc_channel_args* args_in);
410
+ ChannelArgs CreateChildPolicyArgsLocked(const ChannelArgs& args_in);
351
411
 
352
412
  // The xds client and endpoint watcher.
353
413
  RefCountedPtr<XdsClient> xds_client_;
354
414
 
355
415
  // Current channel args and config from the resolver.
356
- const grpc_channel_args* args_ = nullptr;
416
+ ChannelArgs args_;
357
417
  RefCountedPtr<XdsClusterResolverLbConfig> config_;
358
418
 
359
419
  // Internal state.
@@ -371,7 +431,7 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
371
431
 
372
432
  RefCountedPtr<SubchannelInterface>
373
433
  XdsClusterResolverLb::Helper::CreateSubchannel(ServerAddress address,
374
- const grpc_channel_args& args) {
434
+ const ChannelArgs& args) {
375
435
  if (xds_cluster_resolver_policy_->shutting_down_) return nullptr;
376
436
  return xds_cluster_resolver_policy_->channel_control_helper()
377
437
  ->CreateSubchannel(std::move(address), args);
@@ -441,30 +501,26 @@ void XdsClusterResolverLb::EdsDiscoveryMechanism::Orphan() {
441
501
  //
442
502
 
443
503
  void XdsClusterResolverLb::LogicalDNSDiscoveryMechanism::Start() {
444
- std::string target =
445
- parent()->config_->discovery_mechanisms()[index()].dns_hostname;
446
- grpc_channel_args* args = nullptr;
447
- FakeResolverResponseGenerator* fake_resolver_response_generator =
448
- grpc_channel_args_find_pointer<FakeResolverResponseGenerator>(
449
- parent()->args_,
504
+ std::string target;
505
+ ChannelArgs args = parent()->args_;
506
+ auto* fake_resolver_response_generator =
507
+ args.GetPointer<FakeResolverResponseGenerator>(
450
508
  GRPC_ARG_XDS_LOGICAL_DNS_CLUSTER_FAKE_RESOLVER_RESPONSE_GENERATOR);
451
509
  if (fake_resolver_response_generator != nullptr) {
452
- target = absl::StrCat("fake:", target);
453
- grpc_arg new_arg = FakeResolverResponseGenerator::MakeChannelArg(
454
- fake_resolver_response_generator);
455
- args = grpc_channel_args_copy_and_add(parent()->args_, &new_arg, 1);
510
+ target = absl::StrCat("fake:", GetDnsHostname());
511
+ args = args.SetObject(fake_resolver_response_generator->Ref());
456
512
  } else {
457
- target = absl::StrCat("dns:", target);
458
- args = grpc_channel_args_copy(parent()->args_);
513
+ target = absl::StrCat("dns:", GetDnsHostname());
459
514
  }
460
515
  resolver_ = CoreConfiguration::Get().resolver_registry().CreateResolver(
461
516
  target.c_str(), args, parent()->interested_parties(),
462
517
  parent()->work_serializer(),
463
518
  absl::make_unique<ResolverResultHandler>(
464
519
  Ref(DEBUG_LOCATION, "LogicalDNSDiscoveryMechanism")));
465
- grpc_channel_args_destroy(args);
466
520
  if (resolver_ == nullptr) {
467
- parent()->OnResourceDoesNotExist(index());
521
+ parent()->OnResourceDoesNotExist(
522
+ index(),
523
+ absl::StrCat("error creating DNS resolver for ", GetDnsHostname()));
468
524
  return;
469
525
  }
470
526
  resolver_->StartLocked();
@@ -494,14 +550,18 @@ void XdsClusterResolverLb::LogicalDNSDiscoveryMechanism::Orphan() {
494
550
 
495
551
  void XdsClusterResolverLb::LogicalDNSDiscoveryMechanism::ResolverResultHandler::
496
552
  ReportResult(Resolver::Result result) {
553
+ XdsClusterResolverLb* lb_policy = discovery_mechanism_->parent();
554
+ size_t index = discovery_mechanism_->index();
497
555
  if (!result.addresses.ok()) {
498
- discovery_mechanism_->parent()->OnError(discovery_mechanism_->index(),
499
- result.addresses.status());
556
+ if (result.resolution_note.empty()) {
557
+ result.resolution_note = absl::StrCat(
558
+ "DNS resolution failed for ", discovery_mechanism_->GetDnsHostname(),
559
+ " (", result.addresses.status().ToString(), ")");
560
+ }
561
+ lb_policy->OnError(index, result.resolution_note);
500
562
  return;
501
563
  }
502
564
  // Convert resolver result to EDS update.
503
- // TODO(roth): Figure out a way to pass resolution_note through to the
504
- // child policy.
505
565
  XdsEndpointResource update;
506
566
  XdsEndpointResource::Priority::Locality locality;
507
567
  locality.name = MakeRefCounted<XdsLocalityName>("", "", "");
@@ -510,8 +570,8 @@ void XdsClusterResolverLb::LogicalDNSDiscoveryMechanism::ResolverResultHandler::
510
570
  XdsEndpointResource::Priority priority;
511
571
  priority.localities.emplace(locality.name.get(), std::move(locality));
512
572
  update.priorities.emplace_back(std::move(priority));
513
- discovery_mechanism_->parent()->OnEndpointChanged(
514
- discovery_mechanism_->index(), std::move(update));
573
+ lb_policy->OnEndpointChanged(index, std::move(update),
574
+ std::move(result.resolution_note));
515
575
  }
516
576
 
517
577
  //
@@ -560,9 +620,7 @@ void XdsClusterResolverLb::ShutdownLocked() {
560
620
  MaybeDestroyChildPolicyLocked();
561
621
  discovery_mechanisms_.clear();
562
622
  xds_client_.reset(DEBUG_LOCATION, "XdsClusterResolverLb");
563
- // Destroy channel args.
564
- grpc_channel_args_destroy(args_);
565
- args_ = nullptr;
623
+ args_ = ChannelArgs();
566
624
  }
567
625
 
568
626
  void XdsClusterResolverLb::MaybeDestroyChildPolicyLocked() {
@@ -573,20 +631,19 @@ void XdsClusterResolverLb::MaybeDestroyChildPolicyLocked() {
573
631
  }
574
632
  }
575
633
 
576
- void XdsClusterResolverLb::UpdateLocked(UpdateArgs args) {
634
+ absl::Status XdsClusterResolverLb::UpdateLocked(UpdateArgs args) {
577
635
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_cluster_resolver_trace)) {
578
636
  gpr_log(GPR_INFO, "[xds_cluster_resolver_lb %p] Received update", this);
579
637
  }
580
- const bool is_initial_update = args_ == nullptr;
638
+ const bool is_initial_update = args_ == ChannelArgs();
581
639
  // Update config.
582
640
  auto old_config = std::move(config_);
583
641
  config_ = std::move(args.config);
584
642
  // Update args.
585
- grpc_channel_args_destroy(args_);
586
- args_ = args.args;
587
- args.args = nullptr;
643
+ args_ = std::move(args.args);
588
644
  // Update child policy if needed.
589
- if (child_policy_ != nullptr) UpdateChildPolicyLocked();
645
+ absl::Status status;
646
+ if (child_policy_ != nullptr) status = UpdateChildPolicyLocked();
590
647
  // Create endpoint watcher if needed.
591
648
  if (is_initial_update) {
592
649
  for (const auto& config : config_->discovery_mechanisms()) {
@@ -612,6 +669,7 @@ void XdsClusterResolverLb::UpdateLocked(UpdateArgs args) {
612
669
  discovery_mechanism.discovery_mechanism->Start();
613
670
  }
614
671
  }
672
+ return status;
615
673
  }
616
674
 
617
675
  void XdsClusterResolverLb::ResetBackoffLocked() {
@@ -625,13 +683,14 @@ void XdsClusterResolverLb::ExitIdleLocked() {
625
683
  }
626
684
 
627
685
  void XdsClusterResolverLb::OnEndpointChanged(size_t index,
628
- XdsEndpointResource update) {
686
+ XdsEndpointResource update,
687
+ std::string resolution_note) {
629
688
  if (shutting_down_) return;
630
689
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_cluster_resolver_trace)) {
631
690
  gpr_log(GPR_INFO,
632
691
  "[xds_cluster_resolver_lb %p] Received update from xds client"
633
- " for discovery mechanism %" PRIuPTR "",
634
- this, index);
692
+ " for discovery mechanism %" PRIuPTR " (resolution_note=\"%s\")",
693
+ this, index, resolution_note.c_str());
635
694
  }
636
695
  DiscoveryMechanismEntry& discovery_entry = discovery_mechanisms_[index];
637
696
  // We need at least one priority for each discovery mechanism, just so that we
@@ -704,6 +763,7 @@ void XdsClusterResolverLb::OnEndpointChanged(size_t index,
704
763
  }
705
764
  // Save update.
706
765
  discovery_entry.latest_update = std::move(update);
766
+ discovery_entry.resolution_note = std::move(resolution_note);
707
767
  discovery_entry.priority_child_numbers = std::move(priority_child_numbers);
708
768
  // If any discovery mechanism has not received its first update,
709
769
  // wait until that happens before creating the child policy.
@@ -718,30 +778,33 @@ void XdsClusterResolverLb::OnEndpointChanged(size_t index,
718
778
  if (!mechanism.latest_update.has_value()) return;
719
779
  }
720
780
  // Update child policy.
721
- UpdateChildPolicyLocked();
781
+ // TODO(roth): If the child policy reports an error with the update,
782
+ // we need to propagate that error back to the resolver somehow.
783
+ (void)UpdateChildPolicyLocked();
722
784
  }
723
785
 
724
- void XdsClusterResolverLb::OnError(size_t index, absl::Status status) {
786
+ void XdsClusterResolverLb::OnError(size_t index, std::string resolution_note) {
725
787
  gpr_log(GPR_ERROR,
726
788
  "[xds_cluster_resolver_lb %p] discovery mechanism %" PRIuPTR
727
- " xds watcher reported error: %s",
728
- this, index, status.ToString().c_str());
789
+ " reported error: %s",
790
+ this, index, resolution_note.c_str());
729
791
  if (shutting_down_) return;
730
792
  if (!discovery_mechanisms_[index].latest_update.has_value()) {
731
- // Call OnEndpointChanged with an empty update just like
732
- // OnResourceDoesNotExist.
733
- OnEndpointChanged(index, XdsEndpointResource());
793
+ // Call OnEndpointChanged() with an empty update just like
794
+ // OnResourceDoesNotExist().
795
+ OnEndpointChanged(index, XdsEndpointResource(), std::move(resolution_note));
734
796
  }
735
797
  }
736
798
 
737
- void XdsClusterResolverLb::OnResourceDoesNotExist(size_t index) {
799
+ void XdsClusterResolverLb::OnResourceDoesNotExist(size_t index,
800
+ std::string resolution_note) {
738
801
  gpr_log(GPR_ERROR,
739
802
  "[xds_cluster_resolver_lb %p] discovery mechanism %" PRIuPTR
740
- " resource does not exist",
741
- this, index);
803
+ " resource does not exist: %s",
804
+ this, index, resolution_note.c_str());
742
805
  if (shutting_down_) return;
743
- // Call OnEndpointChanged with an empty update.
744
- OnEndpointChanged(index, XdsEndpointResource());
806
+ // Call OnEndpointChanged() with an empty update.
807
+ OnEndpointChanged(index, XdsEndpointResource(), std::move(resolution_note));
745
808
  }
746
809
 
747
810
  //
@@ -790,6 +853,16 @@ ServerAddressList XdsClusterResolverLb::CreateChildPolicyAddressesLocked() {
790
853
  return addresses;
791
854
  }
792
855
 
856
+ std::string XdsClusterResolverLb::CreateChildPolicyResolutionNoteLocked() {
857
+ std::vector<absl::string_view> resolution_notes;
858
+ for (const auto& discovery_entry : discovery_mechanisms_) {
859
+ if (!discovery_entry.resolution_note.empty()) {
860
+ resolution_notes.push_back(discovery_entry.resolution_note);
861
+ }
862
+ }
863
+ return absl::StrJoin(resolution_notes, "; ");
864
+ }
865
+
793
866
  RefCountedPtr<LoadBalancingPolicy::Config>
794
867
  XdsClusterResolverLb::CreateChildPolicyConfigLocked() {
795
868
  Json::Object priority_children;
@@ -885,10 +958,6 @@ XdsClusterResolverLb::CreateChildPolicyConfigLocked() {
885
958
  if (discovery_entry.config().outlier_detection_lb_config.has_value()) {
886
959
  outlier_detection_config =
887
960
  discovery_entry.config().outlier_detection_lb_config.value();
888
- } else {
889
- // outlier detection will be a no-op
890
- outlier_detection_config["interval"] =
891
- Duration::Infinity().ToJsonString();
892
961
  }
893
962
  outlier_detection_config["childPolicy"] = Json::Array{Json::Object{
894
963
  {"xds_cluster_impl_experimental",
@@ -930,17 +999,17 @@ XdsClusterResolverLb::CreateChildPolicyConfigLocked() {
930
999
  "[xds_cluster_resolver_lb %p] generated config for child policy: %s",
931
1000
  this, json_str.c_str());
932
1001
  }
933
- grpc_error_handle error = GRPC_ERROR_NONE;
934
- RefCountedPtr<LoadBalancingPolicy::Config> config =
935
- LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(json, &error);
936
- if (!GRPC_ERROR_IS_NONE(error)) {
1002
+ auto config =
1003
+ CoreConfiguration::Get().lb_policy_registry().ParseLoadBalancingConfig(
1004
+ json);
1005
+ if (!config.ok()) {
937
1006
  // This should never happen, but if it does, we basically have no
938
1007
  // way to fix it, so we put the channel in TRANSIENT_FAILURE.
939
1008
  gpr_log(GPR_ERROR,
940
1009
  "[xds_cluster_resolver_lb %p] error parsing generated child policy "
941
1010
  "config -- "
942
1011
  "will put channel in TRANSIENT_FAILURE: %s",
943
- this, grpc_error_std_string(error).c_str());
1012
+ this, config.status().ToString().c_str());
944
1013
  absl::Status status = absl::InternalError(
945
1014
  "xds_cluster_resolver LB policy: error parsing generated child policy "
946
1015
  "config");
@@ -949,15 +1018,16 @@ XdsClusterResolverLb::CreateChildPolicyConfigLocked() {
949
1018
  absl::make_unique<TransientFailurePicker>(status));
950
1019
  return nullptr;
951
1020
  }
952
- return config;
1021
+ return std::move(*config);
953
1022
  }
954
1023
 
955
- void XdsClusterResolverLb::UpdateChildPolicyLocked() {
956
- if (shutting_down_) return;
1024
+ absl::Status XdsClusterResolverLb::UpdateChildPolicyLocked() {
1025
+ if (shutting_down_) return absl::OkStatus();
957
1026
  UpdateArgs update_args;
958
1027
  update_args.config = CreateChildPolicyConfigLocked();
959
- if (update_args.config == nullptr) return;
1028
+ if (update_args.config == nullptr) return absl::OkStatus();
960
1029
  update_args.addresses = CreateChildPolicyAddressesLocked();
1030
+ update_args.resolution_note = CreateChildPolicyResolutionNoteLocked();
961
1031
  update_args.args = CreateChildPolicyArgsLocked(args_);
962
1032
  if (child_policy_ == nullptr) {
963
1033
  child_policy_ = CreateChildPolicyLocked(update_args.args);
@@ -966,29 +1036,25 @@ void XdsClusterResolverLb::UpdateChildPolicyLocked() {
966
1036
  gpr_log(GPR_INFO, "[xds_cluster_resolver_lb %p] Updating child policy %p",
967
1037
  this, child_policy_.get());
968
1038
  }
969
- child_policy_->UpdateLocked(std::move(update_args));
1039
+ return child_policy_->UpdateLocked(std::move(update_args));
970
1040
  }
971
1041
 
972
- grpc_channel_args* XdsClusterResolverLb::CreateChildPolicyArgsLocked(
973
- const grpc_channel_args* args) {
974
- absl::InlinedVector<grpc_arg, 2> new_args = {
975
- // Inhibit client-side health checking, since the balancer does this
976
- // for us.
977
- grpc_channel_arg_integer_create(
978
- const_cast<char*>(GRPC_ARG_INHIBIT_HEALTH_CHECKING), 1),
979
- };
980
- return grpc_channel_args_copy_and_add(args, new_args.data(), new_args.size());
1042
+ ChannelArgs XdsClusterResolverLb::CreateChildPolicyArgsLocked(
1043
+ const ChannelArgs& args) {
1044
+ // Inhibit client-side health checking, since the balancer does this
1045
+ // for us.
1046
+ return args.Set(GRPC_ARG_INHIBIT_HEALTH_CHECKING, 1);
981
1047
  }
982
1048
 
983
1049
  OrphanablePtr<LoadBalancingPolicy>
984
- XdsClusterResolverLb::CreateChildPolicyLocked(const grpc_channel_args* args) {
1050
+ XdsClusterResolverLb::CreateChildPolicyLocked(const ChannelArgs& args) {
985
1051
  LoadBalancingPolicy::Args lb_policy_args;
986
1052
  lb_policy_args.work_serializer = work_serializer();
987
1053
  lb_policy_args.args = args;
988
1054
  lb_policy_args.channel_control_helper =
989
1055
  absl::make_unique<Helper>(Ref(DEBUG_LOCATION, "Helper"));
990
1056
  OrphanablePtr<LoadBalancingPolicy> lb_policy =
991
- LoadBalancingPolicyRegistry::CreateLoadBalancingPolicy(
1057
+ CoreConfiguration::Get().lb_policy_registry().CreateLoadBalancingPolicy(
992
1058
  "priority_experimental", std::move(lb_policy_args));
993
1059
  if (GPR_UNLIKELY(lb_policy == nullptr)) {
994
1060
  gpr_log(GPR_ERROR,
@@ -1012,225 +1078,158 @@ XdsClusterResolverLb::CreateChildPolicyLocked(const grpc_channel_args* args) {
1012
1078
  // factory
1013
1079
  //
1014
1080
 
1015
- class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1016
- public:
1017
- OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
1018
- LoadBalancingPolicy::Args args) const override {
1019
- RefCountedPtr<XdsClient> xds_client =
1020
- XdsClient::GetFromChannelArgs(*args.args);
1021
- if (xds_client == nullptr) {
1022
- gpr_log(GPR_ERROR,
1023
- "XdsClient not present in channel args -- cannot instantiate "
1024
- "xds_cluster_resolver LB policy");
1025
- return nullptr;
1081
+ const JsonLoaderInterface*
1082
+ XdsClusterResolverLbConfig::DiscoveryMechanism::JsonLoader(const JsonArgs&) {
1083
+ static const auto* loader =
1084
+ JsonObjectLoader<DiscoveryMechanism>()
1085
+ // Note: Several fields requires custom processing,
1086
+ // so they are handled in JsonPostLoad() instead.
1087
+ .Field("clusterName", &DiscoveryMechanism::cluster_name)
1088
+ .OptionalField("lrsLoadReportingServer",
1089
+ &DiscoveryMechanism::lrs_load_reporting_server)
1090
+ .OptionalField("max_concurrent_requests",
1091
+ &DiscoveryMechanism::max_concurrent_requests)
1092
+ .OptionalField("outlierDetection",
1093
+ &DiscoveryMechanism::outlier_detection_lb_config,
1094
+ "outlier_detection")
1095
+ .Finish();
1096
+ return loader;
1097
+ }
1098
+
1099
+ void XdsClusterResolverLbConfig::DiscoveryMechanism::JsonPostLoad(
1100
+ const Json& json, const JsonArgs& args, ValidationErrors* errors) {
1101
+ // Parse "type".
1102
+ {
1103
+ auto type_field = LoadJsonObjectField<std::string>(json.object_value(),
1104
+ args, "type", errors);
1105
+ if (type_field.has_value()) {
1106
+ if (*type_field == "EDS") {
1107
+ type = DiscoveryMechanismType::EDS;
1108
+ } else if (*type_field == "LOGICAL_DNS") {
1109
+ type = DiscoveryMechanismType::LOGICAL_DNS;
1110
+ } else {
1111
+ ValidationErrors::ScopedField field(errors, ".type");
1112
+ errors->AddError(absl::StrCat("unknown type \"", *type_field, "\""));
1113
+ }
1026
1114
  }
1027
- return MakeOrphanable<XdsClusterResolverChildHandler>(std::move(xds_client),
1028
- std::move(args));
1029
1115
  }
1116
+ // Parse "edsServiceName" if type is EDS.
1117
+ if (type == DiscoveryMechanismType::EDS) {
1118
+ auto value = LoadJsonObjectField<std::string>(json.object_value(), args,
1119
+ "edsServiceName", errors,
1120
+ /*required=*/false);
1121
+ if (value.has_value()) eds_service_name = std::move(*value);
1122
+ }
1123
+ // Parse "dnsHostname" if type is LOGICAL_DNS.
1124
+ if (type == DiscoveryMechanismType::LOGICAL_DNS) {
1125
+ auto value = LoadJsonObjectField<std::string>(json.object_value(), args,
1126
+ "dnsHostname", errors);
1127
+ if (value.has_value()) dns_hostname = std::move(*value);
1128
+ }
1129
+ }
1030
1130
 
1031
- const char* name() const override { return kXdsClusterResolver; }
1131
+ const JsonLoaderInterface* XdsClusterResolverLbConfig::JsonLoader(
1132
+ const JsonArgs&) {
1133
+ static const auto* loader =
1134
+ JsonObjectLoader<XdsClusterResolverLbConfig>()
1135
+ // Note: The "xdsLbPolicy" field requires custom processing,
1136
+ // so it's handled in JsonPostLoad() instead.
1137
+ .Field("discoveryMechanisms",
1138
+ &XdsClusterResolverLbConfig::discovery_mechanisms_)
1139
+ .Finish();
1140
+ return loader;
1141
+ }
1032
1142
 
1033
- RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
1034
- const Json& json, grpc_error_handle* error) const override {
1035
- GPR_DEBUG_ASSERT(error != nullptr && GRPC_ERROR_IS_NONE(*error));
1036
- if (json.type() == Json::Type::JSON_NULL) {
1037
- // xds_cluster_resolver was mentioned as a policy in the deprecated
1038
- // loadBalancingPolicy field or in the client API.
1039
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1040
- "field:loadBalancingPolicy error:xds_cluster_resolver policy "
1041
- "requires configuration. "
1042
- "Please use loadBalancingConfig field of service config instead.");
1043
- return nullptr;
1044
- }
1045
- std::vector<grpc_error_handle> error_list;
1046
- std::vector<XdsClusterResolverLbConfig::DiscoveryMechanism>
1047
- discovery_mechanisms;
1048
- auto it = json.object_value().find("discoveryMechanisms");
1049
- if (it == json.object_value().end()) {
1050
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1051
- "field:discoveryMechanisms error:required field missing"));
1052
- } else if (it->second.type() != Json::Type::ARRAY) {
1053
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1054
- "field:discoveryMechanisms error:type should be array"));
1055
- } else {
1056
- const Json::Array& array = it->second.array_value();
1057
- for (size_t i = 0; i < array.size(); ++i) {
1058
- XdsClusterResolverLbConfig::DiscoveryMechanism discovery_mechanism;
1059
- std::vector<grpc_error_handle> discovery_mechanism_errors =
1060
- ParseDiscoveryMechanism(array[i], &discovery_mechanism);
1061
- if (!discovery_mechanism_errors.empty()) {
1062
- grpc_error_handle error = GRPC_ERROR_CREATE_FROM_CPP_STRING(
1063
- absl::StrCat("field:discovery_mechanism element: ", i, " error"));
1064
- for (const grpc_error_handle& discovery_mechanism_error :
1065
- discovery_mechanism_errors) {
1066
- error = grpc_error_add_child(error, discovery_mechanism_error);
1067
- }
1068
- error_list.push_back(error);
1069
- }
1070
- discovery_mechanisms.emplace_back(std::move(discovery_mechanism));
1071
- }
1072
- }
1073
- if (discovery_mechanisms.empty()) {
1074
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1075
- "field:discovery_mechanism error:list is missing or empty"));
1143
+ void XdsClusterResolverLbConfig::JsonPostLoad(const Json& json,
1144
+ const JsonArgs& args,
1145
+ ValidationErrors* errors) {
1146
+ // Validate discoveryMechanisms.
1147
+ {
1148
+ ValidationErrors::ScopedField field(errors, ".discoveryMechanisms");
1149
+ if (!errors->FieldHasErrors() && discovery_mechanisms_.empty()) {
1150
+ errors->AddError("must be non-empty");
1076
1151
  }
1077
- Json xds_lb_policy = Json::Object{
1078
- {"ROUND_ROBIN", Json::Object()},
1079
- };
1080
- it = json.object_value().find("xdsLbPolicy");
1152
+ }
1153
+ // Parse "xdsLbPolicy".
1154
+ {
1155
+ ValidationErrors::ScopedField field(errors, ".xdsLbPolicy");
1156
+ auto it = json.object_value().find("xdsLbPolicy");
1081
1157
  if (it != json.object_value().end()) {
1082
1158
  if (it->second.type() != Json::Type::ARRAY) {
1083
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1084
- "field:xdsLbPolicy error:type should be array"));
1159
+ errors->AddError("is not an array");
1085
1160
  } else {
1086
1161
  const Json::Array& array = it->second.array_value();
1087
1162
  for (size_t i = 0; i < array.size(); ++i) {
1163
+ ValidationErrors::ScopedField field(errors,
1164
+ absl::StrCat("[", i, "]"));
1088
1165
  if (array[i].type() != Json::Type::OBJECT) {
1089
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1090
- "field:xdsLbPolicy error:element should be of type object"));
1166
+ errors->AddError("is not an object");
1091
1167
  continue;
1092
1168
  }
1093
1169
  const Json::Object& policy = array[i].object_value();
1094
1170
  auto policy_it = policy.find("ROUND_ROBIN");
1095
1171
  if (policy_it != policy.end()) {
1172
+ ValidationErrors::ScopedField field(errors, "[\"ROUND_ROBIN\"]");
1096
1173
  if (policy_it->second.type() != Json::Type::OBJECT) {
1097
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1098
- "field:ROUND_ROBIN error:type should be object"));
1174
+ errors->AddError("is not an object");
1099
1175
  }
1100
1176
  break;
1101
1177
  }
1102
- policy_it = policy.find("RING_HASH");
1103
- if (policy_it != policy.end()) {
1104
- xds_lb_policy = array[i];
1105
- size_t min_ring_size;
1106
- size_t max_ring_size;
1107
- ParseRingHashLbConfig(policy_it->second, &min_ring_size,
1108
- &max_ring_size, &error_list);
1178
+ {
1179
+ ValidationErrors::ScopedField field(errors, "[\"RING_HASH\"]");
1180
+ policy_it = policy.find("RING_HASH");
1181
+ if (policy_it != policy.end()) {
1182
+ LoadFromJson<RingHashConfig>(policy_it->second, args, errors);
1183
+ xds_lb_policy_ = array[i];
1184
+ }
1109
1185
  }
1110
1186
  }
1111
1187
  }
1112
1188
  }
1113
- // Construct config.
1114
- if (error_list.empty()) {
1115
- return MakeRefCounted<XdsClusterResolverLbConfig>(
1116
- std::move(discovery_mechanisms), std::move(xds_lb_policy));
1117
- } else {
1118
- *error = GRPC_ERROR_CREATE_FROM_VECTOR(
1119
- "xds_cluster_resolver_experimental LB policy config", &error_list);
1189
+ }
1190
+ }
1191
+
1192
+ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1193
+ public:
1194
+ OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
1195
+ LoadBalancingPolicy::Args args) const override {
1196
+ auto xds_client = args.args.GetObjectRef<GrpcXdsClient>(
1197
+ DEBUG_LOCATION, "XdsClusterResolverLbFactory");
1198
+ if (xds_client == nullptr) {
1199
+ gpr_log(GPR_ERROR,
1200
+ "XdsClient not present in channel args -- cannot instantiate "
1201
+ "xds_cluster_resolver LB policy");
1120
1202
  return nullptr;
1121
1203
  }
1204
+ return MakeOrphanable<XdsClusterResolverChildHandler>(std::move(xds_client),
1205
+ std::move(args));
1122
1206
  }
1123
1207
 
1124
- private:
1125
- static std::vector<grpc_error_handle> ParseDiscoveryMechanism(
1126
- const Json& json,
1127
- XdsClusterResolverLbConfig::DiscoveryMechanism* discovery_mechanism) {
1128
- std::vector<grpc_error_handle> error_list;
1129
- if (json.type() != Json::Type::OBJECT) {
1130
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1131
- "value should be of type object"));
1132
- return error_list;
1133
- }
1134
- // Cluster name.
1135
- auto it = json.object_value().find("clusterName");
1136
- if (it == json.object_value().end()) {
1137
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1138
- "field:clusterName error:required field missing"));
1139
- } else if (it->second.type() != Json::Type::STRING) {
1140
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1141
- "field:clusterName error:type should be string"));
1142
- } else {
1143
- discovery_mechanism->cluster_name = it->second.string_value();
1144
- }
1145
- // LRS load reporting server name.
1146
- it = json.object_value().find("lrsLoadReportingServer");
1147
- if (it != json.object_value().end()) {
1148
- if (it->second.type() != Json::Type::OBJECT) {
1149
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1150
- "field:lrsLoadReportingServer error:type should be object"));
1151
- } else {
1152
- grpc_error_handle parse_error;
1153
- discovery_mechanism->lrs_load_reporting_server.emplace(
1154
- XdsBootstrap::XdsServer::Parse(it->second, &parse_error));
1155
- if (!GRPC_ERROR_IS_NONE(parse_error)) {
1156
- error_list.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
1157
- absl::StrCat("errors parsing lrs_load_reporting_server")));
1158
- error_list.push_back(parse_error);
1159
- }
1160
- }
1161
- }
1162
- // Max concurrent requests.
1163
- discovery_mechanism->max_concurrent_requests = 1024;
1164
- it = json.object_value().find("max_concurrent_requests");
1165
- if (it != json.object_value().end()) {
1166
- if (it->second.type() != Json::Type::NUMBER) {
1167
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1168
- "field:max_concurrent_requests error:must be of type number"));
1169
- } else {
1170
- discovery_mechanism->max_concurrent_requests =
1171
- gpr_parse_nonnegative_int(it->second.string_value().c_str());
1172
- }
1173
- }
1174
- if (XdsOutlierDetectionEnabled()) {
1175
- it = json.object_value().find("outlierDetection");
1176
- if (it != json.object_value().end()) {
1177
- if (it->second.type() != Json::Type::OBJECT) {
1178
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1179
- "field:outlierDetection error:type should be object"));
1180
- } else {
1181
- // No need to validate the contents of the outlier detection config,
1182
- // because in this particular case, the JSON is generated by the CDS
1183
- // policy instead of coming from service config, so it's not actually
1184
- // any better to catch the problem here than it is to catch it in the
1185
- // outlier_detection policy itself, so here we just act as a
1186
- // pass-through.
1187
- discovery_mechanism->outlier_detection_lb_config =
1188
- it->second.object_value();
1189
- }
1190
- }
1208
+ absl::string_view name() const override { return kXdsClusterResolver; }
1209
+
1210
+ absl::StatusOr<RefCountedPtr<LoadBalancingPolicy::Config>>
1211
+ ParseLoadBalancingConfig(const Json& json) const override {
1212
+ if (json.type() == Json::Type::JSON_NULL) {
1213
+ // xds_cluster_resolver was mentioned as a policy in the deprecated
1214
+ // loadBalancingPolicy field or in the client API.
1215
+ return absl::InvalidArgumentError(
1216
+ "field:loadBalancingPolicy error:xds_cluster_resolver policy "
1217
+ "requires configuration. "
1218
+ "Please use loadBalancingConfig field of service config instead.");
1191
1219
  }
1192
- // Discovery Mechanism type
1193
- it = json.object_value().find("type");
1194
- if (it == json.object_value().end()) {
1195
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1196
- "field:type error:required field missing"));
1197
- } else if (it->second.type() != Json::Type::STRING) {
1198
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1199
- "field:type error:type should be string"));
1200
- } else {
1201
- if (it->second.string_value() == "EDS") {
1202
- discovery_mechanism->type = XdsClusterResolverLbConfig::
1203
- DiscoveryMechanism::DiscoveryMechanismType::EDS;
1204
- it = json.object_value().find("edsServiceName");
1205
- if (it != json.object_value().end()) {
1206
- if (it->second.type() != Json::Type::STRING) {
1207
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1208
- "field:edsServiceName error:type should be string"));
1209
- } else {
1210
- discovery_mechanism->eds_service_name = it->second.string_value();
1211
- }
1212
- }
1213
- } else if (it->second.string_value() == "LOGICAL_DNS") {
1214
- discovery_mechanism->type = XdsClusterResolverLbConfig::
1215
- DiscoveryMechanism::DiscoveryMechanismType::LOGICAL_DNS;
1216
- it = json.object_value().find("dnsHostname");
1217
- if (it == json.object_value().end()) {
1218
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1219
- "field:dnsHostname error:required field missing"));
1220
- } else if (it->second.type() != Json::Type::STRING) {
1221
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1222
- "field:dnsHostname error:type should be string"));
1223
- } else {
1224
- discovery_mechanism->dns_hostname = it->second.string_value();
1225
- }
1226
- } else {
1227
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1228
- "field:type error:invalid type"));
1220
+ class XdsJsonArgs : public JsonArgs {
1221
+ public:
1222
+ bool IsEnabled(absl::string_view key) const override {
1223
+ if (key == "outlier_detection") return XdsOutlierDetectionEnabled();
1224
+ return true;
1229
1225
  }
1230
- }
1231
- return error_list;
1226
+ };
1227
+ return LoadRefCountedFromJson<XdsClusterResolverLbConfig>(
1228
+ json, XdsJsonArgs(),
1229
+ "errors validating xds_cluster_resolver LB policy config");
1232
1230
  }
1233
1231
 
1232
+ private:
1234
1233
  class XdsClusterResolverChildHandler : public ChildPolicyHandler {
1235
1234
  public:
1236
1235
  XdsClusterResolverChildHandler(RefCountedPtr<XdsClient> xds_client,
@@ -1239,6 +1238,10 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1239
1238
  &grpc_lb_xds_cluster_resolver_trace),
1240
1239
  xds_client_(std::move(xds_client)) {}
1241
1240
 
1241
+ ~XdsClusterResolverChildHandler() override {
1242
+ xds_client_.reset(DEBUG_LOCATION, "XdsClusterResolverChildHandler");
1243
+ }
1244
+
1242
1245
  bool ConfigChangeRequiresNewPolicyInstance(
1243
1246
  LoadBalancingPolicy::Config* old_config,
1244
1247
  LoadBalancingPolicy::Config* new_config) const override {
@@ -1248,13 +1251,38 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1248
1251
  static_cast<XdsClusterResolverLbConfig*>(old_config);
1249
1252
  XdsClusterResolverLbConfig* new_xds_cluster_resolver_config =
1250
1253
  static_cast<XdsClusterResolverLbConfig*>(new_config);
1251
- return old_xds_cluster_resolver_config->discovery_mechanisms() !=
1252
- new_xds_cluster_resolver_config->discovery_mechanisms();
1254
+ if (old_xds_cluster_resolver_config->discovery_mechanisms().size() !=
1255
+ new_xds_cluster_resolver_config->discovery_mechanisms().size()) {
1256
+ return true;
1257
+ }
1258
+ for (size_t i = 0;
1259
+ i < old_xds_cluster_resolver_config->discovery_mechanisms().size();
1260
+ ++i) {
1261
+ auto& old_discovery_mechanism =
1262
+ old_xds_cluster_resolver_config->discovery_mechanisms()[i];
1263
+ auto& new_discovery_mechanism =
1264
+ new_xds_cluster_resolver_config->discovery_mechanisms()[i];
1265
+ if (old_discovery_mechanism.type != new_discovery_mechanism.type ||
1266
+ old_discovery_mechanism.cluster_name !=
1267
+ new_discovery_mechanism.cluster_name ||
1268
+ old_discovery_mechanism.eds_service_name !=
1269
+ new_discovery_mechanism.eds_service_name ||
1270
+ old_discovery_mechanism.dns_hostname !=
1271
+ new_discovery_mechanism.dns_hostname ||
1272
+ !(old_discovery_mechanism.lrs_load_reporting_server ==
1273
+ new_discovery_mechanism.lrs_load_reporting_server)) {
1274
+ return true;
1275
+ }
1276
+ }
1277
+ return false;
1253
1278
  }
1254
1279
 
1255
1280
  OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
1256
- const char* /*name*/, LoadBalancingPolicy::Args args) const override {
1257
- return MakeOrphanable<XdsClusterResolverLb>(xds_client_, std::move(args));
1281
+ absl::string_view /*name*/,
1282
+ LoadBalancingPolicy::Args args) const override {
1283
+ return MakeOrphanable<XdsClusterResolverLb>(
1284
+ xds_client_->Ref(DEBUG_LOCATION, "XdsClusterResolverLb"),
1285
+ std::move(args));
1258
1286
  }
1259
1287
 
1260
1288
  private:
@@ -1264,16 +1292,9 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1264
1292
 
1265
1293
  } // namespace
1266
1294
 
1267
- } // namespace grpc_core
1268
-
1269
- //
1270
- // Plugin registration
1271
- //
1272
-
1273
- void grpc_lb_policy_xds_cluster_resolver_init() {
1274
- grpc_core::LoadBalancingPolicyRegistry::Builder::
1275
- RegisterLoadBalancingPolicyFactory(
1276
- absl::make_unique<grpc_core::XdsClusterResolverLbFactory>());
1295
+ void RegisterXdsClusterResolverLbPolicy(CoreConfiguration::Builder* builder) {
1296
+ builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory(
1297
+ absl::make_unique<XdsClusterResolverLbFactory>());
1277
1298
  }
1278
1299
 
1279
- void grpc_lb_policy_xds_cluster_resolver_shutdown() {}
1300
+ } // namespace grpc_core