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
@@ -17,12 +17,11 @@
17
17
  #include <grpc/support/port_platform.h>
18
18
 
19
19
  #include <inttypes.h>
20
- #include <limits.h>
21
- #include <stddef.h>
22
20
 
23
21
  #include <algorithm>
24
22
  #include <map>
25
23
  #include <memory>
24
+ #include <set>
26
25
  #include <string>
27
26
  #include <utility>
28
27
  #include <vector>
@@ -31,32 +30,37 @@
31
30
  #include "absl/status/status.h"
32
31
  #include "absl/status/statusor.h"
33
32
  #include "absl/strings/str_cat.h"
33
+ #include "absl/strings/str_join.h"
34
34
  #include "absl/strings/string_view.h"
35
+ #include "absl/types/optional.h"
35
36
 
36
37
  #include <grpc/impl/codegen/connectivity_state.h>
37
38
  #include <grpc/impl/codegen/grpc_types.h>
38
39
  #include <grpc/support/log.h>
39
40
 
40
- #include "src/core/ext/filters/client_channel/lb_policy.h"
41
41
  #include "src/core/ext/filters/client_channel/lb_policy/address_filtering.h"
42
42
  #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
43
- #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
44
- #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
45
- #include "src/core/ext/filters/client_channel/subchannel_interface.h"
46
43
  #include "src/core/lib/channel/channel_args.h"
44
+ #include "src/core/lib/config/core_configuration.h"
47
45
  #include "src/core/lib/debug/trace.h"
48
46
  #include "src/core/lib/gprpp/debug_location.h"
49
47
  #include "src/core/lib/gprpp/orphanable.h"
50
48
  #include "src/core/lib/gprpp/ref_counted.h"
51
49
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
52
50
  #include "src/core/lib/gprpp/time.h"
51
+ #include "src/core/lib/gprpp/validation_errors.h"
52
+ #include "src/core/lib/gprpp/work_serializer.h"
53
53
  #include "src/core/lib/iomgr/closure.h"
54
54
  #include "src/core/lib/iomgr/error.h"
55
- #include "src/core/lib/iomgr/exec_ctx.h"
56
55
  #include "src/core/lib/iomgr/pollset_set.h"
57
56
  #include "src/core/lib/iomgr/timer.h"
58
- #include "src/core/lib/iomgr/work_serializer.h"
59
57
  #include "src/core/lib/json/json.h"
58
+ #include "src/core/lib/json/json_args.h"
59
+ #include "src/core/lib/json/json_object_loader.h"
60
+ #include "src/core/lib/load_balancing/lb_policy.h"
61
+ #include "src/core/lib/load_balancing/lb_policy_factory.h"
62
+ #include "src/core/lib/load_balancing/lb_policy_registry.h"
63
+ #include "src/core/lib/load_balancing/subchannel_interface.h"
60
64
  #include "src/core/lib/resolver/server_address.h"
61
65
  #include "src/core/lib/transport/connectivity_state.h"
62
66
 
@@ -66,7 +70,7 @@ TraceFlag grpc_lb_priority_trace(false, "priority_lb");
66
70
 
