grpc 1.42.0 → 1.49.1

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

Potentially problematic release.


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

Files changed (1877) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +622 -358
  3. data/include/grpc/compression.h +1 -1
  4. data/include/grpc/event_engine/event_engine.h +114 -43
  5. data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -31
  6. data/include/grpc/event_engine/memory_allocator.h +27 -26
  7. data/include/grpc/event_engine/memory_request.h +57 -0
  8. data/include/grpc/event_engine/port.h +1 -1
  9. data/include/grpc/event_engine/slice.h +286 -0
  10. data/include/grpc/event_engine/slice_buffer.h +118 -0
  11. data/include/grpc/grpc.h +43 -17
  12. data/include/grpc/grpc_posix.h +20 -19
  13. data/include/grpc/grpc_security.h +323 -195
  14. data/include/grpc/grpc_security_constants.h +1 -14
  15. data/include/grpc/impl/codegen/compression_types.h +2 -3
  16. data/include/grpc/impl/codegen/connectivity_state.h +2 -1
  17. data/include/grpc/impl/codegen/gpr_types.h +2 -1
  18. data/include/grpc/impl/codegen/grpc_types.h +24 -25
  19. data/include/grpc/impl/codegen/port_platform.h +107 -44
  20. data/include/grpc/impl/codegen/slice.h +5 -2
  21. data/include/grpc/slice.h +0 -11
  22. data/src/core/ext/filters/census/grpc_context.cc +3 -0
  23. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +309 -0
  24. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +141 -0
  25. data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.cc +1 -1
  26. data/src/core/ext/filters/{client_idle → channel_idle}/idle_filter_state.h +7 -5
  27. data/src/core/ext/filters/client_channel/backend_metric.cc +20 -16
  28. data/src/core/ext/filters/client_channel/backend_metric.h +19 -8
  29. data/src/core/ext/filters/client_channel/backup_poller.cc +20 -14
  30. data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
  31. data/src/core/ext/filters/client_channel/channel_connectivity.cc +48 -26
  32. data/src/core/ext/filters/client_channel/client_channel.cc +574 -496
  33. data/src/core/ext/filters/client_channel/client_channel.h +100 -54
  34. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +3 -5
  35. data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
  36. data/src/core/ext/filters/client_channel/client_channel_factory.cc +2 -26
  37. data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -8
  38. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +9 -25
  39. data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
  40. data/src/core/ext/filters/client_channel/config_selector.h +21 -11
  41. data/src/core/ext/filters/client_channel/connector.h +12 -7
  42. data/src/core/ext/filters/client_channel/dynamic_filters.cc +24 -12
  43. data/src/core/ext/filters/client_channel/dynamic_filters.h +14 -4
  44. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +4 -22
  45. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +6 -15
  46. data/src/core/ext/filters/client_channel/health/health_check_client.cc +140 -583
  47. data/src/core/ext/filters/client_channel/health/health_check_client.h +26 -160
  48. data/src/core/ext/filters/client_channel/http_proxy.cc +100 -126
  49. data/src/core/ext/filters/client_channel/http_proxy.h +23 -0
  50. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +10 -5
  51. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +7 -5
  52. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
  53. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +25 -11
  54. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +10 -5
  55. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +15 -12
  56. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
  57. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +285 -225
  58. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -7
  59. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +16 -3
  60. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +6 -2
  61. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +1 -2
  62. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +8 -2
  63. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +26 -16
  64. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +10 -8
  65. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +407 -0
  66. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
  67. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1142 -0
  68. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +78 -0
  69. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +206 -190
  70. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +420 -292
  71. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +419 -272
  72. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +11 -5
  73. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +302 -236
  74. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +269 -241
  75. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +142 -124
  76. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +210 -164
  77. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +231 -205
  78. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +7 -1
  79. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +252 -167
  80. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +103 -86
  81. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +534 -548
  82. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
  83. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
  84. data/src/core/ext/filters/client_channel/proxy_mapper.h +14 -15
  85. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +20 -16
  86. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +12 -6
  87. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +38 -28
  88. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +676 -325
  89. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +30 -13
  90. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +29 -23
  91. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +37 -56
  92. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +332 -329
  93. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +55 -40
  94. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +3 -2
  95. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
  96. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
  97. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +126 -255
  98. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +39 -49
  99. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +18 -3
  100. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +167 -85
  101. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +212 -0
  102. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +112 -0
  103. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +58 -61
  104. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +598 -472
  105. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
  106. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +52 -54
  107. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +26 -17
  108. data/src/core/ext/filters/client_channel/retry_filter.cc +322 -208
  109. data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
  110. data/src/core/ext/filters/client_channel/retry_service_config.cc +52 -44
  111. data/src/core/ext/filters/client_channel/retry_service_config.h +31 -19
  112. data/src/core/ext/filters/client_channel/retry_throttle.cc +10 -31
  113. data/src/core/ext/filters/client_channel/retry_throttle.h +18 -6
  114. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +35 -17
  115. data/src/core/ext/filters/client_channel/subchannel.cc +250 -298
  116. data/src/core/ext/filters/client_channel/subchannel.h +91 -47
  117. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
  118. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +17 -77
  119. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +20 -26
  120. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +472 -0
  121. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +222 -0
  122. data/src/core/ext/filters/deadline/deadline_filter.cc +35 -25
  123. data/src/core/ext/filters/deadline/deadline_filter.h +11 -4
  124. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +171 -402
  125. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +31 -3
  126. data/src/core/ext/filters/fault_injection/service_config_parser.cc +30 -24
  127. data/src/core/ext/filters/fault_injection/service_config_parser.h +29 -10
  128. data/src/core/ext/filters/http/client/http_client_filter.cc +107 -551
  129. data/src/core/ext/filters/http/client/http_client_filter.h +35 -5
  130. data/src/core/ext/filters/http/client_authority_filter.cc +43 -112
  131. data/src/core/ext/filters/http/client_authority_filter.h +28 -6
  132. data/src/core/ext/filters/http/http_filters_plugin.cc +35 -28
  133. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +101 -320
  134. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
  135. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +59 -133
  136. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
  137. data/src/core/ext/filters/http/server/http_server_filter.cc +100 -476
  138. data/src/core/ext/filters/http/server/http_server_filter.h +37 -3
  139. data/src/core/ext/filters/message_size/message_size_filter.cc +78 -76
  140. data/src/core/ext/filters/message_size/message_size_filter.h +25 -8
  141. data/src/core/ext/filters/rbac/rbac_filter.cc +174 -0
  142. data/src/core/ext/filters/rbac/rbac_filter.h +84 -0
  143. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +621 -0
  144. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +85 -0
  145. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +62 -0
  146. data/src/core/ext/filters/server_config_selector/server_config_selector.h +85 -0
  147. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +161 -0
  148. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +33 -0
  149. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +256 -98
  150. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -9
  151. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +346 -166
  152. data/src/core/ext/transport/chttp2/server/chttp2_server.h +5 -5
  153. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -3
  154. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
  155. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
  156. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +646 -888
  157. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +16 -5
  158. data/src/core/ext/transport/chttp2/transport/context_list.cc +6 -3
  159. data/src/core/ext/transport/chttp2/transport/context_list.h +6 -4
  160. data/src/core/ext/transport/chttp2/transport/flow_control.cc +215 -266
  161. data/src/core/ext/transport/chttp2/transport/flow_control.h +183 -291
  162. data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
  163. data/src/core/ext/transport/chttp2/transport/frame_data.cc +59 -212
  164. data/src/core/ext/transport/chttp2/transport/frame_data.h +13 -36
  165. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +3 -0
  166. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
  167. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +9 -4
  168. data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
  169. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +11 -2
  170. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
  171. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +12 -42
  172. data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
  173. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +10 -12
  174. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
  175. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +7 -1
  176. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +389 -249
  177. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +106 -147
  178. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +3 -1
  179. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +12 -1
  180. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +106 -170
  181. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -2
  182. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +146 -37
  183. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +41 -46
  184. data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
  185. data/src/core/ext/transport/chttp2/transport/internal.h +48 -155
  186. data/src/core/ext/transport/chttp2/transport/parsing.cc +87 -51
  187. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +11 -11
  188. data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
  189. data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
  190. data/src/core/ext/transport/chttp2/transport/varint.h +2 -0
  191. data/src/core/ext/transport/chttp2/transport/writing.cc +135 -157
  192. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -5
  193. data/src/core/ext/transport/inproc/inproc_transport.cc +161 -227
  194. data/src/core/ext/transport/inproc/inproc_transport.h +4 -5
  195. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +117 -0
  196. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +502 -0
  197. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +121 -0
  198. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +569 -0
  199. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +60 -341
  200. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +280 -1355
  201. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +352 -0
  202. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1768 -0
  203. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +56 -0
  204. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +159 -0
  205. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +64 -0
  206. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +189 -0
  207. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +46 -0
  208. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +128 -0
  209. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +43 -0
  210. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +106 -0
  211. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +43 -0
  212. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +101 -0
  213. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +106 -0
  214. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +613 -0
  215. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +48 -0
  216. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +107 -0
  217. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +43 -0
  218. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +51 -0
  219. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +30 -4
  220. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +54 -17
  221. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +143 -116
  222. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +730 -385
  223. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +241 -199
  224. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1360 -663
  225. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +49 -28
  226. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +213 -90
  227. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +321 -271
  228. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1776 -826
  229. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +20 -7
  230. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +47 -23
  231. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +60 -27
  232. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +277 -98
  233. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +299 -0
  234. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +1437 -0
  235. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +74 -53
  236. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +383 -189
  237. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +21 -7
  238. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +50 -24
  239. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +215 -176
  240. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1179 -583
  241. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +105 -45
  242. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +554 -166
  243. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +19 -6
  244. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +43 -23
  245. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +16 -22
  246. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +46 -100
  247. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +58 -0
  248. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +159 -0
  249. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +145 -117
  250. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +821 -409
  251. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +141 -92
  252. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +773 -348
  253. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +21 -8
  254. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +62 -30
  255. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +204 -125
  256. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +1068 -398
  257. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +17 -4
  258. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +33 -16
  259. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +27 -13
  260. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +92 -48
  261. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +22 -9
  262. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +80 -33
  263. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +26 -13
  264. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +98 -48
  265. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +21 -8
  266. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +51 -25
  267. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +51 -35
  268. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +207 -108
  269. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +74 -55
  270. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +374 -189
  271. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +70 -53
  272. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +378 -187
  273. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +19 -6
  274. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +39 -20
  275. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +122 -71
  276. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +660 -259
  277. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +104 -79
  278. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +589 -300
  279. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +31 -16
  280. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +109 -48
  281. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +27 -10
  282. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +98 -39
  283. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +53 -0
  284. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +140 -0
  285. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +82 -61
  286. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +446 -234
  287. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +86 -65
  288. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +443 -236
  289. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +139 -103
  290. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +649 -293
  291. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +45 -41
  292. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +255 -165
  293. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +706 -570
  294. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +4125 -1898
  295. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +38 -19
  296. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +161 -71
  297. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +241 -0
  298. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +1191 -0
  299. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +44 -0
  300. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +92 -0
  301. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +49 -0
  302. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +107 -0
  303. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +27 -13
  304. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +86 -45
  305. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +52 -0
  306. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +138 -0
  307. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +63 -0
  308. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +254 -0
  309. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +46 -0
  310. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +98 -0
  311. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +47 -0
  312. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +98 -0
  313. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +69 -0
  314. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +221 -0
  315. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +33 -0
  316. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +43 -0
  317. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +71 -0
  318. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +226 -0
  319. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +54 -0
  320. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +150 -0
  321. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +17 -4
  322. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +39 -23
  323. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +45 -28
  324. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +208 -111
  325. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +51 -36
  326. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +273 -131
  327. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +71 -0
  328. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +237 -0
  329. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +26 -13
  330. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +91 -42
  331. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +292 -224
  332. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1679 -733
  333. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
  334. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +168 -0
  335. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  336. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +98 -0
  337. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +9 -0
  338. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +6 -3
  339. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +107 -60
  340. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +607 -234
  341. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +41 -26
  342. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +169 -86
  343. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +126 -83
  344. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +651 -262
  345. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +62 -0
  346. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +168 -0
  347. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +15 -2
  348. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +26 -14
  349. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +206 -72
  350. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +1095 -255
  351. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +31 -17
  352. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +116 -61
  353. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +74 -57
  354. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +368 -185
  355. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +48 -0
  356. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +116 -0
  357. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +34 -18
  358. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +140 -80
  359. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +74 -0
  360. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +230 -0
  361. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +28 -14
  362. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +108 -56
  363. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +21 -8
  364. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +55 -30
  365. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +20 -7
  366. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +53 -26
  367. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +19 -6
  368. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +43 -23
  369. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +35 -20
  370. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +130 -68
  371. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +31 -17
  372. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +132 -64
  373. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +26 -12
  374. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +94 -52
  375. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +37 -22
  376. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +163 -82
  377. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +50 -31
  378. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -144
  379. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +53 -36
  380. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +256 -130
  381. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +66 -0
  382. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +213 -0
  383. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +9 -0
  384. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +3 -0
  385. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +42 -0
  386. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +143 -0
  387. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +23 -9
  388. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +71 -35
  389. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +30 -15
  390. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -51
  391. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
  392. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
  393. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.c +26 -0
  394. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +41 -0
  395. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +19 -6
  396. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +45 -18
  397. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +51 -0
  398. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +131 -0
  399. data/src/core/ext/upb-generated/google/api/annotations.upb.c +22 -0
  400. data/src/core/ext/upb-generated/google/api/annotations.upb.h +23 -0
  401. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +154 -125
  402. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +765 -381
  403. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +158 -126
  404. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +844 -401
  405. data/src/core/ext/upb-generated/google/api/http.upb.c +43 -28
  406. data/src/core/ext/upb-generated/google/api/http.upb.h +229 -114
  407. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +46 -0
  408. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +115 -0
  409. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +18 -5
  410. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +43 -21
  411. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +374 -282
  412. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +2199 -1029
  413. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +18 -5
  414. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +41 -19
  415. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +15 -2
  416. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +26 -14
  417. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +47 -31
  418. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +190 -92
  419. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +18 -5
  420. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +41 -19
  421. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +57 -36
  422. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +277 -148
  423. data/src/core/ext/upb-generated/google/rpc/status.upb.c +21 -8
  424. data/src/core/ext/upb-generated/google/rpc/status.upb.h +57 -29
  425. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +84 -0
  426. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +335 -0
  427. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +32 -18
  428. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +108 -47
  429. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +135 -107
  430. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +726 -358
  431. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +27 -12
  432. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +85 -40
  433. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +22 -8
  434. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +65 -34
  435. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +81 -61
  436. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +435 -237
  437. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +34 -19
  438. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +124 -62
  439. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +175 -0
  440. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +792 -0
  441. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +75 -13
  442. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +206 -56
  443. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +31 -5
  444. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +59 -17
  445. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +21 -0
  446. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +16 -0
  447. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +31 -5
  448. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +61 -19
  449. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +30 -4
  450. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +54 -17
  451. data/src/core/ext/upb-generated/validate/validate.upb.c +406 -310
  452. data/src/core/ext/upb-generated/validate/validate.upb.h +2822 -1164
  453. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +110 -0
  454. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +290 -0
  455. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +55 -0
  456. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +112 -0
  457. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +38 -0
  458. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +46 -0
  459. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +64 -17
  460. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +191 -67
  461. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +53 -0
  462. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +103 -0
  463. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +17 -4
  464. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +35 -18
  465. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +30 -16
  466. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +107 -54
  467. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +25 -11
  468. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +58 -29
  469. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +46 -0
  470. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +107 -0
  471. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +22 -9
  472. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +60 -29
  473. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +33 -19
  474. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +139 -69
  475. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +22 -9
  476. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +63 -29
  477. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +36 -21
  478. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +106 -45
  479. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
  480. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +113 -0
  481. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +207 -0
  482. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +914 -0
  483. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +52 -0
  484. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +151 -0
  485. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +65 -0
  486. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +226 -0
  487. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +20 -7
  488. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +47 -23
  489. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.c +84 -0
  490. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.h +55 -0
  491. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +127 -0
  492. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.h +50 -0
  493. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +75 -327
  494. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +16 -101
  495. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +256 -0
  496. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +115 -0
  497. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.c +43 -0
  498. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.h +40 -0
  499. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +56 -0
  500. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.h +40 -0
  501. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.c +49 -0
  502. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.h +35 -0
  503. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.c +46 -0
  504. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.h +35 -0
  505. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.c +46 -0
  506. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.h +35 -0
  507. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.c +142 -0
  508. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.h +40 -0
  509. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.c +51 -0
  510. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.h +35 -0
  511. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +10 -8
  512. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +1 -1
  513. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +10 -13
  514. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +4 -4
  515. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +120 -150
  516. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +46 -46
  517. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +253 -280
  518. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +55 -55
  519. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +60 -62
  520. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +10 -10
  521. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +387 -424
  522. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +76 -76
  523. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +16 -18
  524. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +4 -4
  525. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +25 -23
  526. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +4 -4
  527. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.c +206 -0
  528. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.h +105 -0
  529. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +17 -32
  530. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +22 -22
  531. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +17 -19
  532. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +4 -4
  533. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +203 -246
  534. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +73 -73
  535. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +140 -116
  536. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +26 -16
  537. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +16 -19
  538. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +4 -4
  539. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +24 -43
  540. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +4 -9
  541. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.c +53 -0
  542. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.h +40 -0
  543. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +23 -51
  544. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +43 -43
  545. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +179 -187
  546. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +30 -25
  547. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +16 -19
  548. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +4 -4
  549. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +254 -254
  550. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +53 -43
  551. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +14 -16
  552. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +4 -4
  553. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +16 -20
  554. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +7 -7
  555. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +16 -18
  556. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +4 -4
  557. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +26 -28
  558. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +4 -4
  559. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +15 -18
  560. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +4 -4
  561. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +20 -28
  562. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +13 -13
  563. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +21 -33
  564. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +19 -19
  565. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +20 -30
  566. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +16 -16
  567. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +16 -18
  568. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +4 -4
  569. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +180 -165
  570. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +24 -19
  571. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +155 -166
  572. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +22 -22
  573. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +21 -23
  574. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +4 -4
  575. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +46 -42
  576. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +7 -7
  577. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +69 -0
  578. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.h +35 -0
  579. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +19 -35
  580. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +25 -25
  581. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +19 -37
  582. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +28 -28
  583. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +194 -0
  584. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +75 -0
  585. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +82 -85
  586. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +7 -12
  587. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +874 -917
  588. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +170 -160
  589. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +54 -48
  590. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +10 -10
  591. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +199 -0
  592. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +90 -0
  593. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +54 -0
  594. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.h +35 -0
  595. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.c +57 -0
  596. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.h +35 -0
  597. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +17 -21
  598. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +7 -7
  599. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.c +72 -0
  600. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.h +35 -0
  601. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.c +99 -0
  602. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.h +35 -0
  603. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +47 -0
  604. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
  605. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.c +52 -0
  606. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.h +35 -0
  607. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.c +71 -0
  608. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.h +40 -0
  609. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +61 -0
  610. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.h +30 -0
  611. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.c +75 -0
  612. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.h +40 -0
  613. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +77 -0
  614. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.h +35 -0
  615. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +17 -18
  616. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +4 -4
  617. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +19 -29
  618. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +16 -16
  619. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +20 -26
  620. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +10 -10
  621. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +80 -0
  622. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
  623. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +19 -20
  624. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +4 -4
  625. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +405 -410
  626. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +63 -58
  627. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +17 -13
  628. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +1 -1
  629. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +174 -157
  630. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +24 -19
  631. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +21 -27
  632. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +10 -10
  633. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +219 -216
  634. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +24 -19
  635. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +58 -0
  636. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +40 -0
  637. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +16 -18
  638. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +4 -4
  639. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +162 -107
  640. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +57 -22
  641. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +18 -22
  642. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +7 -7
  643. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +125 -135
  644. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +16 -16
  645. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.c +46 -0
  646. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.h +35 -0
  647. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +15 -23
  648. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +13 -13
  649. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +52 -0
  650. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +50 -0
  651. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +17 -21
  652. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +7 -7
  653. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +17 -19
  654. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +4 -4
  655. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +17 -19
  656. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +4 -4
  657. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +17 -19
  658. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +4 -4
  659. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +38 -43
  660. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +10 -10
  661. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +17 -21
  662. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +7 -7
  663. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +16 -21
  664. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +7 -7
  665. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +18 -24
  666. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +10 -10
  667. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +15 -29
  668. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +22 -22
  669. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +16 -26
  670. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +16 -16
  671. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.c +53 -0
  672. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.h +45 -0
  673. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +12 -10
  674. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +1 -1
  675. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.c +94 -0
  676. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.h +35 -0
  677. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +14 -19
  678. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +7 -7
  679. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +13 -19
  680. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +10 -10
  681. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  682. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
  683. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +38 -0
  684. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.h +30 -0
  685. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +13 -16
  686. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +4 -4
  687. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.c +57 -0
  688. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.h +35 -0
  689. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +7 -7
  690. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +1 -1
  691. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
  692. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
  693. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
  694. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
  695. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +5 -14
  696. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +10 -10
  697. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.c +39 -0
  698. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.h +35 -0
  699. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +5 -10
  700. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +4 -4
  701. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +96 -151
  702. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +82 -82
  703. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +5 -10
  704. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +4 -4
  705. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +5 -10
  706. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +4 -4
  707. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +5 -16
  708. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +13 -13
  709. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +5 -10
  710. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +4 -4
  711. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +5 -26
  712. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +28 -28
  713. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +6 -11
  714. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +4 -4
  715. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.c +67 -0
  716. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.h +50 -0
  717. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +99 -0
  718. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +75 -0
  719. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +6 -15
  720. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +10 -10
  721. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +7 -12
  722. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +4 -4
  723. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +6 -6
  724. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +1 -1
  725. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +6 -11
  726. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +4 -4
  727. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +6 -11
  728. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +4 -4
  729. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +8 -57
  730. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +70 -70
  731. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.c +63 -0
  732. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.h +45 -0
  733. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.c +47 -0
  734. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.h +35 -0
  735. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.c +35 -0
  736. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.h +30 -0
  737. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +6 -17
  738. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +13 -13
  739. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.c +40 -0
  740. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.h +35 -0
  741. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +7 -12
  742. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +4 -4
  743. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +9 -16
  744. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +7 -7
  745. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +6 -13
  746. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +7 -7
  747. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.c +41 -0
  748. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.h +35 -0
  749. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +8 -13
  750. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +4 -4
  751. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +8 -15
  752. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +7 -7
  753. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +8 -13
  754. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +4 -4
  755. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +126 -0
  756. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.h +80 -0
  757. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.c +40 -0
  758. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.h +40 -0
  759. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.c +52 -0
  760. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.h +40 -0
  761. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +7 -12
  762. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +4 -4
  763. data/src/core/ext/xds/certificate_provider_factory.h +6 -1
  764. data/src/core/ext/xds/certificate_provider_registry.cc +9 -9
  765. data/src/core/ext/xds/certificate_provider_registry.h +3 -1
  766. data/src/core/ext/xds/certificate_provider_store.cc +12 -0
  767. data/src/core/ext/xds/certificate_provider_store.h +19 -1
  768. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +13 -4
  769. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +10 -2
  770. data/src/core/ext/xds/upb_utils.h +45 -0
  771. data/src/core/ext/xds/xds_api.cc +331 -3601
  772. data/src/core/ext/xds/xds_api.h +75 -630
  773. data/src/core/ext/xds/xds_bootstrap.cc +279 -180
  774. data/src/core/ext/xds/xds_bootstrap.h +64 -28
  775. data/src/core/ext/xds/xds_certificate_provider.cc +17 -3
  776. data/src/core/ext/xds/xds_certificate_provider.h +35 -3
  777. data/src/core/ext/xds/xds_channel_stack_modifier.cc +27 -20
  778. data/src/core/ext/xds/xds_channel_stack_modifier.h +17 -4
  779. data/src/core/ext/xds/xds_client.cc +1185 -2050
  780. data/src/core/ext/xds/xds_client.h +143 -189
  781. data/src/core/ext/xds/xds_client_grpc.cc +291 -0
  782. data/src/core/ext/xds/xds_client_grpc.h +102 -0
  783. data/src/core/ext/xds/xds_client_stats.cc +18 -19
  784. data/src/core/ext/xds/xds_client_stats.h +9 -7
  785. data/src/core/ext/xds/xds_cluster.cc +543 -0
  786. data/src/core/ext/xds/xds_cluster.h +120 -0
  787. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +147 -0
  788. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +73 -0
  789. data/src/core/ext/xds/xds_common_types.cc +426 -0
  790. data/src/core/ext/xds/xds_common_types.h +102 -0
  791. data/src/core/ext/xds/xds_endpoint.cc +381 -0
  792. data/src/core/ext/xds/xds_endpoint.h +143 -0
  793. data/src/core/ext/xds/xds_http_fault_filter.cc +21 -26
  794. data/src/core/ext/xds/xds_http_fault_filter.h +8 -6
  795. data/src/core/ext/xds/xds_http_filters.cc +18 -5
  796. data/src/core/ext/xds/xds_http_filters.h +9 -9
  797. data/src/core/ext/xds/xds_http_rbac_filter.cc +560 -0
  798. data/src/core/ext/xds/xds_http_rbac_filter.h +61 -0
  799. data/src/core/ext/xds/xds_lb_policy_registry.cc +288 -0
  800. data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
  801. data/src/core/ext/xds/xds_listener.cc +1097 -0
  802. data/src/core/ext/xds/xds_listener.h +229 -0
  803. data/src/core/ext/{transport/chttp2/transport/hpack_utils.h → xds/xds_resource_type.cc} +12 -9
  804. data/src/core/ext/xds/xds_resource_type.h +109 -0
  805. data/src/core/ext/xds/xds_resource_type_impl.h +91 -0
  806. data/src/core/ext/xds/xds_route_config.cc +1153 -0
  807. data/src/core/ext/xds/xds_route_config.h +241 -0
  808. data/src/core/ext/xds/xds_routing.cc +263 -0
  809. data/src/core/ext/xds/xds_routing.h +104 -0
  810. data/src/core/ext/xds/xds_server_config_fetcher.cc +1138 -324
  811. data/src/core/ext/xds/xds_transport.h +86 -0
  812. data/src/core/ext/xds/xds_transport_grpc.cc +349 -0
  813. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  814. data/src/core/lib/address_utils/parse_address.cc +27 -8
  815. data/src/core/lib/address_utils/parse_address.h +11 -2
  816. data/src/core/lib/address_utils/sockaddr_utils.cc +82 -51
  817. data/src/core/lib/address_utils/sockaddr_utils.h +9 -19
  818. data/src/core/lib/avl/avl.h +476 -88
  819. data/src/core/lib/backoff/backoff.cc +10 -39
  820. data/src/core/lib/backoff/backoff.h +12 -12
  821. data/src/core/lib/channel/call_finalization.h +90 -0
  822. data/src/core/lib/channel/call_tracer.h +16 -7
  823. data/src/core/lib/channel/channel_args.cc +274 -48
  824. data/src/core/lib/channel/channel_args.h +298 -12
  825. data/src/core/lib/channel/channel_args_preconditioning.cc +43 -0
  826. data/src/core/lib/channel/channel_args_preconditioning.h +62 -0
  827. data/src/core/lib/channel/channel_fwd.h +26 -0
  828. data/src/core/lib/channel/channel_stack.cc +54 -10
  829. data/src/core/lib/channel/channel_stack.h +83 -14
  830. data/src/core/lib/channel/channel_stack_builder.cc +19 -278
  831. data/src/core/lib/channel/channel_stack_builder.h +104 -150
  832. data/src/core/lib/channel/channel_stack_builder_impl.cc +95 -0
  833. data/src/core/lib/channel/channel_stack_builder_impl.h +46 -0
  834. data/src/core/lib/channel/channel_trace.cc +11 -19
  835. data/src/core/lib/channel/channel_trace.h +6 -3
  836. data/src/core/lib/channel/channelz.cc +36 -49
  837. data/src/core/lib/channel/channelz.h +24 -7
  838. data/src/core/lib/channel/channelz_registry.cc +11 -19
  839. data/src/core/lib/channel/channelz_registry.h +10 -9
  840. data/src/core/lib/channel/connected_channel.cc +26 -30
  841. data/src/core/lib/channel/connected_channel.h +4 -1
  842. data/src/core/lib/channel/context.h +11 -0
  843. data/src/core/lib/channel/promise_based_filter.cc +1263 -0
  844. data/src/core/lib/channel/promise_based_filter.h +571 -0
  845. data/src/core/lib/channel/status_util.cc +2 -0
  846. data/src/core/lib/channel/status_util.h +0 -3
  847. data/src/core/lib/compression/compression.cc +26 -113
  848. data/src/core/lib/compression/compression_internal.cc +170 -204
  849. data/src/core/lib/compression/compression_internal.h +68 -72
  850. data/src/core/lib/compression/message_compress.cc +14 -12
  851. data/src/core/lib/compression/message_compress.h +4 -5
  852. data/src/core/lib/config/core_configuration.cc +14 -3
  853. data/src/core/lib/config/core_configuration.h +100 -36
  854. data/src/core/lib/debug/stats.cc +15 -18
  855. data/src/core/lib/debug/stats.h +13 -4
  856. data/src/core/lib/debug/stats_data.cc +4 -7
  857. data/src/core/lib/debug/stats_data.h +18 -25
  858. data/src/core/lib/debug/trace.h +15 -14
  859. data/src/core/lib/event_engine/{endpoint_config.cc → channel_args_endpoint_config.cc} +6 -3
  860. data/src/core/lib/event_engine/{endpoint_config_internal.h → channel_args_endpoint_config.h} +6 -5
  861. data/src/core/lib/event_engine/default_event_engine.cc +71 -0
  862. data/src/core/lib/{iomgr/event_engine/resolved_address_internal.cc → event_engine/default_event_engine.h} +13 -17
  863. data/src/core/lib/event_engine/default_event_engine_factory.cc +50 -0
  864. data/src/core/lib/{iomgr/event_engine/resolved_address_internal.h → event_engine/default_event_engine_factory.h} +8 -10
  865. data/src/core/lib/event_engine/executor/executor.h +38 -0
  866. data/src/core/lib/event_engine/executor/threaded_executor.cc +36 -0
  867. data/src/core/lib/{iomgr/event_engine/promise.h → event_engine/executor/threaded_executor.h} +18 -25
  868. data/src/core/lib/event_engine/forkable.cc +101 -0
  869. data/src/core/lib/event_engine/forkable.h +61 -0
  870. data/src/core/lib/event_engine/handle_containers.h +67 -0
  871. data/src/core/lib/event_engine/memory_allocator.cc +74 -0
  872. data/src/core/lib/event_engine/poller.h +54 -0
  873. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +142 -0
  874. data/src/core/lib/event_engine/posix_engine/posix_engine.h +121 -0
  875. data/src/core/lib/event_engine/posix_engine/timer.cc +311 -0
  876. data/src/core/lib/event_engine/posix_engine/timer.h +193 -0
  877. data/src/core/lib/event_engine/posix_engine/timer_heap.cc +107 -0
  878. data/src/core/lib/event_engine/posix_engine/timer_heap.h +56 -0
  879. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +290 -0
  880. data/src/core/lib/event_engine/posix_engine/timer_manager.h +120 -0
  881. data/src/core/lib/event_engine/promise.h +78 -0
  882. data/src/core/lib/event_engine/{event_engine.cc → resolved_address.cc} +3 -12
  883. data/src/core/lib/event_engine/slice.cc +102 -0
  884. data/src/core/lib/event_engine/slice_buffer.cc +50 -0
  885. data/src/core/lib/event_engine/socket_notifier.h +55 -0
  886. data/src/core/lib/event_engine/thread_pool.cc +158 -0
  887. data/src/core/lib/event_engine/thread_pool.h +81 -0
  888. data/src/core/lib/event_engine/trace.cc +18 -0
  889. data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.h} +12 -14
  890. data/src/core/lib/event_engine/utils.cc +49 -0
  891. data/src/core/lib/event_engine/utils.h +40 -0
  892. data/src/core/lib/event_engine/windows/iocp.cc +149 -0
  893. data/src/core/lib/event_engine/windows/iocp.h +68 -0
  894. data/src/core/lib/event_engine/windows/win_socket.cc +196 -0
  895. data/src/core/lib/event_engine/windows/win_socket.h +120 -0
  896. data/src/core/lib/event_engine/windows/windows_engine.cc +159 -0
  897. data/src/core/lib/event_engine/windows/windows_engine.h +120 -0
  898. data/src/core/lib/gpr/log.cc +5 -0
  899. data/src/core/lib/gpr/sync_posix.cc +1 -0
  900. data/src/core/lib/gpr/time.cc +13 -10
  901. data/src/core/lib/gpr/time_posix.cc +6 -9
  902. data/src/core/lib/gpr/time_windows.cc +10 -7
  903. data/src/core/lib/gpr/tls.h +10 -5
  904. data/src/core/lib/gpr/useful.h +47 -0
  905. data/src/core/lib/gprpp/bitset.h +27 -14
  906. data/src/core/lib/gprpp/chunked_vector.h +49 -3
  907. data/src/core/lib/gprpp/construct_destruct.h +1 -0
  908. data/src/core/lib/gprpp/cpp_impl_of.h +49 -0
  909. data/src/core/lib/gprpp/debug_location.h +41 -7
  910. data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
  911. data/src/core/lib/gprpp/examine_stack.h +0 -1
  912. data/src/core/lib/gprpp/fork.cc +3 -6
  913. data/src/core/lib/gprpp/global_config.h +2 -4
  914. data/src/core/lib/gprpp/global_config_env.cc +10 -9
  915. data/src/core/lib/gprpp/global_config_env.h +5 -3
  916. data/src/core/lib/gprpp/global_config_generic.h +0 -4
  917. data/src/core/lib/gprpp/host_port.cc +2 -0
  918. data/src/core/lib/gprpp/manual_constructor.h +0 -70
  919. data/src/core/lib/gprpp/match.h +2 -0
  920. data/src/core/lib/gprpp/memory.h +1 -5
  921. data/src/core/lib/gprpp/no_destruct.h +94 -0
  922. data/src/core/lib/gprpp/orphanable.h +2 -5
  923. data/src/core/lib/gprpp/ref_counted.h +4 -4
  924. data/src/core/lib/gprpp/ref_counted_ptr.h +3 -6
  925. data/src/core/lib/gprpp/single_set_ptr.h +87 -0
  926. data/src/core/lib/gprpp/stat.h +0 -2
  927. data/src/core/lib/gprpp/stat_posix.cc +7 -2
  928. data/src/core/lib/gprpp/status_helper.cc +75 -48
  929. data/src/core/lib/gprpp/status_helper.h +10 -19
  930. data/src/core/lib/gprpp/sync.h +3 -1
  931. data/src/core/lib/gprpp/table.h +33 -1
  932. data/src/core/lib/gprpp/thd.h +2 -5
  933. data/src/core/lib/gprpp/thd_posix.cc +4 -2
  934. data/src/core/lib/gprpp/thd_windows.cc +2 -0
  935. data/src/core/lib/gprpp/time.cc +214 -0
  936. data/src/core/lib/gprpp/time.h +301 -0
  937. data/src/core/lib/gprpp/time_averaged_stats.cc +60 -0
  938. data/src/core/lib/{iomgr → gprpp}/time_averaged_stats.h +29 -22
  939. data/src/core/lib/gprpp/time_util.cc +4 -0
  940. data/src/core/lib/gprpp/time_util.h +1 -1
  941. data/src/core/lib/gprpp/unique_type_name.h +104 -0
  942. data/src/core/lib/gprpp/work_serializer.cc +247 -0
  943. data/src/core/lib/gprpp/work_serializer.h +86 -0
  944. data/src/core/lib/http/format_request.cc +62 -29
  945. data/src/core/lib/http/format_request.h +10 -7
  946. data/src/core/lib/http/httpcli.cc +316 -243
  947. data/src/core/lib/http/httpcli.h +233 -90
  948. data/src/core/lib/http/httpcli_security_connector.cc +80 -80
  949. data/src/core/lib/http/httpcli_ssl_credentials.h +39 -0
  950. data/src/core/lib/http/parser.cc +85 -15
  951. data/src/core/lib/http/parser.h +18 -2
  952. data/src/core/lib/iomgr/buffer_list.cc +9 -9
  953. data/src/core/lib/iomgr/buffer_list.h +18 -18
  954. data/src/core/lib/iomgr/call_combiner.cc +10 -26
  955. data/src/core/lib/iomgr/closure.h +20 -9
  956. data/src/core/lib/iomgr/combiner.cc +9 -7
  957. data/src/core/lib/iomgr/endpoint.cc +4 -4
  958. data/src/core/lib/iomgr/endpoint.h +7 -6
  959. data/src/core/lib/iomgr/endpoint_cfstream.cc +16 -30
  960. data/src/core/lib/iomgr/endpoint_cfstream.h +4 -4
  961. data/src/core/lib/iomgr/endpoint_pair_posix.cc +11 -11
  962. data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -14
  963. data/src/core/lib/iomgr/error.cc +7 -775
  964. data/src/core/lib/iomgr/error.h +6 -149
  965. data/src/core/lib/iomgr/error_cfstream.cc +0 -5
  966. data/src/core/lib/iomgr/ev_apple.cc +6 -5
  967. data/src/core/lib/iomgr/ev_epoll1_linux.cc +65 -25
  968. data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
  969. data/src/core/lib/iomgr/ev_poll_posix.cc +101 -68
  970. data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
  971. data/src/core/lib/iomgr/ev_posix.cc +58 -100
  972. data/src/core/lib/iomgr/ev_posix.h +6 -4
  973. data/src/core/lib/iomgr/exec_ctx.cc +14 -98
  974. data/src/core/lib/iomgr/exec_ctx.h +19 -36
  975. data/src/core/lib/iomgr/executor.cc +16 -20
  976. data/src/core/lib/iomgr/executor.h +1 -4
  977. data/src/core/lib/iomgr/fork_posix.cc +1 -0
  978. data/src/core/lib/iomgr/internal_errqueue.cc +38 -47
  979. data/src/core/lib/iomgr/internal_errqueue.h +1 -6
  980. data/src/core/lib/iomgr/iocp_windows.cc +9 -9
  981. data/src/core/lib/iomgr/iocp_windows.h +1 -1
  982. data/src/core/lib/iomgr/iomgr.cc +7 -1
  983. data/src/core/lib/iomgr/iomgr_fwd.h +25 -0
  984. data/src/core/lib/iomgr/iomgr_posix.cc +3 -2
  985. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +3 -2
  986. data/src/core/lib/iomgr/iomgr_windows.cc +2 -2
  987. data/src/core/lib/iomgr/load_file.cc +1 -1
  988. data/src/core/lib/iomgr/lockfree_event.cc +0 -17
  989. data/src/core/lib/iomgr/polling_entity.h +6 -0
  990. data/src/core/lib/iomgr/pollset.cc +1 -1
  991. data/src/core/lib/iomgr/pollset.h +4 -4
  992. data/src/core/lib/iomgr/pollset_set.h +1 -2
  993. data/src/core/lib/iomgr/pollset_windows.cc +2 -2
  994. data/src/core/lib/iomgr/port.h +29 -12
  995. data/src/core/lib/iomgr/resolve_address.cc +12 -23
  996. data/src/core/lib/iomgr/resolve_address.h +79 -46
  997. data/src/core/lib/iomgr/resolve_address_impl.h +58 -0
  998. data/src/core/lib/iomgr/resolve_address_posix.cc +109 -65
  999. data/src/core/lib/iomgr/resolve_address_posix.h +64 -0
  1000. data/src/core/lib/iomgr/resolve_address_windows.cc +122 -76
  1001. data/src/core/lib/iomgr/resolve_address_windows.h +64 -0
  1002. data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/iomgr/resolved_address.h} +21 -10
  1003. data/src/core/lib/iomgr/sockaddr.h +2 -3
  1004. data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
  1005. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +62 -0
  1006. data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
  1007. data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -19
  1008. data/src/core/lib/iomgr/socket_windows.h +0 -2
  1009. data/src/core/lib/iomgr/tcp_client.cc +12 -9
  1010. data/src/core/lib/iomgr/tcp_client.h +25 -15
  1011. data/src/core/lib/iomgr/tcp_client_cfstream.cc +25 -19
  1012. data/src/core/lib/iomgr/tcp_client_posix.cc +161 -52
  1013. data/src/core/lib/iomgr/tcp_client_posix.h +4 -5
  1014. data/src/core/lib/iomgr/tcp_client_windows.cc +28 -26
  1015. data/src/core/lib/iomgr/tcp_posix.cc +307 -97
  1016. data/src/core/lib/iomgr/tcp_posix.h +1 -3
  1017. data/src/core/lib/iomgr/tcp_server.cc +4 -6
  1018. data/src/core/lib/iomgr/tcp_server.h +6 -8
  1019. data/src/core/lib/iomgr/tcp_server_posix.cc +72 -53
  1020. data/src/core/lib/iomgr/tcp_server_utils_posix.h +19 -18
  1021. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +42 -38
  1022. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +10 -6
  1023. data/src/core/lib/iomgr/tcp_server_windows.cc +25 -24
  1024. data/src/core/lib/iomgr/tcp_windows.cc +31 -26
  1025. data/src/core/lib/iomgr/tcp_windows.h +1 -2
  1026. data/src/core/lib/iomgr/timer.cc +2 -2
  1027. data/src/core/lib/iomgr/timer.h +11 -6
  1028. data/src/core/lib/iomgr/timer_generic.cc +100 -83
  1029. data/src/core/lib/iomgr/timer_manager.cc +15 -14
  1030. data/src/core/lib/iomgr/unix_sockets_posix.cc +22 -34
  1031. data/src/core/lib/iomgr/unix_sockets_posix.h +4 -7
  1032. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +6 -15
  1033. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  1034. data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
  1035. data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
  1036. data/src/core/lib/json/json.h +20 -24
  1037. data/src/core/lib/json/json_args.h +34 -0
  1038. data/src/core/lib/json/json_object_loader.cc +233 -0
  1039. data/src/core/lib/json/json_object_loader.h +618 -0
  1040. data/src/core/lib/json/json_reader.cc +155 -75
  1041. data/src/core/lib/json/json_util.cc +11 -32
  1042. data/src/core/lib/json/json_util.h +15 -6
  1043. data/src/core/lib/json/json_writer.cc +6 -1
  1044. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +7 -45
  1045. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +105 -95
  1046. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  1047. data/src/core/lib/load_balancing/lb_policy_registry.cc +167 -0
  1048. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy_registry.h +31 -26
  1049. data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +57 -47
  1050. data/src/core/lib/matchers/matchers.cc +7 -4
  1051. data/src/core/lib/matchers/matchers.h +2 -0
  1052. data/src/core/lib/promise/activity.cc +120 -0
  1053. data/src/core/lib/promise/activity.h +582 -0
  1054. data/src/core/lib/promise/arena_promise.h +201 -0
  1055. data/src/core/lib/promise/call_push_pull.h +148 -0
  1056. data/src/core/lib/promise/context.h +85 -0
  1057. data/src/core/lib/promise/detail/basic_seq.h +516 -0
  1058. data/src/core/lib/promise/detail/promise_factory.h +187 -0
  1059. data/src/core/lib/promise/detail/promise_like.h +85 -0
  1060. data/src/core/lib/promise/detail/status.h +50 -0
  1061. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +48 -0
  1062. data/src/core/lib/promise/intra_activity_waiter.h +49 -0
  1063. data/src/core/lib/promise/latch.h +103 -0
  1064. data/src/core/lib/promise/loop.h +136 -0
  1065. data/src/core/lib/promise/map.h +87 -0
  1066. data/src/core/lib/promise/poll.h +66 -0
  1067. data/src/core/lib/promise/promise.h +96 -0
  1068. data/src/core/lib/promise/race.h +83 -0
  1069. data/src/core/lib/promise/seq.h +108 -0
  1070. data/src/core/lib/promise/sleep.cc +77 -0
  1071. data/src/core/lib/promise/sleep.h +79 -0
  1072. data/src/core/lib/promise/try_seq.h +177 -0
  1073. data/src/core/lib/{iomgr/ev_epollex_linux.h → resolver/resolver.cc} +15 -8
  1074. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.h +45 -53
  1075. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_factory.h +36 -34
  1076. data/src/core/lib/resolver/resolver_registry.cc +149 -0
  1077. data/src/core/lib/resolver/resolver_registry.h +123 -0
  1078. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.cc +28 -18
  1079. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.h +19 -16
  1080. data/src/core/lib/resource_quota/api.cc +96 -0
  1081. data/src/core/lib/resource_quota/api.h +43 -0
  1082. data/src/core/lib/{gprpp → resource_quota}/arena.cc +37 -20
  1083. data/src/core/lib/{gprpp → resource_quota}/arena.h +49 -17
  1084. data/src/core/lib/resource_quota/memory_quota.cc +618 -0
  1085. data/src/core/lib/resource_quota/memory_quota.h +543 -0
  1086. data/src/core/lib/resource_quota/periodic_update.cc +79 -0
  1087. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  1088. data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc → lib/resource_quota/resource_quota.cc} +13 -11
  1089. data/src/core/lib/resource_quota/resource_quota.h +74 -0
  1090. data/src/core/lib/resource_quota/thread_quota.cc +45 -0
  1091. data/src/core/lib/resource_quota/thread_quota.h +61 -0
  1092. data/src/core/lib/{iomgr/event_engine/pollset.h → resource_quota/trace.cc} +3 -9
  1093. data/src/core/{ext/filters/max_age/max_age_filter.h → lib/resource_quota/trace.h} +6 -8
  1094. data/src/core/lib/security/authorization/authorization_policy_provider.h +14 -0
  1095. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
  1096. data/src/core/lib/security/authorization/evaluate_args.cc +53 -45
  1097. data/src/core/lib/security/authorization/evaluate_args.h +9 -5
  1098. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +66 -0
  1099. data/src/core/lib/security/authorization/grpc_authorization_engine.h +69 -0
  1100. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +120 -0
  1101. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +61 -0
  1102. data/src/core/lib/security/authorization/matchers.cc +238 -0
  1103. data/src/core/lib/security/authorization/matchers.h +218 -0
  1104. data/src/core/lib/security/authorization/rbac_policy.cc +446 -0
  1105. data/src/core/lib/security/authorization/rbac_policy.h +178 -0
  1106. data/src/core/lib/security/context/security_context.cc +9 -4
  1107. data/src/core/lib/security/context/security_context.h +23 -4
  1108. data/src/core/lib/security/credentials/alts/alts_credentials.cc +18 -10
  1109. data/src/core/lib/security/credentials/alts/alts_credentials.h +18 -4
  1110. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
  1111. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
  1112. data/src/core/lib/security/credentials/call_creds_util.cc +97 -0
  1113. data/src/core/lib/security/credentials/call_creds_util.h +43 -0
  1114. data/src/core/lib/security/credentials/channel_creds_registry.h +103 -0
  1115. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +80 -0
  1116. data/src/core/lib/security/credentials/composite/composite_credentials.cc +32 -91
  1117. data/src/core/lib/security/credentials/composite/composite_credentials.h +42 -16
  1118. data/src/core/lib/security/credentials/credentials.cc +6 -11
  1119. data/src/core/lib/security/credentials/credentials.h +106 -99
  1120. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +173 -52
  1121. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +19 -0
  1122. data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
  1123. data/src/core/lib/security/credentials/external/external_account_credentials.cc +108 -64
  1124. data/src/core/lib/security/credentials/external/external_account_credentials.h +16 -9
  1125. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +15 -9
  1126. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
  1127. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +58 -23
  1128. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +11 -0
  1129. data/src/core/lib/security/credentials/fake/fake_credentials.cc +42 -43
  1130. data/src/core/lib/security/credentials/fake/fake_credentials.h +35 -26
  1131. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
  1132. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +91 -56
  1133. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +20 -7
  1134. data/src/core/lib/security/credentials/iam/iam_credentials.cc +31 -30
  1135. data/src/core/lib/security/credentials/iam/iam_credentials.h +25 -9
  1136. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +35 -26
  1137. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +61 -0
  1138. data/src/core/lib/security/credentials/jwt/json_token.cc +21 -11
  1139. data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
  1140. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +46 -55
  1141. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +30 -12
  1142. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +90 -56
  1143. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +5 -3
  1144. data/src/core/lib/security/credentials/local/local_credentials.cc +19 -13
  1145. data/src/core/lib/security/credentials/local/local_credentials.h +19 -3
  1146. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +201 -202
  1147. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +81 -34
  1148. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +103 -156
  1149. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +80 -27
  1150. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +31 -35
  1151. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +29 -6
  1152. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
  1153. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
  1154. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +50 -22
  1155. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +69 -12
  1156. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +241 -0
  1157. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +168 -0
  1158. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +37 -92
  1159. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +73 -149
  1160. data/src/core/lib/security/credentials/tls/tls_credentials.cc +59 -42
  1161. data/src/core/lib/security/credentials/tls/tls_credentials.h +13 -4
  1162. data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
  1163. data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
  1164. data/src/core/lib/security/credentials/xds/xds_credentials.cc +81 -89
  1165. data/src/core/lib/security/credentials/xds/xds_credentials.h +53 -8
  1166. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +41 -35
  1167. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +9 -6
  1168. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +50 -55
  1169. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +3 -5
  1170. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +21 -22
  1171. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +32 -21
  1172. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
  1173. data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +28 -21
  1174. data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
  1175. data/src/core/lib/security/security_connector/local/local_security_connector.cc +45 -29
  1176. data/src/core/lib/security/security_connector/local/local_security_connector.h +7 -3
  1177. data/src/core/lib/security/security_connector/security_connector.cc +22 -32
  1178. data/src/core/lib/security/security_connector/security_connector.h +49 -31
  1179. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +32 -22
  1180. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
  1181. data/src/core/lib/security/security_connector/ssl_utils.cc +50 -34
  1182. data/src/core/lib/security/security_connector/ssl_utils.h +23 -24
  1183. data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
  1184. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +387 -220
  1185. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +97 -54
  1186. data/src/core/lib/security/transport/auth_filters.h +45 -5
  1187. data/src/core/lib/security/transport/client_auth_filter.cc +111 -368
  1188. data/src/core/lib/security/transport/secure_endpoint.cc +267 -137
  1189. data/src/core/lib/security/transport/secure_endpoint.h +5 -4
  1190. data/src/core/lib/security/transport/security_handshaker.cc +81 -50
  1191. data/src/core/lib/security/transport/security_handshaker.h +7 -2
  1192. data/src/core/lib/security/transport/server_auth_filter.cc +70 -41
  1193. data/src/core/lib/security/util/json_util.cc +3 -2
  1194. data/src/core/lib/security/util/json_util.h +0 -2
  1195. data/src/core/lib/service_config/service_config.h +89 -0
  1196. data/src/core/{ext → lib}/service_config/service_config_call_data.h +11 -7
  1197. data/src/core/lib/service_config/service_config_impl.cc +238 -0
  1198. data/src/core/{ext/service_config/service_config.h → lib/service_config/service_config_impl.h} +33 -32
  1199. data/src/core/lib/service_config/service_config_parser.cc +98 -0
  1200. data/src/core/lib/service_config/service_config_parser.h +101 -0
  1201. data/src/core/lib/slice/b64.cc +1 -1
  1202. data/src/core/lib/slice/b64.h +2 -0
  1203. data/src/core/lib/slice/percent_encoding.cc +35 -97
  1204. data/src/core/lib/slice/percent_encoding.h +4 -16
  1205. data/src/core/lib/slice/slice.cc +88 -184
  1206. data/src/core/lib/slice/slice.h +389 -0
  1207. data/src/core/lib/slice/slice_api.cc +1 -1
  1208. data/src/core/lib/slice/slice_buffer.cc +83 -23
  1209. data/src/core/lib/slice/slice_buffer.h +137 -0
  1210. data/src/core/lib/{iomgr/is_epollexclusive_available.h → slice/slice_buffer_api.cc} +11 -12
  1211. data/src/core/lib/slice/slice_internal.h +16 -34
  1212. data/src/core/lib/slice/slice_refcount.cc +18 -0
  1213. data/src/core/lib/slice/slice_refcount.h +7 -83
  1214. data/src/core/lib/slice/slice_refcount_base.h +20 -133
  1215. data/src/core/lib/slice/slice_string_helpers.cc +0 -16
  1216. data/src/core/lib/slice/slice_string_helpers.h +1 -8
  1217. data/src/core/lib/surface/builtins.cc +11 -6
  1218. data/src/core/lib/surface/byte_buffer.cc +7 -1
  1219. data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
  1220. data/src/core/lib/surface/call.cc +1159 -1289
  1221. data/src/core/lib/surface/call.h +26 -22
  1222. data/src/core/lib/surface/call_details.cc +4 -4
  1223. data/src/core/lib/surface/call_log_batch.cc +7 -1
  1224. data/src/core/lib/surface/call_test_only.h +4 -1
  1225. data/src/core/lib/surface/channel.cc +218 -312
  1226. data/src/core/lib/surface/channel.h +102 -74
  1227. data/src/core/lib/surface/channel_init.cc +2 -3
  1228. data/src/core/lib/surface/channel_init.h +4 -6
  1229. data/src/core/lib/surface/channel_ping.cc +8 -2
  1230. data/src/core/lib/surface/channel_stack_type.cc +0 -2
  1231. data/src/core/lib/surface/channel_stack_type.h +0 -2
  1232. data/src/core/lib/surface/completion_queue.cc +41 -33
  1233. data/src/core/lib/surface/completion_queue.h +7 -5
  1234. data/src/core/lib/surface/completion_queue_factory.cc +1 -0
  1235. data/src/core/lib/surface/completion_queue_factory.h +1 -3
  1236. data/src/core/lib/surface/event_string.cc +1 -7
  1237. data/src/core/lib/surface/event_string.h +1 -1
  1238. data/src/core/lib/surface/init.cc +68 -33
  1239. data/src/core/lib/surface/init.h +0 -10
  1240. data/src/core/lib/surface/lame_client.cc +63 -103
  1241. data/src/core/lib/surface/lame_client.h +41 -3
  1242. data/src/core/lib/surface/metadata_array.cc +2 -0
  1243. data/src/core/lib/surface/server.cc +121 -146
  1244. data/src/core/lib/surface/server.h +60 -29
  1245. data/src/core/lib/surface/validate_metadata.cc +7 -20
  1246. data/src/core/lib/surface/validate_metadata.h +3 -0
  1247. data/src/core/lib/surface/version.cc +2 -2
  1248. data/src/core/lib/transport/bdp_estimator.cc +13 -12
  1249. data/src/core/lib/transport/bdp_estimator.h +4 -5
  1250. data/src/core/lib/transport/connectivity_state.cc +5 -4
  1251. data/src/core/lib/transport/connectivity_state.h +3 -4
  1252. data/src/core/lib/transport/error_utils.cc +17 -43
  1253. data/src/core/lib/transport/error_utils.h +7 -2
  1254. data/src/core/lib/{channel → transport}/handshaker.cc +20 -17
  1255. data/src/core/lib/{channel → transport}/handshaker.h +16 -10
  1256. data/src/core/lib/{channel → transport}/handshaker_factory.h +10 -12
  1257. data/src/core/lib/{channel → transport}/handshaker_registry.cc +7 -2
  1258. data/src/core/lib/{channel → transport}/handshaker_registry.h +7 -8
  1259. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +62 -53
  1260. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.h +3 -3
  1261. data/src/core/lib/transport/metadata_batch.cc +267 -69
  1262. data/src/core/lib/transport/metadata_batch.h +1088 -835
  1263. data/src/core/lib/transport/parsed_metadata.cc +39 -0
  1264. data/src/core/lib/transport/parsed_metadata.h +237 -93
  1265. data/src/core/lib/transport/pid_controller.cc +4 -4
  1266. data/src/core/lib/transport/status_conversion.cc +4 -2
  1267. data/src/core/lib/transport/status_conversion.h +3 -3
  1268. data/src/core/lib/transport/tcp_connect_handshaker.cc +247 -0
  1269. data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
  1270. data/src/core/lib/transport/timeout_encoding.cc +203 -70
  1271. data/src/core/lib/transport/timeout_encoding.h +44 -10
  1272. data/src/core/lib/transport/transport.cc +25 -47
  1273. data/src/core/lib/transport/transport.h +151 -27
  1274. data/src/core/lib/transport/transport_fwd.h +20 -0
  1275. data/src/core/lib/transport/transport_impl.h +25 -0
  1276. data/src/core/lib/transport/transport_op_string.cc +21 -64
  1277. data/src/core/lib/uri/uri_parser.cc +248 -66
  1278. data/src/core/lib/uri/uri_parser.h +39 -25
  1279. data/src/core/plugin_registry/grpc_plugin_registry.cc +35 -92
  1280. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +85 -0
  1281. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +67 -43
  1282. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
  1283. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +9 -1
  1284. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +36 -21
  1285. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +1 -1
  1286. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -2
  1287. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -1
  1288. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -2
  1289. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +2 -2
  1290. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
  1291. data/src/core/tsi/fake_transport_security.cc +66 -31
  1292. data/src/core/tsi/fake_transport_security.h +6 -0
  1293. data/src/core/tsi/local_transport_security.cc +24 -28
  1294. data/src/core/tsi/local_transport_security.h +1 -4
  1295. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +141 -0
  1296. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +81 -0
  1297. data/src/core/tsi/ssl/session_cache/ssl_session.h +3 -3
  1298. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -0
  1299. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +13 -6
  1300. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -0
  1301. data/src/core/tsi/ssl_transport_security.cc +249 -68
  1302. data/src/core/tsi/ssl_transport_security.h +47 -8
  1303. data/src/core/tsi/transport_security.cc +18 -6
  1304. data/src/core/tsi/transport_security.h +2 -1
  1305. data/src/core/tsi/transport_security_grpc.cc +3 -2
  1306. data/src/core/tsi/transport_security_grpc.h +5 -2
  1307. data/src/core/tsi/transport_security_interface.h +19 -5
  1308. data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
  1309. data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
  1310. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  1311. data/src/ruby/ext/grpc/ext-export.gcc +1 -0
  1312. data/src/ruby/ext/grpc/extconf.rb +61 -21
  1313. data/src/ruby/ext/grpc/rb_channel.c +5 -2
  1314. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +26 -34
  1315. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +40 -52
  1316. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  1317. data/src/ruby/ext/grpc/rb_server.c +7 -4
  1318. data/src/ruby/lib/grpc/errors.rb +1 -1
  1319. data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
  1320. data/src/ruby/lib/grpc/grpc.rb +1 -1
  1321. data/src/ruby/lib/grpc/version.rb +1 -1
  1322. data/src/ruby/pb/generate_proto_ruby.sh +1 -0
  1323. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
  1324. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -1
  1325. data/src/ruby/pb/test/client.rb +769 -0
  1326. data/src/ruby/pb/test/server.rb +252 -0
  1327. data/src/ruby/pb/test/xds_client.rb +415 -0
  1328. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  1329. data/third_party/abseil-cpp/absl/algorithm/container.h +102 -92
  1330. data/third_party/abseil-cpp/absl/base/attributes.h +112 -52
  1331. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  1332. data/third_party/abseil-cpp/absl/base/config.h +245 -74
  1333. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +1 -26
  1334. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  1335. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
  1336. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
  1337. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  1338. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +50 -0
  1339. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  1340. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  1341. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
  1342. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
  1343. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
  1344. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +11 -1
  1345. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  1346. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +2 -0
  1347. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  1348. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  1349. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +68 -0
  1350. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  1351. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -4
  1352. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +22 -7
  1353. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +15 -6
  1354. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  1355. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  1356. data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
  1357. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  1358. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  1359. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -5
  1360. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  1361. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +510 -0
  1362. data/third_party/abseil-cpp/absl/container/inlined_vector.h +118 -99
  1363. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
  1364. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
  1365. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +17 -15
  1366. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +77 -113
  1367. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +62 -85
  1368. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +417 -431
  1369. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +3 -2
  1370. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +18 -8
  1371. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +724 -262
  1372. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  1373. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +11 -1
  1374. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +16 -11
  1375. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +7 -2
  1376. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
  1377. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  1378. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +13 -5
  1379. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +110 -0
  1380. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  1381. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +236 -0
  1382. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +33 -10
  1383. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +8 -2
  1384. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +35 -4
  1385. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +2 -0
  1386. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +7 -0
  1387. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +60 -7
  1388. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +72 -0
  1389. data/third_party/abseil-cpp/absl/functional/any_invocable.h +313 -0
  1390. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  1391. data/third_party/abseil-cpp/absl/functional/function_ref.h +6 -2
  1392. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +857 -0
  1393. data/third_party/abseil-cpp/absl/hash/hash.h +104 -8
  1394. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +15 -16
  1395. data/third_party/abseil-cpp/absl/hash/internal/hash.h +297 -51
  1396. data/third_party/abseil-cpp/absl/hash/internal/{wyhash.cc → low_level_hash.cc} +23 -11
  1397. data/third_party/abseil-cpp/absl/hash/internal/{wyhash.h → low_level_hash.h} +14 -12
  1398. data/third_party/abseil-cpp/absl/memory/memory.h +1 -1
  1399. data/third_party/abseil-cpp/absl/meta/type_traits.h +32 -2
  1400. data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
  1401. data/third_party/abseil-cpp/absl/numeric/int128.cc +7 -12
  1402. data/third_party/abseil-cpp/absl/numeric/int128.h +148 -75
  1403. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +19 -25
  1404. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +73 -70
  1405. data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.cc +4 -4
  1406. data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.h +6 -6
  1407. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +245 -0
  1408. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
  1409. data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
  1410. data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
  1411. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
  1412. data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
  1413. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
  1414. data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
  1415. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
  1416. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +95 -0
  1417. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +269 -0
  1418. data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
  1419. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
  1420. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
  1421. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +161 -0
  1422. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
  1423. data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
  1424. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
  1425. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
  1426. data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
  1427. data/third_party/abseil-cpp/absl/random/internal/randen.h +96 -0
  1428. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +225 -0
  1429. data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
  1430. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +264 -0
  1431. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
  1432. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
  1433. data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
  1434. data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
  1435. data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
  1436. data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
  1437. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +165 -0
  1438. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
  1439. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
  1440. data/third_party/abseil-cpp/absl/random/internal/traits.h +149 -0
  1441. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
  1442. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +96 -0
  1443. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +256 -0
  1444. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +261 -0
  1445. data/third_party/abseil-cpp/absl/random/random.h +189 -0
  1446. data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
  1447. data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
  1448. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
  1449. data/third_party/abseil-cpp/absl/random/seed_sequences.h +111 -0
  1450. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
  1451. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
  1452. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +272 -0
  1453. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +22 -5
  1454. data/third_party/abseil-cpp/absl/status/status.cc +183 -19
  1455. data/third_party/abseil-cpp/absl/status/status.h +41 -27
  1456. data/third_party/abseil-cpp/absl/status/statusor.cc +34 -2
  1457. data/third_party/abseil-cpp/absl/status/statusor.h +40 -24
  1458. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  1459. data/third_party/abseil-cpp/absl/strings/charconv.cc +3 -3
  1460. data/third_party/abseil-cpp/absl/strings/charconv.h +3 -2
  1461. data/third_party/abseil-cpp/absl/strings/cord.cc +469 -1094
  1462. data/third_party/abseil-cpp/absl/strings/cord.h +392 -144
  1463. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  1464. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  1465. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  1466. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
  1467. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +1 -1
  1468. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  1469. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +23 -29
  1470. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +208 -96
  1471. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1228 -0
  1472. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +924 -0
  1473. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +187 -0
  1474. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +267 -0
  1475. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +69 -0
  1476. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +212 -0
  1477. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +62 -0
  1478. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +50 -0
  1479. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
  1480. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
  1481. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +60 -19
  1482. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +48 -172
  1483. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +42 -24
  1484. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +4 -0
  1485. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +96 -0
  1486. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +85 -0
  1487. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +139 -0
  1488. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +131 -0
  1489. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +418 -0
  1490. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +298 -0
  1491. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +88 -0
  1492. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
  1493. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +123 -0
  1494. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
  1495. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
  1496. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +48 -2
  1497. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
  1498. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +9 -1
  1499. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -4
  1500. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +39 -8
  1501. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
  1502. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +10 -11
  1503. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +41 -20
  1504. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  1505. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +62 -73
  1506. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +28 -18
  1507. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  1508. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +35 -35
  1509. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  1510. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  1511. data/third_party/abseil-cpp/absl/strings/numbers.cc +9 -9
  1512. data/third_party/abseil-cpp/absl/strings/numbers.h +60 -23
  1513. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  1514. data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
  1515. data/third_party/abseil-cpp/absl/strings/str_format.h +1 -2
  1516. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  1517. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  1518. data/third_party/abseil-cpp/absl/strings/string_view.cc +18 -34
  1519. data/third_party/abseil-cpp/absl/strings/string_view.h +123 -41
  1520. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  1521. data/third_party/abseil-cpp/absl/strings/substitute.cc +2 -1
  1522. data/third_party/abseil-cpp/absl/strings/substitute.h +109 -76
  1523. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +25 -15
  1524. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +5 -3
  1525. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  1526. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  1527. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  1528. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  1529. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -26
  1530. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  1531. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
  1532. data/third_party/abseil-cpp/absl/synchronization/mutex.h +20 -12
  1533. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
  1534. data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -3
  1535. data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
  1536. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  1537. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +93 -20
  1538. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
  1539. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +2 -1
  1540. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +83 -21
  1541. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +49 -0
  1542. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +1 -1
  1543. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -3
  1544. data/third_party/abseil-cpp/absl/time/time.h +82 -47
  1545. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +1 -1
  1546. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +2 -2
  1547. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  1548. data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
  1549. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  1550. data/third_party/abseil-cpp/absl/types/span.h +5 -4
  1551. data/third_party/boringssl-with-bazel/err_data.c +681 -677
  1552. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +19 -11
  1553. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +41 -30
  1554. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +1 -1
  1555. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +59 -47
  1556. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +24 -28
  1557. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +5 -0
  1558. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +28 -0
  1559. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +48 -272
  1560. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -0
  1561. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +8 -6
  1562. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +13 -0
  1563. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +3 -1
  1564. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
  1565. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +2 -2
  1566. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +12 -0
  1567. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +1 -2
  1568. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +7 -7
  1569. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +2 -2
  1570. data/third_party/boringssl-with-bazel/src/crypto/mem.c +18 -0
  1571. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +29 -0
  1572. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
  1573. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
  1574. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
  1575. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +5 -1
  1576. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +59 -23
  1577. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +2 -18
  1578. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +8 -2
  1579. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +216 -11
  1580. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -1
  1581. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
  1582. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +1 -1
  1583. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -1
  1584. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +1 -1
  1585. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +1 -1
  1586. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +1 -0
  1587. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +0 -1
  1588. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +21 -4
  1589. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +971 -253
  1590. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +3 -3
  1591. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +0 -1
  1592. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
  1593. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +13 -1
  1594. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +4 -12
  1595. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +27 -41
  1596. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +12 -27
  1597. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +8 -10
  1598. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +29 -55
  1599. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +1 -1
  1600. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +12 -13
  1601. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +6 -1
  1602. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +7 -1
  1603. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +24 -28
  1604. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +29 -11
  1605. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +12 -43
  1606. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +4 -3
  1607. data/third_party/boringssl-with-bazel/src/ssl/internal.h +3 -3
  1608. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +4 -0
  1609. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +4 -0
  1610. data/third_party/cares/cares/{ares.h → include/ares.h} +73 -1
  1611. data/third_party/cares/cares/{ares_dns.h → include/ares_dns.h} +9 -0
  1612. data/third_party/cares/cares/{ares_rules.h → include/ares_rules.h} +0 -0
  1613. data/third_party/cares/cares/{ares_version.h → include/ares_version.h} +3 -3
  1614. data/third_party/cares/cares/{ares__close_sockets.c → src/lib/ares__close_sockets.c} +2 -2
  1615. data/third_party/cares/cares/{ares__get_hostent.c → src/lib/ares__get_hostent.c} +1 -2
  1616. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +260 -0
  1617. data/third_party/cares/cares/{ares__read_line.c → src/lib/ares__read_line.c} +0 -0
  1618. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +264 -0
  1619. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +499 -0
  1620. data/third_party/cares/cares/{ares__timeval.c → src/lib/ares__timeval.c} +0 -0
  1621. data/third_party/cares/cares/src/lib/ares_android.c +444 -0
  1622. data/third_party/cares/cares/src/lib/ares_android.h +27 -0
  1623. data/third_party/cares/cares/{ares_cancel.c → src/lib/ares_cancel.c} +0 -0
  1624. data/third_party/cares/cares/{ares_create_query.c → src/lib/ares_create_query.c} +8 -17
  1625. data/third_party/cares/cares/{ares_data.c → src/lib/ares_data.c} +18 -0
  1626. data/third_party/cares/cares/{ares_data.h → src/lib/ares_data.h} +2 -0
  1627. data/third_party/cares/cares/{ares_destroy.c → src/lib/ares_destroy.c} +0 -0
  1628. data/third_party/cares/cares/{ares_expand_name.c → src/lib/ares_expand_name.c} +114 -23
  1629. data/third_party/cares/cares/{ares_expand_string.c → src/lib/ares_expand_string.c} +2 -5
  1630. data/third_party/cares/cares/{ares_fds.c → src/lib/ares_fds.c} +0 -0
  1631. data/third_party/cares/cares/{ares_free_hostent.c → src/lib/ares_free_hostent.c} +6 -4
  1632. data/third_party/cares/cares/{ares_free_string.c → src/lib/ares_free_string.c} +0 -0
  1633. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +59 -0
  1634. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +772 -0
  1635. data/third_party/cares/cares/{ares_getenv.c → src/lib/ares_getenv.c} +0 -2
  1636. data/third_party/cares/cares/{ares_getenv.h → src/lib/ares_getenv.h} +0 -0
  1637. data/third_party/cares/cares/{ares_gethostbyaddr.c → src/lib/ares_gethostbyaddr.c} +2 -9
  1638. data/third_party/cares/cares/{ares_gethostbyname.c → src/lib/ares_gethostbyname.c} +25 -20
  1639. data/third_party/cares/cares/{ares_getnameinfo.c → src/lib/ares_getnameinfo.c} +4 -10
  1640. data/third_party/cares/cares/{ares_getsock.c → src/lib/ares_getsock.c} +0 -0
  1641. data/third_party/cares/cares/{ares_inet_net_pton.h → src/lib/ares_inet_net_pton.h} +0 -0
  1642. data/third_party/cares/cares/{ares_init.c → src/lib/ares_init.c} +79 -40
  1643. data/third_party/cares/cares/{ares_iphlpapi.h → src/lib/ares_iphlpapi.h} +0 -0
  1644. data/third_party/cares/cares/{ares_ipv6.h → src/lib/ares_ipv6.h} +7 -0
  1645. data/third_party/cares/cares/{ares_library_init.c → src/lib/ares_library_init.c} +7 -2
  1646. data/third_party/cares/cares/{ares_library_init.h → src/lib/ares_library_init.h} +1 -1
  1647. data/third_party/cares/cares/{ares_llist.c → src/lib/ares_llist.c} +0 -0
  1648. data/third_party/cares/cares/{ares_llist.h → src/lib/ares_llist.h} +0 -0
  1649. data/third_party/cares/cares/{ares_mkquery.c → src/lib/ares_mkquery.c} +0 -0
  1650. data/third_party/cares/cares/src/lib/ares_nameser.h +482 -0
  1651. data/third_party/cares/cares/{ares_nowarn.c → src/lib/ares_nowarn.c} +0 -0
  1652. data/third_party/cares/cares/{ares_nowarn.h → src/lib/ares_nowarn.h} +0 -0
  1653. data/third_party/cares/cares/{ares_options.c → src/lib/ares_options.c} +0 -0
  1654. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +209 -0
  1655. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +212 -0
  1656. data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +199 -0
  1657. data/third_party/cares/cares/{ares_parse_mx_reply.c → src/lib/ares_parse_mx_reply.c} +2 -8
  1658. data/third_party/cares/cares/{ares_parse_naptr_reply.c → src/lib/ares_parse_naptr_reply.c} +2 -13
  1659. data/third_party/cares/cares/{ares_parse_ns_reply.c → src/lib/ares_parse_ns_reply.c} +5 -11
  1660. data/third_party/cares/cares/{ares_parse_ptr_reply.c → src/lib/ares_parse_ptr_reply.c} +53 -46
  1661. data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +179 -0
  1662. data/third_party/cares/cares/{ares_parse_srv_reply.c → src/lib/ares_parse_srv_reply.c} +2 -13
  1663. data/third_party/cares/cares/{ares_parse_txt_reply.c → src/lib/ares_parse_txt_reply.c} +3 -9
  1664. data/third_party/cares/cares/{ares_platform.c → src/lib/ares_platform.c} +0 -0
  1665. data/third_party/cares/cares/{ares_platform.h → src/lib/ares_platform.h} +0 -0
  1666. data/third_party/cares/cares/{ares_private.h → src/lib/ares_private.h} +52 -11
  1667. data/third_party/cares/cares/{ares_process.c → src/lib/ares_process.c} +127 -52
  1668. data/third_party/cares/cares/{ares_query.c → src/lib/ares_query.c} +3 -9
  1669. data/third_party/cares/cares/{ares_search.c → src/lib/ares_search.c} +5 -7
  1670. data/third_party/cares/cares/{ares_send.c → src/lib/ares_send.c} +2 -8
  1671. data/third_party/cares/cares/{ares_setup.h → src/lib/ares_setup.h} +4 -1
  1672. data/third_party/cares/cares/{ares_strcasecmp.c → src/lib/ares_strcasecmp.c} +0 -0
  1673. data/third_party/cares/cares/{ares_strcasecmp.h → src/lib/ares_strcasecmp.h} +0 -0
  1674. data/third_party/cares/cares/{ares_strdup.c → src/lib/ares_strdup.c} +0 -0
  1675. data/third_party/cares/cares/{ares_strdup.h → src/lib/ares_strdup.h} +0 -0
  1676. data/third_party/cares/cares/{ares_strerror.c → src/lib/ares_strerror.c} +0 -0
  1677. data/third_party/cares/cares/{ares_strsplit.c → src/lib/ares_strsplit.c} +4 -0
  1678. data/third_party/cares/cares/{ares_strsplit.h → src/lib/ares_strsplit.h} +0 -0
  1679. data/third_party/cares/cares/{ares_timeout.c → src/lib/ares_timeout.c} +0 -0
  1680. data/third_party/cares/cares/{ares_version.c → src/lib/ares_version.c} +0 -0
  1681. data/third_party/cares/cares/{ares_writev.c → src/lib/ares_writev.c} +0 -0
  1682. data/third_party/cares/cares/src/lib/ares_writev.h +36 -0
  1683. data/third_party/cares/cares/{bitncmp.c → src/lib/bitncmp.c} +0 -0
  1684. data/third_party/cares/cares/{bitncmp.h → src/lib/bitncmp.h} +0 -0
  1685. data/third_party/cares/cares/src/lib/config-dos.h +115 -0
  1686. data/third_party/cares/cares/{config-win32.h → src/lib/config-win32.h} +0 -0
  1687. data/third_party/cares/cares/{inet_net_pton.c → src/lib/inet_net_pton.c} +2 -8
  1688. data/third_party/cares/cares/{inet_ntop.c → src/lib/inet_ntop.c} +2 -8
  1689. data/third_party/cares/cares/{setup_once.h → src/lib/setup_once.h} +0 -0
  1690. data/third_party/cares/cares/{windows_port.c → src/lib/windows_port.c} +0 -0
  1691. data/third_party/upb/third_party/utf8_range/naive.c +92 -0
  1692. data/third_party/upb/third_party/utf8_range/range2-neon.c +157 -0
  1693. data/third_party/upb/third_party/utf8_range/range2-sse.c +170 -0
  1694. data/third_party/upb/third_party/utf8_range/utf8_range.h +9 -0
  1695. data/third_party/upb/upb/arena.c +277 -0
  1696. data/third_party/upb/upb/arena.h +225 -0
  1697. data/third_party/upb/upb/array.c +114 -0
  1698. data/third_party/upb/upb/array.h +83 -0
  1699. data/third_party/upb/upb/collections.h +36 -0
  1700. data/third_party/upb/upb/decode.c +832 -382
  1701. data/third_party/upb/upb/decode.h +44 -17
  1702. data/third_party/upb/upb/decode_fast.c +304 -302
  1703. data/third_party/upb/upb/decode_fast.h +18 -18
  1704. data/third_party/upb/upb/def.c +2083 -982
  1705. data/third_party/upb/upb/def.h +339 -260
  1706. data/third_party/upb/upb/def.hpp +144 -171
  1707. data/third_party/upb/upb/encode.c +287 -185
  1708. data/third_party/upb/upb/encode.h +24 -16
  1709. data/third_party/upb/upb/extension_registry.c +93 -0
  1710. data/third_party/upb/upb/extension_registry.h +84 -0
  1711. data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +76 -58
  1712. data/third_party/upb/upb/internal/table.h +385 -0
  1713. data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +23 -13
  1714. data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
  1715. data/third_party/upb/upb/json_decode.c +1512 -0
  1716. data/third_party/upb/upb/json_decode.h +47 -0
  1717. data/third_party/upb/upb/json_encode.c +780 -0
  1718. data/third_party/upb/upb/json_encode.h +65 -0
  1719. data/third_party/upb/upb/map.c +108 -0
  1720. data/third_party/upb/upb/map.h +117 -0
  1721. data/third_party/upb/upb/message_value.h +66 -0
  1722. data/third_party/upb/upb/mini_table.c +1147 -0
  1723. data/third_party/upb/upb/mini_table.h +189 -0
  1724. data/third_party/upb/upb/mini_table.hpp +112 -0
  1725. data/third_party/upb/upb/msg.c +132 -161
  1726. data/third_party/upb/upb/msg.h +18 -55
  1727. data/third_party/upb/upb/msg_internal.h +404 -254
  1728. data/third_party/upb/upb/port_def.inc +10 -1
  1729. data/third_party/upb/upb/port_undef.inc +2 -0
  1730. data/third_party/upb/upb/reflection.c +203 -280
  1731. data/third_party/upb/upb/reflection.h +40 -126
  1732. data/third_party/upb/upb/reflection.hpp +6 -6
  1733. data/third_party/upb/upb/status.c +86 -0
  1734. data/third_party/upb/upb/status.h +66 -0
  1735. data/third_party/upb/upb/table.c +233 -149
  1736. data/third_party/upb/upb/table_internal.h +9 -324
  1737. data/third_party/upb/upb/text_encode.c +116 -92
  1738. data/third_party/upb/upb/text_encode.h +10 -10
  1739. data/third_party/upb/upb/upb.c +34 -273
  1740. data/third_party/upb/upb/upb.h +79 -262
  1741. data/third_party/upb/upb/upb.hpp +31 -28
  1742. data/third_party/xxhash/xxhash.h +607 -352
  1743. data/third_party/zlib/crc32.c +966 -292
  1744. data/third_party/zlib/crc32.h +9441 -436
  1745. data/third_party/zlib/deflate.c +78 -30
  1746. data/third_party/zlib/deflate.h +12 -15
  1747. data/third_party/zlib/gzguts.h +3 -2
  1748. data/third_party/zlib/gzlib.c +5 -3
  1749. data/third_party/zlib/gzread.c +5 -7
  1750. data/third_party/zlib/gzwrite.c +25 -13
  1751. data/third_party/zlib/infback.c +2 -1
  1752. data/third_party/zlib/inffast.c +14 -14
  1753. data/third_party/zlib/inflate.c +39 -8
  1754. data/third_party/zlib/inflate.h +3 -2
  1755. data/third_party/zlib/inftrees.c +3 -3
  1756. data/third_party/zlib/trees.c +27 -48
  1757. data/third_party/zlib/zlib.h +123 -100
  1758. data/third_party/zlib/zutil.c +2 -2
  1759. data/third_party/zlib/zutil.h +12 -9
  1760. metadata +637 -270
  1761. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +0 -44
  1762. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +0 -83
  1763. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -48
  1764. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +0 -185
  1765. data/src/core/ext/filters/client_channel/resolver.cc +0 -87
  1766. data/src/core/ext/filters/client_channel/resolver_registry.cc +0 -195
  1767. data/src/core/ext/filters/client_channel/resolver_registry.h +0 -89
  1768. data/src/core/ext/filters/client_idle/client_idle_filter.cc +0 -264
  1769. data/src/core/ext/filters/max_age/max_age_filter.cc +0 -560
  1770. data/src/core/ext/service_config/service_config.cc +0 -227
  1771. data/src/core/ext/service_config/service_config_parser.cc +0 -89
  1772. data/src/core/ext/service_config/service_config_parser.h +0 -97
  1773. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +0 -119
  1774. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +0 -95
  1775. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +0 -189
  1776. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +0 -53
  1777. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +0 -83
  1778. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +0 -125
  1779. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -37
  1780. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +0 -107
  1781. data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +0 -46
  1782. data/src/core/ext/transport/chttp2/transport/popularity_count.h +0 -60
  1783. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +0 -27
  1784. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +0 -62
  1785. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +0 -27
  1786. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +0 -62
  1787. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +0 -27
  1788. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +0 -62
  1789. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +0 -27
  1790. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +0 -62
  1791. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +0 -27
  1792. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +0 -62
  1793. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +0 -72
  1794. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +0 -35
  1795. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +0 -73
  1796. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +0 -35
  1797. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +0 -72
  1798. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +0 -35
  1799. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +0 -80
  1800. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +0 -35
  1801. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +0 -74
  1802. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +0 -35
  1803. data/src/core/lib/avl/avl.cc +0 -306
  1804. data/src/core/lib/compression/algorithm_metadata.h +0 -62
  1805. data/src/core/lib/compression/compression_args.cc +0 -138
  1806. data/src/core/lib/compression/compression_args.h +0 -56
  1807. data/src/core/lib/compression/stream_compression.cc +0 -81
  1808. data/src/core/lib/compression/stream_compression.h +0 -117
  1809. data/src/core/lib/compression/stream_compression_gzip.cc +0 -231
  1810. data/src/core/lib/compression/stream_compression_gzip.h +0 -28
  1811. data/src/core/lib/compression/stream_compression_identity.cc +0 -91
  1812. data/src/core/lib/compression/stream_compression_identity.h +0 -29
  1813. data/src/core/lib/event_engine/sockaddr.cc +0 -40
  1814. data/src/core/lib/event_engine/sockaddr.h +0 -44
  1815. data/src/core/lib/iomgr/error_internal.h +0 -66
  1816. data/src/core/lib/iomgr/ev_epollex_linux.cc +0 -1654
  1817. data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
  1818. data/src/core/lib/iomgr/event_engine/closure.h +0 -42
  1819. data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -173
  1820. data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
  1821. data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -104
  1822. data/src/core/lib/iomgr/event_engine/iomgr.h +0 -42
  1823. data/src/core/lib/iomgr/event_engine/pollset.cc +0 -88
  1824. data/src/core/lib/iomgr/event_engine/resolver.cc +0 -114
  1825. data/src/core/lib/iomgr/event_engine/tcp.cc +0 -293
  1826. data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
  1827. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
  1828. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
  1829. data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
  1830. data/src/core/lib/iomgr/executor/threadpool.h +0 -150
  1831. data/src/core/lib/iomgr/iomgr_custom.cc +0 -79
  1832. data/src/core/lib/iomgr/iomgr_custom.h +0 -49
  1833. data/src/core/lib/iomgr/is_epollexclusive_available.cc +0 -119
  1834. data/src/core/lib/iomgr/pollset_custom.cc +0 -105
  1835. data/src/core/lib/iomgr/pollset_custom.h +0 -37
  1836. data/src/core/lib/iomgr/pollset_set_custom.cc +0 -47
  1837. data/src/core/lib/iomgr/pollset_set_custom.h +0 -26
  1838. data/src/core/lib/iomgr/resolve_address_custom.cc +0 -169
  1839. data/src/core/lib/iomgr/resolve_address_custom.h +0 -44
  1840. data/src/core/lib/iomgr/resource_quota.cc +0 -1106
  1841. data/src/core/lib/iomgr/resource_quota.h +0 -226
  1842. data/src/core/lib/iomgr/sys_epoll_wrapper.h +0 -30
  1843. data/src/core/lib/iomgr/tcp_client_custom.cc +0 -152
  1844. data/src/core/lib/iomgr/tcp_custom.cc +0 -377
  1845. data/src/core/lib/iomgr/tcp_custom.h +0 -86
  1846. data/src/core/lib/iomgr/tcp_server_custom.cc +0 -467
  1847. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  1848. data/src/core/lib/iomgr/timer_custom.cc +0 -96
  1849. data/src/core/lib/iomgr/timer_custom.h +0 -43
  1850. data/src/core/lib/iomgr/work_serializer.cc +0 -155
  1851. data/src/core/lib/iomgr/work_serializer.h +0 -81
  1852. data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +0 -171
  1853. data/src/core/lib/security/authorization/sdk_server_authz_filter.h +0 -67
  1854. data/src/core/lib/security/credentials/credentials_metadata.cc +0 -61
  1855. data/src/core/lib/slice/slice_intern.cc +0 -367
  1856. data/src/core/lib/slice/slice_split.cc +0 -100
  1857. data/src/core/lib/slice/slice_split.h +0 -40
  1858. data/src/core/lib/slice/slice_utils.h +0 -200
  1859. data/src/core/lib/slice/static_slice.cc +0 -529
  1860. data/src/core/lib/slice/static_slice.h +0 -331
  1861. data/src/core/lib/surface/init_secure.cc +0 -103
  1862. data/src/core/lib/transport/byte_stream.cc +0 -158
  1863. data/src/core/lib/transport/byte_stream.h +0 -166
  1864. data/src/core/lib/transport/metadata.cc +0 -714
  1865. data/src/core/lib/transport/metadata.h +0 -449
  1866. data/src/core/lib/transport/static_metadata.cc +0 -1117
  1867. data/src/core/lib/transport/static_metadata.h +0 -340
  1868. data/src/core/lib/transport/status_metadata.cc +0 -63
  1869. data/src/core/lib/transport/status_metadata.h +0 -48
  1870. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
  1871. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +0 -93
  1872. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +0 -217
  1873. data/third_party/cares/cares/ares_getopt.c +0 -122
  1874. data/third_party/cares/cares/ares_getopt.h +0 -53
  1875. data/third_party/cares/cares/ares_parse_a_reply.c +0 -264
  1876. data/third_party/cares/cares/ares_parse_aaaa_reply.c +0 -264
  1877. data/third_party/cares/cares/ares_parse_soa_reply.c +0 -133
