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
@@ -58,7 +58,6 @@
58
58
  // IWYU pragma: no_include <sys/socket.h>
59
59
 
60
60
  #include <inttypes.h>
61
- #include <limits.h>
62
61
  #include <stdlib.h>
63
62
  #include <string.h>
64
63
 
@@ -94,16 +93,12 @@
94
93
  #include <grpc/support/log.h>
95
94
 
96
95
  #include "src/core/ext/filters/client_channel/client_channel.h"
97
- #include "src/core/ext/filters/client_channel/lb_policy.h"
98
96
  #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
99
97
  #include "src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h"
100
98
  #include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h"
101
99
  #include "src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h"
102
100
  #include "src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h"
103
- #include "src/core/ext/filters/client_channel/lb_policy_factory.h"
104
- #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
105
101
  #include "src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h"
106
- #include "src/core/ext/filters/client_channel/subchannel_interface.h"
107
102
  #include "src/core/lib/address_utils/sockaddr_utils.h"
108
103
  #include "src/core/lib/backoff/backoff.h"
109
104
  #include "src/core/lib/channel/channel_args.h"
@@ -111,7 +106,7 @@
111
106
  #include "src/core/lib/channel/channelz.h"
112
107
  #include "src/core/lib/config/core_configuration.h"
113
108
  #include "src/core/lib/debug/trace.h"
114
- #include "src/core/lib/event_engine/event_engine_factory.h"
109
+ #include "src/core/lib/event_engine/default_event_engine.h"
115
110
  #include "src/core/lib/gpr/string.h"
116
111
  #include "src/core/lib/gpr/useful.h"
117
112
  #include "src/core/lib/gprpp/debug_location.h"
@@ -119,6 +114,8 @@
119
114
  #include "src/core/lib/gprpp/ref_counted.h"
120
115
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
121
116
  #include "src/core/lib/gprpp/time.h"
117
+ #include "src/core/lib/gprpp/validation_errors.h"
118
+ #include "src/core/lib/gprpp/work_serializer.h"
122
119
  #include "src/core/lib/iomgr/closure.h"
123
120
  #include "src/core/lib/iomgr/error.h"
124
121
  #include "src/core/lib/iomgr/exec_ctx.h"
@@ -127,8 +124,13 @@
127
124
  #include "src/core/lib/iomgr/sockaddr.h"
128
125
  #include "src/core/lib/iomgr/socket_utils.h"
129
126
  #include "src/core/lib/iomgr/timer.h"
130
- #include "src/core/lib/iomgr/work_serializer.h"
131
127
  #include "src/core/lib/json/json.h"
128
+ #include "src/core/lib/json/json_args.h"
129
+ #include "src/core/lib/json/json_object_loader.h"
130
+ #include "src/core/lib/load_balancing/lb_policy.h"
131
+ #include "src/core/lib/load_balancing/lb_policy_factory.h"
132
+ #include "src/core/lib/load_balancing/lb_policy_registry.h"
133
+ #include "src/core/lib/load_balancing/subchannel_interface.h"
132
134
  #include "src/core/lib/resolver/resolver.h"
133
135
  #include "src/core/lib/resolver/server_address.h"
134
136
  #include "src/core/lib/security/credentials/credentials.h"
