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
@@ -20,7 +20,6 @@
20
20
 
21
21
  #include <inttypes.h>
22
22
  #include <limits.h>
23
- #include <string.h>
24
23
 
25
24
  #include <algorithm>
26
25
  #include <functional>
@@ -28,7 +27,6 @@
28
27
  #include <set>
29
28
  #include <vector>
30
29
 
31
- #include "absl/container/inlined_vector.h"
32
30
  #include "absl/memory/memory.h"
33
31
  #include "absl/status/status.h"
34
32
  #include "absl/status/statusor.h"
@@ -43,7 +41,6 @@
43
41
  #include <grpc/impl/codegen/gpr_types.h>
44
42
  #include <grpc/slice.h>
45
43
  #include <grpc/status.h>
46
- #include <grpc/support/alloc.h>
47
44
  #include <grpc/support/log.h>
48
45
  #include <grpc/support/string_util.h>
49
46
 
@@ -54,29 +51,29 @@
54
51
  #include "src/core/ext/filters/client_channel/dynamic_filters.h"
55
52
  #include "src/core/ext/filters/client_channel/global_subchannel_pool.h"
56
53
  #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
57
- #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
58
54
  #include "src/core/ext/filters/client_channel/local_subchannel_pool.h"
59
- #include "src/core/ext/filters/client_channel/proxy_mapper_registry.h"
60
55
  #include "src/core/ext/filters/client_channel/resolver_result_parsing.h"
61
56
  #include "src/core/ext/filters/client_channel/retry_filter.h"
62
57
  #include "src/core/ext/filters/client_channel/subchannel.h"
63
- #include "src/core/ext/filters/client_channel/subchannel_interface.h"
64
58
  #include "src/core/ext/filters/client_channel/subchannel_interface_internal.h"
65
59
  #include "src/core/ext/filters/deadline/deadline_filter.h"
66
60
  #include "src/core/lib/channel/channel_args.h"
67
61
  #include "src/core/lib/channel/channel_stack.h"
68
62
  #include "src/core/lib/channel/channel_trace.h"
63
+ #include "src/core/lib/channel/status_util.h"
69
64
  #include "src/core/lib/config/core_configuration.h"
70
65
  #include "src/core/lib/debug/trace.h"
71
66
  #include "src/core/lib/gpr/useful.h"
72
67
  #include "src/core/lib/gprpp/debug_location.h"
73
68
  #include "src/core/lib/gprpp/sync.h"
69
+ #include "src/core/lib/gprpp/work_serializer.h"
70
+ #include "src/core/lib/handshaker/proxy_mapper_registry.h"
74
71
  #include "src/core/lib/iomgr/exec_ctx.h"
75
72
  #include "src/core/lib/iomgr/polling_entity.h"
76
73
  #include "src/core/lib/iomgr/pollset_set.h"
77
- #include "src/core/lib/iomgr/work_serializer.h"
78
74
  #include "src/core/lib/json/json.h"
79
- #include "src/core/lib/profiling/timers.h"
75
+ #include "src/core/lib/load_balancing/lb_policy_registry.h"
76
+ #include "src/core/lib/load_balancing/subchannel_interface.h"
80
77
  #include "src/core/lib/resolver/resolver_registry.h"
81
78
  #include "src/core/lib/resolver/server_address.h"
82
79
  #include "src/core/lib/service_config/service_config_call_data.h"
@@ -266,28 +263,6 @@ const grpc_channel_filter ClientChannel::kFilterVtable = {
266
263
 
267
264
  namespace {
268
265
 
269
- // Channel arg pointer vtable for GRPC_ARG_CLIENT_CHANNEL.
270
- void* ClientChannelArgCopy(void* p) { return p; }
271
- void ClientChannelArgDestroy(void* /*p*/) {}
272
- int ClientChannelArgCmp(void* p, void* q) { return QsortCompare(p, q); }
273
- const grpc_arg_pointer_vtable kClientChannelArgPointerVtable = {
274
- ClientChannelArgCopy, ClientChannelArgDestroy, ClientChannelArgCmp};
275
-
276
- // Channel arg pointer vtable for GRPC_ARG_SERVICE_CONFIG_OBJ.
277
- void* ServiceConfigObjArgCopy(void* p) {
278
- auto* service_config = static_cast<ServiceConfig*>(p);
279
- service_config->Ref().release();
280
- return p;
281
- }
282
- void ServiceConfigObjArgDestroy(void* p) {
283
- auto* service_config = static_cast<ServiceConfig*>(p);
284
- service_config->Unref();
285
- }
286
- int ServiceConfigObjArgCmp(void* p, void* q) { return QsortCompare(p, q); }
287
- const grpc_arg_pointer_vtable kServiceConfigObjArgPointerVtable = {
288
- ServiceConfigObjArgCopy, ServiceConfigObjArgDestroy,
289
- ServiceConfigObjArgCmp};
290
-
291
266
  class DynamicTerminationFilter {
292
267
  public:
293
268
  class CallData;
@@ -545,9 +520,7 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
545
520
  data_watchers_.push_back(std::move(internal_watcher));
546
521
  }
547
522
 
548
- const grpc_channel_args* channel_args() override {
549
- return subchannel_->channel_args();
550
- }
523
+ ChannelArgs channel_args() override { return subchannel_->channel_args(); }
551
524
 
552
525
  void ThrottleKeepaliveTime(int new_keepalive_time) {
553
526
  subchannel_->ThrottleKeepaliveTime(new_keepalive_time);
@@ -764,10 +737,14 @@ void ClientChannel::ExternalConnectivityWatcher::Notify(
764
737
  // Hop back into the work_serializer to clean up.
765
738
  // Not needed in state SHUTDOWN, because the tracker will
766
739
  // automatically remove all watchers in that case.
740
+ // Note: The callback takes a ref in case the ref inside the state tracker
741
+ // gets removed before the callback runs via a SHUTDOWN notification.
767
742
  if (state != GRPC_CHANNEL_SHUTDOWN) {
743
+ Ref(DEBUG_LOCATION, "RemoveWatcherLocked()").release();
768
744
  chand_->work_serializer_->Run(
769
745
  [this]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
770
746
  RemoveWatcherLocked();
747
+ Unref(DEBUG_LOCATION, "RemoveWatcherLocked()");
771
748
  },
772
749
  DEBUG_LOCATION);
773
750
  }
@@ -781,9 +758,13 @@ void ClientChannel::ExternalConnectivityWatcher::Cancel() {
781
758
  }
782
759
  ExecCtx::Run(DEBUG_LOCATION, on_complete_, GRPC_ERROR_CANCELLED);
783
760
  // Hop back into the work_serializer to clean up.
761
+ // Note: The callback takes a ref in case the ref inside the state tracker
762
+ // gets removed before the callback runs via a SHUTDOWN notification.
763
+ Ref(DEBUG_LOCATION, "RemoveWatcherLocked()").release();
784
764
  chand_->work_serializer_->Run(
785
765
  [this]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
786
766
  RemoveWatcherLocked();
767
+ Unref(DEBUG_LOCATION, "RemoveWatcherLocked()");
787
768
  },
788
769
  DEBUG_LOCATION);
789
770
  }
@@ -879,67 +860,23 @@ class ClientChannel::ClientChannelControlHelper
879
860
  }
