grpc 1.40.0 → 1.46.3

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