@@ -161,15 +163,53 @@ namespace {
161
163
  using ::grpc_event_engine::experimental::EventEngine;
162
164
  using ::grpc_event_engine::experimental::GetDefaultEventEngine;
163
165
 
164
- constexpr char kGrpclb[] = "grpclb";
166
+ constexpr absl::string_view kGrpclb = "grpclb";
165
167
 
166
168
  class GrpcLbConfig : public LoadBalancingPolicy::Config {
167
169
  public:
168
- GrpcLbConfig(RefCountedPtr<LoadBalancingPolicy::Config> child_policy,
169
- std::string service_name)
170
- : child_policy_(std::move(child_policy)),
171
- service_name_(std::move(service_name)) {}
172
- const char* name() const override { return kGrpclb; }
170
+ GrpcLbConfig() = default;
171
+
172
+ GrpcLbConfig(const GrpcLbConfig&) = delete;
173
+ GrpcLbConfig& operator=(const GrpcLbConfig&) = delete;
174
+
175
+ GrpcLbConfig(GrpcLbConfig&& other) = delete;
176
+ GrpcLbConfig& operator=(GrpcLbConfig&& other) = delete;
177
+
178
+ static const JsonLoaderInterface* JsonLoader(const JsonArgs&) {
179
+ static const auto* loader =
180
+ JsonObjectLoader<GrpcLbConfig>()
181
+ // Note: "childPolicy" field requires custom parsing, so
182
+ // it's handled in JsonPostLoad() instead.
183
+ .OptionalField("serviceName", &GrpcLbConfig::service_name_)
184
+ .Finish();
185
+ return loader;
186
+ }
187
+
188
+ void JsonPostLoad(const Json& json, const JsonArgs&,
189
+ ValidationErrors* errors) {
190
+ ValidationErrors::ScopedField field(errors, ".childPolicy");
191
+ Json child_policy_config_json_tmp;
192
+ const Json* child_policy_config_json;
193
+ auto it = json.object_value().find("childPolicy");
194
+ if (it == json.object_value().end()) {
195
+ child_policy_config_json_tmp = Json::Array{Json::Object{
196
+ {"round_robin", Json::Object()},
197
+ }};
198
+ child_policy_config_json = &child_policy_config_json_tmp;
199
+ } else {
200
+ child_policy_config_json = &it->second;
201
+ }
202
+ auto child_policy_config =
203
+ CoreConfiguration::Get().lb_policy_registry().ParseLoadBalancingConfig(
204
+ *child_policy_config_json);
205
+ if (!child_policy_config.ok()) {
206
+ errors->AddError(child_policy_config.status().message());
207
+ return;
208
+ }
209
+ child_policy_ = std::move(*child_policy_config);
210
+ }
211
+
212
+ absl::string_view name() const override { return kGrpclb; }
173
213
 
174
214
  RefCountedPtr<LoadBalancingPolicy::Config> child_policy() const {
175
215
  return child_policy_;
@@ -186,9 +226,9 @@ class GrpcLb : public LoadBalancingPolicy {
186
226
  public:
187
227
  explicit GrpcLb(Args args);
188
228
 
189
- const char* name() const override { return kGrpclb; }
229
+ absl::string_view name() const override { return kGrpclb; }
190
230
 
191
- void UpdateLocked(UpdateArgs args) override;
231
+ absl::Status UpdateLocked(UpdateArgs args) override;
192
232
  void ResetBackoffLocked() override;
193
233
 
194
234
  private:
@@ -219,7 +259,6 @@ class GrpcLb : public LoadBalancingPolicy {
219
259
  void SendClientLoadReportLocked();
220
260
 
221
261
  // EventEngine callbacks
222
- void MaybeSendClientLoadReport();
223
262
  void MaybeSendClientLoadReportLocked();
224
263
 
225
264
  static void ClientLoadReportDone(void* arg, grpc_error_handle error);
@@ -426,7 +465,7 @@ class GrpcLb : public LoadBalancingPolicy {
426
465
  : parent_(std::move(parent)) {}
427
466
 
428
467
  RefCountedPtr<SubchannelInterface> CreateSubchannel(
429
- ServerAddress address, const grpc_channel_args& args) override;
468
+ ServerAddress address, const ChannelArgs& args) override;
430
469
  void UpdateState(grpc_connectivity_state state, const absl::Status& status,
431
470
  std::unique_ptr<SubchannelPicker> picker) override;
432
471
  void RequestReresolution() override;
@@ -470,12 +509,10 @@ class GrpcLb : public LoadBalancingPolicy {
470
509
  RefCountedPtr<GrpcLb> parent_;
471
510
  };
472
511
 
473
- ~GrpcLb() override;
474
-
475
512
  void ShutdownLocked() override;
476
513
 
477
514
  // Helper functions used in UpdateLocked().
478
- void UpdateBalancerChannelLocked(const grpc_channel_args& args);
515
+ absl::Status UpdateBalancerChannelLocked(const ChannelArgs& args);
479
516
 
480
517
  void CancelBalancerChannelConnectivityWatchLocked();
481
518
 
@@ -491,10 +528,10 @@ class GrpcLb : public LoadBalancingPolicy {
491
528
  void OnBalancerCallRetryTimerLocked(grpc_error_handle error);
492
529
 
493
530
  // Methods for dealing with the child policy.
494
- grpc_channel_args* CreateChildPolicyArgsLocked(
531
+ ChannelArgs CreateChildPolicyArgsLocked(
495
532
  bool is_backend_from_grpclb_load_balancer);
496
533
  OrphanablePtr<LoadBalancingPolicy> CreateChildPolicyLocked(
497
- const grpc_channel_args* args);
534
+ const ChannelArgs& args);
498
535
  void CreateOrUpdateChildPolicyLocked();
499
536
 
500
537
  // Subchannel caching.
@@ -510,7 +547,7 @@ class GrpcLb : public LoadBalancingPolicy {
510
547
  RefCountedPtr<GrpcLbConfig> config_;
511
548
 
512
549
  // Current channel args from the resolver.
513
- grpc_channel_args* args_ = nullptr;
550
+ ChannelArgs args_;
514
551
 
515
552
  // Internal state.
516
553
  bool shutting_down_ = false;
@@ -674,7 +711,7 @@ ServerAddressList GrpcLb::Serverlist::GetServerAddressList(
674
711
  absl::make_unique<TokenAndClientStatsAttribute>(std::move(lb_token),
675
712
  stats);
676
713
  // Add address.
677
- addresses.emplace_back(addr, /*args=*/nullptr, std::move(attributes));
714
+ addresses.emplace_back(addr, ChannelArgs(), std::move(attributes));
678
715
  }
679
716
  return addresses;
680
717
  }
@@ -759,7 +796,7 @@ GrpcLb::PickResult GrpcLb::Picker::Pick(PickArgs args) {
759
796
  //
760
797
 
761
798
  RefCountedPtr<SubchannelInterface> GrpcLb::Helper::CreateSubchannel(
762
- ServerAddress address, const grpc_channel_args& args) {
799
+ ServerAddress address, const ChannelArgs& args) {
763
800
  if (parent_->shutting_down_) return nullptr;
764
801
  const TokenAndClientStatsAttribute* attribute =
765
802
  static_cast<const TokenAndClientStatsAttribute*>(
@@ -870,7 +907,7 @@ GrpcLb::BalancerCallState::BalancerCallState(
870
907
  const Timestamp deadline =
871
908
  grpclb_policy()->lb_call_timeout_ == Duration::Zero()
872
909
  ? Timestamp::InfFuture()
873
- : ExecCtx::Get()->Now() + grpclb_policy()->lb_call_timeout_;
910
+ : Timestamp::Now() + grpclb_policy()->lb_call_timeout_;
874
911
  lb_call_ = grpc_channel_create_pollset_set_call(
875
912
  grpclb_policy()->lb_channel_, nullptr, GRPC_PROPAGATE_DEFAULTS,
876
913
  grpclb_policy_->interested_parties(),
@@ -998,15 +1035,11 @@ void GrpcLb::BalancerCallState::ScheduleNextClientLoadReportLocked() {
998
1035
  GetDefaultEventEngine()->RunAfter(client_stats_report_interval_, [this] {
999
1036
  ApplicationCallbackExecCtx callback_exec_ctx;
1000
1037
  ExecCtx exec_ctx;
1001
- MaybeSendClientLoadReport();
1038
+ grpclb_policy()->work_serializer()->Run(
1039
+ [this] { MaybeSendClientLoadReportLocked(); }, DEBUG_LOCATION);
1002
1040
  });
1003
1041
  }
1004
1042
 
1005
- void GrpcLb::BalancerCallState::MaybeSendClientLoadReport() {
1006
- grpclb_policy()->work_serializer()->Run(
1007
- [this] { MaybeSendClientLoadReportLocked(); }, DEBUG_LOCATION);
1008
- }
1009
-
1010
1043
  void GrpcLb::BalancerCallState::MaybeSendClientLoadReportLocked() {
1011
1044
  client_load_report_handle_.reset();
1012
1045
  if (this != grpclb_policy()->lb_calld_.get()) {
@@ -1343,7 +1376,7 @@ void GrpcLb::BalancerCallState::OnBalancerStatusReceivedLocked(
1343
1376
  // helper code for creating balancer channel
1344
1377
  //
1345
1378
 
1346
- ServerAddressList ExtractBalancerAddresses(const grpc_channel_args& args) {
1379
+ ServerAddressList ExtractBalancerAddresses(const ChannelArgs& args) {
1347
1380
  const ServerAddressList* addresses =
1348
1381
  FindGrpclbBalancerAddressesInChannelArgs(args);
1349
1382
  if (addresses != nullptr) return *addresses;
@@ -1357,88 +1390,90 @@ ServerAddressList ExtractBalancerAddresses(const grpc_channel_args& args) {
1357
1390
  * - \a response_generator: in order to propagate updates from the resolver
1358
1391
  * above the grpclb policy.
1359
1392
  * - \a args: other args inherited from the grpclb policy. */
1360
- grpc_channel_args* BuildBalancerChannelArgs(
1393
+ ChannelArgs BuildBalancerChannelArgs(
1361
1394
  FakeResolverResponseGenerator* response_generator,
1362
- const grpc_channel_args* args) {
1363
- // Channel args to remove.
1364
- static const char* args_to_remove[] = {
1365
- // LB policy name, since we want to use the default (pick_first) in
1366
- // the LB channel.
1367
- GRPC_ARG_LB_POLICY_NAME,
1368
- // Strip out the service config, since we don't want the LB policy
1369
- // config specified for the parent channel to affect the LB channel.
1370
- GRPC_ARG_SERVICE_CONFIG,
1371
- // The channel arg for the server URI, since that will be different for
1372
- // the LB channel than for the parent channel. The client channel
1373
- // factory will re-add this arg with the right value.
1374
- GRPC_ARG_SERVER_URI,
1375
- // The fake resolver response generator, because we are replacing it
1376
- // with the one from the grpclb policy, used to propagate updates to
1377
- // the LB channel.
1378
- GRPC_ARG_FAKE_RESOLVER_RESPONSE_GENERATOR,
1379
- // The LB channel should use the authority indicated by the target
1380
- // authority table (see \a ModifyGrpclbBalancerChannelArgs),
1381
- // as opposed to the authority from the parent channel.
1382
- GRPC_ARG_DEFAULT_AUTHORITY,
1383
- // Just as for \a GRPC_ARG_DEFAULT_AUTHORITY, the LB channel should be
1384
- // treated as a stand-alone channel and not inherit this argument from the
1385
- // args of the parent channel.
1386
- GRPC_SSL_TARGET_NAME_OVERRIDE_ARG,
1387
- // Don't want to pass down channelz node from parent; the balancer
1388
- // channel will get its own.
1389
- GRPC_ARG_CHANNELZ_CHANNEL_NODE,
1390
- // Remove the channel args for channel credentials and replace it
1391
- // with a version that does not contain call credentials. The loadbalancer
1392
- // is not necessarily trusted to handle bearer token credentials.
1393
- GRPC_ARG_CHANNEL_CREDENTIALS,
1394
- };
1395
+ const ChannelArgs& args) {
1396
+ ChannelArgs grpclb_channel_args;
1397
+ const grpc_channel_args* lb_channel_specific_args =
1398
+ args.GetPointer<grpc_channel_args>(
1399
+ GRPC_ARG_EXPERIMENTAL_GRPCLB_CHANNEL_ARGS);
1400
+ if (lb_channel_specific_args != nullptr) {
1401
+ grpclb_channel_args = ChannelArgs::FromC(lb_channel_specific_args);
1402
+ } else {
1403
+ // Set grpclb_channel_args based on the parent channel's channel args.
1404
+ grpclb_channel_args =
1405
+ args
1406
+ // LB policy name, since we want to use the default (pick_first) in
1407
+ // the LB channel.
1408
+ .Remove(GRPC_ARG_LB_POLICY_NAME)
1409
+ // Strip out the service config, since we don't want the LB policy
1410
+ // config specified for the parent channel to affect the LB channel.
1411
+ .Remove(GRPC_ARG_SERVICE_CONFIG)
1412
+ // The channel arg for the server URI, since that will be different
1413
+ // for the LB channel than for the parent channel. The client
1414
+ // channel factory will re-add this arg with the right value.
1415
+ .Remove(GRPC_ARG_SERVER_URI)
1416
+ // The fake resolver response generator, because we are replacing it
1417
+ // with the one from the grpclb policy, used to propagate updates to
1418
+ // the LB channel.
1419
+ .Remove(GRPC_ARG_FAKE_RESOLVER_RESPONSE_GENERATOR)
1420
+ // The LB channel should use the authority indicated by the target
1421
+ // authority table (see \a ModifyGrpclbBalancerChannelArgs),
1422
+ // as opposed to the authority from the parent channel.
1423
+ .Remove(GRPC_ARG_DEFAULT_AUTHORITY)
1424
+ // Just as for \a GRPC_ARG_DEFAULT_AUTHORITY, the LB channel should
1425
+ // be treated as a stand-alone channel and not inherit this argument
1426
+ // from the args of the parent channel.
1427
+ .Remove(GRPC_SSL_TARGET_NAME_OVERRIDE_ARG)
1428
+ // Don't want to pass down channelz node from parent; the balancer
1429
+ // channel will get its own.
1430
+ .Remove(GRPC_ARG_CHANNELZ_CHANNEL_NODE)
1431
+ // Remove the channel args for channel credentials and replace it
1432
+ // with a version that does not contain call credentials. The
1433
+ // loadbalancer is not necessarily trusted to handle bearer token
1434
+ // credentials.
1435
+ .Remove(GRPC_ARG_CHANNEL_CREDENTIALS);
1436
+ }
1395
1437
  // Create channel args for channel credentials that does not contain bearer
1396
1438
  // token credentials.
1397
- grpc_channel_credentials* channel_credentials =
1398
- grpc_channel_credentials_find_in_args(args);
1439
+ auto* channel_credentials = args.GetObject<grpc_channel_credentials>();
1399
1440
  GPR_ASSERT(channel_credentials != nullptr);
1400
1441
  RefCountedPtr<grpc_channel_credentials> creds_sans_call_creds =
1401
1442
  channel_credentials->duplicate_without_call_credentials();
1402
1443
  GPR_ASSERT(creds_sans_call_creds != nullptr);
1403
- // Channel args to add.
1404
- absl::InlinedVector<grpc_arg, 4> args_to_add = {
1405
- // The fake resolver response generator, which we use to inject
1406
- // address updates into the LB channel.
1407
- FakeResolverResponseGenerator::MakeChannelArg(response_generator),
1444
+ return grpclb_channel_args
1408
1445
  // A channel arg indicating the target is a grpclb load balancer.
1409
- grpc_channel_arg_integer_create(
1410
- const_cast<char*>(GRPC_ARG_ADDRESS_IS_GRPCLB_LOAD_BALANCER), 1),
1446
+ .Set(GRPC_ARG_ADDRESS_IS_GRPCLB_LOAD_BALANCER, 1)
1411
1447
  // Tells channelz that this is an internal channel.
1412
- grpc_channel_arg_integer_create(
1413
- const_cast<char*>(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL), 1),
1448
+ .Set(GRPC_ARG_CHANNELZ_IS_INTERNAL_CHANNEL, 1)
1414
1449
  // A channel args for new channel credentials that does not contain bearer
1415
1450
  // tokens.
1416
- grpc_channel_credentials_to_arg(creds_sans_call_creds.get()),
1417
- };
1418
- return grpc_channel_args_copy_and_add_and_remove(
1419
- args, args_to_remove, GPR_ARRAY_SIZE(args_to_remove), args_to_add.data(),
1420
- args_to_add.size());
1451
+ .SetObject(creds_sans_call_creds)
1452
+ // The fake resolver response generator, which we use to inject
1453
+ // address updates into the LB channel.
1454
+ .SetObject(response_generator->Ref());
1421
1455
  }
1422
1456
 
1423
1457
  //
1424
1458
  // ctor and dtor
1425
1459
  //
1426
1460
 
1427
- std::string GetServerNameFromChannelArgs(const grpc_channel_args* args) {
1428
- const char* server_uri =
1429
- grpc_channel_args_find_string(args, GRPC_ARG_SERVER_URI);
1430
- GPR_ASSERT(server_uri != nullptr);
1431
- absl::StatusOr<URI> uri = URI::Parse(server_uri);
1461
+ std::string GetServerNameFromChannelArgs(const ChannelArgs& args) {
1462
+ absl::StatusOr<URI> uri =
1463
+ URI::Parse(args.GetString(GRPC_ARG_SERVER_URI).value());
1432
1464
  GPR_ASSERT(uri.ok() && !uri->path().empty());
1433
1465
  return std::string(absl::StripPrefix(uri->path(), "/"));
1434
1466
  }
1435
1467
 
1436
1468
  GrpcLb::GrpcLb(Args args)
1437
1469
  : LoadBalancingPolicy(std::move(args)),
1438
- server_name_(GetServerNameFromChannelArgs(args.args)),
1470
+ server_name_(GetServerNameFromChannelArgs(channel_args())),
1439
1471
  response_generator_(MakeRefCounted<FakeResolverResponseGenerator>()),
1440
- lb_call_timeout_(Duration::Milliseconds(grpc_channel_args_find_integer(
1441
- args.args, GRPC_ARG_GRPCLB_CALL_TIMEOUT_MS, {0, 0, INT_MAX}))),
1472
+ lb_call_timeout_(std::max(
1473
+ Duration::Zero(),
1474
+ channel_args()
1475
+ .GetDurationFromIntMillis(GRPC_ARG_GRPCLB_CALL_TIMEOUT_MS)
1476
+ .value_or(Duration::Zero()))),
1442
1477
  lb_call_backoff_(
1443
1478
  BackOff::Options()
1444
1479
  .set_initial_backoff(Duration::Seconds(
@@ -1447,15 +1482,19 @@ GrpcLb::GrpcLb(Args args)
1447
1482
  .set_jitter(GRPC_GRPCLB_RECONNECT_JITTER)
1448
1483
  .set_max_backoff(Duration::Seconds(
1449
1484
  GRPC_GRPCLB_RECONNECT_MAX_BACKOFF_SECONDS))),
1450
- fallback_at_startup_timeout_(
1451
- Duration::Milliseconds(grpc_channel_args_find_integer(
1452
- args.args, GRPC_ARG_GRPCLB_FALLBACK_TIMEOUT_MS,
1453
- {GRPC_GRPCLB_DEFAULT_FALLBACK_TIMEOUT_MS, 0, INT_MAX}))),
1454
- subchannel_cache_interval_(
1455
- Duration::Milliseconds(grpc_channel_args_find_integer(
1456
- args.args, GRPC_ARG_GRPCLB_SUBCHANNEL_CACHE_INTERVAL_MS,
1457
- {GRPC_GRPCLB_DEFAULT_SUBCHANNEL_DELETION_DELAY_MS, 0,
1458
- INT_MAX}))) {
1485
+ fallback_at_startup_timeout_(std::max(
1486
+ Duration::Zero(),
1487
+ channel_args()
1488
+ .GetDurationFromIntMillis(GRPC_ARG_GRPCLB_FALLBACK_TIMEOUT_MS)
1489
+ .value_or(Duration::Milliseconds(
1490
+ GRPC_GRPCLB_DEFAULT_FALLBACK_TIMEOUT_MS)))),
1491
+ subchannel_cache_interval_(std::max(
1492
+ Duration::Zero(),
1493
+ channel_args()
1494
+ .GetDurationFromIntMillis(
1495
+ GRPC_ARG_GRPCLB_SUBCHANNEL_CACHE_INTERVAL_MS)
1496
+ .value_or(Duration::Milliseconds(
1497
+ GRPC_GRPCLB_DEFAULT_SUBCHANNEL_DELETION_DELAY_MS)))) {
1459
1498
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1460
1499
  gpr_log(GPR_INFO,
1461
1500
  "[grpclb %p] Will use '%s' as the server name for LB request.",
@@ -1470,8 +1509,6 @@ GrpcLb::GrpcLb(Args args)
1470
1509
  nullptr);
1471
1510
  }
1472
1511
 
1473
- GrpcLb::~GrpcLb() { grpc_channel_args_destroy(args_); }
1474
-
1475
1512
  void GrpcLb::ShutdownLocked() {
1476
1513
  shutting_down_ = true;
1477
1514
  lb_calld_.reset();
@@ -1522,7 +1559,7 @@ void GrpcLb::ResetBackoffLocked() {
1522
1559
  }
1523
1560
  }
1524
1561
 
1525
- void GrpcLb::UpdateLocked(UpdateArgs args) {
1562
+ absl::Status GrpcLb::UpdateLocked(UpdateArgs args) {
1526
1563
  const bool is_initial_update = lb_channel_ == nullptr;
1527
1564
  config_ = args.config;
1528
1565
  GPR_ASSERT(config_ != nullptr);
@@ -1538,7 +1575,7 @@ void GrpcLb::UpdateLocked(UpdateArgs args) {
1538
1575
  }
1539
1576
  resolution_note_ = std::move(args.resolution_note);
1540
1577
  // Update balancer channel.
1541
- UpdateBalancerChannelLocked(*args.args);
1578
+ absl::Status status = UpdateBalancerChannelLocked(args.args);
1542
1579
  // Update the existing child policy, if any.
1543
1580
  if (child_policy_ != nullptr) CreateOrUpdateChildPolicyLocked();
1544
1581
  // If this is the initial update, start the fallback-at-startup checks
@@ -1546,7 +1583,7 @@ void GrpcLb::UpdateLocked(UpdateArgs args) {
1546
1583
  if (is_initial_update) {
1547
1584
  fallback_at_startup_checks_pending_ = true;
1548
1585
  // Start timer.
1549
- Timestamp deadline = ExecCtx::Get()->Now() + fallback_at_startup_timeout_;
1586
+ Timestamp deadline = Timestamp::Now() + fallback_at_startup_timeout_;
1550
1587
  Ref(DEBUG_LOCATION, "on_fallback_timer").release(); // Ref for callback
1551
1588
  grpc_timer_init(&lb_fallback_timer_, deadline, &lb_on_fallback_);
1552
1589
  // Start watching the channel's connectivity state. If the channel
@@ -1563,43 +1600,40 @@ void GrpcLb::UpdateLocked(UpdateArgs args) {
1563
1600
  // Start balancer call.
1564
1601
  StartBalancerCallLocked();
1565
1602
  }
1603
+ return status;
1566
1604
  }
1567
1605
 
1568
1606
  //
1569
1607
  // helpers for UpdateLocked()
1570
1608
  //
1571
1609
 
1572
- void GrpcLb::UpdateBalancerChannelLocked(const grpc_channel_args& args) {
1610
+ absl::Status GrpcLb::UpdateBalancerChannelLocked(const ChannelArgs& args) {
1573
1611
  // Make sure that GRPC_ARG_LB_POLICY_NAME is set in channel args,
1574
1612
  // since we use this to trigger the client_load_reporting filter.
1575
- static const char* args_to_remove[] = {GRPC_ARG_LB_POLICY_NAME};
1576
- grpc_arg new_arg = grpc_channel_arg_string_create(
1577
- const_cast<char*>(GRPC_ARG_LB_POLICY_NAME), const_cast<char*>("grpclb"));
1578
- grpc_channel_args_destroy(args_);
1579
- args_ = grpc_channel_args_copy_and_add_and_remove(
1580
- &args, args_to_remove, GPR_ARRAY_SIZE(args_to_remove), &new_arg, 1);
1581
- // Construct args for balancer channel.
1613
+ args_ = args.Set(GRPC_ARG_LB_POLICY_NAME, "grpclb");
1614
+ // Get balancer addresses.
1582
1615
  ServerAddressList balancer_addresses = ExtractBalancerAddresses(args);
1583
- grpc_channel_args* lb_channel_args =
1584
- BuildBalancerChannelArgs(response_generator_.get(), &args);
1616
+ absl::Status status;
1617
+ if (balancer_addresses.empty()) {
1618
+ status = absl::UnavailableError("balancer address list must be non-empty");
1619
+ }
1620
+ // Construct args for balancer channel.
1621
+ ChannelArgs lb_channel_args =
1622
+ BuildBalancerChannelArgs(response_generator_.get(), args);
1585
1623
  // Create balancer channel if needed.
1586
1624
  if (lb_channel_ == nullptr) {
1587
1625
  std::string uri_str = absl::StrCat("fake:///", server_name_);
1588
- grpc_channel_credentials* creds =
1589
- grpc_channel_credentials_find_in_args(lb_channel_args);
1626
+ auto* creds = lb_channel_args.GetObject<grpc_channel_credentials>();
1590
1627
  GPR_ASSERT(creds != nullptr);
1591
- const char* arg_to_remove = GRPC_ARG_CHANNEL_CREDENTIALS;
1592
- grpc_channel_args* new_args =
1593
- grpc_channel_args_copy_and_remove(lb_channel_args, &arg_to_remove, 1);
1594
- lb_channel_ = grpc_channel_create(uri_str.c_str(), creds, new_args);
1628
+ lb_channel_ = grpc_channel_create(
1629
+ uri_str.c_str(), creds,
1630
+ lb_channel_args.Remove(GRPC_ARG_CHANNEL_CREDENTIALS).ToC().get());
1595
1631
  GPR_ASSERT(lb_channel_ != nullptr);
1596
- grpc_channel_args_destroy(new_args);
1597
1632
  // Set up channelz linkage.
1598
1633
  channelz::ChannelNode* child_channelz_node =
1599
1634
  grpc_channel_get_channelz_node(lb_channel_);
1600
1635
  channelz::ChannelNode* parent_channelz_node =
1601
- grpc_channel_args_find_pointer<channelz::ChannelNode>(
1602
- &args, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
1636
+ args.GetObject<channelz::ChannelNode>();
1603
1637
  if (child_channelz_node != nullptr && parent_channelz_node != nullptr) {
1604
1638
  parent_channelz_node->AddChildChannel(child_channelz_node->uuid());
1605
1639
  parent_channelz_node_ = parent_channelz_node->Ref();
@@ -1611,6 +1645,8 @@ void GrpcLb::UpdateBalancerChannelLocked(const grpc_channel_args& args) {
1611
1645
  result.addresses = std::move(balancer_addresses);
1612
1646
  result.args = lb_channel_args;
1613
1647
  response_generator_->SetResponse(std::move(result));
1648
+ // Return status.
1649
+ return status;
1614
1650
  }
1615
1651
 
1616
1652
  void GrpcLb::CancelBalancerChannelConnectivityWatchLocked() {
@@ -1642,7 +1678,7 @@ void GrpcLb::StartBalancerCallRetryTimerLocked() {
1642
1678
  Timestamp next_try = lb_call_backoff_.NextAttemptTime();
1643
1679
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_glb_trace)) {
1644
1680
  gpr_log(GPR_INFO, "[grpclb %p] Connection to LB server lost...", this);
1645
- Duration timeout = next_try - ExecCtx::Get()->Now();
1681
+ Duration timeout = next_try - Timestamp::Now();
1646
1682
  if (timeout > Duration::Zero()) {
1647
1683
  gpr_log(GPR_INFO, "[grpclb %p] ... retry_timer_active in %" PRId64 "ms.",
1648
1684
  this, timeout.millis());
@@ -1734,22 +1770,19 @@ void GrpcLb::OnFallbackTimerLocked(grpc_error_handle error) {
1734
1770
  // code for interacting with the child policy
1735
1771
  //
1736
1772
 
1737
- grpc_channel_args* GrpcLb::CreateChildPolicyArgsLocked(
1773
+ ChannelArgs GrpcLb::CreateChildPolicyArgsLocked(
1738
1774
  bool is_backend_from_grpclb_load_balancer) {
1739
- absl::InlinedVector<grpc_arg, 2> args_to_add;
1740
- args_to_add.emplace_back(grpc_channel_arg_integer_create(
1741
- const_cast<char*>(GRPC_ARG_ADDRESS_IS_BACKEND_FROM_GRPCLB_LOAD_BALANCER),
1742
- is_backend_from_grpclb_load_balancer));
1775
+ ChannelArgs r =
1776
+ args_.Set(GRPC_ARG_ADDRESS_IS_BACKEND_FROM_GRPCLB_LOAD_BALANCER,
1777
+ is_backend_from_grpclb_load_balancer);
1743
1778
  if (is_backend_from_grpclb_load_balancer) {
1744
- args_to_add.emplace_back(grpc_channel_arg_integer_create(
1745
- const_cast<char*>(GRPC_ARG_INHIBIT_HEALTH_CHECKING), 1));
1779
+ r = r.Set(GRPC_ARG_INHIBIT_HEALTH_CHECKING, 1);
1746
1780
  }
1747
- return grpc_channel_args_copy_and_add(args_, args_to_add.data(),
1748
- args_to_add.size());
1781
+ return r;
1749
1782
  }
1750
1783
 
1751
1784
  OrphanablePtr<LoadBalancingPolicy> GrpcLb::CreateChildPolicyLocked(
1752
- const grpc_channel_args* args) {
1785
+ const ChannelArgs& args) {
1753
1786
  LoadBalancingPolicy::Args lb_policy_args;
1754
1787
  lb_policy_args.work_serializer = work_serializer();
1755
1788
  lb_policy_args.args = args;
@@ -1793,7 +1826,7 @@ void GrpcLb::CreateOrUpdateChildPolicyLocked() {
1793
1826
  }
1794
1827
  update_args.args =
1795
1828
  CreateChildPolicyArgsLocked(is_backend_from_grpclb_load_balancer);
1796
- GPR_ASSERT(update_args.args != nullptr);
1829
+ GPR_ASSERT(update_args.args != ChannelArgs());
1797
1830
  update_args.config = config_->child_policy();
1798
1831
  // Create child policy if needed.
1799
1832
  if (child_policy_ == nullptr) {
@@ -1804,7 +1837,9 @@ void GrpcLb::CreateOrUpdateChildPolicyLocked() {
1804
1837
  gpr_log(GPR_INFO, "[grpclb %p] Updating child policy handler %p", this,
1805
1838
  child_policy_.get());
1806
1839
  }
1807
- child_policy_->UpdateLocked(std::move(update_args));
1840
+ // TODO(roth): If we're in fallback mode and the child policy rejects the
1841
+ // update, we should propagate that failure back to the resolver somehow.
1842
+ (void)child_policy_->UpdateLocked(std::move(update_args));
1808
1843
  }
1809
1844
 
1810
1845
  //
@@ -1813,7 +1848,7 @@ void GrpcLb::CreateOrUpdateChildPolicyLocked() {
1813
1848
 
1814
1849
  void GrpcLb::CacheDeletedSubchannelLocked(
1815
1850
  RefCountedPtr<SubchannelInterface> subchannel) {
1816
- Timestamp deletion_time = ExecCtx::Get()->Now() + subchannel_cache_interval_;
1851
+ Timestamp deletion_time = Timestamp::Now() + subchannel_cache_interval_;
1817
1852
  cached_subchannels_[deletion_time].push_back(std::move(subchannel));
1818
1853
  if (!subchannel_cache_timer_pending_) {
1819
1854
  Ref(DEBUG_LOCATION, "OnSubchannelCacheTimer").release();
@@ -1868,54 +1903,12 @@ class GrpcLbFactory : public LoadBalancingPolicyFactory {
1868
1903
  return MakeOrphanable<GrpcLb>(std::move(args));
1869
1904
  }
1870
1905
 
1871
- const char* name() const override { return kGrpclb; }
1906
+ absl::string_view name() const override { return kGrpclb; }
1872
1907
 
1873
- RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
1874
- const Json& json, grpc_error_handle* error) const override {
1875
- GPR_DEBUG_ASSERT(error != nullptr && GRPC_ERROR_IS_NONE(*error));
1876
- if (json.type() == Json::Type::JSON_NULL) {
1877
- return MakeRefCounted<GrpcLbConfig>(nullptr, "");
1878
- }
1879
- std::vector<grpc_error_handle> error_list;
1880
- Json child_policy_config_json_tmp;
1881
- const Json* child_policy_config_json;
1882
- std::string service_name;
1883
- auto it = json.object_value().find("serviceName");
1884
- if (it != json.object_value().end()) {
1885
- const Json& service_name_json = it->second;
1886
- if (service_name_json.type() != Json::Type::STRING) {
1887
- error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1888
- "field:serviceName error:type should be string"));
1889
- } else {
1890
- service_name = service_name_json.string_value();
1891
- }
1892
- }
1893
- it = json.object_value().find("childPolicy");
1894
- if (it == json.object_value().end()) {
1895
- child_policy_config_json_tmp = Json::Array{Json::Object{
1896
- {"round_robin", Json::Object()},
1897
- }};
1898
- child_policy_config_json = &child_policy_config_json_tmp;
1899
- } else {
1900
- child_policy_config_json = &it->second;
1901
- }
1902
- grpc_error_handle parse_error = GRPC_ERROR_NONE;
1903
- RefCountedPtr<LoadBalancingPolicy::Config> child_policy_config =
1904
- LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
1905
- *child_policy_config_json, &parse_error);
1906
- if (!GRPC_ERROR_IS_NONE(parse_error)) {
1907
- std::vector<grpc_error_handle> child_errors;
1908
- child_errors.push_back(parse_error);
1909
- error_list.push_back(
1910
- GRPC_ERROR_CREATE_FROM_VECTOR("field:childPolicy", &child_errors));
1911
- }
1912
- if (error_list.empty()) {
1913
- return MakeRefCounted<GrpcLbConfig>(std::move(child_policy_config),
1914
- std::move(service_name));
1915
- } else {
1916
- *error = GRPC_ERROR_CREATE_FROM_VECTOR("GrpcLb Parser", &error_list);
1917
- return nullptr;
1918
- }
1908
+ absl::StatusOr<RefCountedPtr<LoadBalancingPolicy::Config>>
1909
+ ParseLoadBalancingConfig(const Json& json) const override {
1910
+ return LoadRefCountedFromJson<GrpcLbConfig>(
1911
+ json, JsonArgs(), "errors validating grpclb LB policy config");
1919
1912
  }
1920
1913
  };
1921
1914
 
@@ -1927,16 +1920,10 @@ class GrpcLbFactory : public LoadBalancingPolicyFactory {
1927
1920
  // Plugin registration
1928
1921
  //
1929
1922
 
1930
- void grpc_lb_policy_grpclb_init() {
1931
- grpc_core::LoadBalancingPolicyRegistry::Builder::
1932
- RegisterLoadBalancingPolicyFactory(
1933
- absl::make_unique<grpc_core::GrpcLbFactory>());
1934
- }
1935
-
1936
- void grpc_lb_policy_grpclb_shutdown() {}
1937
-
1938
1923
  namespace grpc_core {
1939
- void RegisterGrpcLbLoadReportingFilter(CoreConfiguration::Builder* builder) {
1924
+ void RegisterGrpcLbPolicy(CoreConfiguration::Builder* builder) {
1925
+ builder->lb_policy_registry()->RegisterLoadBalancingPolicyFactory(
1926
+ absl::make_unique<GrpcLbFactory>());
1940
1927
  builder->channel_init()->RegisterStage(
1941
1928
  GRPC_CLIENT_SUBCHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
1942
1929
  [](ChannelStackBuilder* builder) {