880
861
 
881
862
  RefCountedPtr<SubchannelInterface> CreateSubchannel(
882
- ServerAddress address, const grpc_channel_args& args) override
863
+ ServerAddress address, const ChannelArgs& args) override
883
864
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
884
865
  if (chand_->resolver_ == nullptr) return nullptr; // Shutting down.
885
866
  // Determine health check service name.
886
867
  absl::optional<std::string> health_check_service_name;
887
- const char* health_check_service_name_arg = grpc_channel_args_find_string(
888
- &args, GRPC_ARG_HEALTH_CHECK_SERVICE_NAME);
889
- if (health_check_service_name_arg != nullptr) {
890
- bool inhibit_health_checking = grpc_channel_args_find_bool(
891
- &args, GRPC_ARG_INHIBIT_HEALTH_CHECKING, false);
892
- if (!inhibit_health_checking) {
893
- health_check_service_name = health_check_service_name_arg;
894
- }
868
+ if (!args.GetBool(GRPC_ARG_INHIBIT_HEALTH_CHECKING).value_or(false)) {
869
+ health_check_service_name =
870
+ args.GetOwnedString(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME);
895
871
  }
896
872
  // Construct channel args for subchannel.
897
- // Remove channel args that should not affect subchannel uniqueness.
898
- absl::InlinedVector<const char*, 4> args_to_remove = {
899
- GRPC_ARG_HEALTH_CHECK_SERVICE_NAME,
900
- GRPC_ARG_INHIBIT_HEALTH_CHECKING,
901
- GRPC_ARG_CHANNELZ_CHANNEL_NODE,
902
- };
903
- // Add channel args needed for the subchannel.
904
- absl::InlinedVector<grpc_arg, 2> args_to_add = {
905
- SubchannelPoolInterface::CreateChannelArg(
906
- chand_->subchannel_pool_.get()),
907
- };
908
- // Check if default authority arg is already set.
909
- const char* default_authority =
910
- grpc_channel_args_find_string(&args, GRPC_ARG_DEFAULT_AUTHORITY);
911
- // Add args from subchannel address.
912
- if (address.args() != nullptr) {
913
- for (size_t j = 0; j < address.args()->num_args; ++j) {
914
- grpc_arg& arg = address.args()->args[j];
915
- if (strcmp(arg.key, GRPC_ARG_DEFAULT_AUTHORITY) == 0) {
916
- // Don't add default authority arg from subchannel address if
917
- // it's already set at the channel level -- the value from the
918
- // application should take precedence over what is set by the
919
- // resolver.
920
- if (default_authority != nullptr) continue;
921
- default_authority = arg.value.string;
922
- }
923
- args_to_add.emplace_back(arg);
924
- }
925
- }
926
- // If we haven't already set the default authority arg, add it from
927
- // the channel.
928
- if (default_authority == nullptr) {
929
- // Remove it, just in case it's actually present but is the wrong type.
930
- args_to_remove.push_back(GRPC_ARG_DEFAULT_AUTHORITY);
931
- args_to_add.push_back(grpc_channel_arg_string_create(
932
- const_cast<char*>(GRPC_ARG_DEFAULT_AUTHORITY),
933
- const_cast<char*>(chand_->default_authority_.c_str())));
934
- }
935
- grpc_channel_args* new_args = grpc_channel_args_copy_and_add_and_remove(
936
- &args, args_to_remove.data(), args_to_remove.size(), args_to_add.data(),
937
- args_to_add.size());
873
+ ChannelArgs subchannel_args = ClientChannel::MakeSubchannelArgs(
874
+ args, address.args(), chand_->subchannel_pool_,
875
+ chand_->default_authority_);
938
876
  // Create subchannel.
939
877
  RefCountedPtr<Subchannel> subchannel =
940
878
  chand_->client_channel_factory_->CreateSubchannel(address.address(),
941
- new_args);
942
- grpc_channel_args_destroy(new_args);
879
+ subchannel_args);
943
880
  if (subchannel == nullptr) return nullptr;