67
71
  namespace {
68
72
 
69
- constexpr char kPriority[] = "priority_experimental";
73
+ constexpr absl::string_view kPriority = "priority_experimental";
70
74
 
71
75
  // How long we keep a child around for after it is no longer being used
72
76
  // (either because it has been removed from the config or because we
@@ -83,22 +87,34 @@ class PriorityLbConfig : public LoadBalancingPolicy::Config {
83
87
  struct PriorityLbChild {
84
88
  RefCountedPtr<LoadBalancingPolicy::Config> config;
85
89
  bool ignore_reresolution_requests = false;
90
+
91
+ static const JsonLoaderInterface* JsonLoader(const JsonArgs&);
92
+ void JsonPostLoad(const Json& json, const JsonArgs&,
93
+ ValidationErrors* errors);
86
94
  };
87
95
 
88
- PriorityLbConfig(std::map<std::string, PriorityLbChild> children,
89
- std::vector<std::string> priorities)
90
- : children_(std::move(children)), priorities_(std::move(priorities)) {}
96
+ PriorityLbConfig() = default;
97
+
98
+ PriorityLbConfig(const PriorityLbConfig&) = delete;
99
+ PriorityLbConfig& operator=(const PriorityLbConfig&) = delete;
100
+
101
+ PriorityLbConfig(PriorityLbConfig&& other) = delete;
102
+ PriorityLbConfig& operator=(PriorityLbConfig&& other) = delete;
91
103
 
92
- const char* name() const override { return kPriority; }
104
+ absl::string_view name() const override { return kPriority; }
93
105
 
94
106
  const std::map<std::string, PriorityLbChild>& children() const {
95
107
  return children_;
96
108
  }
97
109
  const std::vector<std::string>& priorities() const { return priorities_; }
98
110
 
111
+ static const JsonLoaderInterface* JsonLoader(const JsonArgs&);
112
+ void JsonPostLoad(const Json& json, const JsonArgs&,
113
+ ValidationErrors* errors);
114
+
99
115
  private:
100
- const std::map<std::string, PriorityLbChild> children_;
101
- const std::vector<std::string> priorities_;
116
+ std::map<std::string, PriorityLbChild> children_;
117
+ std::vector<std::string> priorities_;
102
118
  };
103
119
 
104
120
  // priority LB policy.
@@ -106,9 +122,9 @@ class PriorityLb : public LoadBalancingPolicy {
106
122
  public:
107
123
  explicit PriorityLb(Args args);
108
124
 
109
- const char* name() const override { return kPriority; }
125
+ absl::string_view name() const override { return kPriority; }
110
126
 
111
- void UpdateLocked(UpdateArgs args) override;
127
+ absl::Status UpdateLocked(UpdateArgs args) override;
112
128
  void ExitIdleLocked() override;
113
129
  void ResetBackoffLocked() override;
114
130
 
@@ -124,8 +140,8 @@ class PriorityLb : public LoadBalancingPolicy {
124
140
 
125
141
  const std::string& name() const { return name_; }
126
142
 
127
- void UpdateLocked(RefCountedPtr<LoadBalancingPolicy::Config> config,
128
- bool ignore_reresolution_requests);
143
+ absl::Status UpdateLocked(RefCountedPtr<LoadBalancingPolicy::Config> config,
144
+ bool ignore_reresolution_requests);
129
145
  void ExitIdleLocked();
130
146
  void ResetBackoffLocked();
131
147
  void MaybeDeactivateLocked();
@@ -176,7 +192,7 @@ class PriorityLb : public LoadBalancingPolicy {
176
192
  ~Helper() override { priority_.reset(DEBUG_LOCATION, "Helper"); }
177
193
 
178
194
  RefCountedPtr<SubchannelInterface> CreateSubchannel(
179
- ServerAddress address, const grpc_channel_args& args) override;
195
+ ServerAddress address, const ChannelArgs& args) override;
180
196
  void UpdateState(grpc_connectivity_state state,
181
197
  const absl::Status& status,
182
198
  std::unique_ptr<SubchannelPicker> picker) override;
@@ -223,7 +239,7 @@ class PriorityLb : public LoadBalancingPolicy {
223
239
 
224
240
  // Methods for dealing with the child policy.
225
241
  OrphanablePtr<LoadBalancingPolicy> CreateChildPolicyLocked(
226
- const grpc_channel_args* args);
242
+ const ChannelArgs& args);
227
243
 
228
244
  void OnConnectivityStateUpdateLocked(
229
245
  grpc_connectivity_state state, const absl::Status& status,
@@ -253,11 +269,6 @@ class PriorityLb : public LoadBalancingPolicy {
253
269
  // the child is not in the current priority list.
254
270
  uint32_t GetChildPriorityLocked(const std::string& child_name) const;
255
271
 
256
- // Called when a child's connectivity state has changed.
257
- // May propagate the update to the channel or trigger choosing a new
258
- // priority.
259
- void HandleChildConnectivityStateChangeLocked(ChildPriority* child);
260
-
261
272
  // Deletes a child. Called when the child's deactivation timer fires.
262
273
  void DeleteChild(ChildPriority* child);
263
274
 
@@ -275,16 +286,19 @@ class PriorityLb : public LoadBalancingPolicy {
275
286
  void ChoosePriorityLocked();
276
287
 
277
288
  // Sets the specified priority as the current priority.
278
- // Deactivates any children at lower priorities.
289
+ // Optionally deactivates any children at lower priorities.
279
290
  // Returns the child's picker to the channel.
280
- void SetCurrentPriorityLocked(uint32_t priority);
291
+ void SetCurrentPriorityLocked(int32_t priority,
292
+ bool deactivate_lower_priorities,
293
+ const char* reason);
281
294
 
282
295
  const Duration child_failover_timeout_;
283
296
 
284
297
  // Current channel args and config from the resolver.
285
- const grpc_channel_args* args_ = nullptr;
298
+ ChannelArgs args_;
286
299
  RefCountedPtr<PriorityLbConfig> config_;
287
300
  absl::StatusOr<HierarchicalAddressMap> addresses_;
301
+ std::string resolution_note_;
288
302
 
289
303
  // Internal state.
290
304
  bool shutting_down_ = false;
@@ -296,10 +310,6 @@ class PriorityLb : public LoadBalancingPolicy {
296
310
  std::map<std::string, OrphanablePtr<ChildPriority>> children_;
297
311
  // The priority that is being used.
298
312
  uint32_t current_priority_ = UINT32_MAX;
299
- // Points to the current child from before the most recent update.
300
- // We will continue to use this child until we decide which of the new
301
- // children to use.
302
- ChildPriority* current_child_from_before_update_ = nullptr;
303
313
  };
304
314
 
305
315
  //
@@ -308,11 +318,11 @@ class PriorityLb : public LoadBalancingPolicy {
308
318
 
309
319
  PriorityLb::PriorityLb(Args args)
310
320
  : LoadBalancingPolicy(std::move(args)),
311
- child_failover_timeout_(
312
- Duration::Milliseconds(grpc_channel_args_find_integer(
313
- args.args, GRPC_ARG_PRIORITY_FAILOVER_TIMEOUT_MS,
314
- {static_cast<int>(kDefaultChildFailoverTimeout.millis()), 0,
315
- INT_MAX}))) {
321
+ child_failover_timeout_(std::max(
322
+ Duration::Zero(),
323
+ args.args
324
+ .GetDurationFromIntMillis(GRPC_ARG_PRIORITY_FAILOVER_TIMEOUT_MS)
325
+ .value_or(kDefaultChildFailoverTimeout))) {
316
326
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_priority_trace)) {
317
327
  gpr_log(GPR_INFO, "[priority_lb %p] created", this);
318
328
  }
@@ -322,7 +332,6 @@ PriorityLb::~PriorityLb() {
322
332
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_priority_trace)) {
323
333
  gpr_log(GPR_INFO, "[priority_lb %p] destroying priority LB policy", this);
324
334
  }
325
- grpc_channel_args_destroy(args_);
326
335
  }
327
336
 
328
337
  void PriorityLb::ShutdownLocked() {
@@ -349,29 +358,20 @@ void PriorityLb::ResetBackoffLocked() {
349
358
  for (const auto& p : children_) p.second->ResetBackoffLocked();
350
359
  }
351
360
 
352
- void PriorityLb::UpdateLocked(UpdateArgs args) {
361
+ absl::Status PriorityLb::UpdateLocked(UpdateArgs args) {
353
362
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_priority_trace)) {
354
363
  gpr_log(GPR_INFO, "[priority_lb %p] received update", this);
355
364
  }
356
- // Save current child.
357
- if (current_priority_ != UINT32_MAX) {
358
- const std::string& child_name = config_->priorities()[current_priority_];
359
- auto* child = children_[child_name].get();
360
- GPR_ASSERT(child != nullptr);
361
- if (child->connectivity_state() == GRPC_CHANNEL_READY) {
362
- current_child_from_before_update_ = children_[child_name].get();
363
- }
364
- }
365
365
  // Update config.
366
366
  config_ = std::move(args.config);
367
367
  // Update args.
368
- grpc_channel_args_destroy(args_);
369
- args_ = args.args;
370
- args.args = nullptr;
368
+ args_ = std::move(args.args);
371
369
  // Update addresses.
372
370
  addresses_ = MakeHierarchicalAddressMap(args.addresses);
371
+ resolution_note_ = std::move(args.resolution_note);
373
372
  // Check all existing children against the new config.
374
373
  update_in_progress_ = true;
374
+ std::vector<std::string> errors;
375
375
  for (const auto& p : children_) {
376
376
  const std::string& child_name = p.first;
377
377
  auto& child = p.second;
@@ -381,13 +381,24 @@ void PriorityLb::UpdateLocked(UpdateArgs args) {
381
381
  child->MaybeDeactivateLocked();
382
382
  } else {
383
383
  // Existing child found in new config. Update it.
384
- child->UpdateLocked(config_it->second.config,
385
- config_it->second.ignore_reresolution_requests);
384
+ absl::Status status =
385
+ child->UpdateLocked(config_it->second.config,
386
+ config_it->second.ignore_reresolution_requests);
387
+ if (!status.ok()) {
388
+ errors.emplace_back(
389
+ absl::StrCat("child ", child_name, ": ", status.ToString()));
390
+ }
386
391
  }
387
392
  }
388
393
  update_in_progress_ = false;
389
394
  // Try to get connected.
390
395
  ChoosePriorityLocked();
396
+ // Return status.
397
+ if (!errors.empty()) {
398
+ return absl::UnavailableError(absl::StrCat(
399
+ "errors from children: [", absl::StrJoin(errors, "; "), "]"));
400
+ }
401
+ return absl::OkStatus();
391
402
  }
392
403
 
393
404
  uint32_t PriorityLb::GetChildPriorityLocked(
@@ -399,71 +410,13 @@ uint32_t PriorityLb::GetChildPriorityLocked(
399
410
  return UINT32_MAX;
400
411
  }
401
412
 
402
- void PriorityLb::HandleChildConnectivityStateChangeLocked(
403
- ChildPriority* child) {
404
- // If we're in the process of propagating an update from our parent to
405
- // our children, ignore any updates that come from the children. We
406
- // will instead choose a new priority once the update has been seen by
407
- // all children. This ensures that we don't incorrectly do the wrong
408
- // thing while state is inconsistent.
409
- if (update_in_progress_) return;
410
- // Special case for the child that was the current child before the
411
- // most recent update.
412
- if (child == current_child_from_before_update_) {
413
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_priority_trace)) {
414
- gpr_log(GPR_INFO,
415
- "[priority_lb %p] state update for current child from before "
416
- "config update",
417
- this);
418
- }
419
- if (child->connectivity_state() == GRPC_CHANNEL_READY ||
420
- child->connectivity_state() == GRPC_CHANNEL_IDLE) {
421
- // If it's still READY or IDLE, we stick with this child, so pass
422
- // the new picker up to our parent.
423
- channel_control_helper()->UpdateState(child->connectivity_state(),
424
- child->connectivity_status(),
425
- child->GetPicker());
426
- } else {
427
- // If it's no longer READY or IDLE, we should stop using it.
428
- // We already started trying other priorities as a result of the
429
- // update, but calling ChoosePriorityLocked() ensures that we will
430
- // properly select between CONNECTING and TRANSIENT_FAILURE as the
431
- // new state to report to our parent.
432
- current_child_from_before_update_ = nullptr;
433
- ChoosePriorityLocked();
434
- }
435
- return;
436
- }
437
- // Otherwise, find the child's priority.
438
- uint32_t child_priority = GetChildPriorityLocked(child->name());
439
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_priority_trace)) {
440
- gpr_log(GPR_INFO,
441
- "[priority_lb %p] state update for priority %u, child %s, current "
442
- "priority %u",
443
- this, child_priority, child->name().c_str(), current_priority_);
444
- }
445
- // Unconditionally call ChoosePriorityLocked(). It should do the
446
- // right thing based on the state of all children.
447
- ChoosePriorityLocked();
448
- }
449
-
450
413
  void PriorityLb::DeleteChild(ChildPriority* child) {
451
- // If this was the current child from before the most recent update,
452
- // stop using it. We already started trying other priorities as a
453
- // result of the update, but calling ChoosePriorityLocked() ensures that
454
- // we will properly select between CONNECTING and TRANSIENT_FAILURE as the
455
- // new state to report to our parent.
456
- if (current_child_from_before_update_ == child) {
457
- current_child_from_before_update_ = nullptr;
458
- ChoosePriorityLocked();
459
- }
460
414
  children_.erase(child->name());
461
415
  }
462
416
 
463
417
  void PriorityLb::ChoosePriorityLocked() {
464
418
  // If priority list is empty, report TF.
465
419
  if (config_->priorities().empty()) {
466
- current_child_from_before_update_ = nullptr;
467
420
  absl::Status status =
468
421
  absl::UnavailableError("priority policy has empty priority list");
469
422
  channel_control_helper()->UpdateState(
@@ -483,52 +436,33 @@ void PriorityLb::ChoosePriorityLocked() {
483
436
  priority, child_name.c_str());
484
437
  }
485
438
  auto& child = children_[child_name];
439
+ // Create child if needed.
486
440
  if (child == nullptr) {
487
- // If we're not still using an old child from before the last
488
- // update, report CONNECTING here.
489
- // This is probably not strictly necessary, since the child should
490
- // immediately report CONNECTING and cause us to report that state
491
- // anyway, but we do this just in case the child fails to report
492
- // state before UpdateLocked() returns.
493
- if (current_child_from_before_update_ != nullptr) {
494
- channel_control_helper()->UpdateState(
495
- GRPC_CHANNEL_CONNECTING, absl::Status(),
496
- absl::make_unique<QueuePicker>(Ref(DEBUG_LOCATION, "QueuePicker")));
497
- }
498
- current_priority_ = priority;
499
441
  child = MakeOrphanable<ChildPriority>(
500
442
  Ref(DEBUG_LOCATION, "ChildPriority"), child_name);
501
443
  auto child_config = config_->children().find(child_name);
502
444
  GPR_DEBUG_ASSERT(child_config != config_->children().end());
503
- child->UpdateLocked(child_config->second.config,
504
- child_config->second.ignore_reresolution_requests);
505
- return;
445
+ // TODO(roth): If the child reports a non-OK status with the
446
+ // update, we need to propagate that back to the resolver somehow.
447
+ (void)child->UpdateLocked(
448
+ child_config->second.config,
449
+ child_config->second.ignore_reresolution_requests);
450
+ } else {
451
+ // The child already exists. Reactivate if needed.
452
+ child->MaybeReactivateLocked();
506
453
  }
507
- // The child already exists.
508
- child->MaybeReactivateLocked();
509
- // If the child is in state READY or IDLE, switch to it.
454
+ // Select this child if it is in states READY or IDLE.
510
455
  if (child->connectivity_state() == GRPC_CHANNEL_READY ||
511
456
  child->connectivity_state() == GRPC_CHANNEL_IDLE) {
512
- SetCurrentPriorityLocked(priority);
457
+ SetCurrentPriorityLocked(
458
+ priority, /*deactivate_lower_priorities=*/true,
459
+ ConnectivityStateName(child->connectivity_state()));
513
460
  return;
514
461
  }
515
- // Child is not READY or IDLE.
516
- // If its failover timer is still pending, give it time to fire.
462
+ // Select this child if its failover timer is pending.
517
463
  if (child->FailoverTimerPending()) {
518
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_priority_trace)) {
519
- gpr_log(GPR_INFO,
520
- "[priority_lb %p] priority %u, child %s: child still "
521
- "attempting to connect, will wait",
522
- this, priority, child_name.c_str());
523
- }
524
- current_priority_ = priority;
525
- // If we're not still using an old child from before the last
526
- // update, report CONNECTING here.
527
- if (current_child_from_before_update_ != nullptr) {
528
- channel_control_helper()->UpdateState(child->connectivity_state(),
529
- child->connectivity_status(),
530
- child->GetPicker());
531
- }
464
+ SetCurrentPriorityLocked(priority, /*deactivate_lower_priorities=*/false,
465
+ "failover timer pending");
532
466
  return;
533
467
  }
534
468
  // Child has been failing for a while. Move on to the next priority.
@@ -559,42 +493,37 @@ void PriorityLb::ChoosePriorityLocked() {
559
493
  auto& child = children_[child_name];
560
494
  GPR_ASSERT(child != nullptr);
561
495
  if (child->connectivity_state() == GRPC_CHANNEL_CONNECTING) {
562
- channel_control_helper()->UpdateState(child->connectivity_state(),
563
- child->connectivity_status(),
564
- child->GetPicker());
496
+ SetCurrentPriorityLocked(priority, /*deactivate_lower_priorities=*/false,
497
+ "CONNECTING (pass 2)");
565
498
  return;
566
499
  }
567
500
  }
568
501
  // Did not find any child in CONNECTING, delegate to last child.
569
- const std::string& child_name = config_->priorities().back();
570
- if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_priority_trace)) {
571
- gpr_log(GPR_INFO,
572
- "[priority_lb %p] no priority in CONNECTING, delegating to "
573
- "lowest priority child %s",
574
- this, child_name.c_str());
575
- }
576
- auto& child = children_[child_name];
577
- GPR_ASSERT(child != nullptr);
578
- channel_control_helper()->UpdateState(child->connectivity_state(),
579
- child->connectivity_status(),
580
- child->GetPicker());
502
+ SetCurrentPriorityLocked(config_->priorities().size() - 1,
503
+ /*deactivate_lower_priorities=*/false,
504
+ "no usable children");
581
505
  }