@@ -20,60 +20,70 @@
20
20
 
21
21
  #include <inttypes.h>
22
22
  #include <limits.h>
23
- #include <stdbool.h>
24
- #include <stdio.h>
25
- #include <string.h>
26
23
 
24
+ #include <algorithm>
25
+ #include <functional>
26
+ #include <new>
27
27
  #include <set>
28
+ #include <vector>
28
29
 
29
- #include "absl/container/inlined_vector.h"
30
+ #include "absl/memory/memory.h"
31
+ #include "absl/status/status.h"
32
+ #include "absl/status/statusor.h"
33
+ #include "absl/strings/cord.h"
30
34
  #include "absl/strings/numbers.h"
31
35
  #include "absl/strings/str_cat.h"
32
36
  #include "absl/strings/str_join.h"
33
37
  #include "absl/strings/string_view.h"
34
38
  #include "absl/types/optional.h"
39
+ #include "absl/types/variant.h"
35
40
 
36
- #include <grpc/support/alloc.h>
41
+ #include <grpc/impl/codegen/gpr_types.h>
42
+ #include <grpc/slice.h>
43
+ #include <grpc/status.h>
37
44
  #include <grpc/support/log.h>
38
45
  #include <grpc/support/string_util.h>
39
- #include <grpc/support/sync.h>
40
46
 