944
881
  // Make sure the subchannel has updated keepalive time.
945
882
  subchannel->ThrottleKeepaliveTime(chand_->keepalive_time_);
@@ -1030,36 +967,28 @@ void ClientChannel::Destroy(grpc_channel_element* elem) {
1030
967
  namespace {
1031
968
 
1032
969
  RefCountedPtr<SubchannelPoolInterface> GetSubchannelPool(
1033
- const grpc_channel_args* args) {
1034
- const bool use_local_subchannel_pool = grpc_channel_args_find_bool(
1035
- args, GRPC_ARG_USE_LOCAL_SUBCHANNEL_POOL, false);
1036
- if (use_local_subchannel_pool) {
970
+ const ChannelArgs& args) {
971
+ if (args.GetBool(GRPC_ARG_USE_LOCAL_SUBCHANNEL_POOL).value_or(false)) {
1037
972
  return MakeRefCounted<LocalSubchannelPool>();
1038
973
  }
1039
974
  return GlobalSubchannelPool::instance();
1040
975
  }
1041
976
 
1042
- channelz::ChannelNode* GetChannelzNode(const grpc_channel_args* args) {
1043
- return grpc_channel_args_find_pointer<channelz::ChannelNode>(
1044
- args, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
1045
- }
1046
-
1047
977
  } // namespace
1048
978
 
1049
979
  ClientChannel::ClientChannel(grpc_channel_element_args* args,
1050
980
  grpc_error_handle* error)
1051
- : deadline_checking_enabled_(
1052
- grpc_deadline_checking_enabled(args->channel_args)),
981
+ : channel_args_(ChannelArgs::FromC(args->channel_args)),
982
+ deadline_checking_enabled_(grpc_deadline_checking_enabled(channel_args_)),
1053
983
  owning_stack_(args->channel_stack),
1054
- client_channel_factory_(
1055
- ClientChannelFactory::GetFromChannelArgs(args->channel_args)),
1056
- channelz_node_(GetChannelzNode(args->channel_args)),
984
+ client_channel_factory_(channel_args_.GetObject<ClientChannelFactory>()),
985
+ channelz_node_(channel_args_.GetObject<channelz::ChannelNode>()),
1057
986
  interested_parties_(grpc_pollset_set_create()),
1058
987
  service_config_parser_index_(
1059
988
  internal::ClientChannelServiceConfigParser::ParserIndex()),
1060
989
  work_serializer_(std::make_shared<WorkSerializer>()),
1061
990
  state_tracker_("client_channel", GRPC_CHANNEL_IDLE),
1062
- subchannel_pool_(GetSubchannelPool(args->channel_args)) {
991
+ subchannel_pool_(GetSubchannelPool(channel_args_)) {
1063
992
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1064
993
  gpr_log(GPR_INFO, "chand=%p: creating client_channel for channel stack %p",
1065
994
  this, owning_stack_);
@@ -1074,34 +1003,30 @@ ClientChannel::ClientChannel(grpc_channel_element_args* args,
1074
1003
  }
1075
1004
  // Get default service config. If none is specified via the client API,
1076
1005
  // we use an empty config.
1077
- const char* service_config_json = grpc_channel_args_find_string(
1078
- args->channel_args, GRPC_ARG_SERVICE_CONFIG);
1079
- if (service_config_json == nullptr) service_config_json = "{}";
1006
+ absl::optional<absl::string_view> service_config_json =
1007
+ channel_args_.GetString(GRPC_ARG_SERVICE_CONFIG);
1008
+ if (!service_config_json.has_value()) service_config_json = "{}";
1080
1009
  *error = GRPC_ERROR_NONE;
1081
- default_service_config_ =
1082
- ServiceConfigImpl::Create(args->channel_args, service_config_json, error);
1083
- if (!GRPC_ERROR_IS_NONE(*error)) {
1084
- default_service_config_.reset();
1010
+ auto service_config =
1011
+ ServiceConfigImpl::Create(channel_args_, *service_config_json);
1012
+ if (!service_config.ok()) {
1013
+ *error = absl_status_to_grpc_error(service_config.status());
1085
1014
  return;
1086
1015
  }
1016
+ default_service_config_ = std::move(*service_config);
1087
1017
  // Get URI to resolve, using proxy mapper if needed.
1088
- const char* server_uri =
1089
- grpc_channel_args_find_string(args->channel_args, GRPC_ARG_SERVER_URI);
1090
- if (server_uri == nullptr) {
1018
+ absl::optional<std::string> server_uri =
1019
+ channel_args_.GetOwnedString(GRPC_ARG_SERVER_URI);
1020
+ if (!server_uri.has_value()) {
1091
1021
  *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1092
1022
  "target URI channel arg missing or wrong type in client channel "
1093
1023
  "filter");
1094
1024
  return;
1095
1025
  }
1096
- uri_to_resolve_ = server_uri;
1097
- char* proxy_name = nullptr;
1098
- grpc_channel_args* new_args = nullptr;
1099
- ProxyMapperRegistry::MapName(server_uri, args->channel_args, &proxy_name,
1100
- &new_args);
1101
- if (proxy_name != nullptr) {
1102
- uri_to_resolve_ = proxy_name;
1103
- gpr_free(proxy_name);
1104
- }
1026
+ uri_to_resolve_ = CoreConfiguration::Get()
1027
+ .proxy_mapper_registry()
1028
+ .MapName(*server_uri, &channel_args_)
1029
+ .value_or(*server_uri);
1105
1030
  // Make sure the URI to resolve is valid, so that we know that
1106
1031
  // resolver creation will succeed later.
1107
1032
  if (!CoreConfiguration::Get().resolver_registry().IsValidTarget(
@@ -1112,23 +1037,23 @@ ClientChannel::ClientChannel(grpc_channel_element_args* args,
1112
1037
  }
1113
1038
  // Strip out service config channel arg, so that it doesn't affect
1114
1039
  // subchannel uniqueness when the args flow down to that layer.
1115
- const char* arg_to_remove = GRPC_ARG_SERVICE_CONFIG;
1116
- channel_args_ = grpc_channel_args_copy_and_remove(
1117
- new_args != nullptr ? new_args : args->channel_args, &arg_to_remove, 1);
1118
- grpc_channel_args_destroy(new_args);
1040
+ channel_args_ = channel_args_.Remove(GRPC_ARG_SERVICE_CONFIG);
1119
1041
  // Set initial keepalive time.
1120
- keepalive_time_ = grpc_channel_args_find_integer(
1121
- channel_args_, GRPC_ARG_KEEPALIVE_TIME_MS,
1122
- {-1 /* default value, unset */, 1, INT_MAX});
1042
+ auto keepalive_arg = channel_args_.GetInt(GRPC_ARG_KEEPALIVE_TIME_MS);
1043
+ if (keepalive_arg.has_value()) {
1044
+ keepalive_time_ = Clamp(*keepalive_arg, 1, INT_MAX);
1045
+ } else {
1046
+ keepalive_time_ = -1; // unset
1047
+ }
1123
1048
  // Set default authority.
1124
- const char* default_authority =
1125
- grpc_channel_args_find_string(channel_args_, GRPC_ARG_DEFAULT_AUTHORITY);
1126
- if (default_authority == nullptr) {
1049
+ absl::optional<std::string> default_authority =
1050
+ channel_args_.GetOwnedString(GRPC_ARG_DEFAULT_AUTHORITY);
1051
+ if (!default_authority.has_value()) {
1127
1052
  default_authority_ =
1128
1053
  CoreConfiguration::Get().resolver_registry().GetDefaultAuthority(
1129
- server_uri);
1054
+ *server_uri);
1130
1055
  } else {
1131
- default_authority_ = default_authority;
1056
+ default_authority_ = std::move(*default_authority);
1132
1057
  }
1133
1058
  // Success.
1134
1059
  *error = GRPC_ERROR_NONE;
@@ -1139,7 +1064,6 @@ ClientChannel::~ClientChannel() {
1139
1064
  gpr_log(GPR_INFO, "chand=%p: destroying channel", this);
1140
1065
  }
1141
1066
  DestroyResolverAndLbPolicyLocked();
1142
- grpc_channel_args_destroy(channel_args_);
1143
1067
  // Stop backup polling.
1144
1068
  grpc_client_channel_stop_backup_polling(interested_parties_);
1145
1069
  grpc_pollset_set_destroy(interested_parties_);
@@ -1157,6 +1081,29 @@ ClientChannel::CreateLoadBalancedCall(
1157
1081
  call_dispatch_controller, is_transparent_retry));
1158
1082
  }
1159
1083
 
1084
+ ChannelArgs ClientChannel::MakeSubchannelArgs(
1085
+ const ChannelArgs& channel_args, const ChannelArgs& address_args,
1086
+ const RefCountedPtr<SubchannelPoolInterface>& subchannel_pool,
1087
+ const std::string& channel_default_authority) {
1088
+ // Note that we start with the channel-level args and then apply the
1089
+ // per-address args, so that if a value is present in both, the one
1090
+ // in the channel-level args is used. This is particularly important
1091
+ // for the GRPC_ARG_DEFAULT_AUTHORITY arg, which we want to allow
1092
+ // resolvers to set on a per-address basis only if the application
1093
+ // did not explicitly set it at the channel level.
1094
+ return channel_args.UnionWith(address_args)
1095
+ .SetObject(subchannel_pool)
1096
+ // If we haven't already set the default authority arg (i.e., it
1097
+ // was not explicitly set by the application nor overridden by
1098
+ // the resolver), add it from the channel's default.
1099
+ .SetIfUnset(GRPC_ARG_DEFAULT_AUTHORITY, channel_default_authority)
1100
+ // Remove channel args that should not affect subchannel
1101
+ // uniqueness.
1102
+ .Remove(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME)
1103
+ .Remove(GRPC_ARG_INHIBIT_HEALTH_CHECKING)
1104
+ .Remove(GRPC_ARG_CHANNELZ_CHANNEL_NODE);
1105
+ }
1106
+
1160
1107
  namespace {
1161
1108
 
1162
1109
  RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
@@ -1168,41 +1115,41 @@ RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
1168
1115
  }
1169
1116
  // Try the deprecated LB policy name from the service config.
1170
1117
  // If not, try the setting from channel args.
1171
- const char* policy_name = nullptr;
1118
+ absl::optional<absl::string_view> policy_name;
1172
1119
  if (!parsed_service_config->parsed_deprecated_lb_policy().empty()) {
1173
- policy_name = parsed_service_config->parsed_deprecated_lb_policy().c_str();
1120
+ policy_name = parsed_service_config->parsed_deprecated_lb_policy();
1174
1121
  } else {
1175
- policy_name = grpc_channel_args_find_string(resolver_result.args,
1176
- GRPC_ARG_LB_POLICY_NAME);
1122
+ policy_name = resolver_result.args.GetString(GRPC_ARG_LB_POLICY_NAME);
1177
1123
  bool requires_config = false;
1178
- if (policy_name != nullptr &&
1179
- (!LoadBalancingPolicyRegistry::LoadBalancingPolicyExists(
1180
- policy_name, &requires_config) ||
1124
+ if (policy_name.has_value() &&
1125
+ (!CoreConfiguration::Get()
1126
+ .lb_policy_registry()
1127
+ .LoadBalancingPolicyExists(*policy_name, &requires_config) ||
1181
1128
  requires_config)) {
1182
1129
  if (requires_config) {
1183
1130
  gpr_log(GPR_ERROR,
1184
1131
  "LB policy: %s passed through channel_args must not "
1185
1132
  "require a config. Using pick_first instead.",
1186
- policy_name);
1133
+ std::string(*policy_name).c_str());
1187
1134
  } else {
1188
1135
  gpr_log(GPR_ERROR,
1189
1136
  "LB policy: %s passed through channel_args does not exist. "
1190
1137
  "Using pick_first instead.",
1191
- policy_name);
1138
+ std::string(*policy_name).c_str());
1192
1139
  }
1193
1140
  policy_name = "pick_first";
1194
1141
  }
1195
1142
  }
1196
1143
  // Use pick_first if nothing was specified and we didn't select grpclb
1197
1144
  // above.
1198
- if (policy_name == nullptr) policy_name = "pick_first";
1145
+ if (!policy_name.has_value()) policy_name = "pick_first";
1199
1146
  // Now that we have the policy name, construct an empty config for it.
1200
1147
  Json config_json = Json::Array{Json::Object{
1201
- {policy_name, Json::Object{}},
1148
+ {std::string(*policy_name), Json::Object{}},
1202
1149
  }};
1203
- grpc_error_handle parse_error = GRPC_ERROR_NONE;
1204
- auto lb_policy_config = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
1205
- config_json, &parse_error);
1150
+ auto lb_policy_config =
1151
+ CoreConfiguration::Get().lb_policy_registry().ParseLoadBalancingConfig(
1152
+ config_json);
1206
1153
  // The policy name came from one of three places:
1207
1154
  // - The deprecated loadBalancingPolicy field in the service config,
1208
1155
  // in which case the code in ClientChannelServiceConfigParser
@@ -1212,9 +1159,8 @@ RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
1212
1159
  // - A channel arg, in which case we check that the specified policy exists
1213
1160
  // and accepts an empty config. If not, we revert to using pick_first
1214
1161
  // lb_policy
1215
- GPR_ASSERT(lb_policy_config != nullptr);
1216
- GPR_ASSERT(GRPC_ERROR_IS_NONE(parse_error));
1217
- return lb_policy_config;
1162
+ GPR_ASSERT(lb_policy_config.ok());
1163
+ return std::move(*lb_policy_config);
1218
1164
  }
1219
1165
 
1220
1166
  } // namespace
@@ -1225,6 +1171,9 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1225
1171
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1226
1172
  gpr_log(GPR_INFO, "chand=%p: got resolver result", this);
1227
1173
  }
1174
+ // Grab resolver result health callback.
1175
+ auto resolver_callback = std::move(result.result_health_callback);
1176
+ absl::Status resolver_result_status;
1228
1177
  // We only want to trace the address resolution in the follow cases:
1229
1178
  // (a) Address resolution resulted in service config change.
1230
1179
  // (b) Address resolution that causes number of backends to go from
@@ -1276,6 +1225,8 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1276
1225
  // TRANSIENT_FAILURE.
1277
1226
  OnResolverErrorLocked(result.service_config.status());
1278
1227
  trace_strings.push_back("no valid service config");
1228
+ resolver_result_status =
1229
+ absl::UnavailableError("no valid service config");
1279
1230
  }
1280
1231
  } else if (*result.service_config == nullptr) {
1281
1232
  // Resolver did not return any service config.
@@ -1289,7 +1240,7 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1289
1240
  } else {
1290
1241
  // Use ServiceConfig and ConfigSelector returned by resolver.
1291
1242
  service_config = std::move(*result.service_config);
1292
- config_selector = ConfigSelector::GetFromChannelArgs(*result.args);
1243
+ config_selector = result.args.GetObjectRef<ConfigSelector>();
1293
1244
  }