582
506
 
583
- void PriorityLb::SetCurrentPriorityLocked(uint32_t priority) {
507
+ void PriorityLb::SetCurrentPriorityLocked(int32_t priority,
508
+ bool deactivate_lower_priorities,
509
+ const char* reason) {
584
510
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_priority_trace)) {
585
- gpr_log(GPR_INFO, "[priority_lb %p] selected priority %u, child %s", this,
586
- priority, config_->priorities()[priority].c_str());
511
+ gpr_log(GPR_INFO,
512
+ "[priority_lb %p] selecting priority %u, child %s (%s, "
513
+ "deactivate_lower_priorities=%d)",
514
+ this, priority, config_->priorities()[priority].c_str(), reason,
515
+ deactivate_lower_priorities);
587
516
  }
588
517
  current_priority_ = priority;
589
- current_child_from_before_update_ = nullptr;
590
- // Deactivate lower priorities.
591
- for (uint32_t p = priority + 1; p < config_->priorities().size(); ++p) {
592
- const std::string& child_name = config_->priorities()[p];
593
- auto it = children_.find(child_name);
594
- if (it != children_.end()) it->second->MaybeDeactivateLocked();
518
+ if (deactivate_lower_priorities) {
519
+ for (uint32_t p = priority + 1; p < config_->priorities().size(); ++p) {
520
+ const std::string& child_name = config_->priorities()[p];
521
+ auto it = children_.find(child_name);
522
+ if (it != children_.end()) it->second->MaybeDeactivateLocked();
523
+ }
595
524
  }
596
- // Update picker.
597
525
  auto& child = children_[config_->priorities()[priority]];
526
+ GPR_ASSERT(child != nullptr);
598
527
  channel_control_helper()->UpdateState(child->connectivity_state(),
599
528
  child->connectivity_status(),
600
529
  child->GetPicker());
@@ -617,7 +546,7 @@ PriorityLb::ChildPriority::DeactivationTimer::DeactivationTimer(
617
546
  }
618
547
  GRPC_CLOSURE_INIT(&on_timer_, OnTimer, this, nullptr);
619
548
  Ref(DEBUG_LOCATION, "Timer").release();
620
- grpc_timer_init(&timer_, ExecCtx::Get()->Now() + kChildRetentionInterval,
549
+ grpc_timer_init(&timer_, Timestamp::Now() + kChildRetentionInterval,
621
550
  &on_timer_);
622
551
  }
623
552
 
@@ -679,7 +608,7 @@ PriorityLb::ChildPriority::FailoverTimer::FailoverTimer(
679
608
  Ref(DEBUG_LOCATION, "Timer").release();
680
609
  grpc_timer_init(
681
610
  &timer_,
682
- ExecCtx::Get()->Now() +
611
+ Timestamp::Now() +
683
612
  child_priority_->priority_policy_->child_failover_timeout_,
684
613
  &on_timer_);
685
614
  }
@@ -768,10 +697,10 @@ PriorityLb::ChildPriority::GetPicker() {
768
697
  return absl::make_unique<RefCountedPickerWrapper>(picker_wrapper_);
769
698
  }
770
699
 
771
- void PriorityLb::ChildPriority::UpdateLocked(
700
+ absl::Status PriorityLb::ChildPriority::UpdateLocked(
772
701
  RefCountedPtr<LoadBalancingPolicy::Config> config,
773
702
  bool ignore_reresolution_requests) {
774
- if (priority_policy_->shutting_down_) return;
703
+ if (priority_policy_->shutting_down_) return absl::OkStatus();
775
704
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_priority_trace)) {
776
705
  gpr_log(GPR_INFO, "[priority_lb %p] child %s (%p): start update",
777
706
  priority_policy_.get(), name_.c_str(), this);
@@ -789,19 +718,19 @@ void PriorityLb::ChildPriority::UpdateLocked(
789
718
  } else {
790
719
  update_args.addresses = priority_policy_->addresses_.status();
791
720
  }
792
- update_args.args = grpc_channel_args_copy(priority_policy_->args_);
721
+ update_args.resolution_note = priority_policy_->resolution_note_;
722
+ update_args.args = priority_policy_->args_;
793
723
  // Update the policy.
794
724
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_priority_trace)) {
795
725
  gpr_log(GPR_INFO,
796
726
  "[priority_lb %p] child %s (%p): updating child policy handler %p",
797
727
  priority_policy_.get(), name_.c_str(), this, child_policy_.get());
798
728
  }