41
47
  #include "src/core/ext/filters/client_channel/backend_metric.h"
42
48
  #include "src/core/ext/filters/client_channel/backup_poller.h"
49
+ #include "src/core/ext/filters/client_channel/client_channel_channelz.h"
43
50
  #include "src/core/ext/filters/client_channel/config_selector.h"
44
51
  #include "src/core/ext/filters/client_channel/dynamic_filters.h"
45
52
  #include "src/core/ext/filters/client_channel/global_subchannel_pool.h"
46
- #include "src/core/ext/filters/client_channel/http_connect_handshaker.h"
47
53
  #include "src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h"
48
- #include "src/core/ext/filters/client_channel/lb_policy_registry.h"
49
54
  #include "src/core/ext/filters/client_channel/local_subchannel_pool.h"
50
55
  #include "src/core/ext/filters/client_channel/proxy_mapper_registry.h"
51
- #include "src/core/ext/filters/client_channel/resolver_registry.h"
52
56
  #include "src/core/ext/filters/client_channel/resolver_result_parsing.h"
53
57
  #include "src/core/ext/filters/client_channel/retry_filter.h"
54
58
  #include "src/core/ext/filters/client_channel/subchannel.h"
59
+ #include "src/core/ext/filters/client_channel/subchannel_interface_internal.h"
55
60
  #include "src/core/ext/filters/deadline/deadline_filter.h"