1294
1245
  // Note: The only case in which service_config is null here is if the resolver
1295
1246
  // returned a service config error and we don't have a previous service
@@ -1313,14 +1264,14 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1313
1264
  // If either has changed, apply the global parameters now.
1314
1265
  if (service_config_changed || config_selector_changed) {
1315
1266
  // Update service config in control plane.
1316
- UpdateServiceConfigInControlPlaneLocked(std::move(service_config),
1317
- std::move(config_selector),
1318
- lb_policy_config->name());
1267
+ UpdateServiceConfigInControlPlaneLocked(
1268
+ std::move(service_config), std::move(config_selector),
1269
+ std::string(lb_policy_config->name()));
1319
1270
  } else if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1320
1271
  gpr_log(GPR_INFO, "chand=%p: service config not changed", this);
1321
1272
  }
1322
1273
  // Create or update LB policy, as needed.
1323
- CreateOrUpdateLbPolicyLocked(
1274
+ resolver_result_status = CreateOrUpdateLbPolicyLocked(
1324
1275
  std::move(lb_policy_config),
1325
1276
  parsed_service_config->health_check_service_name(), std::move(result));
1326
1277
  if (service_config_changed || config_selector_changed) {
@@ -1334,6 +1285,10 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1334
1285
  trace_strings.push_back("Service config changed");
1335
1286
  }
1336
1287
  }