799
- child_policy_->UpdateLocked(std::move(update_args));
729
+ return child_policy_->UpdateLocked(std::move(update_args));
800
730
  }
801
731
 
802
732
  OrphanablePtr<LoadBalancingPolicy>
803
- PriorityLb::ChildPriority::CreateChildPolicyLocked(
804
- const grpc_channel_args* args) {
733
+ PriorityLb::ChildPriority::CreateChildPolicyLocked(const ChannelArgs& args) {
805
734
  LoadBalancingPolicy::Args lb_policy_args;
806
735
  lb_policy_args.work_serializer = priority_policy_->work_serializer();
807
736
  lb_policy_args.args = args;
@@ -845,7 +774,14 @@ void PriorityLb::ChildPriority::OnConnectivityStateUpdateLocked(
845
774
  // Store the state and picker.
846
775
  connectivity_state_ = state;
847
776
  connectivity_status_ = status;
848
- picker_wrapper_ = MakeRefCounted<RefCountedPicker>(std::move(picker));
777
+ // When the failover timer fires, this method will be called with picker
778
+ // set to null, because we want to consider the child to be in
779
+ // TRANSIENT_FAILURE, but we have no new picker to report. In that case,
780
+ // just keep using the old picker, in case we wind up delegating to this
781
+ // child when all priorities are failing.
782
+ if (picker != nullptr) {
783
+ picker_wrapper_ = MakeRefCounted<RefCountedPicker>(std::move(picker));
784
+ }
849
785
  // If we transition to state CONNECTING and we've not seen
850
786
  // TRANSIENT_FAILURE more recently than READY or IDLE, start failover
851
787
  // timer if not already pending.
@@ -863,8 +799,17 @@ void PriorityLb::ChildPriority::OnConnectivityStateUpdateLocked(
863
799
  seen_ready_or_idle_since_transient_failure_ = false;
864
800
  failover_timer_.reset();
865
801
  }
866
- // Notify the parent policy.
867
- priority_policy_->HandleChildConnectivityStateChangeLocked(this);
802
+ // Call the LB policy's ChoosePriorityLocked() to choose a priority to
803
+ // use based on the updated state of this child.
804
+ //
805
+ // Note that if we're in the process of propagating an update from our
806
+ // parent to our children, we skip this, because we don't want to
807
+ // choose a new priority based on inconsistent state. Instead, the
808
+ // policy will choose a new priority once the update has been seen by
809
+ // all children.
810
+ if (!priority_policy_->update_in_progress_) {
811
+ priority_policy_->ChoosePriorityLocked();
812
+ }
868
813
  }
869
814
 
870
815
  void PriorityLb::ChildPriority::MaybeDeactivateLocked() {
@@ -882,8 +827,8 @@ void PriorityLb::ChildPriority::MaybeReactivateLocked() {
882
827
  //
883
828
 
884
829
  RefCountedPtr<SubchannelInterface>
885
- PriorityLb::ChildPriority::Helper::CreateSubchannel(
886
- ServerAddress address, const grpc_channel_args& args) {
830
+ PriorityLb::ChildPriority::Helper::CreateSubchannel(ServerAddress address,
831
+ const ChannelArgs& args) {
887
832
  if (priority_->priority_policy_->shutting_down_) return nullptr;
888
833
  return priority_->priority_policy_->channel_control_helper()
889
834
  ->CreateSubchannel(std::move(address), args);
@@ -920,6 +865,61 @@ void PriorityLb::ChildPriority::Helper::AddTraceEvent(
920
865
  // factory
921
866
  //
922
867
 
868
+ const JsonLoaderInterface* PriorityLbConfig::PriorityLbChild::JsonLoader(
869
+ const JsonArgs&) {
870
+ static const auto* loader =
871
+ JsonObjectLoader<PriorityLbChild>()
872
+ // Note: The "config" field requires custom parsing, so it's
873
+ // handled in JsonPostLoad() instead of here.
874
+ .OptionalField("ignore_reresolution_requests",
875
+ &PriorityLbChild::ignore_reresolution_requests)
876
+ .Finish();
877
+ return loader;
878
+ }
879
+
880
+ void PriorityLbConfig::PriorityLbChild::JsonPostLoad(const Json& json,
881
+ const JsonArgs&,
882
+ ValidationErrors* errors) {
883
+ ValidationErrors::ScopedField field(errors, ".config");
884
+ auto it = json.object_value().find("config");
885
+ if (it == json.object_value().end()) {
886
+ errors->AddError("field not present");
887
+ return;
888
+ }
889
+ auto lb_config =
890
+ CoreConfiguration::Get().lb_policy_registry().ParseLoadBalancingConfig(
891
+ it->second);
892
+ if (!lb_config.ok()) {
893
+ errors->AddError(lb_config.status().message());
894
+ return;
895
+ }
896
+ config = std::move(*lb_config);
897
+ }
898
+
899
+ const JsonLoaderInterface* PriorityLbConfig::JsonLoader(const JsonArgs&) {
900
+ static const auto* loader =
901
+ JsonObjectLoader<PriorityLbConfig>()
902
+ .Field("children", &PriorityLbConfig::children_)
903
+ .Field("priorities", &PriorityLbConfig::priorities_)
904
+ .Finish();
905
+ return loader;
906
+ }
907
+
908
+ void PriorityLbConfig::JsonPostLoad(const Json& /*json*/, const JsonArgs&,
909
+ ValidationErrors* errors) {
910
+ std::set<std::string> unknown_priorities;
911
+ for (const std::string& priority : priorities_) {
912
+ if (children_.find(priority) == children_.end()) {
913
+ unknown_priorities.insert(priority);
914
+ }
915
+ }
916
+ if (!unknown_priorities.empty()) {
917
+ errors->AddError(absl::StrCat("unknown priorit(ies): [",
918
+ absl::StrJoin(unknown_priorities, ", "),
919
+ "]"));
920
+ }
921
+ }
922
+
923
923
  class PriorityLbFactory : public LoadBalancingPolicyFactory {
924
924
  public:
925
925
  OrphanablePtr<LoadBalancingPolicy> CreateLoadBalancingPolicy(
@@ -927,132 +927,28 @@ class PriorityLbFactory : public LoadBalancingPolicyFactory {
927
927
  return MakeOrphanable<PriorityLb>(std::move(args));
928
928
  }
929
929
 
930
- const char* name() const override { return kPriority; }
930
+ absl::string_view name() const override { return kPriority; }
931
931
 
932
- RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
933
- const Json& json, grpc_error_handle* error) const override {
934
- GPR_DEBUG_ASSERT(error != nullptr && GRPC_ERROR_IS_NONE(*error));
932
+ absl::StatusOr<RefCountedPtr<LoadBalancingPolicy::Config>>
933
+ ParseLoadBalancingConfig(const Json& json) const override {
935
934
  if (json.type() == Json::Type::JSON_NULL) {
936
935
  // priority was mentioned as a policy in the deprecated
937
936
  // loadBalancingPolicy field or in the client API.
938
- *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
937
+ return absl::InvalidArgumentError(
939
938
  "field:loadBalancingPolicy error:priority policy requires "
940
939
  "configuration. Please use loadBalancingConfig field of service "
941
940
  "config instead.");
942
- return nullptr;
943
- }
944
- std::vector<grpc_error_handle> error_list;
945
- // Children.
946
- std::map<std::string, PriorityLbConfig::PriorityLbChild> children;
947
- auto it = json.object_value().find("children");
948
- if (it == json.object_value().end()) {
949
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
950
- "field:children error:required field missing"));
951
- } else if (it->second.type() != Json::Type::OBJECT) {
952
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
953
- "field:children error:type should be object"));
954
- } else {
955
- const Json::Object& object = it->second.object_value();
956
- for (const auto& p : object) {
957
- const std::string& child_name = p.first;
958
- const Json& element = p.second;
959
- if (element.type() != Json::Type::OBJECT) {
960
- error_list.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
961
- absl::StrCat("field:children key:", child_name,
962
- " error:should be type object")));
963
- } else {
964
- auto it2 = element.object_value().find("config");
965
- if (it2 == element.object_value().end()) {
966
- error_list.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
967
- absl::StrCat("field:children key:", child_name,
968
- " error:missing 'config' field")));
969
- } else {
970
- grpc_error_handle parse_error = GRPC_ERROR_NONE;
971
- auto config = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
972
- it2->second, &parse_error);
973
- bool ignore_resolution_requests = false;
974
- // If present, ignore_reresolution_requests must be of type
975
- // boolean.
976
- auto it3 =
977
- element.object_value().find("ignore_reresolution_requests");
978
- if (it3 != element.object_value().end()) {
979
- if (it3->second.type() == Json::Type::JSON_TRUE) {
980
- ignore_resolution_requests = true;
981
- } else if (it3->second.type() != Json::Type::JSON_FALSE) {
982
- error_list.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
983
- absl::StrCat("field:children key:", child_name,
984
- " field:ignore_reresolution_requests:should "
985
- "be type boolean")));
986
- }
987
- }
988
- if (config == nullptr) {
989
- GPR_DEBUG_ASSERT(!GRPC_ERROR_IS_NONE(parse_error));
990
- error_list.push_back(
991
- GRPC_ERROR_CREATE_REFERENCING_FROM_COPIED_STRING(
992
- absl::StrCat("field:children key:", child_name).c_str(),
993
- &parse_error, 1));
994
- GRPC_ERROR_UNREF(parse_error);
995
- }
996
- children[child_name].config = std::move(config);
997
- children[child_name].ignore_reresolution_requests =
998
- ignore_resolution_requests;
999
- }
1000
- }
1001
- }
1002
- }
1003
- // Priorities.
1004
- std::vector<std::string> priorities;
1005
- it = json.object_value().find("priorities");
1006
- if (it == json.object_value().end()) {
1007
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1008
- "field:priorities error:required field missing"));
1009
- } else if (it->second.type() != Json::Type::ARRAY) {
1010
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1011
- "field:priorities error:type should be array"));
1012
- } else {
1013
- const Json::Array& array = it->second.array_value();
1014
- for (size_t i = 0; i < array.size(); ++i) {
1015
- const Json& element = array[i];
1016
- if (element.type() != Json::Type::STRING) {
1017
- error_list.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
1018
- "field:priorities element:", i, " error:should be type string")));
1019
- } else if (children.find(element.string_value()) == children.end()) {
1020
- error_list.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
1021
- "field:priorities element:", i, " error:unknown child '",
1022
- element.string_value(), "'")));
1023
- } else {
1024
- priorities.emplace_back(element.string_value());
1025
- }
1026
- }
1027
- if (priorities.size() != children.size()) {
1028
- error_list.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
1029
- "field:priorities error:priorities size (", priorities.size(),
1030
- ") != children size (", children.size(), ")")));
1031
- }
1032
- }
1033
- if (error_list.empty()) {
1034
- return MakeRefCounted<PriorityLbConfig>(std::move(children),
1035
- std::move(priorities));
1036
- } else {
1037
- *error = GRPC_ERROR_CREATE_FROM_VECTOR(
1038
- "priority_experimental LB policy config", &error_list);
1039
- return nullptr;
1040
941
  }
942
+ return LoadRefCountedFromJson<PriorityLbConfig>(
943
+ json, JsonArgs(), "errors validating priority LB policy config");
1041
944
  }
1042
945
  };
1043
946
 
1044
947
  } // namespace
1045
948
 
1046
- } // namespace grpc_core
1047
-
1048
- //
1049
- // Plugin registration
1050
- //
1051
-
1052
- void grpc_lb_policy_priority_init() {
1053
- grpc_core::LoadBalancingPolicyRegistry::Builder::
1054
- RegisterLoadBalancingPolicyFactory(
1055
- absl::make_unique<grpc_core::PriorityLbFactory>());
949
+ void RegisterPriorityLbPolicy(CoreConfiguration::Builder* builder) {
950
+ builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory(
951
+ absl::make_unique<PriorityLbFactory>());
1056
952
  }
1057
953
 
1058
- void grpc_lb_policy_priority_shutdown() {}
954
+ } // namespace grpc_core