56
- #include "src/core/ext/service_config/service_config.h"
57
- #include "src/core/ext/service_config/service_config_call_data.h"
58
- #include "src/core/lib/backoff/backoff.h"
59
61
  #include "src/core/lib/channel/channel_args.h"
60
- #include "src/core/lib/channel/connected_channel.h"
61
- #include "src/core/lib/channel/status_util.h"
62
- #include "src/core/lib/gpr/string.h"
62
+ #include "src/core/lib/channel/channel_stack.h"
63
+ #include "src/core/lib/channel/channel_trace.h"
64
+ #include "src/core/lib/config/core_configuration.h"
65
+ #include "src/core/lib/debug/trace.h"
66
+ #include "src/core/lib/gpr/useful.h"
67
+ #include "src/core/lib/gprpp/debug_location.h"
63
68
  #include "src/core/lib/gprpp/sync.h"
64
- #include "src/core/lib/iomgr/iomgr.h"
69
+ #include "src/core/lib/gprpp/work_serializer.h"
70
+ #include "src/core/lib/iomgr/exec_ctx.h"
65
71
  #include "src/core/lib/iomgr/polling_entity.h"
66
- #include "src/core/lib/iomgr/work_serializer.h"
72
+ #include "src/core/lib/iomgr/pollset_set.h"
73
+ #include "src/core/lib/json/json.h"
74
+ #include "src/core/lib/load_balancing/lb_policy_registry.h"
75
+ #include "src/core/lib/load_balancing/subchannel_interface.h"
67
76
  #include "src/core/lib/profiling/timers.h"
77
+ #include "src/core/lib/resolver/resolver_registry.h"
78
+ #include "src/core/lib/resolver/server_address.h"
79
+ #include "src/core/lib/service_config/service_config_call_data.h"
80
+ #include "src/core/lib/service_config/service_config_impl.h"
68
81
  #include "src/core/lib/slice/slice_internal.h"
69
- #include "src/core/lib/slice/slice_string_helpers.h"
82
+ #include "src/core/lib/slice/slice_refcount.h"
70
83
  #include "src/core/lib/surface/channel.h"
71
84
  #include "src/core/lib/transport/connectivity_state.h"
72
85
  #include "src/core/lib/transport/error_utils.h"
73
- #include "src/core/lib/transport/metadata.h"
74
86
  #include "src/core/lib/transport/metadata_batch.h"
75
- #include "src/core/lib/transport/static_metadata.h"
76
- #include "src/core/lib/transport/status_metadata.h"
77
87
 
78
88
  //
79
89
  // Client channel filter
@@ -84,12 +94,11 @@
84
94
 