1288
+ // Invoke resolver callback if needed.
1289
+ if (resolver_callback != nullptr) {
1290
+ resolver_callback(std::move(resolver_result_status));
1291
+ }
1337
1292
  // Add channel trace event.
1338
1293
  if (!trace_strings.empty()) {
1339
1294
  std::string message =
@@ -1359,7 +1314,8 @@ void ClientChannel::OnResolverErrorLocked(absl::Status status) {
1359
1314
  {
1360
1315
  MutexLock lock(&resolution_mu_);
1361
1316
  // Update resolver transient failure.
1362
- resolver_transient_failure_error_ = status;
1317
+ resolver_transient_failure_error_ =
1318
+ MaybeRewriteIllegalStatusCode(status, "resolver");
1363
1319
  // Process calls that were queued waiting for the resolver result.
1364
1320
  for (ResolverQueuedCall* call = resolver_queued_calls_; call != nullptr;
1365
1321
  call = call->next) {
@@ -1379,7 +1335,7 @@ void ClientChannel::OnResolverErrorLocked(absl::Status status) {
1379
1335
  }
1380
1336
  }
1381
1337
 
1382
- void ClientChannel::CreateOrUpdateLbPolicyLocked(
1338
+ absl::Status ClientChannel::CreateOrUpdateLbPolicyLocked(
1383
1339
  RefCountedPtr<LoadBalancingPolicy::Config> lb_policy_config,
1384
1340
  const absl::optional<std::string>& health_check_service_name,
1385
1341
  Resolver::Result result) {
@@ -1388,39 +1344,35 @@ void ClientChannel::CreateOrUpdateLbPolicyLocked(
1388
1344
  update_args.addresses = std::move(result.addresses);
1389
1345
  update_args.config = std::move(lb_policy_config);
1390
1346
  update_args.resolution_note = std::move(result.resolution_note);
1391
- // Add health check service name to channel args.
1392
- absl::InlinedVector<grpc_arg, 1> args_to_add;
1393
- if (health_check_service_name.has_value()) {
1394
- args_to_add.push_back(grpc_channel_arg_string_create(
1395
- const_cast<char*>(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME),
1396
- const_cast<char*>(health_check_service_name->c_str())));
1397
- }
1398
1347
  // Remove the config selector from channel args so that we're not holding
1399
1348
  // unnecessary refs that cause it to be destroyed somewhere other than in the
1400
1349
  // WorkSerializer.
1401
- const char* arg_to_remove = GRPC_ARG_CONFIG_SELECTOR;
1402
- update_args.args = grpc_channel_args_copy_and_add_and_remove(
1403
- result.args, &arg_to_remove, 1, args_to_add.data(), args_to_add.size());
1350
+ update_args.args = result.args.Remove(GRPC_ARG_CONFIG_SELECTOR);
1351
+ // Add health check service name to channel args.
1352
+ if (health_check_service_name.has_value()) {
1353
+ update_args.args = update_args.args.Set(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME,
1354
+ *health_check_service_name);
1355
+ }
1404
1356
  // Create policy if needed.
1405
1357
  if (lb_policy_ == nullptr) {
1406
- lb_policy_ = CreateLbPolicyLocked(*update_args.args);
1358
+ lb_policy_ = CreateLbPolicyLocked(update_args.args);
1407
1359
  }
1408
1360
  // Update the policy.
1409
1361
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1410
1362
  gpr_log(GPR_INFO, "chand=%p: Updating child policy %p", this,
1411
1363
  lb_policy_.get());
1412
1364
  }
1413
- lb_policy_->UpdateLocked(std::move(update_args));
1365
+ return lb_policy_->UpdateLocked(std::move(update_args));
1414
1366
  }
1415
1367
 
1416
1368
  // Creates a new LB policy.
1417
1369
  OrphanablePtr<LoadBalancingPolicy> ClientChannel::CreateLbPolicyLocked(
1418
- const grpc_channel_args& args) {
1370
+ const ChannelArgs& args) {
1419
1371
  LoadBalancingPolicy::Args lb_policy_args;
1420
1372
  lb_policy_args.work_serializer = work_serializer_;
1421
1373
  lb_policy_args.channel_control_helper =
1422
1374
  absl::make_unique<ClientChannelControlHelper>(this);
1423
- lb_policy_args.args = &args;
1375
+ lb_policy_args.args = args;
1424
1376
  OrphanablePtr<LoadBalancingPolicy> lb_policy =
1425
1377
  MakeOrphanable<ChildPolicyHandler>(std::move(lb_policy_args),
1426
1378
  &grpc_client_channel_trace);
@@ -1462,8 +1414,7 @@ void ClientChannel::UpdateServiceConfigInControlPlaneLocked(
1462
1414
  RefCountedPtr<ConfigSelector> config_selector, std::string lb_policy_name) {
1463
1415
  std::string service_config_json(service_config->json_string());
1464
1416
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1465
- gpr_log(GPR_INFO,
1466
- "chand=%p: resolver returned updated service config: \"%s\"", this,
1417
+ gpr_log(GPR_INFO, "chand=%p: using service config: \"%s\"", this,
1467
1418
  service_config_json.c_str());
1468
1419
  }
1469
1420
  // Save service config.
@@ -1495,20 +1446,11 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
1495
1446
  config_selector =
1496
1447
  MakeRefCounted<DefaultConfigSelector>(saved_service_config_);
1497
1448
  }
1498
- absl::InlinedVector<grpc_arg, 2> args_to_add = {
1499
- grpc_channel_arg_pointer_create(
1500
- const_cast<char*>(GRPC_ARG_CLIENT_CHANNEL), this,
1501
- &kClientChannelArgPointerVtable),
1502
- grpc_channel_arg_pointer_create(
1503
- const_cast<char*>(GRPC_ARG_SERVICE_CONFIG_OBJ), service_config.get(),
1504
- &kServiceConfigObjArgPointerVtable),
1505
- };
1506
- grpc_channel_args* new_args = grpc_channel_args_copy_and_add(
1507
- channel_args_, args_to_add.data(), args_to_add.size());
1508
- new_args = config_selector->ModifyChannelArgs(new_args);
1449
+ ChannelArgs new_args = config_selector->ModifyChannelArgs(
1450
+ channel_args_.SetObject(this).SetObject(service_config));
1509
1451
  bool enable_retries =
1510
- !grpc_channel_args_want_minimal_stack(new_args) &&
1511
- grpc_channel_args_find_bool(new_args, GRPC_ARG_ENABLE_RETRIES, true);
1452
+ !new_args.WantMinimalStack() &&
1453
+ new_args.GetBool(GRPC_ARG_ENABLE_RETRIES).value_or(true);
1512
1454
  // Construct dynamic filter stack.
1513
1455
  std::vector<const grpc_channel_filter*> filters =
1514
1456
  config_selector->GetFilters();
@@ -1518,9 +1460,8 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
1518
1460
  filters.push_back(&DynamicTerminationFilter::kFilterVtable);
1519
1461
  }
1520
1462
  RefCountedPtr<DynamicFilters> dynamic_filters =
1521
- DynamicFilters::Create(new_args, std::move(filters));
1463
+ DynamicFilters::Create(new_args.ToC().get(), std::move(filters));
1522
1464
  GPR_ASSERT(dynamic_filters != nullptr);
1523
- grpc_channel_args_destroy(new_args);
1524
1465
  // Grab data plane lock to update service config.
1525
1466
  //
1526
1467
  // We defer unreffing the old values (and deallocating memory) until
@@ -1706,6 +1647,10 @@ grpc_error_handle ClientChannel::DoPingLocked(grpc_transport_op* op) {
1706
1647
  complete_pick->subchannel.get());
1707
1648
  RefCountedPtr<ConnectedSubchannel> connected_subchannel =
1708
1649
  subchannel->connected_subchannel();
1650
+ if (connected_subchannel == nullptr) {
1651
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1652
+ "LB pick for ping not connected");
1653
+ }
1709
1654
  connected_subchannel->Ping(op->send_ping.on_initiate,
1710
1655
  op->send_ping.on_ack);
1711
1656
  return GRPC_ERROR_NONE;
@@ -1928,7 +1873,6 @@ void ClientChannel::CallData::Destroy(
1928
1873
 
1929
1874
  void ClientChannel::CallData::StartTransportStreamOpBatch(
1930
1875
  grpc_call_element* elem, grpc_transport_stream_op_batch* batch) {
1931
- GPR_TIMER_SCOPE("cc_start_transport_stream_op_batch", 0);
1932
1876
  CallData* calld = static_cast<CallData*>(elem->call_data);
1933
1877
  ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
1934
1878
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace) &&
@@ -2240,7 +2184,10 @@ grpc_error_handle ClientChannel::CallData::ApplyServiceConfigToCallLocked(
2240
2184
  // Use the ConfigSelector to determine the config for the call.
2241
2185
  ConfigSelector::CallConfig call_config =
2242
2186
  config_selector->GetCallConfig({&path_, initial_metadata, arena_});
2243
- if (!GRPC_ERROR_IS_NONE(call_config.error)) return call_config.error;
2187
+ if (!call_config.status.ok()) {
2188
+ return absl_status_to_grpc_error(MaybeRewriteIllegalStatusCode(
2189
+ std::move(call_config.status), "ConfigSelector"));
2190
+ }
2244
2191
  // Create a ClientChannelServiceConfigCallData for the call. This stores
2245
2192
  // a ref to the ServiceConfig and caches the right set of parsed configs
2246
2193
  // to use for the call. The ClientChannelServiceConfigCallData will store
@@ -2270,17 +2217,13 @@ grpc_error_handle ClientChannel::CallData::ApplyServiceConfigToCallLocked(
2270
2217
  }
2271
2218
  // If the service config set wait_for_ready and the application
2272
2219
  // did not explicitly set it, use the value from the service config.
2273
- uint32_t* send_initial_metadata_flags =
2274
- &pending_batches_[0]
2275
- ->payload->send_initial_metadata.send_initial_metadata_flags;
2220
+ auto* wait_for_ready =
2221
+ pending_batches_[0]
2222
+ ->payload->send_initial_metadata.send_initial_metadata
2223
+ ->GetOrCreatePointer(WaitForReady());
2276
2224
  if (method_params->wait_for_ready().has_value() &&
2277
- !(*send_initial_metadata_flags &
2278
- GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET)) {
2279
- if (method_params->wait_for_ready().value()) {
2280
- *send_initial_metadata_flags |= GRPC_INITIAL_METADATA_WAIT_FOR_READY;
2281
- } else {
2282
- *send_initial_metadata_flags &= ~GRPC_INITIAL_METADATA_WAIT_FOR_READY;
2283
- }
2225
+ !wait_for_ready->explicitly_set) {
2226
+ wait_for_ready->value = method_params->wait_for_ready().value();
2284
2227
  }
2285
2228
  }
2286
2229
  // Set the dynamic filter stack.
@@ -2388,16 +2331,14 @@ bool ClientChannel::CallData::CheckResolutionLocked(grpc_call_element* elem,
2388
2331
  pending_batches_[0]->payload->send_initial_metadata;
2389
2332
  grpc_metadata_batch* initial_metadata_batch =
2390
2333
  send_initial_metadata.send_initial_metadata;
2391
- const uint32_t send_initial_metadata_flags =
2392
- send_initial_metadata.send_initial_metadata_flags;
2393
2334
  // If we don't yet have a resolver result, we need to queue the call
2394
2335
  // until we get one.
2395
2336
  if (GPR_UNLIKELY(!chand->received_service_config_data_)) {
2396
2337
  // If the resolver returned transient failure before returning the
2397
2338
  // first service config, fail any non-wait_for_ready calls.
2398
2339
  absl::Status resolver_error = chand->resolver_transient_failure_error_;
2399
- if (!resolver_error.ok() && (send_initial_metadata_flags &
2400
- GRPC_INITIAL_METADATA_WAIT_FOR_READY) == 0) {
2340
+ if (!resolver_error.ok() &&
2341
+ !initial_metadata_batch->GetOrCreatePointer(WaitForReady())->value) {
2401
2342
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2402
2343
  gpr_log(GPR_INFO, "chand=%p calld=%p: resolution failed, failing call",
2403
2344
  chand, this);
@@ -2795,8 +2736,7 @@ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
2795
2736
  }
2796
2737
  if (batch->send_initial_metadata) {
2797
2738
  call_attempt_tracer_->RecordSendInitialMetadata(
2798
- batch->payload->send_initial_metadata.send_initial_metadata,
2799
- batch->payload->send_initial_metadata.send_initial_metadata_flags);
2739
+ batch->payload->send_initial_metadata.send_initial_metadata);
2800
2740
  peer_string_ = batch->payload->send_initial_metadata.peer_string;
2801
2741
  original_send_initial_metadata_on_complete_ = batch->on_complete;
2802
2742
  GRPC_CLOSURE_INIT(&send_initial_metadata_on_complete_,
@@ -3171,8 +3111,6 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
3171
3111
  pending_batches_[0]->payload->send_initial_metadata;
3172
3112
  grpc_metadata_batch* initial_metadata_batch =
3173
3113
  send_initial_metadata.send_initial_metadata;
3174
- const uint32_t send_initial_metadata_flags =
3175
- send_initial_metadata.send_initial_metadata_flags;
3176
3114
  // Perform LB pick.
3177
3115
  LoadBalancingPolicy::PickArgs pick_args;
3178
3116
  pick_args.path = path_.as_string_view();
@@ -3230,7 +3168,7 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
3230
3168
  return false;
3231
3169
  },
3232
3170
  // FailPick
3233
- [this, send_initial_metadata_flags,
3171
+ [this, initial_metadata_batch,
3234
3172
  &error](LoadBalancingPolicy::PickResult::Fail* fail_pick)
3235
3173
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_) {
3236
3174
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
@@ -3239,13 +3177,10 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
3239
3177
  }
3240
3178
  // If wait_for_ready is false, then the error indicates the RPC
3241
3179
  // attempt's final status.
3242
- if ((send_initial_metadata_flags &
3243
- GRPC_INITIAL_METADATA_WAIT_FOR_READY) == 0) {
3244
- grpc_error_handle lb_error =
3245
- absl_status_to_grpc_error(fail_pick->status);
3246
- *error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
3247
- "Failed to pick subchannel", &lb_error, 1);
3248
- GRPC_ERROR_UNREF(lb_error);
3180
+ if (!initial_metadata_batch->GetOrCreatePointer(WaitForReady())
3181
+ ->value) {
3182
+ *error = absl_status_to_grpc_error(MaybeRewriteIllegalStatusCode(
3183
+ std::move(fail_pick->status), "LB pick"));
3249
3184
  MaybeRemoveCallFromLbQueuedCallsLocked();
3250
3185
  return true;
3251
3186
  }
@@ -3261,9 +3196,10 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
3261
3196
  gpr_log(GPR_INFO, "chand=%p lb_call=%p: LB pick dropped: %s",
3262
3197
  chand_, this, drop_pick->status.ToString().c_str());
3263
3198
  }
3264
- *error =
3265
- grpc_error_set_int(absl_status_to_grpc_error(drop_pick->status),
3266
- GRPC_ERROR_INT_LB_POLICY_DROP, 1);
3199
+ *error = grpc_error_set_int(
3200
+ absl_status_to_grpc_error(MaybeRewriteIllegalStatusCode(
3201
+ std::move(drop_pick->status), "LB drop")),
3202
+ GRPC_ERROR_INT_LB_POLICY_DROP, 1);
3267
3203
  MaybeRemoveCallFromLbQueuedCallsLocked();
3268
3204
  return true;
3269
3205
  });