grpc 1.45.0 → 1.53.0

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

Potentially problematic release.


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

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