85
95
  namespace grpc_core {
86
96
 
87
- using internal::ClientChannelGlobalParsedConfig;
88
97
  using internal::ClientChannelMethodParsedConfig;
89
- using internal::ClientChannelServiceConfigParser;
90
98
 
99
+ TraceFlag grpc_client_channel_trace(false, "client_channel");
91
100
  TraceFlag grpc_client_channel_call_trace(false, "client_channel_call");
92
- TraceFlag grpc_client_channel_routing_trace(false, "client_channel_routing");
101
+ TraceFlag grpc_client_channel_lb_call_trace(false, "client_channel_lb_call");
93
102
 
94
103
  //
95
104
  // ClientChannel::CallData definition
@@ -178,8 +187,6 @@ class ClientChannel::CallData {
178
187
 
179
188
  static void RecvTrailingMetadataReadyForConfigSelectorCommitCallback(
180
189
  void* arg, grpc_error_handle error);
181
- void InjectRecvTrailingMetadataReadyForConfigSelectorCommitCallback(
182
- grpc_transport_stream_op_batch* batch);
183
190
 
184
191
  void CreateDynamicCall(grpc_call_element* elem);
185
192
 
@@ -193,7 +200,7 @@ class ClientChannel::CallData {
193
200
 
194
201
  grpc_slice path_; // Request path.
195
202
  gpr_cycle_counter call_start_time_;
196
- grpc_millis deadline_;
203
+ Timestamp deadline_;
197
204
  Arena* arena_;
198
205
  grpc_call_stack* owning_call_;
199
206
  CallCombiner* call_combiner_;
@@ -236,6 +243,7 @@ class ClientChannel::CallData {
236
243
 
237
244
  const grpc_channel_filter ClientChannel::kFilterVtable = {
238
245
  ClientChannel::CallData::StartTransportStreamOpBatch,
246
+ nullptr,
239
247
  ClientChannel::StartTransportOp,
240
248
  sizeof(ClientChannel::CallData),
241
249
  ClientChannel::CallData::Init,
@@ -243,6 +251,7 @@ const grpc_channel_filter ClientChannel::kFilterVtable = {
243
251
  ClientChannel::CallData::Destroy,
244
252
  sizeof(ClientChannel),
245
253
  ClientChannel::Init,
254
+ grpc_channel_stack_no_post_init,
246
255
  ClientChannel::Destroy,
247
256
  ClientChannel::GetChannelInfo,
248
257
  "client-channel",
@@ -254,28 +263,6 @@ const grpc_channel_filter ClientChannel::kFilterVtable = {
254
263
 
255
264
  namespace {
256
265
 
257
- // Channel arg pointer vtable for GRPC_ARG_CLIENT_CHANNEL.
258
- void* ClientChannelArgCopy(void* p) { return p; }
259
- void ClientChannelArgDestroy(void* /*p*/) {}
260
- int ClientChannelArgCmp(void* p, void* q) { return QsortCompare(p, q); }
261
- const grpc_arg_pointer_vtable kClientChannelArgPointerVtable = {
262
- ClientChannelArgCopy, ClientChannelArgDestroy, ClientChannelArgCmp};
263
-
264
- // Channel arg pointer vtable for GRPC_ARG_SERVICE_CONFIG_OBJ.
265
- void* ServiceConfigObjArgCopy(void* p) {
266
- auto* service_config = static_cast<ServiceConfig*>(p);
267
- service_config->Ref().release();
268
- return p;
269
- }
270
- void ServiceConfigObjArgDestroy(void* p) {
271
- auto* service_config = static_cast<ServiceConfig*>(p);
272
- service_config->Unref();
273
- }
274
- int ServiceConfigObjArgCmp(void* p, void* q) { return QsortCompare(p, q); }
275
- const grpc_arg_pointer_vtable kServiceConfigObjArgPointerVtable = {
276
- ServiceConfigObjArgCopy, ServiceConfigObjArgDestroy,
277
- ServiceConfigObjArgCmp};
278
-
279
266
  class DynamicTerminationFilter {
280
267
  public:
281
268
  class CallData;
@@ -356,7 +343,7 @@ class DynamicTerminationFilter::CallData {
356
343
  args, pollent, nullptr,
357
344
  service_config_call_data->call_dispatch_controller(),
358
345
  /*is_transparent_retry=*/false);
359
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
346
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
360
347
  gpr_log(GPR_INFO,
361
348
  "chand=%p dynamic_termination_calld=%p: create lb_call=%p", chand,
362
349
  client_channel, calld->lb_call_.get());
@@ -375,7 +362,7 @@ class DynamicTerminationFilter::CallData {
375
362
  ~CallData() { grpc_slice_unref_internal(path_); }
376
363
 
377
364
  grpc_slice path_; // Request path.
378
- grpc_millis deadline_;
365
+ Timestamp deadline_;
379
366
  Arena* arena_;
380
367
  grpc_call_stack* owning_call_;
381
368
  CallCombiner* call_combiner_;
@@ -386,6 +373,7 @@ class DynamicTerminationFilter::CallData {
386
373
 
387
374
  const grpc_channel_filter DynamicTerminationFilter::kFilterVtable = {
388
375
  DynamicTerminationFilter::CallData::StartTransportStreamOpBatch,
376
+ nullptr,
389
377
  DynamicTerminationFilter::StartTransportOp,
390
378
  sizeof(DynamicTerminationFilter::CallData),
391
379
  DynamicTerminationFilter::CallData::Init,
@@ -393,6 +381,7 @@ const grpc_channel_filter DynamicTerminationFilter::kFilterVtable = {
393
381
  DynamicTerminationFilter::CallData::Destroy,
394
382
  sizeof(DynamicTerminationFilter),
395
383
  DynamicTerminationFilter::Init,
384
+ grpc_channel_stack_no_post_init,
396
385
  DynamicTerminationFilter::Destroy,
397
386
  DynamicTerminationFilter::GetChannelInfo,
398
387
  "dynamic_filter_termination",
@@ -411,22 +400,17 @@ class ClientChannel::ResolverResultHandler : public Resolver::ResultHandler {
411
400
  }
412
401
 
413
402
  ~ResolverResultHandler() override {
414
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
403
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
415
404
  gpr_log(GPR_INFO, "chand=%p: resolver shutdown complete", chand_);
416
405
  }
417
406
  GRPC_CHANNEL_STACK_UNREF(chand_->owning_stack_, "ResolverResultHandler");
418
407
  }
419
408
 
420
- void ReturnResult(Resolver::Result result) override
421
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(chand_->work_serializer_) {
409
+ void ReportResult(Resolver::Result result) override
410
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
422
411
  chand_->OnResolverResultChangedLocked(std::move(result));
423
412
  }
424
413
 
425
- void ReturnError(grpc_error_handle error) override
426
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(chand_->work_serializer_) {
427
- chand_->OnResolverErrorLocked(error);
428
- }
429
-
430
414
  private:
431
415
  ClientChannel* chand_;
432
416
  };
@@ -447,14 +431,13 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
447
431
  public:
448
432
  SubchannelWrapper(ClientChannel* chand, RefCountedPtr<Subchannel> subchannel,
449
433
  absl::optional<std::string> health_check_service_name)
450
- : SubchannelInterface(
451
- GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)
452
- ? "SubchannelWrapper"
453
- : nullptr),
434
+ : SubchannelInterface(GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)
435
+ ? "SubchannelWrapper"
436
+ : nullptr),
454
437
  chand_(chand),
455
438
  subchannel_(std::move(subchannel)),
456
439
  health_check_service_name_(std::move(health_check_service_name)) {
457
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
440
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
458
441
  gpr_log(GPR_INFO,
459
442
  "chand=%p: creating subchannel wrapper %p for subchannel %p",
460
443
  chand, this, subchannel_.get());
@@ -476,7 +459,7 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
476
459
  }
477
460
 
478
461
  ~SubchannelWrapper() override {
479
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
462
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
480
463
  gpr_log(GPR_INFO,
481
464
  "chand=%p: destroying subchannel wrapper %p for subchannel %p",
482
465
  chand_, this, subchannel_.get());
@@ -498,27 +481,21 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
498
481
  GRPC_CHANNEL_STACK_UNREF(chand_->owning_stack_, "SubchannelWrapper");
499
482
  }
500
483
 
501
- grpc_connectivity_state CheckConnectivityState() override {
502
- return subchannel_->CheckConnectivityState(health_check_service_name_);
503
- }
504
-
505
484
  void WatchConnectivityState(
506
- grpc_connectivity_state initial_state,
507
485
  std::unique_ptr<ConnectivityStateWatcherInterface> watcher) override
508
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(chand_->work_serializer_) {
486
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
509
487
  auto& watcher_wrapper = watcher_map_[watcher.get()];
510
488
  GPR_ASSERT(watcher_wrapper == nullptr);
511
489
  watcher_wrapper = new WatcherWrapper(std::move(watcher),
512
- Ref(DEBUG_LOCATION, "WatcherWrapper"),
513
- initial_state);
490
+ Ref(DEBUG_LOCATION, "WatcherWrapper"));
514
491
  subchannel_->WatchConnectivityState(
515
- initial_state, health_check_service_name_,
492
+ health_check_service_name_,
516
493
  RefCountedPtr<Subchannel::ConnectivityStateWatcherInterface>(
517
494
  watcher_wrapper));
518
495
  }
519
496
 
520
497
  void CancelConnectivityStateWatch(ConnectivityStateWatcherInterface* watcher)
521
- override ABSL_EXCLUSIVE_LOCKS_REQUIRED(chand_->work_serializer_) {
498
+ override ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
522
499
  auto it = watcher_map_.find(watcher);
523
500
  GPR_ASSERT(it != watcher_map_.end());
524
501
  subchannel_->CancelConnectivityStateWatch(health_check_service_name_,
@@ -530,14 +507,21 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
530
507
  return subchannel_->connected_subchannel();
531
508
  }
532
509
 
533
- void AttemptToConnect() override { subchannel_->AttemptToConnect(); }
510
+ void RequestConnection() override { subchannel_->RequestConnection(); }
534
511
 
535
512
  void ResetBackoff() override { subchannel_->ResetBackoff(); }
536
513
 
537
- const grpc_channel_args* channel_args() override {
538
- return subchannel_->channel_args();
514
+ void AddDataWatcher(std::unique_ptr<DataWatcherInterface> watcher) override
515
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
516
+ std::unique_ptr<InternalSubchannelDataWatcherInterface> internal_watcher(
517
+ static_cast<InternalSubchannelDataWatcherInterface*>(
518
+ watcher.release()));
519
+ internal_watcher->SetSubchannel(subchannel_.get());
520
+ data_watchers_.push_back(std::move(internal_watcher));
539
521
  }
540
522
 
523
+ ChannelArgs channel_args() override { return subchannel_->channel_args(); }
524
+
541
525
  void ThrottleKeepaliveTime(int new_keepalive_time) {
542
526
  subchannel_->ThrottleKeepaliveTime(new_keepalive_time);
543
527
  }
@@ -562,24 +546,21 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
562
546
  WatcherWrapper(
563
547
  std::unique_ptr<SubchannelInterface::ConnectivityStateWatcherInterface>
564
548
  watcher,
565
- RefCountedPtr<SubchannelWrapper> parent,
566
- grpc_connectivity_state initial_state)
567
- : watcher_(std::move(watcher)),
568
- parent_(std::move(parent)),
569
- last_seen_state_(initial_state) {}
549
+ RefCountedPtr<SubchannelWrapper> parent)
550
+ : watcher_(std::move(watcher)), parent_(std::move(parent)) {}
570
551
 
571
552
  ~WatcherWrapper() override {
572
553
  auto* parent = parent_.release(); // ref owned by lambda
573
554
  parent->chand_->work_serializer_->Run(
574
- [parent]()
575
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(parent_->chand_->work_serializer_) {
576
- parent->Unref(DEBUG_LOCATION, "WatcherWrapper");
577
- },
555
+ [parent]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(
556
+ *parent_->chand_->work_serializer_) {
557
+ parent->Unref(DEBUG_LOCATION, "WatcherWrapper");
558
+ },
578
559
  DEBUG_LOCATION);
579
560
  }
580
561
 
581
562
  void OnConnectivityStateChange() override {
582
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
563
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
583
564
  gpr_log(GPR_INFO,
584
565
  "chand=%p: connectivity change for subchannel wrapper %p "
585
566
  "subchannel %p; hopping into work_serializer",
@@ -587,11 +568,11 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
587
568
  }
588
569
  Ref().release(); // ref owned by lambda
589
570
  parent_->chand_->work_serializer_->Run(
590
- [this]()
591
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(parent_->chand_->work_serializer_) {
592
- ApplyUpdateInControlPlaneWorkSerializer();
593
- Unref();
594
- },
571
+ [this]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(
572
+ *parent_->chand_->work_serializer_) {
573
+ ApplyUpdateInControlPlaneWorkSerializer();
574
+ Unref();
575
+ },
595
576
  DEBUG_LOCATION);
596
577
  }
597
578
 
@@ -603,18 +584,15 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
603
584
  }
604
585
 
605
586
  WatcherWrapper* MakeReplacement() {
606
- auto* replacement =
607
- new WatcherWrapper(std::move(watcher_), parent_, last_seen_state_);
587
+ auto* replacement = new WatcherWrapper(std::move(watcher_), parent_);
608
588
  replacement_ = replacement;
609
589
  return replacement;
610
590
  }
611
591
 
612
- grpc_connectivity_state last_seen_state() const { return last_seen_state_; }
613
-
614
592
  private:
615
593
  void ApplyUpdateInControlPlaneWorkSerializer()
616
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(parent_->chand_->work_serializer_) {
617
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
594
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(*parent_->chand_->work_serializer_) {
595
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
618
596
  gpr_log(GPR_INFO,
619
597
  "chand=%p: processing connectivity change in work serializer "
620
598
  "for subchannel wrapper %p subchannel %p "
@@ -631,7 +609,7 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
631
609
  &new_keepalive_time)) {
632
610
  if (new_keepalive_time > parent_->chand_->keepalive_time_) {
633
611
  parent_->chand_->keepalive_time_ = new_keepalive_time;
634
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
612
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
635
613
  gpr_log(GPR_INFO, "chand=%p: throttling keepalive time to %d",
636
614
  parent_->chand_, parent_->chand_->keepalive_time_);
637
615
  }
@@ -652,15 +630,21 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
652
630
  // Ignore update if the parent WatcherWrapper has been replaced
653
631
  // since this callback was scheduled.
654
632
  if (watcher_ != nullptr) {
655
- last_seen_state_ = state_change.state;
656
- watcher_->OnConnectivityStateChange(state_change.state);
633
+ // Propagate status only in state TF.
634
+ // We specifically want to avoid propagating the status for
635
+ // state IDLE that the real subchannel gave us only for the
636
+ // purpose of keepalive propagation.
637
+ if (state_change.state != GRPC_CHANNEL_TRANSIENT_FAILURE) {
638
+ state_change.status = absl::OkStatus();
639
+ }
640
+ watcher_->OnConnectivityStateChange(state_change.state,
641
+ state_change.status);
657
642
  }
658
643
  }
659
644
 
660
645
  std::unique_ptr<SubchannelInterface::ConnectivityStateWatcherInterface>
661
646
  watcher_;
662
647
  RefCountedPtr<SubchannelWrapper> parent_;
663
- grpc_connectivity_state last_seen_state_;
664
648
  WatcherWrapper* replacement_ = nullptr;
665
649
  };
666
650
 
@@ -673,7 +657,9 @@ class ClientChannel::SubchannelWrapper : public SubchannelInterface {
673
657
  // CancelConnectivityStateWatch() with its watcher, we know the
674
658
  // corresponding WrapperWatcher to cancel on the underlying subchannel.
675
659
  std::map<ConnectivityStateWatcherInterface*, WatcherWrapper*> watcher_map_
676
- ABSL_GUARDED_BY(&ClientChannel::work_serializer_);
660
+ ABSL_GUARDED_BY(*chand_->work_serializer_);
661
+ std::vector<std::unique_ptr<InternalSubchannelDataWatcherInterface>>
662
+ data_watchers_ ABSL_GUARDED_BY(*chand_->work_serializer_);
677
663
  };
678
664
 
679
665
  //
@@ -703,7 +689,7 @@ ClientChannel::ExternalConnectivityWatcher::ExternalConnectivityWatcher(
703
689
  }
704
690
  // Pass the ref from creating the object to Start().
705
691
  chand_->work_serializer_->Run(
706
- [this]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(chand_->work_serializer_) {
692
+ [this]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
707
693
  // The ref is passed to AddWatcherLocked().
708
694
  AddWatcherLocked();
709
695
  },
@@ -751,10 +737,14 @@ void ClientChannel::ExternalConnectivityWatcher::Notify(
751
737
  // Hop back into the work_serializer to clean up.
752
738
  // Not needed in state SHUTDOWN, because the tracker will
753
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.
754
742
  if (state != GRPC_CHANNEL_SHUTDOWN) {
743
+ Ref(DEBUG_LOCATION, "RemoveWatcherLocked()").release();
755
744
  chand_->work_serializer_->Run(
756
- [this]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(chand_->work_serializer_) {
745
+ [this]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
757
746
  RemoveWatcherLocked();
747
+ Unref(DEBUG_LOCATION, "RemoveWatcherLocked()");
758
748
  },
759
749
  DEBUG_LOCATION);
760
750
  }
@@ -768,9 +758,13 @@ void ClientChannel::ExternalConnectivityWatcher::Cancel() {
768
758
  }
769
759
  ExecCtx::Run(DEBUG_LOCATION, on_complete_, GRPC_ERROR_CANCELLED);
770
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();
771
764
  chand_->work_serializer_->Run(
772
- [this]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(chand_->work_serializer_) {
765
+ [this]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
773
766
  RemoveWatcherLocked();
767
+ Unref(DEBUG_LOCATION, "RemoveWatcherLocked()");
774
768
  },
775
769
  DEBUG_LOCATION);
776
770
  }
@@ -800,7 +794,7 @@ class ClientChannel::ConnectivityWatcherAdder {
800
794
  watcher_(std::move(watcher)) {
801
795
  GRPC_CHANNEL_STACK_REF(chand_->owning_stack_, "ConnectivityWatcherAdder");
802
796
  chand_->work_serializer_->Run(
803
- [this]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(chand_->work_serializer_) {
797
+ [this]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
804
798
  AddWatcherLocked();
805
799
  },
806
800
  DEBUG_LOCATION);
@@ -808,7 +802,7 @@ class ClientChannel::ConnectivityWatcherAdder {
808
802
 
809
803
  private:
810
804
  void AddWatcherLocked()
811
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(chand_->work_serializer_) {
805
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
812
806
  chand_->state_tracker_.AddWatcher(initial_state_, std::move(watcher_));
813
807
  GRPC_CHANNEL_STACK_UNREF(chand_->owning_stack_, "ConnectivityWatcherAdder");
814
808
  delete this;
@@ -830,7 +824,7 @@ class ClientChannel::ConnectivityWatcherRemover {
830
824
  : chand_(chand), watcher_(watcher) {
831
825
  GRPC_CHANNEL_STACK_REF(chand_->owning_stack_, "ConnectivityWatcherRemover");
832
826
  chand_->work_serializer_->Run(
833
- [this]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(chand_->work_serializer_) {
827
+ [this]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
834
828
  RemoveWatcherLocked();
835
829
  },
836
830
  DEBUG_LOCATION);
@@ -838,7 +832,7 @@ class ClientChannel::ConnectivityWatcherRemover {
838
832
 
839
833
  private:
840
834
  void RemoveWatcherLocked()
841
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(chand_->work_serializer_) {
835
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
842
836
  chand_->state_tracker_.RemoveWatcher(watcher_);
843
837
  GRPC_CHANNEL_STACK_UNREF(chand_->owning_stack_,
844
838
  "ConnectivityWatcherRemover");
@@ -866,67 +860,23 @@ class ClientChannel::ClientChannelControlHelper
866
860
  }
867
861
 
868
862
  RefCountedPtr<SubchannelInterface> CreateSubchannel(
869
- ServerAddress address, const grpc_channel_args& args) override
870
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(chand_->work_serializer_) {
863
+ ServerAddress address, const ChannelArgs& args) override
864
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
871
865
  if (chand_->resolver_ == nullptr) return nullptr; // Shutting down.
872
866
  // Determine health check service name.
873
867
  absl::optional<std::string> health_check_service_name;
874
- const char* health_check_service_name_arg = grpc_channel_args_find_string(
875
- &args, GRPC_ARG_HEALTH_CHECK_SERVICE_NAME);
876
- if (health_check_service_name_arg != nullptr) {
877
- bool inhibit_health_checking = grpc_channel_args_find_bool(
878
- &args, GRPC_ARG_INHIBIT_HEALTH_CHECKING, false);
879
- if (!inhibit_health_checking) {
880
- health_check_service_name = health_check_service_name_arg;
881
- }
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);
882
871
  }
883
872
  // Construct channel args for subchannel.
884
- // Remove channel args that should not affect subchannel uniqueness.
885
- absl::InlinedVector<const char*, 4> args_to_remove = {
886
- GRPC_ARG_HEALTH_CHECK_SERVICE_NAME,
887
- GRPC_ARG_INHIBIT_HEALTH_CHECKING,
888
- GRPC_ARG_CHANNELZ_CHANNEL_NODE,
889
- };
890
- // Add channel args needed for the subchannel.
891
- absl::InlinedVector<grpc_arg, 2> args_to_add = {
892
- SubchannelPoolInterface::CreateChannelArg(
893
- chand_->subchannel_pool_.get()),
894
- };
895
- // Check if default authority arg is already set.
896
- const char* default_authority =
897
- grpc_channel_args_find_string(&args, GRPC_ARG_DEFAULT_AUTHORITY);
898
- // Add args from subchannel address.
899
- if (address.args() != nullptr) {
900
- for (size_t j = 0; j < address.args()->num_args; ++j) {
901
- grpc_arg& arg = address.args()->args[j];
902
- if (strcmp(arg.key, GRPC_ARG_DEFAULT_AUTHORITY) == 0) {
903
- // Don't add default authority arg from subchannel address if
904
- // it's already set at the channel level -- the value from the
905
- // application should take precedence over what is set by the
906
- // resolver.
907
- if (default_authority != nullptr) continue;
908
- default_authority = arg.value.string;
909
- }
910
- args_to_add.emplace_back(arg);
911
- }
912
- }
913
- // If we haven't already set the default authority arg, add it from
914
- // the channel.
915
- if (default_authority == nullptr) {
916
- // Remove it, just in case it's actually present but is the wrong type.
917
- args_to_remove.push_back(GRPC_ARG_DEFAULT_AUTHORITY);
918
- args_to_add.push_back(grpc_channel_arg_string_create(
919
- const_cast<char*>(GRPC_ARG_DEFAULT_AUTHORITY),
920
- const_cast<char*>(chand_->default_authority_.c_str())));
921
- }
922
- grpc_channel_args* new_args = grpc_channel_args_copy_and_add_and_remove(
923
- &args, args_to_remove.data(), args_to_remove.size(), args_to_add.data(),
924
- args_to_add.size());
873
+ ChannelArgs subchannel_args = ClientChannel::MakeSubchannelArgs(
874
+ args, address.args(), chand_->subchannel_pool_,
875
+ chand_->default_authority_);
925
876
  // Create subchannel.
926
877
  RefCountedPtr<Subchannel> subchannel =
927
878
  chand_->client_channel_factory_->CreateSubchannel(address.address(),
928
- new_args);
929
- grpc_channel_args_destroy(new_args);
879
+ subchannel_args);
930
880
  if (subchannel == nullptr) return nullptr;
931
881
  // Make sure the subchannel has updated keepalive time.
932
882
  subchannel->ThrottleKeepaliveTime(chand_->keepalive_time_);
@@ -938,10 +888,10 @@ class ClientChannel::ClientChannelControlHelper
938
888
  void UpdateState(
939
889
  grpc_connectivity_state state, const absl::Status& status,
940
890
  std::unique_ptr<LoadBalancingPolicy::SubchannelPicker> picker) override
941
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(chand_->work_serializer_) {
891
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
942
892
  if (chand_->resolver_ == nullptr) return; // Shutting down.
943
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
944
- const char* extra = chand_->disconnect_error_ == GRPC_ERROR_NONE
893
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
894
+ const char* extra = GRPC_ERROR_IS_NONE(chand_->disconnect_error_)
945
895
  ? ""
946
896
  : " (ignoring -- channel shutting down)";
947
897
  gpr_log(GPR_INFO, "chand=%p: update: state=%s status=(%s) picker=%p%s",
@@ -949,16 +899,16 @@ class ClientChannel::ClientChannelControlHelper
949
899
  picker.get(), extra);
950
900
  }
951
901
  // Do update only if not shutting down.
952
- if (chand_->disconnect_error_ == GRPC_ERROR_NONE) {
902
+ if (GRPC_ERROR_IS_NONE(chand_->disconnect_error_)) {
953
903
  chand_->UpdateStateAndPickerLocked(state, status, "helper",
954
904
  std::move(picker));
955
905
  }
956
906
  }
957
907
 
958
908
  void RequestReresolution() override
959
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(chand_->work_serializer_) {
909
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
960
910
  if (chand_->resolver_ == nullptr) return; // Shutting down.
961
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
911
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
962
912
  gpr_log(GPR_INFO, "chand=%p: started name re-resolving", chand_);
963
913
  }
964
914
  chand_->resolver_->RequestReresolutionLocked();
@@ -969,7 +919,7 @@ class ClientChannel::ClientChannelControlHelper
969
919
  }
970
920
 
971
921
  void AddTraceEvent(TraceSeverity severity, absl::string_view message) override
972
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(chand_->work_serializer_) {
922
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
973
923
  if (chand_->resolver_ == nullptr) return; // Shutting down.
974
924
  if (chand_->channelz_node_ != nullptr) {
975
925
  chand_->channelz_node_->AddTraceEvent(
@@ -993,9 +943,9 @@ class ClientChannel::ClientChannelControlHelper
993
943
  // ClientChannel implementation
994
944
  //
995
945
 
996
- ClientChannel* ClientChannel::GetFromChannel(grpc_channel* channel) {
946
+ ClientChannel* ClientChannel::GetFromChannel(Channel* channel) {
997
947
  grpc_channel_element* elem =
998
- grpc_channel_stack_last_element(grpc_channel_get_channel_stack(channel));
948
+ grpc_channel_stack_last_element(channel->channel_stack());
999
949
  if (elem->filter != &kFilterVtable) return nullptr;
1000
950
  return static_cast<ClientChannel*>(elem->channel_data);
1001
951
  }
@@ -1017,35 +967,29 @@ void ClientChannel::Destroy(grpc_channel_element* elem) {
1017
967
  namespace {
1018
968
 
1019
969
  RefCountedPtr<SubchannelPoolInterface> GetSubchannelPool(
1020
- const grpc_channel_args* args) {
1021
- const bool use_local_subchannel_pool = grpc_channel_args_find_bool(
1022
- args, GRPC_ARG_USE_LOCAL_SUBCHANNEL_POOL, false);
1023
- if (use_local_subchannel_pool) {
970
+ const ChannelArgs& args) {
971
+ if (args.GetBool(GRPC_ARG_USE_LOCAL_SUBCHANNEL_POOL).value_or(false)) {
1024
972
  return MakeRefCounted<LocalSubchannelPool>();
1025
973
  }
1026
974
  return GlobalSubchannelPool::instance();
1027
975
  }
1028
976
 
1029
- channelz::ChannelNode* GetChannelzNode(const grpc_channel_args* args) {
1030
- return grpc_channel_args_find_pointer<channelz::ChannelNode>(
1031
- args, GRPC_ARG_CHANNELZ_CHANNEL_NODE);
1032
- }
1033
-
1034
977
  } // namespace
1035
978
 
1036
979
  ClientChannel::ClientChannel(grpc_channel_element_args* args,
1037
980
  grpc_error_handle* error)
1038
- : deadline_checking_enabled_(
1039
- 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_)),
1040
983
  owning_stack_(args->channel_stack),
1041
- client_channel_factory_(
1042
- ClientChannelFactory::GetFromChannelArgs(args->channel_args)),
1043
- channelz_node_(GetChannelzNode(args->channel_args)),
984
+ client_channel_factory_(channel_args_.GetObject<ClientChannelFactory>()),
985
+ channelz_node_(channel_args_.GetObject<channelz::ChannelNode>()),
1044
986
  interested_parties_(grpc_pollset_set_create()),
987
+ service_config_parser_index_(
988
+ internal::ClientChannelServiceConfigParser::ParserIndex()),
1045
989
  work_serializer_(std::make_shared<WorkSerializer>()),
1046
990
  state_tracker_("client_channel", GRPC_CHANNEL_IDLE),
1047
- subchannel_pool_(GetSubchannelPool(args->channel_args)) {
1048
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
991
+ subchannel_pool_(GetSubchannelPool(channel_args_)) {
992
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1049
993
  gpr_log(GPR_INFO, "chand=%p: creating client_channel for channel stack %p",
1050
994
  this, owning_stack_);
1051
995
  }
@@ -1059,70 +1003,65 @@ ClientChannel::ClientChannel(grpc_channel_element_args* args,
1059
1003
  }
1060
1004
  // Get default service config. If none is specified via the client API,
1061
1005
  // we use an empty config.
1062
- const char* service_config_json = grpc_channel_args_find_string(
1063
- args->channel_args, GRPC_ARG_SERVICE_CONFIG);
1064
- 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 = "{}";
1065
1009
  *error = GRPC_ERROR_NONE;
1066
- default_service_config_ =
1067
- ServiceConfig::Create(args->channel_args, service_config_json, error);
1068
- if (*error != GRPC_ERROR_NONE) {
1069
- 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());
1070
1014
  return;
1071
1015
  }
1016
+ default_service_config_ = std::move(*service_config);
1072
1017
  // Get URI to resolve, using proxy mapper if needed.
1073
- const char* server_uri =
1074
- grpc_channel_args_find_string(args->channel_args, GRPC_ARG_SERVER_URI);
1075
- 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()) {
1076
1021
  *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1077
1022
  "target URI channel arg missing or wrong type in client channel "
1078
1023
  "filter");
1079
1024
  return;
1080
1025
  }
1081
- uri_to_resolve_ = server_uri;
1082
- char* proxy_name = nullptr;
1083
- grpc_channel_args* new_args = nullptr;
1084
- ProxyMapperRegistry::MapName(server_uri, args->channel_args, &proxy_name,
1085
- &new_args);
1086
- if (proxy_name != nullptr) {
1087
- uri_to_resolve_ = proxy_name;
1088
- gpr_free(proxy_name);
1089
- }
1026
+ uri_to_resolve_ = ProxyMapperRegistry::MapName(*server_uri, &channel_args_)
1027
+ .value_or(*server_uri);
1090
1028
  // Make sure the URI to resolve is valid, so that we know that
1091
1029
  // resolver creation will succeed later.
1092
- if (!ResolverRegistry::IsValidTarget(uri_to_resolve_)) {
1030
+ if (!CoreConfiguration::Get().resolver_registry().IsValidTarget(
1031
+ uri_to_resolve_)) {
1093
1032
  *error = GRPC_ERROR_CREATE_FROM_CPP_STRING(
1094
- absl::StrCat("the target uri is not valid: ", uri_to_resolve_.c_str()));
1033
+ absl::StrCat("the target uri is not valid: ", uri_to_resolve_));
1095
1034
  return;
1096
1035
  }
1097
1036
  // Strip out service config channel arg, so that it doesn't affect
1098
1037
  // subchannel uniqueness when the args flow down to that layer.
1099
- const char* arg_to_remove = GRPC_ARG_SERVICE_CONFIG;
1100
- channel_args_ = grpc_channel_args_copy_and_remove(
1101
- new_args != nullptr ? new_args : args->channel_args, &arg_to_remove, 1);
1102
- grpc_channel_args_destroy(new_args);
1038
+ channel_args_ = channel_args_.Remove(GRPC_ARG_SERVICE_CONFIG);
1103
1039
  // Set initial keepalive time.
1104
- keepalive_time_ = grpc_channel_args_find_integer(
1105
- channel_args_, GRPC_ARG_KEEPALIVE_TIME_MS,
1106
- {-1 /* default value, unset */, 1, INT_MAX});
1040
+ auto keepalive_arg = channel_args_.GetInt(GRPC_ARG_KEEPALIVE_TIME_MS);
1041
+ if (keepalive_arg.has_value()) {
1042
+ keepalive_time_ = Clamp(*keepalive_arg, 1, INT_MAX);
1043
+ } else {
1044
+ keepalive_time_ = -1; // unset
1045
+ }
1107
1046
  // Set default authority.
1108
- const char* default_authority =
1109
- grpc_channel_args_find_string(channel_args_, GRPC_ARG_DEFAULT_AUTHORITY);
1110
- if (default_authority == nullptr) {
1111
- default_authority_ = ResolverRegistry::GetDefaultAuthority(server_uri);
1047
+ absl::optional<std::string> default_authority =
1048
+ channel_args_.GetOwnedString(GRPC_ARG_DEFAULT_AUTHORITY);
1049
+ if (!default_authority.has_value()) {
1050
+ default_authority_ =
1051
+ CoreConfiguration::Get().resolver_registry().GetDefaultAuthority(
1052
+ *server_uri);
1112
1053
  } else {
1113
- default_authority_ = default_authority;
1054
+ default_authority_ = std::move(*default_authority);
1114
1055
  }
1115
1056
  // Success.
1116
1057
  *error = GRPC_ERROR_NONE;
1117
1058
  }
1118
1059
 
1119
1060
  ClientChannel::~ClientChannel() {
1120
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1061
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1121
1062
  gpr_log(GPR_INFO, "chand=%p: destroying channel", this);
1122
1063
  }
1123
1064
  DestroyResolverAndLbPolicyLocked();
1124
- grpc_channel_args_destroy(channel_args_);
1125
- GRPC_ERROR_UNREF(resolver_transient_failure_error_);
1126
1065
  // Stop backup polling.
1127
1066
  grpc_client_channel_stop_backup_polling(interested_parties_);
1128
1067
  grpc_pollset_set_destroy(interested_parties_);
@@ -1140,6 +1079,29 @@ ClientChannel::CreateLoadBalancedCall(
1140
1079
  call_dispatch_controller, is_transparent_retry));
1141
1080
  }
1142
1081
 
1082
+ ChannelArgs ClientChannel::MakeSubchannelArgs(
1083
+ const ChannelArgs& channel_args, const ChannelArgs& address_args,
1084
+ const RefCountedPtr<SubchannelPoolInterface>& subchannel_pool,
1085
+ const std::string& channel_default_authority) {
1086
+ // Note that we start with the channel-level args and then apply the
1087
+ // per-address args, so that if a value is present in both, the one
1088
+ // in the channel-level args is used. This is particularly important
1089
+ // for the GRPC_ARG_DEFAULT_AUTHORITY arg, which we want to allow
1090
+ // resolvers to set on a per-address basis only if the application
1091
+ // did not explicitly set it at the channel level.
1092
+ return channel_args.UnionWith(address_args)
1093
+ .SetObject(subchannel_pool)
1094
+ // If we haven't already set the default authority arg (i.e., it
1095
+ // was not explicitly set by the application nor overridden by
1096
+ // the resolver), add it from the channel's default.
1097
+ .SetIfUnset(GRPC_ARG_DEFAULT_AUTHORITY, channel_default_authority)
1098
+ // Remove channel args that should not affect subchannel
1099
+ // uniqueness.
1100
+ .Remove(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME)
1101
+ .Remove(GRPC_ARG_INHIBIT_HEALTH_CHECKING)
1102
+ .Remove(GRPC_ARG_CHANNELZ_CHANNEL_NODE);
1103
+ }
1104
+
1143
1105
  namespace {
1144
1106
 
1145
1107
  RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
@@ -1151,38 +1113,50 @@ RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
1151
1113
  }
1152
1114
  // Try the deprecated LB policy name from the service config.
1153
1115
  // If not, try the setting from channel args.
1154
- const char* policy_name = nullptr;
1116
+ absl::optional<absl::string_view> policy_name;
1155
1117
  if (!parsed_service_config->parsed_deprecated_lb_policy().empty()) {
1156
- policy_name = parsed_service_config->parsed_deprecated_lb_policy().c_str();
1118
+ policy_name = parsed_service_config->parsed_deprecated_lb_policy();
1157
1119
  } else {
1158
- policy_name = grpc_channel_args_find_string(resolver_result.args,
1159
- GRPC_ARG_LB_POLICY_NAME);
1120
+ policy_name = resolver_result.args.GetString(GRPC_ARG_LB_POLICY_NAME);
1121
+ bool requires_config = false;
1122
+ if (policy_name.has_value() &&
1123
+ (!LoadBalancingPolicyRegistry::LoadBalancingPolicyExists(
1124
+ *policy_name, &requires_config) ||
1125
+ requires_config)) {
1126
+ if (requires_config) {
1127
+ gpr_log(GPR_ERROR,
1128
+ "LB policy: %s passed through channel_args must not "
1129
+ "require a config. Using pick_first instead.",
1130
+ std::string(*policy_name).c_str());
1131
+ } else {
1132
+ gpr_log(GPR_ERROR,
1133
+ "LB policy: %s passed through channel_args does not exist. "
1134
+ "Using pick_first instead.",
1135
+ std::string(*policy_name).c_str());
1136
+ }
1137
+ policy_name = "pick_first";
1138
+ }
1160
1139
  }
1161
1140
  // Use pick_first if nothing was specified and we didn't select grpclb
1162
1141
  // above.
1163
- if (policy_name == nullptr) policy_name = "pick_first";
1142
+ if (!policy_name.has_value()) policy_name = "pick_first";
1164
1143
  // Now that we have the policy name, construct an empty config for it.
1165
1144
  Json config_json = Json::Array{Json::Object{
1166
- {policy_name, Json::Object{}},
1145
+ {std::string(*policy_name), Json::Object{}},
1167
1146
  }};
1168
- grpc_error_handle parse_error = GRPC_ERROR_NONE;
1169
- auto lb_policy_config = LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
1170
- config_json, &parse_error);
1147
+ auto lb_policy_config =
1148
+ LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(config_json);
1171
1149
  // The policy name came from one of three places:
1172
1150
  // - The deprecated loadBalancingPolicy field in the service config,
1173
1151
  // in which case the code in ClientChannelServiceConfigParser
1174
1152
  // already verified that the policy does not require a config.
1175
1153
  // - One of the hard-coded values here, all of which are known to not
1176
1154
  // require a config.
1177
- // - A channel arg, in which case the application did something that
1178
- // is a misuse of our API.
1179
- // In the first two cases, these assertions will always be true. In
1180
- // the last case, this is probably fine for now.
1181
- // TODO(roth): If the last case becomes a problem, add better error
1182
- // handling here.
1183
- GPR_ASSERT(lb_policy_config != nullptr);
1184
- GPR_ASSERT(parse_error == GRPC_ERROR_NONE);
1185
- return lb_policy_config;
1155
+ // - A channel arg, in which case we check that the specified policy exists
1156
+ // and accepts an empty config. If not, we revert to using pick_first
1157
+ // lb_policy
1158
+ GPR_ASSERT(lb_policy_config.ok());
1159
+ return std::move(*lb_policy_config);
1186
1160
  }
1187
1161
 
1188
1162
  } // namespace
@@ -1190,7 +1164,7 @@ RefCountedPtr<LoadBalancingPolicy::Config> ChooseLbPolicy(
1190
1164
  void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1191
1165
  // Handle race conditions.
1192
1166
  if (resolver_ == nullptr) return;
1193
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1167
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1194
1168
  gpr_log(GPR_INFO, "chand=%p: got resolver result", this);
1195
1169
  }
1196
1170
  // We only want to trace the address resolution in the follow cases:
@@ -1202,32 +1176,35 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1202
1176
  // (d) Address resolution that causes a new LB policy to be created.
1203
1177
  //
1204
1178
  // We track a list of strings to eventually be concatenated and traced.
1205
- absl::InlinedVector<const char*, 3> trace_strings;
1206
- if (result.addresses.empty() && previous_resolution_contained_addresses_) {
1179
+ std::vector<const char*> trace_strings;
1180
+ const bool resolution_contains_addresses =
1181
+ result.addresses.ok() && !result.addresses->empty();
1182
+ if (!resolution_contains_addresses &&
1183
+ previous_resolution_contained_addresses_) {
1207
1184
  trace_strings.push_back("Address list became empty");
1208
- } else if (!result.addresses.empty() &&
1185
+ } else if (resolution_contains_addresses &&
1209
1186
  !previous_resolution_contained_addresses_) {
1210
1187
  trace_strings.push_back("Address list became non-empty");
1211
1188
  }
1212
- previous_resolution_contained_addresses_ = !result.addresses.empty();
1189
+ previous_resolution_contained_addresses_ = resolution_contains_addresses;
1213
1190
  std::string service_config_error_string_storage;
1214
- if (result.service_config_error != GRPC_ERROR_NONE) {
1191
+ if (!result.service_config.ok()) {
1215
1192
  service_config_error_string_storage =
1216
- grpc_error_std_string(result.service_config_error);
1193
+ result.service_config.status().ToString();
1217
1194
  trace_strings.push_back(service_config_error_string_storage.c_str());
1218
1195
  }
1219
1196
  // Choose the service config.
1220
1197
  RefCountedPtr<ServiceConfig> service_config;
1221
1198
  RefCountedPtr<ConfigSelector> config_selector;
1222
- if (result.service_config_error != GRPC_ERROR_NONE) {
1223
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1199
+ if (!result.service_config.ok()) {
1200
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1224
1201
  gpr_log(GPR_INFO, "chand=%p: resolver returned service config error: %s",
1225
- this, grpc_error_std_string(result.service_config_error).c_str());
1202
+ this, result.service_config.status().ToString().c_str());
1226
1203
  }
1227
1204
  // If the service config was invalid, then fallback to the
1228
1205
  // previously returned service config.
1229
1206
  if (saved_service_config_ != nullptr) {
1230
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1207
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1231
1208
  gpr_log(GPR_INFO,
1232
1209
  "chand=%p: resolver returned invalid service config. "
1233
1210
  "Continuing to use previous service config.",
@@ -1236,15 +1213,15 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1236
1213
  service_config = saved_service_config_;
1237
1214
  config_selector = saved_config_selector_;
1238
1215
  } else {
1239
- // We received an invalid service config and we don't have a
1216
+ // We received a service config error and we don't have a
1240
1217
  // previous service config to fall back to. Put the channel into
1241
1218
  // TRANSIENT_FAILURE.
1242
- OnResolverErrorLocked(GRPC_ERROR_REF(result.service_config_error));
1219
+ OnResolverErrorLocked(result.service_config.status());
1243
1220
  trace_strings.push_back("no valid service config");
1244
1221
  }
1245
- } else if (result.service_config == nullptr) {
1222
+ } else if (*result.service_config == nullptr) {
1246
1223
  // Resolver did not return any service config.
1247
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1224
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1248
1225
  gpr_log(GPR_INFO,
1249
1226
  "chand=%p: resolver returned no service config. Using default "
1250
1227
  "service config for channel.",
@@ -1253,15 +1230,18 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1253
1230
  service_config = default_service_config_;
1254
1231
  } else {
1255
1232
  // Use ServiceConfig and ConfigSelector returned by resolver.
1256
- service_config = result.service_config;
1257
- config_selector = ConfigSelector::GetFromChannelArgs(*result.args);
1233
+ service_config = std::move(*result.service_config);
1234
+ config_selector = result.args.GetObjectRef<ConfigSelector>();
1258
1235
  }
1236
+ // Note: The only case in which service_config is null here is if the resolver
1237
+ // returned a service config error and we don't have a previous service
1238
+ // config to fall back to.
1259
1239
  if (service_config != nullptr) {
1260
1240
  // Extract global config for client channel.
1261
1241
  const internal::ClientChannelGlobalParsedConfig* parsed_service_config =
1262
1242
  static_cast<const internal::ClientChannelGlobalParsedConfig*>(
1263
1243
  service_config->GetGlobalParsedConfig(
1264
- internal::ClientChannelServiceConfigParser::ParserIndex()));
1244
+ service_config_parser_index_));
1265
1245
  // Choose LB policy config.
1266
1246
  RefCountedPtr<LoadBalancingPolicy::Config> lb_policy_config =
1267
1247
  ChooseLbPolicy(result, parsed_service_config);
@@ -1275,10 +1255,10 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1275
1255
  // If either has changed, apply the global parameters now.
1276
1256
  if (service_config_changed || config_selector_changed) {
1277
1257
  // Update service config in control plane.
1278
- UpdateServiceConfigInControlPlaneLocked(std::move(service_config),
1279
- std::move(config_selector),
1280
- lb_policy_config->name());
1281
- } else if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1258
+ UpdateServiceConfigInControlPlaneLocked(
1259
+ std::move(service_config), std::move(config_selector),
1260
+ std::string(lb_policy_config->name()));
1261
+ } else if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1282
1262
  gpr_log(GPR_INFO, "chand=%p: service config not changed", this);
1283
1263
  }
1284
1264
  // Create or update LB policy, as needed.
@@ -1307,28 +1287,21 @@ void ClientChannel::OnResolverResultChangedLocked(Resolver::Result result) {
1307
1287
  }
1308
1288
  }
1309
1289
 
1310
- void ClientChannel::OnResolverErrorLocked(grpc_error_handle error) {
1311
- if (resolver_ == nullptr) {
1312
- GRPC_ERROR_UNREF(error);
1313
- return;
1314
- }
1315
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1290
+ void ClientChannel::OnResolverErrorLocked(absl::Status status) {
1291
+ if (resolver_ == nullptr) return;
1292
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1316
1293
  gpr_log(GPR_INFO, "chand=%p: resolver transient failure: %s", this,
1317
- grpc_error_std_string(error).c_str());
1294
+ status.ToString().c_str());
1318
1295
  }
1319
1296
  // If we already have an LB policy from a previous resolution
1320
1297
  // result, then we continue to let it set the connectivity state.
1321
1298
  // Otherwise, we go into TRANSIENT_FAILURE.
1322
1299
  if (lb_policy_ == nullptr) {
1323
- grpc_error_handle state_error =
1324
- GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
1325
- "Resolver transient failure", &error, 1);
1326
- absl::Status status = grpc_error_to_absl_status(state_error);
1300
+ grpc_error_handle error = absl_status_to_grpc_error(status);
1327
1301
  {
1328
1302
  MutexLock lock(&resolution_mu_);
1329
1303
  // Update resolver transient failure.
1330
- GRPC_ERROR_UNREF(resolver_transient_failure_error_);
1331
- resolver_transient_failure_error_ = state_error;
1304
+ resolver_transient_failure_error_ = status;
1332
1305
  // Process calls that were queued waiting for the resolver result.
1333
1306
  for (ResolverQueuedCall* call = resolver_queued_calls_; call != nullptr;
1334
1307
  call = call->next) {
@@ -1340,12 +1313,12 @@ void ClientChannel::OnResolverErrorLocked(grpc_error_handle error) {
1340
1313
  }
1341
1314
  }
1342
1315
  }
1316
+ GRPC_ERROR_UNREF(error);
1343
1317
  // Update connectivity state.
1344
1318
  UpdateStateAndPickerLocked(
1345
1319
  GRPC_CHANNEL_TRANSIENT_FAILURE, status, "resolver failure",
1346
1320
  absl::make_unique<LoadBalancingPolicy::TransientFailurePicker>(status));
1347
1321
  }
1348
- GRPC_ERROR_UNREF(error);
1349
1322
  }
1350
1323
 
1351
1324
  void ClientChannel::CreateOrUpdateLbPolicyLocked(
@@ -1356,25 +1329,22 @@ void ClientChannel::CreateOrUpdateLbPolicyLocked(
1356
1329
  LoadBalancingPolicy::UpdateArgs update_args;
1357
1330
  update_args.addresses = std::move(result.addresses);
1358
1331
  update_args.config = std::move(lb_policy_config);
1359
- // Add health check service name to channel args.
1360
- absl::InlinedVector<grpc_arg, 1> args_to_add;
1361
- if (health_check_service_name.has_value()) {
1362
- args_to_add.push_back(grpc_channel_arg_string_create(
1363
- const_cast<char*>(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME),
1364
- const_cast<char*>(health_check_service_name->c_str())));
1365
- }
1332
+ update_args.resolution_note = std::move(result.resolution_note);
1366
1333
  // Remove the config selector from channel args so that we're not holding
1367
1334
  // unnecessary refs that cause it to be destroyed somewhere other than in the
1368
1335
  // WorkSerializer.
1369
- const char* arg_to_remove = GRPC_ARG_CONFIG_SELECTOR;
1370
- update_args.args = grpc_channel_args_copy_and_add_and_remove(
1371
- result.args, &arg_to_remove, 1, args_to_add.data(), args_to_add.size());
1336
+ update_args.args = result.args.Remove(GRPC_ARG_CONFIG_SELECTOR);
1337
+ // Add health check service name to channel args.
1338
+ if (health_check_service_name.has_value()) {
1339
+ update_args.args = update_args.args.Set(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME,
1340
+ *health_check_service_name);
1341
+ }
1372
1342
  // Create policy if needed.
1373
1343
  if (lb_policy_ == nullptr) {
1374
- lb_policy_ = CreateLbPolicyLocked(*update_args.args);
1344
+ lb_policy_ = CreateLbPolicyLocked(update_args.args);
1375
1345
  }
1376
1346
  // Update the policy.
1377
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1347
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1378
1348
  gpr_log(GPR_INFO, "chand=%p: Updating child policy %p", this,
1379
1349
  lb_policy_.get());
1380
1350
  }
@@ -1383,16 +1353,16 @@ void ClientChannel::CreateOrUpdateLbPolicyLocked(
1383
1353
 
1384
1354
  // Creates a new LB policy.
1385
1355
  OrphanablePtr<LoadBalancingPolicy> ClientChannel::CreateLbPolicyLocked(
1386
- const grpc_channel_args& args) {
1356
+ const ChannelArgs& args) {
1387
1357
  LoadBalancingPolicy::Args lb_policy_args;
1388
1358
  lb_policy_args.work_serializer = work_serializer_;
1389
1359
  lb_policy_args.channel_control_helper =
1390
1360
  absl::make_unique<ClientChannelControlHelper>(this);
1391
- lb_policy_args.args = &args;
1361
+ lb_policy_args.args = args;
1392
1362
  OrphanablePtr<LoadBalancingPolicy> lb_policy =
1393
1363
  MakeOrphanable<ChildPolicyHandler>(std::move(lb_policy_args),
1394
- &grpc_client_channel_routing_trace);
1395
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1364
+ &grpc_client_channel_trace);
1365
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1396
1366
  gpr_log(GPR_INFO, "chand=%p: created new LB policy %p", this,
1397
1367
  lb_policy.get());
1398
1368
  }
@@ -1427,26 +1397,24 @@ void ClientChannel::RemoveResolverQueuedCall(ResolverQueuedCall* to_remove,
1427
1397
 
1428
1398
  void ClientChannel::UpdateServiceConfigInControlPlaneLocked(
1429
1399
  RefCountedPtr<ServiceConfig> service_config,
1430
- RefCountedPtr<ConfigSelector> config_selector, const char* lb_policy_name) {
1431
- UniquePtr<char> service_config_json(
1432
- gpr_strdup(service_config->json_string().c_str()));
1433
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1400
+ RefCountedPtr<ConfigSelector> config_selector, std::string lb_policy_name) {
1401
+ std::string service_config_json(service_config->json_string());
1402
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1434
1403
  gpr_log(GPR_INFO,
1435
1404
  "chand=%p: resolver returned updated service config: \"%s\"", this,
1436
- service_config_json.get());
1405
+ service_config_json.c_str());
1437
1406
  }
1438
1407
  // Save service config.
1439
1408
  saved_service_config_ = std::move(service_config);
1440
1409
  // Swap out the data used by GetChannelInfo().
1441
- UniquePtr<char> lb_policy_name_owned(gpr_strdup(lb_policy_name));
1442
1410
  {
1443
1411
  MutexLock lock(&info_mu_);
1444
- info_lb_policy_name_ = std::move(lb_policy_name_owned);
1412
+ info_lb_policy_name_ = std::move(lb_policy_name);
1445
1413
  info_service_config_json_ = std::move(service_config_json);
1446
1414
  }
1447
1415
  // Save config selector.
1448
1416
  saved_config_selector_ = std::move(config_selector);
1449
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1417
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1450
1418
  gpr_log(GPR_INFO, "chand=%p: using ConfigSelector %p", this,
1451
1419
  saved_config_selector_.get());
1452
1420
  }
@@ -1457,7 +1425,7 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
1457
1425
  RefCountedPtr<ServiceConfig> service_config = saved_service_config_;
1458
1426
  // Grab ref to config selector. Use default if resolver didn't supply one.
1459
1427
  RefCountedPtr<ConfigSelector> config_selector = saved_config_selector_;
1460
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1428
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1461
1429
  gpr_log(GPR_INFO, "chand=%p: switching to ConfigSelector %p", this,
1462
1430
  saved_config_selector_.get());
1463
1431
  }
@@ -1465,19 +1433,11 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
1465
1433
  config_selector =
1466
1434
  MakeRefCounted<DefaultConfigSelector>(saved_service_config_);
1467
1435
  }
1468
- absl::InlinedVector<grpc_arg, 2> args_to_add = {
1469
- grpc_channel_arg_pointer_create(
1470
- const_cast<char*>(GRPC_ARG_CLIENT_CHANNEL), this,
1471
- &kClientChannelArgPointerVtable),
1472
- grpc_channel_arg_pointer_create(
1473
- const_cast<char*>(GRPC_ARG_SERVICE_CONFIG_OBJ), service_config.get(),
1474
- &kServiceConfigObjArgPointerVtable),
1475
- };
1476
- grpc_channel_args* new_args = grpc_channel_args_copy_and_add(
1477
- channel_args_, args_to_add.data(), args_to_add.size());
1478
- new_args = config_selector->ModifyChannelArgs(new_args);
1436
+ ChannelArgs new_args = config_selector->ModifyChannelArgs(
1437
+ channel_args_.SetObject(this).SetObject(service_config));
1479
1438
  bool enable_retries =
1480
- grpc_channel_args_find_bool(new_args, GRPC_ARG_ENABLE_RETRIES, true);
1439
+ !new_args.WantMinimalStack() &&
1440
+ new_args.GetBool(GRPC_ARG_ENABLE_RETRIES).value_or(true);
1481
1441
  // Construct dynamic filter stack.
1482
1442
  std::vector<const grpc_channel_filter*> filters =
1483
1443
  config_selector->GetFilters();
@@ -1487,17 +1447,15 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
1487
1447
  filters.push_back(&DynamicTerminationFilter::kFilterVtable);
1488
1448
  }
1489
1449
  RefCountedPtr<DynamicFilters> dynamic_filters =
1490
- DynamicFilters::Create(new_args, std::move(filters));
1450
+ DynamicFilters::Create(new_args.ToC().get(), std::move(filters));
1491
1451
  GPR_ASSERT(dynamic_filters != nullptr);
1492
- grpc_channel_args_destroy(new_args);
1493
1452
  // Grab data plane lock to update service config.
1494
1453
  //
1495
1454
  // We defer unreffing the old values (and deallocating memory) until
1496
1455
  // after releasing the lock to keep the critical section small.
1497
1456
  {
1498
1457
  MutexLock lock(&resolution_mu_);
1499
- GRPC_ERROR_UNREF(resolver_transient_failure_error_);
1500
- resolver_transient_failure_error_ = GRPC_ERROR_NONE;
1458
+ resolver_transient_failure_error_ = absl::OkStatus();
1501
1459
  // Update service config.
1502
1460
  received_service_config_data_ = true;
1503
1461
  // Old values will be unreffed after lock is released.
@@ -1529,10 +1487,10 @@ void ClientChannel::UpdateServiceConfigInDataPlaneLocked() {
1529
1487
  }
1530
1488
 
1531
1489
  void ClientChannel::CreateResolverLocked() {
1532
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1490
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1533
1491
  gpr_log(GPR_INFO, "chand=%p: starting name resolution", this);
1534
1492
  }
1535
- resolver_ = ResolverRegistry::CreateResolver(
1493
+ resolver_ = CoreConfiguration::Get().resolver_registry().CreateResolver(
1536
1494
  uri_to_resolve_.c_str(), channel_args_, interested_parties_,
1537
1495
  work_serializer_, absl::make_unique<ResolverResultHandler>(this));
1538
1496
  // Since the validity of the args was checked when the channel was created,
@@ -1542,20 +1500,20 @@ void ClientChannel::CreateResolverLocked() {
1542
1500
  GRPC_CHANNEL_CONNECTING, absl::Status(), "started resolving",
1543
1501
  absl::make_unique<LoadBalancingPolicy::QueuePicker>(nullptr));
1544
1502
  resolver_->StartLocked();
1545
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1503
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1546
1504
  gpr_log(GPR_INFO, "chand=%p: created resolver=%p", this, resolver_.get());
1547
1505
  }
1548
1506
  }
1549
1507
 
1550
1508
  void ClientChannel::DestroyResolverAndLbPolicyLocked() {
1551
1509
  if (resolver_ != nullptr) {
1552
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1510
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1553
1511
  gpr_log(GPR_INFO, "chand=%p: shutting down resolver=%p", this,
1554
1512
  resolver_.get());
1555
1513
  }
1556
1514
  resolver_.reset();
1557
1515
  if (lb_policy_ != nullptr) {
1558
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
1516
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1559
1517
  gpr_log(GPR_INFO, "chand=%p: shutting down lb_policy=%p", this,
1560
1518
  lb_policy_.get());
1561
1519
  }
@@ -1671,11 +1629,15 @@ grpc_error_handle ClientChannel::DoPingLocked(grpc_transport_op* op) {
1671
1629
  &result,
1672
1630
  // Complete pick.
1673
1631
  [op](LoadBalancingPolicy::PickResult::Complete* complete_pick)
1674
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::work_serializer_) {
1632
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(*ClientChannel::work_serializer_) {
1675
1633
  SubchannelWrapper* subchannel = static_cast<SubchannelWrapper*>(
1676
1634
  complete_pick->subchannel.get());
1677
1635
  RefCountedPtr<ConnectedSubchannel> connected_subchannel =
1678
1636
  subchannel->connected_subchannel();
1637
+ if (connected_subchannel == nullptr) {
1638
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1639
+ "LB pick for ping not connected");
1640
+ }
1679
1641
  connected_subchannel->Ping(op->send_ping.on_initiate,
1680
1642
  op->send_ping.on_ack);
1681
1643
  return GRPC_ERROR_NONE;
@@ -1706,7 +1668,7 @@ void ClientChannel::StartTransportOpLocked(grpc_transport_op* op) {
1706
1668
  // Ping.
1707
1669
  if (op->send_ping.on_initiate != nullptr || op->send_ping.on_ack != nullptr) {
1708
1670
  grpc_error_handle error = DoPingLocked(op);
1709
- if (error != GRPC_ERROR_NONE) {
1671
+ if (!GRPC_ERROR_IS_NONE(error)) {
1710
1672
  ExecCtx::Run(DEBUG_LOCATION, op->send_ping.on_initiate,
1711
1673
  GRPC_ERROR_REF(error));
1712
1674
  ExecCtx::Run(DEBUG_LOCATION, op->send_ping.on_ack, error);
@@ -1722,8 +1684,8 @@ void ClientChannel::StartTransportOpLocked(grpc_transport_op* op) {
1722
1684
  }
1723
1685
  }
1724
1686
  // Disconnect or enter IDLE.
1725
- if (op->disconnect_with_error != GRPC_ERROR_NONE) {
1726
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
1687
+ if (!GRPC_ERROR_IS_NONE(op->disconnect_with_error)) {
1688
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1727
1689
  gpr_log(GPR_INFO, "chand=%p: disconnect_with_error: %s", this,
1728
1690
  grpc_error_std_string(op->disconnect_with_error).c_str());
1729
1691
  }
@@ -1732,7 +1694,7 @@ void ClientChannel::StartTransportOpLocked(grpc_transport_op* op) {
1732
1694
  if (grpc_error_get_int(op->disconnect_with_error,
1733
1695
  GRPC_ERROR_INT_CHANNEL_CONNECTIVITY_STATE, &value) &&
1734
1696
  static_cast<grpc_connectivity_state>(value) == GRPC_CHANNEL_IDLE) {
1735
- if (disconnect_error_ == GRPC_ERROR_NONE) {
1697
+ if (GRPC_ERROR_IS_NONE(disconnect_error_)) {
1736
1698
  // Enter IDLE state.
1737
1699
  UpdateStateAndPickerLocked(GRPC_CHANNEL_IDLE, absl::Status(),
1738
1700
  "channel entering IDLE", nullptr);
@@ -1740,7 +1702,7 @@ void ClientChannel::StartTransportOpLocked(grpc_transport_op* op) {
1740
1702
  GRPC_ERROR_UNREF(op->disconnect_with_error);
1741
1703
  } else {
1742
1704
  // Disconnect.
1743
- GPR_ASSERT(disconnect_error_ == GRPC_ERROR_NONE);
1705
+ GPR_ASSERT(GRPC_ERROR_IS_NONE(disconnect_error_));
1744
1706
  disconnect_error_ = op->disconnect_with_error;
1745
1707
  UpdateStateAndPickerLocked(
1746
1708
  GRPC_CHANNEL_SHUTDOWN, absl::Status(), "shutdown from API",
@@ -1763,7 +1725,7 @@ void ClientChannel::StartTransportOp(grpc_channel_element* elem,
1763
1725
  // Pop into control plane work_serializer for remaining ops.
1764
1726
  GRPC_CHANNEL_STACK_REF(chand->owning_stack_, "start_transport_op");
1765
1727
  chand->work_serializer_->Run(
1766
- [chand, op]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(chand->work_serializer_) {
1728
+ [chand, op]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand->work_serializer_) {
1767
1729
  chand->StartTransportOpLocked(op);
1768
1730
  },
1769
1731
  DEBUG_LOCATION);
@@ -1774,11 +1736,11 @@ void ClientChannel::GetChannelInfo(grpc_channel_element* elem,
1774
1736
  ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
1775
1737
  MutexLock lock(&chand->info_mu_);
1776
1738
  if (info->lb_policy_name != nullptr) {
1777
- *info->lb_policy_name = gpr_strdup(chand->info_lb_policy_name_.get());
1739
+ *info->lb_policy_name = gpr_strdup(chand->info_lb_policy_name_.c_str());
1778
1740
  }
1779
1741
  if (info->service_config_json != nullptr) {
1780
1742
  *info->service_config_json =
1781
- gpr_strdup(chand->info_service_config_json_.get());
1743
+ gpr_strdup(chand->info_service_config_json_.c_str());
1782
1744
  }
1783
1745
  }
1784
1746
 
@@ -1825,7 +1787,7 @@ grpc_connectivity_state ClientChannel::CheckConnectivityState(
1825
1787
  if (out == GRPC_CHANNEL_IDLE && try_to_connect) {
1826
1788
  GRPC_CHANNEL_STACK_REF(owning_stack_, "TryToConnect");
1827
1789
  work_serializer_->Run([this]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(
1828
- work_serializer_) { TryToConnectLocked(); },
1790
+ *work_serializer_) { TryToConnectLocked(); },
1829
1791
  DEBUG_LOCATION);
1830
1792
  }
1831
1793
  return out;
@@ -1852,7 +1814,7 @@ ClientChannel::CallData::CallData(grpc_call_element* elem,
1852
1814
  : deadline_state_(elem, args,
1853
1815
  GPR_LIKELY(chand.deadline_checking_enabled_)
1854
1816
  ? args.deadline
1855
- : GRPC_MILLIS_INF_FUTURE),
1817
+ : Timestamp::InfFuture()),
1856
1818
  path_(grpc_slice_ref_internal(args.path)),
1857
1819
  call_start_time_(args.start_time),
1858
1820
  deadline_(args.deadline),
@@ -1901,6 +1863,11 @@ void ClientChannel::CallData::StartTransportStreamOpBatch(
1901
1863
  GPR_TIMER_SCOPE("cc_start_transport_stream_op_batch", 0);
1902
1864
  CallData* calld = static_cast<CallData*>(elem->call_data);
1903
1865
  ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
1866
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace) &&
1867
+ !GRPC_TRACE_FLAG_ENABLED(grpc_trace_channel)) {
1868
+ gpr_log(GPR_INFO, "chand=%p calld=%p: batch started from above: %s", chand,
1869
+ calld, grpc_transport_stream_op_batch_string(batch).c_str());
1870
+ }
1904
1871
  if (GPR_LIKELY(chand->deadline_checking_enabled_)) {
1905
1872
  grpc_deadline_state_client_start_transport_stream_op_batch(elem, batch);
1906
1873
  }
@@ -1908,8 +1875,13 @@ void ClientChannel::CallData::StartTransportStreamOpBatch(
1908
1875
  // in case we wind up failing the call before we get down to the retry
1909
1876
  // or LB call layer.
1910
1877
  if (batch->recv_trailing_metadata) {
1911
- calld->InjectRecvTrailingMetadataReadyForConfigSelectorCommitCallback(
1912
- batch);
1878
+ calld->original_recv_trailing_metadata_ready_ =
1879
+ batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready;
1880
+ GRPC_CLOSURE_INIT(&calld->recv_trailing_metadata_ready_,
1881
+ RecvTrailingMetadataReadyForConfigSelectorCommitCallback,
1882
+ elem, nullptr);
1883
+ batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready =
1884
+ &calld->recv_trailing_metadata_ready_;
1913
1885
  }
1914
1886
  // If we already have a dynamic call, pass the batch down to it.
1915
1887
  // Note that once we have done so, we do not need to acquire the channel's
@@ -1925,7 +1897,7 @@ void ClientChannel::CallData::StartTransportStreamOpBatch(
1925
1897
  // We do not yet have a dynamic call.
1926
1898
  //
1927
1899
  // If we've previously been cancelled, immediately fail any new batches.
1928
- if (GPR_UNLIKELY(calld->cancel_error_ != GRPC_ERROR_NONE)) {
1900
+ if (GPR_UNLIKELY(!GRPC_ERROR_IS_NONE(calld->cancel_error_))) {
1929
1901
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
1930
1902
  gpr_log(GPR_INFO, "chand=%p calld=%p: failing batch with error: %s",
1931
1903
  chand, calld,
@@ -2037,7 +2009,7 @@ void ClientChannel::CallData::FailPendingBatchInCallCombiner(
2037
2009
  void ClientChannel::CallData::PendingBatchesFail(
2038
2010
  grpc_call_element* elem, grpc_error_handle error,
2039
2011
  YieldCallCombinerPredicate yield_call_combiner_predicate) {
2040
- GPR_ASSERT(error != GRPC_ERROR_NONE);
2012
+ GPR_ASSERT(!GRPC_ERROR_IS_NONE(error));
2041
2013
  if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2042
2014
  size_t num_batches = 0;
2043
2015
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
@@ -2134,14 +2106,15 @@ class ClientChannel::CallData::ResolverQueuedCallCanceller {
2134
2106
  auto* calld = static_cast<CallData*>(self->elem_->call_data);
2135
2107
  {
2136
2108
  MutexLock lock(&chand->resolution_mu_);
2137
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
2109
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2138
2110
  gpr_log(GPR_INFO,
2139
2111
  "chand=%p calld=%p: cancelling resolver queued pick: "
2140
2112
  "error=%s self=%p calld->resolver_pick_canceller=%p",
2141
2113
  chand, calld, grpc_error_std_string(error).c_str(), self,
2142
2114
  calld->resolver_call_canceller_);
2143
2115
  }
2144
- if (calld->resolver_call_canceller_ == self && error != GRPC_ERROR_NONE) {
2116
+ if (calld->resolver_call_canceller_ == self &&
2117
+ !GRPC_ERROR_IS_NONE(error)) {
2145
2118
  // Remove pick from list of queued picks.
2146
2119
  calld->MaybeRemoveCallFromResolverQueuedCallsLocked(self->elem_);
2147
2120
  // Fail pending batches on the call.
@@ -2161,7 +2134,7 @@ void ClientChannel::CallData::MaybeRemoveCallFromResolverQueuedCallsLocked(
2161
2134
  grpc_call_element* elem) {
2162
2135
  if (!queued_pending_resolver_result_) return;
2163
2136
  auto* chand = static_cast<ClientChannel*>(elem->channel_data);
2164
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
2137
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2165
2138
  gpr_log(GPR_INFO,
2166
2139
  "chand=%p calld=%p: removing from resolver queued picks list",
2167
2140
  chand, this);
@@ -2176,7 +2149,7 @@ void ClientChannel::CallData::MaybeAddCallToResolverQueuedCallsLocked(
2176
2149
  grpc_call_element* elem) {
2177
2150
  if (queued_pending_resolver_result_) return;
2178
2151
  auto* chand = static_cast<ClientChannel*>(elem->channel_data);
2179
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
2152
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2180
2153
  gpr_log(GPR_INFO, "chand=%p calld=%p: adding to resolver queued picks list",
2181
2154
  chand, this);
2182
2155
  }
@@ -2190,7 +2163,7 @@ void ClientChannel::CallData::MaybeAddCallToResolverQueuedCallsLocked(
2190
2163
  grpc_error_handle ClientChannel::CallData::ApplyServiceConfigToCallLocked(
2191
2164
  grpc_call_element* elem, grpc_metadata_batch* initial_metadata) {
2192
2165
  ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
2193
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
2166
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2194
2167
  gpr_log(GPR_INFO, "chand=%p calld=%p: applying service config to call",
2195
2168
  chand, this);
2196
2169
  }
@@ -2199,7 +2172,9 @@ grpc_error_handle ClientChannel::CallData::ApplyServiceConfigToCallLocked(
2199
2172
  // Use the ConfigSelector to determine the config for the call.
2200
2173
  ConfigSelector::CallConfig call_config =
2201
2174
  config_selector->GetCallConfig({&path_, initial_metadata, arena_});
2202
- if (call_config.error != GRPC_ERROR_NONE) return call_config.error;
2175
+ if (!call_config.status.ok()) {
2176
+ return absl_status_to_grpc_error(call_config.status);
2177
+ }
2203
2178
  // Create a ClientChannelServiceConfigCallData for the call. This stores
2204
2179
  // a ref to the ServiceConfig and caches the right set of parsed configs
2205
2180
  // to use for the call. The ClientChannelServiceConfigCallData will store
@@ -2213,13 +2188,14 @@ grpc_error_handle ClientChannel::CallData::ApplyServiceConfigToCallLocked(
2213
2188
  // Apply our own method params to the call.
2214
2189
  auto* method_params = static_cast<ClientChannelMethodParsedConfig*>(
2215
2190
  service_config_call_data->GetMethodParsedConfig(
2216
- internal::ClientChannelServiceConfigParser::ParserIndex()));
2191
+ chand->service_config_parser_index_));
2217
2192
  if (method_params != nullptr) {
2218
2193
  // If the deadline from the service config is shorter than the one
2219
2194
  // from the client API, reset the deadline timer.
2220
- if (chand->deadline_checking_enabled_ && method_params->timeout() != 0) {
2221
- const grpc_millis per_method_deadline =
2222
- grpc_cycle_counter_to_millis_round_up(call_start_time_) +
2195
+ if (chand->deadline_checking_enabled_ &&
2196
+ method_params->timeout() != Duration::Zero()) {
2197
+ const Timestamp per_method_deadline =
2198
+ Timestamp::FromCycleCounterRoundUp(call_start_time_) +
2223
2199
  method_params->timeout();
2224
2200
  if (per_method_deadline < deadline_) {
2225
2201
  deadline_ = per_method_deadline;
@@ -2228,17 +2204,13 @@ grpc_error_handle ClientChannel::CallData::ApplyServiceConfigToCallLocked(
2228
2204
  }
2229
2205
  // If the service config set wait_for_ready and the application
2230
2206
  // did not explicitly set it, use the value from the service config.
2231
- uint32_t* send_initial_metadata_flags =
2232
- &pending_batches_[0]
2233
- ->payload->send_initial_metadata.send_initial_metadata_flags;
2207
+ auto* wait_for_ready =
2208
+ pending_batches_[0]
2209
+ ->payload->send_initial_metadata.send_initial_metadata
2210
+ ->GetOrCreatePointer(WaitForReady());
2234
2211
  if (method_params->wait_for_ready().has_value() &&
2235
- !(*send_initial_metadata_flags &
2236
- GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET)) {
2237
- if (method_params->wait_for_ready().value()) {
2238
- *send_initial_metadata_flags |= GRPC_INITIAL_METADATA_WAIT_FOR_READY;
2239
- } else {
2240
- *send_initial_metadata_flags &= ~GRPC_INITIAL_METADATA_WAIT_FOR_READY;
2241
- }
2212
+ !wait_for_ready->explicitly_set) {
2213
+ wait_for_ready->value = method_params->wait_for_ready().value();
2242
2214
  }
2243
2215
  }
2244
2216
  // Set the dynamic filter stack.
@@ -2250,30 +2222,27 @@ grpc_error_handle ClientChannel::CallData::ApplyServiceConfigToCallLocked(
2250
2222
  void ClientChannel::CallData::
2251
2223
  RecvTrailingMetadataReadyForConfigSelectorCommitCallback(
2252
2224
  void* arg, grpc_error_handle error) {
2253
- auto* self = static_cast<CallData*>(arg);
2225
+ auto* elem = static_cast<grpc_call_element*>(arg);
2226
+ auto* chand = static_cast<ClientChannel*>(elem->channel_data);
2227
+ auto* calld = static_cast<CallData*>(elem->call_data);
2254
2228
  auto* service_config_call_data =
2255
2229
  static_cast<ClientChannelServiceConfigCallData*>(
2256
- self->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
2230
+ calld->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
2231
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2232
+ gpr_log(GPR_INFO,
2233
+ "chand=%p calld=%p: got recv_trailing_metadata_ready: error=%s "
2234
+ "service_config_call_data=%p",
2235
+ chand, calld, grpc_error_std_string(error).c_str(),
2236
+ service_config_call_data);
2237
+ }
2257
2238
  if (service_config_call_data != nullptr) {
2258
2239
  service_config_call_data->call_dispatch_controller()->Commit();
2259
2240
  }
2260
2241
  // Chain to original callback.
2261
- Closure::Run(DEBUG_LOCATION, self->original_recv_trailing_metadata_ready_,
2242
+ Closure::Run(DEBUG_LOCATION, calld->original_recv_trailing_metadata_ready_,
2262
2243
  GRPC_ERROR_REF(error));
2263
2244
  }
2264
2245
 
2265
- void ClientChannel::CallData::
2266
- InjectRecvTrailingMetadataReadyForConfigSelectorCommitCallback(
2267
- grpc_transport_stream_op_batch* batch) {
2268
- original_recv_trailing_metadata_ready_ =
2269
- batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready;
2270
- GRPC_CLOSURE_INIT(&recv_trailing_metadata_ready_,
2271
- RecvTrailingMetadataReadyForConfigSelectorCommitCallback,
2272
- this, nullptr);
2273
- batch->payload->recv_trailing_metadata.recv_trailing_metadata_ready =
2274
- &recv_trailing_metadata_ready_;
2275
- }
2276
-
2277
2246
  void ClientChannel::CallData::AsyncResolutionDone(grpc_call_element* elem,
2278
2247
  grpc_error_handle error) {
2279
2248
  // TODO(roth): Does this callback need to hold a ref to the call stack?
@@ -2286,8 +2255,8 @@ void ClientChannel::CallData::ResolutionDone(void* arg,
2286
2255
  grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
2287
2256
  ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
2288
2257
  CallData* calld = static_cast<CallData*>(elem->call_data);
2289
- if (error != GRPC_ERROR_NONE) {
2290
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
2258
+ if (!GRPC_ERROR_IS_NONE(error)) {
2259
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2291
2260
  gpr_log(GPR_INFO,
2292
2261
  "chand=%p calld=%p: error applying config to call: error=%s",
2293
2262
  chand, calld, grpc_error_std_string(error).c_str());
@@ -2319,6 +2288,9 @@ bool ClientChannel::CallData::CheckResolutionLocked(grpc_call_element* elem,
2319
2288
  ClientChannel* chand = static_cast<ClientChannel*>(elem->channel_data);
2320
2289
  // If we're still in IDLE, we need to start resolving.
2321
2290
  if (GPR_UNLIKELY(chand->CheckConnectivityState(false) == GRPC_CHANNEL_IDLE)) {
2291
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2292
+ gpr_log(GPR_INFO, "chand=%p calld=%p: triggering exit idle", chand, this);
2293
+ }
2322
2294
  // Bounce into the control plane work serializer to start resolving,
2323
2295
  // in case we are still in IDLE state. Since we are holding on to the
2324
2296
  // resolution mutex here, we offload it on the ExecCtx so that we don't
@@ -2331,7 +2303,7 @@ bool ClientChannel::CallData::CheckResolutionLocked(grpc_call_element* elem,
2331
2303
  auto* chand = static_cast<ClientChannel*>(arg);
2332
2304
  chand->work_serializer_->Run(
2333
2305
  [chand]()
2334
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(chand->work_serializer_) {
2306
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand->work_serializer_) {
2335
2307
  chand->CheckConnectivityState(/*try_to_connect=*/true);
2336
2308
  GRPC_CHANNEL_STACK_UNREF(chand->owning_stack_,
2337
2309
  "CheckResolutionLocked");
@@ -2346,24 +2318,29 @@ bool ClientChannel::CallData::CheckResolutionLocked(grpc_call_element* elem,
2346
2318
  pending_batches_[0]->payload->send_initial_metadata;
2347
2319
  grpc_metadata_batch* initial_metadata_batch =
2348
2320
  send_initial_metadata.send_initial_metadata;
2349
- const uint32_t send_initial_metadata_flags =
2350
- send_initial_metadata.send_initial_metadata_flags;
2351
2321
  // If we don't yet have a resolver result, we need to queue the call
2352
2322
  // until we get one.
2353
2323
  if (GPR_UNLIKELY(!chand->received_service_config_data_)) {
2354
2324
  // If the resolver returned transient failure before returning the
2355
2325
  // first service config, fail any non-wait_for_ready calls.
2356
- grpc_error_handle resolver_error = chand->resolver_transient_failure_error_;
2357
- if (resolver_error != GRPC_ERROR_NONE &&
2358
- (send_initial_metadata_flags & GRPC_INITIAL_METADATA_WAIT_FOR_READY) ==
2359
- 0) {
2326
+ absl::Status resolver_error = chand->resolver_transient_failure_error_;
2327
+ if (!resolver_error.ok() &&
2328
+ !initial_metadata_batch->GetOrCreatePointer(WaitForReady())->value) {
2329
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2330
+ gpr_log(GPR_INFO, "chand=%p calld=%p: resolution failed, failing call",
2331
+ chand, this);
2332
+ }
2360
2333
  MaybeRemoveCallFromResolverQueuedCallsLocked(elem);
2361
- *error = GRPC_ERROR_REF(resolver_error);
2334
+ *error = absl_status_to_grpc_error(resolver_error);
2362
2335
  return true;
2363
2336
  }
2364
2337
  // Either the resolver has not yet returned a result, or it has
2365
2338
  // returned transient failure but the call is wait_for_ready. In
2366
2339
  // either case, queue the call.
2340
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2341
+ gpr_log(GPR_INFO, "chand=%p calld=%p: queuing to wait for resolution",
2342
+ chand, this);
2343
+ }
2367
2344
  MaybeAddCallToResolverQueuedCallsLocked(elem);
2368
2345
  return false;
2369
2346
  }
@@ -2388,15 +2365,15 @@ void ClientChannel::CallData::CreateDynamicCall(grpc_call_element* elem) {
2388
2365
  call_combiner_};
2389
2366
  grpc_error_handle error = GRPC_ERROR_NONE;
2390
2367
  DynamicFilters* channel_stack = args.channel_stack.get();
2391
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
2368
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2392
2369
  gpr_log(
2393
2370
  GPR_INFO,
2394
2371
  "chand=%p calld=%p: creating dynamic call stack on channel_stack=%p",
2395
2372
  chand, this, channel_stack);
2396
2373
  }
2397
2374
  dynamic_call_ = channel_stack->CreateCall(std::move(args), &error);
2398
- if (error != GRPC_ERROR_NONE) {
2399
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
2375
+ if (!GRPC_ERROR_IS_NONE(error)) {
2376
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2400
2377
  gpr_log(GPR_INFO,
2401
2378
  "chand=%p calld=%p: failed to create dynamic call: error=%s",
2402
2379
  chand, this, grpc_error_std_string(error).c_str());
@@ -2414,39 +2391,71 @@ void ClientChannel::CallData::CreateDynamicCall(grpc_call_element* elem) {
2414
2391
  class ClientChannel::LoadBalancedCall::Metadata
2415
2392
  : public LoadBalancingPolicy::MetadataInterface {
2416
2393
  public:
2417
- Metadata(LoadBalancedCall* lb_call, grpc_metadata_batch* batch)
2418
- : lb_call_(lb_call), batch_(batch) {}
2394
+ explicit Metadata(grpc_metadata_batch* batch) : batch_(batch) {}
2419
2395
 
2420
2396
  void Add(absl::string_view key, absl::string_view value) override {
2421
- grpc_linked_mdelem* linked_mdelem = static_cast<grpc_linked_mdelem*>(
2422
- lb_call_->arena_->Alloc(sizeof(grpc_linked_mdelem)));
2423
- linked_mdelem->md = grpc_mdelem_from_slices(
2424
- ExternallyManagedSlice(key.data(), key.size()),
2425
- ExternallyManagedSlice(value.data(), value.size()));
2426
- GPR_ASSERT(batch_->LinkTail(linked_mdelem) == GRPC_ERROR_NONE);
2397
+ if (batch_ == nullptr) return;
2398
+ // Gross, egregious hack to support legacy grpclb behavior.
2399
+ // TODO(ctiller): Use a promise context for this once that plumbing is done.
2400
+ if (key == GrpcLbClientStatsMetadata::key()) {
2401
+ batch_->Set(
2402
+ GrpcLbClientStatsMetadata(),
2403
+ const_cast<GrpcLbClientStats*>(
2404
+ reinterpret_cast<const GrpcLbClientStats*>(value.data())));
2405
+ return;
2406
+ }
2407
+ batch_->Append(key, Slice::FromStaticString(value),
2408
+ [key](absl::string_view error, const Slice& value) {
2409
+ gpr_log(GPR_ERROR, "%s",
2410
+ absl::StrCat(error, " key:", key,
2411
+ " value:", value.as_string_view())
2412
+ .c_str());
2413
+ });
2427
2414
  }
2428
2415
 
2429
2416
  std::vector<std::pair<std::string, std::string>> TestOnlyCopyToVector()
2430
2417
  override {
2431
- std::vector<std::pair<std::string, std::string>> result;
2432
- batch_->ForEach([&](grpc_mdelem md) {
2433
- auto key = std::string(StringViewFromSlice(GRPC_MDKEY(md)));
2434
- if (key != ":path") {
2435
- result.push_back(
2436
- std::make_pair(std::move(key),
2437
- std::string(StringViewFromSlice(GRPC_MDVALUE(md)))));
2438
- }
2439
- });
2440
- return result;
2418
+ if (batch_ == nullptr) return {};
2419
+ Encoder encoder;
2420
+ batch_->Encode(&encoder);
2421
+ return encoder.Take();
2441
2422
  }
2442
2423
 
2443
2424
  absl::optional<absl::string_view> Lookup(absl::string_view key,
2444
2425
  std::string* buffer) const override {
2445
- return batch_->GetValue(key, buffer);
2426
+ if (batch_ == nullptr) return absl::nullopt;
2427
+ return batch_->GetStringValue(key, buffer);
2446
2428
  }
2447
2429
 
2448
2430
  private:
2449
- LoadBalancedCall* lb_call_;
2431
+ class Encoder {
2432
+ public:
2433
+ void Encode(const Slice& key, const Slice& value) {
2434
+ out_.emplace_back(std::string(key.as_string_view()),
2435
+ std::string(value.as_string_view()));
2436
+ }
2437
+
2438
+ template <class Which>
2439
+ void Encode(Which, const typename Which::ValueType& value) {
2440
+ auto value_slice = Which::Encode(value);
2441
+ out_.emplace_back(std::string(Which::key()),
2442
+ std::string(value_slice.as_string_view()));
2443
+ }
2444
+
2445
+ void Encode(GrpcTimeoutMetadata,
2446
+ const typename GrpcTimeoutMetadata::ValueType&) {}
2447
+ void Encode(HttpPathMetadata, const Slice&) {}
2448
+ void Encode(HttpMethodMetadata,
2449
+ const typename HttpMethodMetadata::ValueType&) {}
2450
+
2451
+ std::vector<std::pair<std::string, std::string>> Take() {
2452
+ return std::move(out_);
2453
+ }
2454
+
2455
+ private:
2456
+ std::vector<std::pair<std::string, std::string>> out_;
2457
+ };
2458
+
2450
2459
  grpc_metadata_batch* batch_;
2451
2460
  };
2452
2461
 
@@ -2454,41 +2463,62 @@ class ClientChannel::LoadBalancedCall::Metadata
2454
2463
  // ClientChannel::LoadBalancedCall::LbCallState
2455
2464
  //
2456
2465
 
2457
- class ClientChannel::LoadBalancedCall::LbCallState
2458
- : public LoadBalancingPolicy::CallState {
2459
- public:
2460
- explicit LbCallState(LoadBalancedCall* lb_call) : lb_call_(lb_call) {}
2466
+ absl::string_view
2467
+ ClientChannel::LoadBalancedCall::LbCallState::GetCallAttribute(
2468
+ UniqueTypeName type) {
2469
+ auto* service_config_call_data = static_cast<ServiceConfigCallData*>(
2470
+ lb_call_->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
2471
+ auto& call_attributes = service_config_call_data->call_attributes();
2472
+ auto it = call_attributes.find(type);
2473
+ if (it == call_attributes.end()) return absl::string_view();
2474
+ return it->second;
2475
+ }
2461
2476
 
2462
- void* Alloc(size_t size) override { return lb_call_->arena_->Alloc(size); }
2477
+ //
2478
+ // ClientChannel::LoadBalancedCall::BackendMetricAccessor
2479
+ //
2463
2480
 
2464
- const LoadBalancingPolicy::BackendMetricData* GetBackendMetricData()
2465
- override {
2466
- if (lb_call_->backend_metric_data_ == nullptr) {
2467
- grpc_linked_mdelem* md = lb_call_->recv_trailing_metadata_->legacy_index()
2468
- ->named.x_endpoint_load_metrics_bin;
2469
- if (md != nullptr) {
2481
+ class ClientChannel::LoadBalancedCall::BackendMetricAccessor
2482
+ : public LoadBalancingPolicy::BackendMetricAccessor {
2483
+ public:
2484
+ explicit BackendMetricAccessor(LoadBalancedCall* lb_call)
2485
+ : lb_call_(lb_call) {}
2486
+
2487
+ const BackendMetricData* GetBackendMetricData() override {
2488
+ if (lb_call_->backend_metric_data_ == nullptr &&
2489
+ lb_call_->recv_trailing_metadata_ != nullptr) {
2490
+ if (const auto* md = lb_call_->recv_trailing_metadata_->get_pointer(
2491
+ EndpointLoadMetricsBinMetadata())) {
2492
+ BackendMetricAllocator allocator(lb_call_->arena_);
2470
2493
  lb_call_->backend_metric_data_ =
2471
- ParseBackendMetricData(GRPC_MDVALUE(md->md), lb_call_->arena_);
2494
+ ParseBackendMetricData(md->as_string_view(), &allocator);
2472
2495
  }
2473
2496
  }
2474
2497
  return lb_call_->backend_metric_data_;
2475
2498
  }
2476
2499
 
2477
- absl::string_view ExperimentalGetCallAttribute(const char* key) override {
2478
- auto* service_config_call_data = static_cast<ServiceConfigCallData*>(
2479
- lb_call_->call_context_[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
2480
- auto& call_attributes = service_config_call_data->call_attributes();
2481
- auto it = call_attributes.find(key);
2482
- if (it == call_attributes.end()) return absl::string_view();
2483
- return it->second;
2484
- }
2485
-
2486
2500
  private:
2501
+ class BackendMetricAllocator : public BackendMetricAllocatorInterface {
2502
+ public:
2503
+ explicit BackendMetricAllocator(Arena* arena) : arena_(arena) {}
2504
+
2505
+ BackendMetricData* AllocateBackendMetricData() override {
2506
+ return arena_->New<BackendMetricData>();
2507
+ }
2508
+
2509
+ char* AllocateString(size_t size) override {
2510
+ return static_cast<char*>(arena_->Alloc(size));
2511
+ }
2512
+
2513
+ private:
2514
+ Arena* arena_;
2515
+ };
2516
+
2487
2517
  LoadBalancedCall* lb_call_;
2488
2518
  };
2489
2519
 
2490
2520
  //
2491
- // LoadBalancedCall
2521
+ // ClientChannel::LoadBalancedCall
2492
2522
  //
2493
2523
 
2494
2524
  namespace {
@@ -2509,7 +2539,7 @@ ClientChannel::LoadBalancedCall::LoadBalancedCall(
2509
2539
  ConfigSelector::CallDispatchController* call_dispatch_controller,
2510
2540
  bool is_transparent_retry)
2511
2541
  : InternallyRefCounted(
2512
- GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)
2542
+ GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)
2513
2543
  ? "LoadBalancedCall"
2514
2544
  : nullptr),
2515
2545
  chand_(chand),
@@ -2523,15 +2553,17 @@ ClientChannel::LoadBalancedCall::LoadBalancedCall(
2523
2553
  on_call_destruction_complete_(on_call_destruction_complete),
2524
2554
  call_dispatch_controller_(call_dispatch_controller),
2525
2555
  call_attempt_tracer_(
2526
- GetCallAttemptTracer(args.context, is_transparent_retry)) {}
2556
+ GetCallAttemptTracer(args.context, is_transparent_retry)) {
2557
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2558
+ gpr_log(GPR_INFO, "chand=%p lb_call=%p: created", chand_, this);
2559
+ }
2560
+ }
2527
2561
 
2528
2562
  ClientChannel::LoadBalancedCall::~LoadBalancedCall() {
2529
- grpc_slice_unref_internal(path_);
2530
2563
  GRPC_ERROR_UNREF(cancel_error_);
2531
2564
  GRPC_ERROR_UNREF(failure_error_);
2532
2565
  if (backend_metric_data_ != nullptr) {
2533
- backend_metric_data_
2534
- ->LoadBalancingPolicy::BackendMetricData::~BackendMetricData();
2566
+ backend_metric_data_->BackendMetricData::~BackendMetricData();
2535
2567
  }
2536
2568
  // Make sure there are no remaining pending batches.
2537
2569
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
@@ -2544,6 +2576,12 @@ ClientChannel::LoadBalancedCall::~LoadBalancedCall() {
2544
2576
  }
2545
2577
 
2546
2578
  void ClientChannel::LoadBalancedCall::Orphan() {
2579
+ // If the recv_trailing_metadata op was never started, then notify
2580
+ // about call completion here, as best we can. We assume status
2581
+ // CANCELLED in this case.
2582
+ if (recv_trailing_metadata_ == nullptr) {
2583
+ RecordCallCompletion(absl::CancelledError("call cancelled"));
2584
+ }
2547
2585
  // Compute latency and report it to the tracer.
2548
2586
  if (call_attempt_tracer_ != nullptr) {
2549
2587
  gpr_timespec latency =
@@ -2570,7 +2608,7 @@ size_t ClientChannel::LoadBalancedCall::GetBatchIndex(
2570
2608
  void ClientChannel::LoadBalancedCall::PendingBatchesAdd(
2571
2609
  grpc_transport_stream_op_batch* batch) {
2572
2610
  const size_t idx = GetBatchIndex(batch);
2573
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2611
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2574
2612
  gpr_log(GPR_INFO,
2575
2613
  "chand=%p lb_call=%p: adding pending batch at index %" PRIuPTR,
2576
2614
  chand_, this, idx);
@@ -2594,10 +2632,10 @@ void ClientChannel::LoadBalancedCall::FailPendingBatchInCallCombiner(
2594
2632
  void ClientChannel::LoadBalancedCall::PendingBatchesFail(
2595
2633
  grpc_error_handle error,
2596
2634
  YieldCallCombinerPredicate yield_call_combiner_predicate) {
2597
- GPR_ASSERT(error != GRPC_ERROR_NONE);
2635
+ GPR_ASSERT(!GRPC_ERROR_IS_NONE(error));
2598
2636
  GRPC_ERROR_UNREF(failure_error_);
2599
2637
  failure_error_ = error;
2600
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2638
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2601
2639
  size_t num_batches = 0;
2602
2640
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
2603
2641
  if (pending_batches_[i] != nullptr) ++num_batches;
@@ -2639,7 +2677,7 @@ void ClientChannel::LoadBalancedCall::ResumePendingBatchInCallCombiner(
2639
2677
 
2640
2678
  // This is called via the call combiner, so access to calld is synchronized.
2641
2679
  void ClientChannel::LoadBalancedCall::PendingBatchesResume() {
2642
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2680
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2643
2681
  size_t num_batches = 0;
2644
2682
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
2645
2683
  if (pending_batches_[i] != nullptr) ++num_batches;
@@ -2668,6 +2706,14 @@ void ClientChannel::LoadBalancedCall::PendingBatchesResume() {
2668
2706
 
2669
2707
  void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
2670
2708
  grpc_transport_stream_op_batch* batch) {
2709
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace) ||
2710
+ GRPC_TRACE_FLAG_ENABLED(grpc_trace_channel)) {
2711
+ gpr_log(GPR_INFO,
2712
+ "chand=%p lb_call=%p: batch started from above: %s, "
2713
+ "call_attempt_tracer_=%p",
2714
+ chand_, this, grpc_transport_stream_op_batch_string(batch).c_str(),
2715
+ call_attempt_tracer_);
2716
+ }
2671
2717
  // Handle call tracing.
2672
2718
  if (call_attempt_tracer_ != nullptr) {
2673
2719
  // Record send ops in tracer.
@@ -2677,8 +2723,7 @@ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
2677
2723
  }
2678
2724
  if (batch->send_initial_metadata) {
2679
2725
  call_attempt_tracer_->RecordSendInitialMetadata(
2680
- batch->payload->send_initial_metadata.send_initial_metadata,
2681
- batch->payload->send_initial_metadata.send_initial_metadata_flags);
2726
+ batch->payload->send_initial_metadata.send_initial_metadata);
2682
2727
  peer_string_ = batch->payload->send_initial_metadata.peer_string;
2683
2728
  original_send_initial_metadata_on_complete_ = batch->on_complete;
2684
2729
  GRPC_CLOSURE_INIT(&send_initial_metadata_on_complete_,
@@ -2731,7 +2776,7 @@ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
2731
2776
  // the channel's data plane mutex, which is more efficient (especially for
2732
2777
  // streaming calls).
2733
2778
  if (subchannel_call_ != nullptr) {
2734
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2779
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2735
2780
  gpr_log(GPR_INFO,
2736
2781
  "chand=%p lb_call=%p: starting batch on subchannel_call=%p",
2737
2782
  chand_, this, subchannel_call_.get());
@@ -2742,8 +2787,8 @@ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
2742
2787
  // We do not yet have a subchannel call.
2743
2788
  //
2744
2789
  // If we've previously been cancelled, immediately fail any new batches.
2745
- if (GPR_UNLIKELY(cancel_error_ != GRPC_ERROR_NONE)) {
2746
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2790
+ if (GPR_UNLIKELY(!GRPC_ERROR_IS_NONE(cancel_error_))) {
2791
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2747
2792
  gpr_log(GPR_INFO, "chand=%p lb_call=%p: failing batch with error: %s",
2748
2793
  chand_, this, grpc_error_std_string(cancel_error_).c_str());
2749
2794
  }
@@ -2761,7 +2806,7 @@ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
2761
2806
  // error to the caller when the first batch does get passed down.
2762
2807
  GRPC_ERROR_UNREF(cancel_error_);
2763
2808
  cancel_error_ = GRPC_ERROR_REF(batch->payload->cancel_stream.cancel_error);
2764
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2809
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2765
2810
  gpr_log(GPR_INFO, "chand=%p lb_call=%p: recording cancel_error=%s",
2766
2811
  chand_, this, grpc_error_std_string(cancel_error_).c_str());
2767
2812
  }
@@ -2777,7 +2822,7 @@ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
2777
2822
  // For batches containing a send_initial_metadata op, acquire the
2778
2823
  // channel's data plane mutex to pick a subchannel.
2779
2824
  if (GPR_LIKELY(batch->send_initial_metadata)) {
2780
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2825
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2781
2826
  gpr_log(GPR_INFO,
2782
2827
  "chand=%p lb_call=%p: grabbing data plane mutex to perform pick",
2783
2828
  chand_, this);
@@ -2785,7 +2830,7 @@ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
2785
2830
  PickSubchannel(this, GRPC_ERROR_NONE);
2786
2831
  } else {
2787
2832
  // For all other batches, release the call combiner.
2788
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2833
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2789
2834
  gpr_log(GPR_INFO,
2790
2835
  "chand=%p lb_call=%p: saved batch, yielding call combiner",
2791
2836
  chand_, this);
@@ -2798,6 +2843,12 @@ void ClientChannel::LoadBalancedCall::StartTransportStreamOpBatch(
2798
2843
  void ClientChannel::LoadBalancedCall::SendInitialMetadataOnComplete(
2799
2844
  void* arg, grpc_error_handle error) {
2800
2845
  auto* self = static_cast<LoadBalancedCall*>(arg);
2846
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2847
+ gpr_log(GPR_INFO,
2848
+ "chand=%p lb_call=%p: got on_complete for send_initial_metadata: "
2849
+ "error=%s",
2850
+ self->chand_, self, grpc_error_std_string(error).c_str());
2851
+ }
2801
2852
  self->call_attempt_tracer_->RecordOnDoneSendInitialMetadata(
2802
2853
  self->peer_string_);
2803
2854
  Closure::Run(DEBUG_LOCATION,
@@ -2808,7 +2859,12 @@ void ClientChannel::LoadBalancedCall::SendInitialMetadataOnComplete(
2808
2859
  void ClientChannel::LoadBalancedCall::RecvInitialMetadataReady(
2809
2860
  void* arg, grpc_error_handle error) {
2810
2861
  auto* self = static_cast<LoadBalancedCall*>(arg);
2811
- if (error == GRPC_ERROR_NONE) {
2862
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2863
+ gpr_log(GPR_INFO,
2864
+ "chand=%p lb_call=%p: got recv_initial_metadata_ready: error=%s",
2865
+ self->chand_, self, grpc_error_std_string(error).c_str());
2866
+ }
2867
+ if (GRPC_ERROR_IS_NONE(error)) {
2812
2868
  // recv_initial_metadata_flags is not populated for clients
2813
2869
  self->call_attempt_tracer_->RecordReceivedInitialMetadata(
2814
2870
  self->recv_initial_metadata_, 0 /* recv_initial_metadata_flags */);
@@ -2820,7 +2876,11 @@ void ClientChannel::LoadBalancedCall::RecvInitialMetadataReady(
2820
2876
  void ClientChannel::LoadBalancedCall::RecvMessageReady(
2821
2877
  void* arg, grpc_error_handle error) {
2822
2878
  auto* self = static_cast<LoadBalancedCall*>(arg);
2823
- if (*self->recv_message_ != nullptr) {
2879
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2880
+ gpr_log(GPR_INFO, "chand=%p lb_call=%p: got recv_message_ready: error=%s",
2881
+ self->chand_, self, grpc_error_std_string(error).c_str());
2882
+ }
2883
+ if (self->recv_message_->has_value()) {
2824
2884
  self->call_attempt_tracer_->RecordReceivedMessage(**self->recv_message_);
2825
2885
  }
2826
2886
  Closure::Run(DEBUG_LOCATION, self->original_recv_message_ready_,
@@ -2830,12 +2890,21 @@ void ClientChannel::LoadBalancedCall::RecvMessageReady(
2830
2890
  void ClientChannel::LoadBalancedCall::RecvTrailingMetadataReady(
2831
2891
  void* arg, grpc_error_handle error) {
2832
2892
  auto* self = static_cast<LoadBalancedCall*>(arg);
2893
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2894
+ gpr_log(GPR_INFO,
2895
+ "chand=%p lb_call=%p: got recv_trailing_metadata_ready: error=%s "
2896
+ "call_attempt_tracer_=%p lb_subchannel_call_tracker_=%p "
2897
+ "failure_error_=%s",
2898
+ self->chand_, self, grpc_error_std_string(error).c_str(),
2899
+ self->call_attempt_tracer_, self->lb_subchannel_call_tracker_.get(),
2900
+ grpc_error_std_string(self->failure_error_).c_str());
2901
+ }
2833
2902
  // Check if we have a tracer or an LB callback to invoke.
2834
2903
  if (self->call_attempt_tracer_ != nullptr ||
2835
- self->lb_recv_trailing_metadata_ready_ != nullptr) {
2904
+ self->lb_subchannel_call_tracker_ != nullptr) {
2836
2905
  // Get the call's status.
2837
2906
  absl::Status status;
2838
- if (error != GRPC_ERROR_NONE) {
2907
+ if (!GRPC_ERROR_IS_NONE(error)) {
2839
2908
  // Get status from error.
2840
2909
  grpc_status_code code;
2841
2910
  std::string message;
@@ -2844,35 +2913,21 @@ void ClientChannel::LoadBalancedCall::RecvTrailingMetadataReady(
2844
2913
  status = absl::Status(static_cast<absl::StatusCode>(code), message);
2845
2914
  } else {
2846
2915
  // Get status from headers.
2847
- const auto& fields = self->recv_trailing_metadata_->legacy_index()->named;
2848
- GPR_ASSERT(fields.grpc_status != nullptr);
2916
+ const auto& md = *self->recv_trailing_metadata_;
2849
2917
  grpc_status_code code =
2850
- grpc_get_status_code_from_metadata(fields.grpc_status->md);
2918
+ md.get(GrpcStatusMetadata()).value_or(GRPC_STATUS_UNKNOWN);
2851
2919
  if (code != GRPC_STATUS_OK) {
2852
2920
  absl::string_view message;
2853
- if (fields.grpc_message != nullptr) {
2854
- message = StringViewFromSlice(GRPC_MDVALUE(fields.grpc_message->md));
2921
+ if (const auto* grpc_message = md.get_pointer(GrpcMessageMetadata())) {
2922
+ message = grpc_message->as_string_view();
2855
2923
  }
2856
2924
  status = absl::Status(static_cast<absl::StatusCode>(code), message);
2857
2925
  }
2858
2926
  }
2859
- // If we have a tracer, notify it.
2860
- if (self->call_attempt_tracer_ != nullptr) {
2861
- self->call_attempt_tracer_->RecordReceivedTrailingMetadata(
2862
- status, self->recv_trailing_metadata_,
2863
- *self->transport_stream_stats_);
2864
- }
2865
- // If the LB policy requested a callback for trailing metadata, invoke
2866
- // the callback.
2867
- if (self->lb_recv_trailing_metadata_ready_ != nullptr) {
2868
- Metadata trailing_metadata(self, self->recv_trailing_metadata_);
2869
- LbCallState lb_call_state(self);
2870
- self->lb_recv_trailing_metadata_ready_(status, &trailing_metadata,
2871
- &lb_call_state);
2872
- }
2927
+ self->RecordCallCompletion(status);
2873
2928
  }
2874
2929
  // Chain to original callback.
2875
- if (self->failure_error_ != GRPC_ERROR_NONE) {
2930
+ if (!GRPC_ERROR_IS_NONE(self->failure_error_)) {
2876
2931
  error = self->failure_error_;
2877
2932
  self->failure_error_ = GRPC_ERROR_NONE;
2878
2933
  } else {
@@ -2882,16 +2937,35 @@ void ClientChannel::LoadBalancedCall::RecvTrailingMetadataReady(
2882
2937
  error);
2883
2938
  }
2884
2939
 
2940
+ void ClientChannel::LoadBalancedCall::RecordCallCompletion(
2941
+ absl::Status status) {
2942
+ // If we have a tracer, notify it.
2943
+ if (call_attempt_tracer_ != nullptr) {
2944
+ call_attempt_tracer_->RecordReceivedTrailingMetadata(
2945
+ status, recv_trailing_metadata_, transport_stream_stats_);
2946
+ }
2947
+ // If the LB policy requested a callback for trailing metadata, invoke
2948
+ // the callback.
2949
+ if (lb_subchannel_call_tracker_ != nullptr) {
2950
+ Metadata trailing_metadata(recv_trailing_metadata_);
2951
+ BackendMetricAccessor backend_metric_accessor(this);
2952
+ LoadBalancingPolicy::SubchannelCallTrackerInterface::FinishArgs args = {
2953
+ status, &trailing_metadata, &backend_metric_accessor};
2954
+ lb_subchannel_call_tracker_->Finish(args);
2955
+ lb_subchannel_call_tracker_.reset();
2956
+ }
2957
+ }
2958
+
2885
2959
  void ClientChannel::LoadBalancedCall::CreateSubchannelCall() {
2886
2960
  SubchannelCall::Args call_args = {
2887
- std::move(connected_subchannel_), pollent_, path_, /*start_time=*/0,
2961
+ std::move(connected_subchannel_), pollent_, path_.Ref(), /*start_time=*/0,
2888
2962
  deadline_, arena_,
2889
2963
  // TODO(roth): When we implement hedging support, we will probably
2890
2964
  // need to use a separate call context for each subchannel call.
2891
2965
  call_context_, call_combiner_};
2892
2966
  grpc_error_handle error = GRPC_ERROR_NONE;
2893
2967
  subchannel_call_ = SubchannelCall::Create(std::move(call_args), &error);
2894
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
2968
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2895
2969
  gpr_log(GPR_INFO,
2896
2970
  "chand=%p lb_call=%p: create subchannel_call=%p: error=%s", chand_,
2897
2971
  this, subchannel_call_.get(), grpc_error_std_string(error).c_str());
@@ -2900,7 +2974,7 @@ void ClientChannel::LoadBalancedCall::CreateSubchannelCall() {
2900
2974
  subchannel_call_->SetAfterCallStackDestroy(on_call_destruction_complete_);
2901
2975
  on_call_destruction_complete_ = nullptr;
2902
2976
  }
2903
- if (GPR_UNLIKELY(error != GRPC_ERROR_NONE)) {
2977
+ if (GPR_UNLIKELY(!GRPC_ERROR_IS_NONE(error))) {
2904
2978
  PendingBatchesFail(error, YieldCallCombiner);
2905
2979
  } else {
2906
2980
  PendingBatchesResume();
@@ -2930,14 +3004,14 @@ class ClientChannel::LoadBalancedCall::LbQueuedCallCanceller {
2930
3004
  auto* chand = lb_call->chand_;
2931
3005
  {
2932
3006
  MutexLock lock(&chand->data_plane_mu_);
2933
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
3007
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2934
3008
  gpr_log(GPR_INFO,
2935
3009
  "chand=%p lb_call=%p: cancelling queued pick: "
2936
3010
  "error=%s self=%p calld->pick_canceller=%p",
2937
3011
  chand, lb_call, grpc_error_std_string(error).c_str(), self,
2938
3012
  lb_call->lb_call_canceller_);
2939
3013
  }
2940
- if (lb_call->lb_call_canceller_ == self && error != GRPC_ERROR_NONE) {
3014
+ if (lb_call->lb_call_canceller_ == self && !GRPC_ERROR_IS_NONE(error)) {
2941
3015
  lb_call->call_dispatch_controller_->Commit();
2942
3016
  // Remove pick from list of queued picks.
2943
3017
  lb_call->MaybeRemoveCallFromLbQueuedCallsLocked();
@@ -2956,7 +3030,7 @@ class ClientChannel::LoadBalancedCall::LbQueuedCallCanceller {
2956
3030
 
2957
3031
  void ClientChannel::LoadBalancedCall::MaybeRemoveCallFromLbQueuedCallsLocked() {
2958
3032
  if (!queued_pending_lb_pick_) return;
2959
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
3033
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2960
3034
  gpr_log(GPR_INFO, "chand=%p lb_call=%p: removing from queued picks list",
2961
3035
  chand_, this);
2962
3036
  }
@@ -2968,7 +3042,7 @@ void ClientChannel::LoadBalancedCall::MaybeRemoveCallFromLbQueuedCallsLocked() {
2968
3042
 
2969
3043
  void ClientChannel::LoadBalancedCall::MaybeAddCallToLbQueuedCallsLocked() {
2970
3044
  if (queued_pending_lb_pick_) return;
2971
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
3045
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2972
3046
  gpr_log(GPR_INFO, "chand=%p lb_call=%p: adding to queued picks list",
2973
3047
  chand_, this);
2974
3048
  }
@@ -2988,8 +3062,8 @@ void ClientChannel::LoadBalancedCall::AsyncPickDone(grpc_error_handle error) {
2988
3062
  void ClientChannel::LoadBalancedCall::PickDone(void* arg,
2989
3063
  grpc_error_handle error) {
2990
3064
  auto* self = static_cast<LoadBalancedCall*>(arg);
2991
- if (error != GRPC_ERROR_NONE) {
2992
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
3065
+ if (!GRPC_ERROR_IS_NONE(error)) {
3066
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2993
3067
  gpr_log(GPR_INFO,
2994
3068
  "chand=%p lb_call=%p: failed to pick subchannel: error=%s",
2995
3069
  self->chand_, self, grpc_error_std_string(error).c_str());
@@ -3024,14 +3098,12 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
3024
3098
  pending_batches_[0]->payload->send_initial_metadata;
3025
3099
  grpc_metadata_batch* initial_metadata_batch =
3026
3100
  send_initial_metadata.send_initial_metadata;
3027
- const uint32_t send_initial_metadata_flags =
3028
- send_initial_metadata.send_initial_metadata_flags;
3029
3101
  // Perform LB pick.
3030
3102
  LoadBalancingPolicy::PickArgs pick_args;
3031
- pick_args.path = StringViewFromSlice(path_);
3103
+ pick_args.path = path_.as_string_view();
3032
3104
  LbCallState lb_call_state(this);
3033
3105
  pick_args.call_state = &lb_call_state;
3034
- Metadata initial_metadata(this, initial_metadata_batch);
3106
+ Metadata initial_metadata(initial_metadata_batch);
3035
3107
  pick_args.initial_metadata = &initial_metadata;
3036
3108
  auto result = chand_->picker_->Pick(pick_args);
3037
3109
  return HandlePickResult<bool>(
@@ -3039,7 +3111,7 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
3039
3111
  // CompletePick
3040
3112
  [this](LoadBalancingPolicy::PickResult::Complete* complete_pick)
3041
3113
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_) {
3042
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
3114
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3043
3115
  gpr_log(GPR_INFO,
3044
3116
  "chand=%p lb_call=%p: LB pick succeeded: subchannel=%p",
3045
3117
  chand_, this, complete_pick->subchannel.get());
@@ -3054,22 +3126,28 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
3054
3126
  // subchannel has moved out of state READY but the LB policy hasn't
3055
3127
  // yet seen that change and given us a new picker), then just
3056
3128
  // queue the pick. We'll try again as soon as we get a new picker.
3057
- // TODO(roth): In this case, we need to invoke the LB
3058
- // policy's recv_trailing_metadata_ready callback to tell it
3059
- // that the pick has been abandoned.
3060
3129
  if (connected_subchannel_ == nullptr) {
3130
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3131
+ gpr_log(GPR_INFO,
3132
+ "chand=%p lb_call=%p: subchannel returned by LB picker "
3133
+ "has no connected subchannel; queueing pick",
3134
+ chand_, this);
3135
+ }
3061
3136
  MaybeAddCallToLbQueuedCallsLocked();
3062
3137
  return false;
3063
3138
  }
3064
- lb_recv_trailing_metadata_ready_ =
3065
- std::move(complete_pick->recv_trailing_metadata_ready);
3139
+ lb_subchannel_call_tracker_ =
3140
+ std::move(complete_pick->subchannel_call_tracker);
3141
+ if (lb_subchannel_call_tracker_ != nullptr) {
3142
+ lb_subchannel_call_tracker_->Start();
3143
+ }
3066
3144
  MaybeRemoveCallFromLbQueuedCallsLocked();
3067
3145
  return true;
3068
3146
  },
3069
3147
  // QueuePick
3070
3148
  [this](LoadBalancingPolicy::PickResult::Queue* /*queue_pick*/)
3071
3149
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_) {
3072
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
3150
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3073
3151
  gpr_log(GPR_INFO, "chand=%p lb_call=%p: LB pick queued", chand_,
3074
3152
  this);
3075
3153
  }
@@ -3077,17 +3155,17 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
3077
3155
  return false;
3078
3156
  },
3079
3157
  // FailPick
3080
- [this, send_initial_metadata_flags,
3158
+ [this, initial_metadata_batch,
3081
3159
  &error](LoadBalancingPolicy::PickResult::Fail* fail_pick)
3082
3160
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_) {
3083
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
3161
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3084
3162
  gpr_log(GPR_INFO, "chand=%p lb_call=%p: LB pick failed: %s",
3085
3163
  chand_, this, fail_pick->status.ToString().c_str());
3086
3164
  }
3087
3165
  // If wait_for_ready is false, then the error indicates the RPC
3088
3166
  // attempt's final status.
3089
- if ((send_initial_metadata_flags &
3090
- GRPC_INITIAL_METADATA_WAIT_FOR_READY) == 0) {
3167
+ if (!initial_metadata_batch->GetOrCreatePointer(WaitForReady())
3168
+ ->value) {
3091
3169
  grpc_error_handle lb_error =
3092
3170
  absl_status_to_grpc_error(fail_pick->status);
3093
3171
  *error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
@@ -3104,7 +3182,7 @@ bool ClientChannel::LoadBalancedCall::PickSubchannelLocked(
3104
3182
  // DropPick
3105
3183
  [this, &error](LoadBalancingPolicy::PickResult::Drop* drop_pick)
3106
3184
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel::data_plane_mu_) {
3107
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_routing_trace)) {
3185
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3108
3186
  gpr_log(GPR_INFO, "chand=%p lb_call=%p: LB pick dropped: %s",
3109
3187
  chand_, this, drop_pick->status.ToString().c_str());
3110
3188
  }