grpc 1.64.3 → 1.65.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (632) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +57 -58
  3. data/include/grpc/event_engine/event_engine.h +13 -6
  4. data/include/grpc/impl/channel_arg_names.h +7 -3
  5. data/include/grpc/module.modulemap +1 -0
  6. data/include/grpc/passive_listener.h +62 -0
  7. data/include/grpc/support/log.h +7 -17
  8. data/include/grpc/support/port_platform.h +3 -0
  9. data/src/core/channelz/channel_trace.cc +1 -1
  10. data/src/core/channelz/channel_trace.h +1 -1
  11. data/src/core/channelz/channelz.cc +3 -3
  12. data/src/core/channelz/channelz.h +7 -7
  13. data/src/core/channelz/channelz_registry.cc +4 -3
  14. data/src/core/client_channel/backup_poller.cc +4 -5
  15. data/src/core/client_channel/client_channel.cc +1324 -0
  16. data/src/core/client_channel/client_channel.h +243 -0
  17. data/src/core/client_channel/client_channel_filter.cc +266 -709
  18. data/src/core/client_channel/client_channel_filter.h +11 -64
  19. data/src/core/client_channel/client_channel_internal.h +16 -5
  20. data/src/core/client_channel/client_channel_plugin.cc +1 -14
  21. data/src/core/client_channel/client_channel_service_config.h +3 -3
  22. data/src/core/client_channel/config_selector.cc +1 -1
  23. data/src/core/client_channel/config_selector.h +1 -1
  24. data/src/core/client_channel/dynamic_filters.cc +3 -3
  25. data/src/core/client_channel/dynamic_filters.h +1 -3
  26. data/src/core/client_channel/load_balanced_call_destination.cc +336 -0
  27. data/src/core/client_channel/load_balanced_call_destination.h +49 -0
  28. data/src/core/client_channel/retry_filter.cc +2 -9
  29. data/src/core/client_channel/retry_filter.h +2 -7
  30. data/src/core/client_channel/retry_filter_legacy_call_data.cc +65 -72
  31. data/src/core/client_channel/retry_filter_legacy_call_data.h +0 -2
  32. data/src/core/client_channel/retry_service_config.cc +4 -5
  33. data/src/core/client_channel/retry_service_config.h +3 -3
  34. data/src/core/client_channel/subchannel.cc +220 -112
  35. data/src/core/client_channel/subchannel.h +31 -18
  36. data/src/core/client_channel/subchannel_pool_interface.cc +0 -2
  37. data/src/core/client_channel/subchannel_pool_interface.h +2 -4
  38. data/src/core/client_channel/subchannel_stream_client.cc +36 -49
  39. data/src/core/client_channel/subchannel_stream_client.h +2 -4
  40. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +7 -10
  41. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +1 -0
  42. data/src/core/ext/filters/backend_metrics/backend_metric_provider.h +7 -0
  43. data/src/core/ext/filters/census/grpc_context.cc +2 -4
  44. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +8 -15
  45. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +2 -0
  46. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +3 -7
  47. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +1 -0
  48. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +3 -3
  49. data/src/core/ext/filters/http/client/http_client_filter.cc +1 -0
  50. data/src/core/ext/filters/http/client/http_client_filter.h +1 -0
  51. data/src/core/ext/filters/http/client_authority_filter.cc +1 -0
  52. data/src/core/ext/filters/http/client_authority_filter.h +1 -0
  53. data/src/core/ext/filters/http/message_compress/compression_filter.cc +10 -15
  54. data/src/core/ext/filters/http/message_compress/compression_filter.h +2 -0
  55. data/src/core/ext/filters/http/server/http_server_filter.cc +2 -2
  56. data/src/core/ext/filters/http/server/http_server_filter.h +1 -0
  57. data/src/core/ext/filters/message_size/message_size_filter.cc +6 -9
  58. data/src/core/ext/filters/message_size/message_size_filter.h +6 -6
  59. data/src/core/ext/filters/rbac/rbac_filter.cc +2 -5
  60. data/src/core/ext/filters/rbac/rbac_filter.h +1 -0
  61. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +2 -2
  62. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +1 -1
  63. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +2 -6
  64. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +1 -0
  65. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +3 -3
  66. data/src/core/ext/transport/chttp2/alpn/alpn.cc +1 -1
  67. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +8 -25
  68. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +0 -5
  69. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +223 -148
  70. data/src/core/ext/transport/chttp2/server/chttp2_server.h +33 -0
  71. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +131 -107
  72. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +8 -8
  73. data/src/core/ext/transport/chttp2/transport/context_list_entry.h +1 -1
  74. data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -4
  75. data/src/core/ext/transport/chttp2/transport/flow_control.h +0 -2
  76. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -6
  77. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +1 -2
  78. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +9 -5
  79. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +5 -4
  80. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +9 -2
  81. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +32 -43
  82. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +1 -3
  83. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +3 -8
  84. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +1 -1
  85. data/src/core/ext/transport/chttp2/transport/http2_settings.h +1 -1
  86. data/src/core/ext/transport/chttp2/transport/internal.h +29 -19
  87. data/src/core/ext/transport/chttp2/transport/parsing.cc +15 -25
  88. data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +0 -2
  89. data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +0 -2
  90. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +29 -13
  91. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +5 -4
  92. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -5
  93. data/src/core/ext/transport/chttp2/transport/writing.cc +24 -25
  94. data/src/core/ext/transport/inproc/inproc_transport.cc +56 -32
  95. data/src/core/ext/transport/inproc/inproc_transport.h +1 -3
  96. data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +13 -15
  97. data/src/core/ext/transport/inproc/legacy_inproc_transport.h +0 -2
  98. data/src/core/handshaker/handshaker.cc +6 -14
  99. data/src/core/handshaker/http_connect/http_connect_handshaker.cc +9 -17
  100. data/src/core/handshaker/http_connect/http_proxy_mapper.cc +3 -2
  101. data/src/core/handshaker/security/secure_endpoint.cc +38 -32
  102. data/src/core/handshaker/security/secure_endpoint.h +0 -2
  103. data/src/core/handshaker/security/security_handshaker.cc +25 -37
  104. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +2 -1
  105. data/src/core/lib/address_utils/parse_address.cc +27 -39
  106. data/src/core/lib/address_utils/sockaddr_utils.cc +5 -6
  107. data/src/core/lib/avl/avl.h +1 -1
  108. data/src/core/lib/channel/channel_args.cc +13 -17
  109. data/src/core/lib/channel/channel_args.h +19 -8
  110. data/src/core/lib/channel/channel_stack.cc +5 -63
  111. data/src/core/lib/channel/channel_stack.h +13 -37
  112. data/src/core/lib/channel/channel_stack_builder.h +0 -5
  113. data/src/core/lib/channel/channel_stack_builder_impl.cc +0 -142
  114. data/src/core/lib/channel/channel_stack_builder_impl.h +0 -2
  115. data/src/core/lib/channel/connected_channel.cc +37 -676
  116. data/src/core/lib/channel/promise_based_filter.cc +41 -47
  117. data/src/core/lib/channel/promise_based_filter.h +124 -477
  118. data/src/core/lib/channel/status_util.cc +1 -1
  119. data/src/core/lib/compression/compression.cc +1 -1
  120. data/src/core/lib/compression/message_compress.cc +6 -6
  121. data/src/core/lib/config/config_vars.cc +3 -8
  122. data/src/core/lib/config/config_vars.h +1 -5
  123. data/src/core/lib/debug/event_log.h +1 -1
  124. data/src/core/lib/debug/trace.cc +43 -59
  125. data/src/core/lib/debug/trace.h +2 -97
  126. data/src/core/lib/debug/trace_flags.cc +255 -0
  127. data/src/core/lib/debug/trace_flags.h +133 -0
  128. data/src/core/lib/debug/trace_impl.h +115 -0
  129. data/src/core/lib/event_engine/ares_resolver.cc +5 -7
  130. data/src/core/lib/event_engine/ares_resolver.h +1 -3
  131. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +1 -1
  132. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +17 -22
  133. data/src/core/lib/event_engine/event_engine.cc +29 -4
  134. data/src/core/lib/event_engine/extensions/supports_fd.h +7 -0
  135. data/src/core/lib/event_engine/extensions/tcp_trace.h +43 -0
  136. data/src/core/lib/event_engine/forkable.cc +4 -5
  137. data/src/core/lib/event_engine/forkable.h +0 -11
  138. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +10 -11
  139. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +4 -3
  140. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +1 -1
  141. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +19 -33
  142. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +3 -2
  143. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +24 -7
  144. data/src/core/lib/event_engine/posix_engine/posix_engine.h +2 -0
  145. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +14 -16
  146. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +18 -22
  147. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +13 -17
  148. data/src/core/lib/event_engine/posix_engine/timer.cc +1 -1
  149. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +4 -6
  150. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +2 -1
  151. data/src/core/lib/event_engine/shim.cc +1 -1
  152. data/src/core/lib/event_engine/tcp_socket_utils.cc +6 -8
  153. data/src/core/lib/event_engine/thread_local.h +1 -1
  154. data/src/core/lib/event_engine/thread_pool/thread_count.h +1 -1
  155. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +19 -21
  156. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -6
  157. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +14 -13
  158. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +4 -3
  159. data/src/core/lib/event_engine/trace.h +6 -17
  160. data/src/core/lib/event_engine/windows/iocp.h +1 -1
  161. data/src/core/lib/event_engine/windows/win_socket.cc +23 -17
  162. data/src/core/lib/event_engine/windows/win_socket.h +4 -5
  163. data/src/core/lib/event_engine/windows/windows_endpoint.cc +6 -9
  164. data/src/core/lib/event_engine/windows/windows_engine.cc +201 -87
  165. data/src/core/lib/event_engine/windows/windows_engine.h +136 -25
  166. data/src/core/lib/event_engine/windows/windows_listener.cc +12 -23
  167. data/src/core/lib/experiments/experiments.cc +35 -151
  168. data/src/core/lib/experiments/experiments.h +12 -45
  169. data/src/core/lib/gprpp/bitset.h +1 -1
  170. data/src/core/lib/gprpp/crash.cc +2 -3
  171. data/src/core/lib/gprpp/dual_ref_counted.h +45 -33
  172. data/src/core/lib/gprpp/dump_args.cc +54 -0
  173. data/src/core/lib/gprpp/dump_args.h +69 -0
  174. data/src/core/lib/gprpp/glob.cc +70 -0
  175. data/src/core/lib/gprpp/glob.h +29 -0
  176. data/src/core/lib/gprpp/per_cpu.cc +1 -1
  177. data/src/core/lib/gprpp/posix/stat.cc +3 -4
  178. data/src/core/lib/gprpp/posix/thd.cc +8 -9
  179. data/src/core/lib/gprpp/ref_counted.h +30 -22
  180. data/src/core/lib/gprpp/single_set_ptr.h +5 -3
  181. data/src/core/lib/gprpp/status_helper.cc +11 -30
  182. data/src/core/lib/gprpp/status_helper.h +3 -31
  183. data/src/core/lib/gprpp/time.cc +3 -4
  184. data/src/core/lib/gprpp/time.h +3 -2
  185. data/src/core/lib/gprpp/unique_type_name.h +1 -1
  186. data/src/core/lib/gprpp/validation_errors.cc +10 -1
  187. data/src/core/lib/gprpp/validation_errors.h +11 -0
  188. data/src/core/lib/gprpp/windows/stat.cc +3 -4
  189. data/src/core/lib/gprpp/windows/thd.cc +3 -2
  190. data/src/core/lib/gprpp/work_serializer.cc +48 -57
  191. data/src/core/lib/iomgr/buffer_list.cc +4 -2
  192. data/src/core/lib/iomgr/call_combiner.cc +18 -27
  193. data/src/core/lib/iomgr/call_combiner.h +1 -3
  194. data/src/core/lib/iomgr/cfstream_handle.cc +4 -6
  195. data/src/core/lib/iomgr/closure.h +2 -4
  196. data/src/core/lib/iomgr/combiner.cc +6 -8
  197. data/src/core/lib/iomgr/combiner.h +0 -2
  198. data/src/core/lib/iomgr/endpoint.cc +0 -6
  199. data/src/core/lib/iomgr/endpoint.h +0 -2
  200. data/src/core/lib/iomgr/endpoint_cfstream.cc +19 -41
  201. data/src/core/lib/iomgr/endpoint_pair_posix.cc +1 -1
  202. data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -6
  203. data/src/core/lib/iomgr/error.cc +13 -21
  204. data/src/core/lib/iomgr/error.h +1 -1
  205. data/src/core/lib/iomgr/ev_apple.cc +3 -5
  206. data/src/core/lib/iomgr/ev_epoll1_linux.cc +43 -42
  207. data/src/core/lib/iomgr/ev_poll_posix.cc +38 -29
  208. data/src/core/lib/iomgr/ev_posix.cc +8 -9
  209. data/src/core/lib/iomgr/ev_posix.h +10 -7
  210. data/src/core/lib/iomgr/event_engine_shims/closure.cc +2 -2
  211. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +14 -28
  212. data/src/core/lib/iomgr/exec_ctx.cc +2 -2
  213. data/src/core/lib/iomgr/exec_ctx.h +1 -1
  214. data/src/core/lib/iomgr/executor.cc +6 -15
  215. data/src/core/lib/iomgr/executor.h +1 -1
  216. data/src/core/lib/iomgr/fork_posix.cc +8 -10
  217. data/src/core/lib/iomgr/fork_windows.cc +3 -1
  218. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +2 -3
  219. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +3 -5
  220. data/src/core/lib/iomgr/internal_errqueue.cc +4 -2
  221. data/src/core/lib/iomgr/iocp_windows.cc +4 -3
  222. data/src/core/lib/iomgr/iomgr.cc +13 -17
  223. data/src/core/lib/iomgr/lockfree_event.cc +3 -5
  224. data/src/core/lib/iomgr/pollset.h +0 -2
  225. data/src/core/lib/iomgr/pollset_windows.cc +0 -2
  226. data/src/core/lib/iomgr/resolve_address_posix.cc +7 -14
  227. data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
  228. data/src/core/lib/iomgr/socket_factory_posix.cc +1 -1
  229. data/src/core/lib/iomgr/socket_mutator.cc +1 -1
  230. data/src/core/lib/iomgr/socket_utils_common_posix.cc +11 -17
  231. data/src/core/lib/iomgr/socket_windows.cc +4 -6
  232. data/src/core/lib/iomgr/tcp_client_cfstream.cc +3 -5
  233. data/src/core/lib/iomgr/tcp_client_posix.cc +9 -15
  234. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -4
  235. data/src/core/lib/iomgr/tcp_posix.cc +57 -84
  236. data/src/core/lib/iomgr/tcp_posix.h +0 -2
  237. data/src/core/lib/iomgr/tcp_server_posix.cc +3 -3
  238. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +4 -6
  239. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +7 -7
  240. data/src/core/lib/iomgr/tcp_server_windows.cc +10 -16
  241. data/src/core/lib/iomgr/tcp_windows.cc +25 -41
  242. data/src/core/lib/iomgr/timer_generic.cc +17 -20
  243. data/src/core/lib/iomgr/timer_heap.cc +1 -1
  244. data/src/core/lib/iomgr/timer_manager.cc +17 -30
  245. data/src/core/lib/iomgr/unix_sockets_posix.cc +1 -1
  246. data/src/core/lib/iomgr/vsock.cc +1 -1
  247. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +3 -3
  248. data/src/core/lib/promise/activity.h +27 -4
  249. data/src/core/lib/promise/cancel_callback.h +24 -0
  250. data/src/core/lib/promise/context.h +11 -0
  251. data/src/core/lib/promise/detail/basic_seq.h +1 -2
  252. data/src/core/lib/promise/detail/join_state.h +354 -398
  253. data/src/core/lib/promise/detail/promise_like.h +6 -5
  254. data/src/core/lib/promise/detail/seq_state.h +1178 -1178
  255. data/src/core/lib/promise/for_each.h +6 -6
  256. data/src/core/lib/promise/interceptor_list.h +6 -7
  257. data/src/core/lib/promise/latch.h +9 -9
  258. data/src/core/lib/promise/map.h +17 -0
  259. data/src/core/lib/promise/observable.h +182 -0
  260. data/src/core/lib/promise/party.cc +7 -8
  261. data/src/core/lib/promise/party.h +10 -8
  262. data/src/core/lib/promise/pipe.h +16 -35
  263. data/src/core/lib/promise/promise.h +1 -0
  264. data/src/core/lib/promise/status_flag.h +2 -0
  265. data/src/core/lib/resource_quota/arena.cc +56 -79
  266. data/src/core/lib/resource_quota/arena.h +118 -209
  267. data/src/core/lib/resource_quota/memory_quota.cc +12 -13
  268. data/src/core/lib/resource_quota/memory_quota.h +2 -3
  269. data/src/core/lib/resource_quota/periodic_update.cc +1 -1
  270. data/src/core/lib/resource_quota/resource_quota.h +1 -1
  271. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  272. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
  273. data/src/core/lib/security/authorization/evaluate_args.cc +6 -8
  274. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +5 -6
  275. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -0
  276. data/src/core/lib/security/authorization/matchers.cc +3 -3
  277. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +2 -2
  278. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +2 -3
  279. data/src/core/lib/security/context/security_context.cc +12 -13
  280. data/src/core/lib/security/context/security_context.h +31 -8
  281. data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
  282. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +3 -1
  283. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -3
  284. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +5 -5
  285. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +3 -3
  286. data/src/core/lib/security/credentials/call_creds_util.cc +2 -1
  287. data/src/core/lib/security/credentials/channel_creds_registry.h +2 -2
  288. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +5 -3
  289. data/src/core/lib/security/credentials/composite/composite_credentials.h +1 -1
  290. data/src/core/lib/security/credentials/credentials.cc +6 -6
  291. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +4 -4
  292. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +2 -2
  293. data/src/core/lib/security/credentials/external/external_account_credentials.cc +9 -11
  294. data/src/core/lib/security/credentials/external/external_account_credentials.h +3 -3
  295. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +2 -2
  296. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -4
  297. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +1 -1
  298. data/src/core/lib/security/credentials/fake/fake_credentials.h +1 -1
  299. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +3 -3
  300. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +11 -11
  301. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +1 -1
  302. data/src/core/lib/security/credentials/iam/iam_credentials.h +1 -1
  303. data/src/core/lib/security/credentials/jwt/json_token.cc +14 -15
  304. data/src/core/lib/security/credentials/jwt/json_token.h +1 -1
  305. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +6 -5
  306. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +1 -1
  307. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +50 -54
  308. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +1 -1
  309. data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
  310. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +12 -11
  311. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +4 -4
  312. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -7
  313. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +1 -3
  314. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +15 -21
  315. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +1 -1
  316. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +21 -30
  317. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +1 -1
  318. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +1 -1
  319. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -4
  320. data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.cc +3 -5
  321. data/src/core/lib/security/credentials/tls/tls_credentials.cc +14 -16
  322. data/src/core/lib/security/credentials/tls/tls_utils.cc +4 -4
  323. data/src/core/lib/security/credentials/xds/xds_credentials.cc +1 -1
  324. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -16
  325. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +15 -12
  326. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +6 -6
  327. data/src/core/lib/security/security_connector/load_system_roots_windows.cc +1 -1
  328. data/src/core/lib/security/security_connector/local/local_security_connector.cc +8 -12
  329. data/src/core/lib/security/security_connector/security_connector.cc +1 -4
  330. data/src/core/lib/security/security_connector/security_connector.h +1 -3
  331. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +17 -19
  332. data/src/core/lib/security/security_connector/ssl_utils.cc +19 -21
  333. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +29 -40
  334. data/src/core/lib/security/transport/auth_filters.h +1 -0
  335. data/src/core/lib/security/transport/client_auth_filter.cc +7 -13
  336. data/src/core/lib/security/transport/server_auth_filter.cc +3 -8
  337. data/src/core/lib/security/util/json_util.h +1 -1
  338. data/src/core/lib/slice/slice.h +1 -1
  339. data/src/core/lib/slice/slice_refcount.h +2 -4
  340. data/src/core/lib/slice/slice_string_helpers.cc +1 -1
  341. data/src/core/lib/surface/api_trace.h +1 -3
  342. data/src/core/lib/surface/call.cc +64 -3738
  343. data/src/core/lib/surface/call.h +41 -143
  344. data/src/core/lib/surface/call_log_batch.cc +1 -1
  345. data/src/core/lib/surface/call_utils.cc +276 -0
  346. data/src/core/lib/surface/call_utils.h +449 -0
  347. data/src/core/lib/surface/channel.cc +8 -3
  348. data/src/core/lib/surface/channel.h +10 -7
  349. data/src/core/lib/surface/channel_create.cc +14 -6
  350. data/src/core/lib/surface/channel_create.h +3 -2
  351. data/src/core/lib/surface/channel_init.cc +21 -77
  352. data/src/core/lib/surface/channel_init.h +19 -97
  353. data/src/core/lib/surface/client_call.cc +419 -0
  354. data/src/core/lib/surface/client_call.h +180 -0
  355. data/src/core/lib/surface/completion_queue.cc +28 -33
  356. data/src/core/lib/surface/completion_queue.h +0 -8
  357. data/src/core/lib/surface/filter_stack_call.cc +1157 -0
  358. data/src/core/lib/surface/filter_stack_call.h +369 -0
  359. data/src/core/lib/surface/init.cc +7 -6
  360. data/src/core/lib/surface/lame_client.cc +1 -1
  361. data/src/core/lib/surface/legacy_channel.cc +40 -27
  362. data/src/core/lib/surface/legacy_channel.h +9 -18
  363. data/src/core/lib/surface/server_call.cc +222 -0
  364. data/src/core/lib/surface/server_call.h +167 -0
  365. data/src/core/lib/surface/version.cc +2 -2
  366. data/src/core/lib/transport/bdp_estimator.cc +3 -5
  367. data/src/core/lib/transport/bdp_estimator.h +2 -4
  368. data/src/core/lib/transport/call_arena_allocator.h +9 -7
  369. data/src/core/lib/transport/call_destination.h +76 -0
  370. data/src/core/lib/transport/call_filters.cc +28 -10
  371. data/src/core/lib/transport/call_filters.h +128 -22
  372. data/src/core/lib/transport/call_spine.cc +5 -6
  373. data/src/core/lib/transport/call_spine.h +159 -334
  374. data/src/core/lib/transport/connectivity_state.cc +8 -10
  375. data/src/core/lib/transport/connectivity_state.h +0 -2
  376. data/src/core/lib/transport/interception_chain.cc +155 -0
  377. data/src/core/lib/transport/interception_chain.h +236 -0
  378. data/src/core/lib/transport/metadata_batch.h +10 -1
  379. data/src/core/lib/transport/metadata_info.h +1 -1
  380. data/src/core/lib/transport/transport.cc +3 -6
  381. data/src/core/lib/transport/transport.h +43 -40
  382. data/src/core/load_balancing/child_policy_handler.cc +8 -8
  383. data/src/core/load_balancing/endpoint_list.cc +5 -5
  384. data/src/core/load_balancing/endpoint_list.h +1 -1
  385. data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +1 -0
  386. data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +1 -0
  387. data/src/core/load_balancing/grpclb/grpclb.cc +25 -29
  388. data/src/core/load_balancing/grpclb/grpclb_balancer_addresses.cc +1 -1
  389. data/src/core/load_balancing/grpclb/load_balancer_api.cc +3 -4
  390. data/src/core/load_balancing/health_check_client.cc +10 -13
  391. data/src/core/load_balancing/lb_policy.cc +5 -8
  392. data/src/core/load_balancing/lb_policy.h +19 -3
  393. data/src/core/load_balancing/lb_policy_factory.h +1 -1
  394. data/src/core/load_balancing/lb_policy_registry.cc +2 -3
  395. data/src/core/load_balancing/lb_policy_registry.h +1 -1
  396. data/src/core/load_balancing/oob_backend_metric.cc +2 -4
  397. data/src/core/load_balancing/outlier_detection/outlier_detection.cc +33 -35
  398. data/src/core/load_balancing/outlier_detection/outlier_detection.h +3 -3
  399. data/src/core/load_balancing/pick_first/pick_first.cc +65 -65
  400. data/src/core/load_balancing/priority/priority.cc +26 -28
  401. data/src/core/load_balancing/ring_hash/ring_hash.cc +11 -13
  402. data/src/core/load_balancing/ring_hash/ring_hash.h +3 -3
  403. data/src/core/load_balancing/rls/rls.cc +82 -82
  404. data/src/core/load_balancing/round_robin/round_robin.cc +17 -20
  405. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +54 -43
  406. data/src/core/load_balancing/weighted_target/weighted_target.cc +21 -24
  407. data/src/core/load_balancing/xds/cds.cc +14 -16
  408. data/src/core/load_balancing/xds/xds_cluster_impl.cc +16 -18
  409. data/src/core/load_balancing/xds/xds_cluster_manager.cc +15 -17
  410. data/src/core/load_balancing/xds/xds_override_host.cc +40 -41
  411. data/src/core/load_balancing/xds/xds_override_host.h +3 -3
  412. data/src/core/load_balancing/xds/xds_wrr_locality.cc +10 -12
  413. data/src/core/plugin_registry/grpc_plugin_registry.cc +5 -1
  414. data/src/core/resolver/binder/binder_resolver.cc +3 -2
  415. data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +3 -2
  416. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +1 -1
  417. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +7 -14
  418. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -5
  419. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  420. data/src/core/resolver/dns/dns_resolver_plugin.cc +6 -5
  421. data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +4 -9
  422. data/src/core/resolver/dns/event_engine/service_config_helper.cc +5 -5
  423. data/src/core/resolver/dns/native/dns_resolver.cc +8 -9
  424. data/src/core/resolver/endpoint_addresses.cc +1 -1
  425. data/src/core/resolver/fake/fake_resolver.cc +1 -1
  426. data/src/core/resolver/fake/fake_resolver.h +1 -1
  427. data/src/core/resolver/google_c2p/google_c2p_resolver.cc +13 -14
  428. data/src/core/resolver/polling_resolver.cc +30 -35
  429. data/src/core/resolver/resolver.cc +2 -6
  430. data/src/core/resolver/resolver.h +0 -2
  431. data/src/core/resolver/resolver_registry.cc +6 -8
  432. data/src/core/resolver/sockaddr/sockaddr_resolver.cc +3 -3
  433. data/src/core/resolver/xds/xds_dependency_manager.cc +22 -23
  434. data/src/core/resolver/xds/xds_resolver.cc +13 -15
  435. data/src/core/server/server.cc +269 -389
  436. data/src/core/server/server.h +37 -19
  437. data/src/core/server/server_call_tracer_filter.cc +7 -14
  438. data/src/core/server/server_config_selector.h +1 -1
  439. data/src/core/server/server_config_selector_filter.cc +3 -3
  440. data/src/core/server/server_interface.h +2 -0
  441. data/src/core/server/xds_channel_stack_modifier.cc +1 -1
  442. data/src/core/server/xds_channel_stack_modifier.h +1 -1
  443. data/src/core/server/xds_server_config_fetcher.cc +1 -4
  444. data/src/core/service_config/service_config.h +1 -1
  445. data/src/core/service_config/service_config_call_data.h +13 -11
  446. data/src/core/service_config/service_config_channel_arg_filter.cc +6 -4
  447. data/src/core/service_config/service_config_impl.cc +5 -5
  448. data/src/core/service_config/service_config_impl.h +1 -1
  449. data/src/core/service_config/service_config_parser.cc +3 -6
  450. data/src/core/service_config/service_config_parser.h +1 -1
  451. data/src/core/{lib/channel → telemetry}/call_tracer.cc +20 -30
  452. data/src/core/{lib/channel → telemetry}/call_tracer.h +32 -9
  453. data/src/core/{lib/debug → telemetry}/histogram_view.cc +1 -1
  454. data/src/core/{lib/debug → telemetry}/histogram_view.h +3 -3
  455. data/src/core/telemetry/metrics.cc +178 -0
  456. data/src/core/telemetry/metrics.h +562 -0
  457. data/src/core/{lib/debug → telemetry}/stats.cc +1 -1
  458. data/src/core/{lib/debug → telemetry}/stats.h +5 -5
  459. data/src/core/{lib/debug → telemetry}/stats_data.cc +1 -1
  460. data/src/core/{lib/debug → telemetry}/stats_data.h +4 -4
  461. data/src/core/{lib/channel → telemetry}/tcp_tracer.h +3 -3
  462. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +12 -13
  463. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +25 -27
  464. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +32 -33
  465. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -1
  466. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -1
  467. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +5 -4
  468. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +5 -3
  469. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  470. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +4 -3
  471. data/src/core/tsi/fake_transport_security.cc +14 -17
  472. data/src/core/tsi/local_transport_security.cc +6 -5
  473. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +4 -4
  474. data/src/core/tsi/ssl_transport_security.cc +76 -81
  475. data/src/core/tsi/ssl_transport_security_utils.cc +74 -18
  476. data/src/core/tsi/ssl_transport_security_utils.h +11 -0
  477. data/src/core/tsi/transport_security.cc +0 -4
  478. data/src/core/tsi/transport_security.h +0 -2
  479. data/src/core/tsi/transport_security_interface.h +0 -4
  480. data/src/core/{lib/gpr → util}/alloc.h +3 -3
  481. data/src/core/{lib/gpr → util}/android/log.cc +0 -19
  482. data/src/core/{lib/gpr → util}/atm.cc +1 -1
  483. data/src/core/{ext/gcp/metadata_query.cc → util/gcp_metadata_query.cc} +25 -26
  484. data/src/core/{ext/gcp/metadata_query.h → util/gcp_metadata_query.h} +11 -11
  485. data/src/core/{lib/http → util/http_client}/format_request.cc +4 -3
  486. data/src/core/{lib/http → util/http_client}/format_request.h +6 -5
  487. data/src/core/{lib/http → util/http_client}/httpcli.cc +9 -10
  488. data/src/core/{lib/http → util/http_client}/httpcli.h +6 -5
  489. data/src/core/{lib/http → util/http_client}/httpcli_security_connector.cc +9 -9
  490. data/src/core/{lib/http → util/http_client}/httpcli_ssl_credentials.h +5 -4
  491. data/src/core/{lib/http → util/http_client}/parser.cc +4 -5
  492. data/src/core/{lib/http → util/http_client}/parser.h +5 -6
  493. data/src/core/{lib → util}/json/json.h +5 -4
  494. data/src/core/{lib → util}/json/json_args.h +5 -5
  495. data/src/core/{lib → util}/json/json_channel_args.h +6 -6
  496. data/src/core/{lib → util}/json/json_object_loader.cc +3 -2
  497. data/src/core/{lib → util}/json/json_object_loader.h +7 -7
  498. data/src/core/{lib → util}/json/json_reader.cc +3 -2
  499. data/src/core/{lib → util}/json/json_reader.h +6 -6
  500. data/src/core/{lib → util}/json/json_util.cc +4 -4
  501. data/src/core/{lib → util}/json/json_util.h +6 -6
  502. data/src/core/{lib → util}/json/json_writer.cc +3 -3
  503. data/src/core/{lib → util}/json/json_writer.h +6 -6
  504. data/src/core/{lib/gpr → util}/linux/log.cc +0 -45
  505. data/src/core/util/log.cc +165 -0
  506. data/src/core/{lib/gpr → util}/msys/tmpfile.cc +2 -2
  507. data/src/core/{lib/gpr → util}/posix/cpu.cc +1 -1
  508. data/src/core/{lib/gpr → util}/posix/log.cc +0 -42
  509. data/src/core/{lib/gpr → util}/posix/time.cc +1 -1
  510. data/src/core/{lib/gpr → util}/posix/tmpfile.cc +2 -2
  511. data/src/core/{lib/gpr → util}/spinlock.h +3 -3
  512. data/src/core/{lib/gpr → util}/string.cc +2 -2
  513. data/src/core/{lib/gpr → util}/string.h +3 -3
  514. data/src/core/{lib/gpr → util}/time_precise.cc +1 -1
  515. data/src/core/{lib/gpr → util}/time_precise.h +3 -3
  516. data/src/core/{lib/gpr → util}/tmpfile.h +3 -3
  517. data/src/core/{lib/gpr → util}/useful.h +3 -3
  518. data/src/core/{lib/gpr → util}/windows/log.cc +1 -44
  519. data/src/core/{lib/gpr → util}/windows/string.cc +1 -1
  520. data/src/core/{lib/gpr → util}/windows/string_util.cc +1 -1
  521. data/src/core/{lib/gpr → util}/windows/time.cc +1 -1
  522. data/src/core/{lib/gpr → util}/windows/tmpfile.cc +1 -1
  523. data/src/core/xds/grpc/certificate_provider_store.cc +3 -3
  524. data/src/core/xds/grpc/certificate_provider_store.h +4 -4
  525. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +3 -3
  526. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +3 -3
  527. data/src/core/xds/grpc/xds_audit_logger_registry.h +1 -1
  528. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +5 -5
  529. data/src/core/xds/grpc/xds_bootstrap_grpc.h +3 -3
  530. data/src/core/xds/grpc/xds_certificate_provider.h +1 -1
  531. data/src/core/xds/grpc/xds_client_grpc.cc +27 -23
  532. data/src/core/xds/grpc/xds_client_grpc.h +2 -2
  533. data/src/core/xds/grpc/xds_cluster.cc +4 -5
  534. data/src/core/xds/grpc/xds_cluster.h +1 -1
  535. data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
  536. data/src/core/xds/grpc/xds_cluster_specifier_plugin.h +1 -1
  537. data/src/core/xds/grpc/xds_common_types.cc +1 -1
  538. data/src/core/xds/grpc/xds_common_types.h +1 -1
  539. data/src/core/xds/grpc/xds_endpoint.cc +4 -5
  540. data/src/core/xds/grpc/xds_http_fault_filter.cc +2 -2
  541. data/src/core/xds/grpc/xds_http_filters.h +2 -2
  542. data/src/core/xds/grpc/xds_http_rbac_filter.cc +3 -3
  543. data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +2 -2
  544. data/src/core/xds/grpc/xds_lb_policy_registry.h +1 -1
  545. data/src/core/xds/grpc/xds_listener.cc +4 -6
  546. data/src/core/xds/grpc/xds_route_config.cc +7 -8
  547. data/src/core/xds/grpc/xds_transport_grpc.cc +2 -2
  548. data/src/core/xds/grpc/xds_transport_grpc.h +1 -1
  549. data/src/core/xds/xds_client/xds_api.cc +5 -9
  550. data/src/core/xds/xds_client/xds_bootstrap.cc +1 -1
  551. data/src/core/xds/xds_client/xds_bootstrap.h +1 -1
  552. data/src/core/xds/xds_client/xds_client.cc +39 -45
  553. data/src/core/xds/xds_client/xds_client.h +0 -3
  554. data/src/core/xds/xds_client/xds_client_stats.cc +6 -6
  555. data/src/core/xds/xds_client/xds_client_stats.h +2 -2
  556. data/src/ruby/bin/math_pb.rb +1 -22
  557. data/src/ruby/ext/grpc/rb_call.c +8 -1
  558. data/src/ruby/ext/grpc/rb_completion_queue.c +15 -32
  559. data/src/ruby/ext/grpc/rb_completion_queue.h +7 -1
  560. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +2 -2
  561. data/src/ruby/ext/grpc/rb_server.c +39 -22
  562. data/src/ruby/lib/grpc/version.rb +1 -1
  563. data/src/ruby/pb/grpc/health/v1/health_pb.rb +1 -22
  564. data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services_pb.rb +5 -5
  565. data/src/ruby/pb/grpc/testing/metrics_pb.rb +10 -19
  566. data/src/ruby/pb/grpc/testing/metrics_services_pb.rb +5 -5
  567. data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +1 -22
  568. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +1 -22
  569. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +1 -22
  570. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +4 -0
  571. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +12 -12
  572. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +66 -41
  573. data/third_party/boringssl-with-bazel/src/crypto/dilithium/dilithium.c +1497 -0
  574. data/third_party/boringssl-with-bazel/src/crypto/dilithium/internal.h +58 -0
  575. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +10 -3
  576. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +0 -2
  577. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +2 -0
  578. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +5 -0
  579. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +45 -1
  580. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +33 -23
  581. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c +3 -6
  582. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +9 -4
  583. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +6 -0
  584. data/third_party/boringssl-with-bazel/src/crypto/internal.h +7 -0
  585. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +0 -4
  586. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_utl.c +49 -16
  587. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +0 -10
  588. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +7 -17
  589. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +8 -6
  590. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +3 -0
  591. data/third_party/boringssl-with-bazel/src/include/openssl/experimental/dilithium.h +125 -0
  592. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +0 -23
  593. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +1 -1
  594. data/third_party/boringssl-with-bazel/src/ssl/internal.h +4 -10
  595. metadata +103 -93
  596. data/src/core/ext/transport/chttp2/transport/http_trace.cc +0 -19
  597. data/src/core/ext/transport/chttp2/transport/http_trace.h +0 -24
  598. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -23
  599. data/src/core/handshaker/security/tsi_error.cc +0 -31
  600. data/src/core/handshaker/security/tsi_error.h +0 -30
  601. data/src/core/lib/channel/channel_stack_trace.cc +0 -19
  602. data/src/core/lib/channel/channel_stack_trace.h +0 -24
  603. data/src/core/lib/channel/context.h +0 -105
  604. data/src/core/lib/channel/metrics.cc +0 -334
  605. data/src/core/lib/channel/metrics.h +0 -365
  606. data/src/core/lib/event_engine/trace.cc +0 -25
  607. data/src/core/lib/gpr/log.cc +0 -166
  608. data/src/core/lib/iomgr/ev_windows.cc +0 -30
  609. data/src/core/lib/promise/trace.cc +0 -20
  610. data/src/core/lib/promise/trace.h +0 -24
  611. data/src/core/lib/resource_quota/trace.cc +0 -19
  612. data/src/core/lib/resource_quota/trace.h +0 -24
  613. data/src/core/lib/slice/slice_refcount.cc +0 -20
  614. data/src/core/lib/surface/api_trace.cc +0 -25
  615. data/src/core/lib/surface/call_trace.h +0 -24
  616. data/src/core/lib/surface/wait_for_cq_end_op.cc +0 -75
  617. data/src/core/lib/surface/wait_for_cq_end_op.h +0 -72
  618. data/src/core/lib/transport/batch_builder.cc +0 -172
  619. data/src/core/lib/transport/batch_builder.h +0 -474
  620. data/src/core/resolver/xds/xds_resolver_trace.cc +0 -25
  621. data/src/core/resolver/xds/xds_resolver_trace.h +0 -30
  622. data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +0 -122
  623. /data/src/core/{lib/gpr → util}/alloc.cc +0 -0
  624. /data/src/core/{lib/gpr → util}/iphone/cpu.cc +0 -0
  625. /data/src/core/{lib/gpr → util}/linux/cpu.cc +0 -0
  626. /data/src/core/{lib/gpr → util}/posix/string.cc +0 -0
  627. /data/src/core/{lib/gpr → util}/posix/sync.cc +0 -0
  628. /data/src/core/{lib/gpr → util}/sync.cc +0 -0
  629. /data/src/core/{lib/gpr → util}/sync_abseil.cc +0 -0
  630. /data/src/core/{lib/gpr → util}/time.cc +0 -0
  631. /data/src/core/{lib/gpr → util}/windows/cpu.cc +0 -0
  632. /data/src/core/{lib/gpr → util}/windows/sync.cc +0 -0
@@ -68,7 +68,6 @@
68
68
  #include "src/core/lib/config/core_configuration.h"
69
69
  #include "src/core/lib/debug/trace.h"
70
70
  #include "src/core/lib/experiments/experiments.h"
71
- #include "src/core/lib/gpr/useful.h"
72
71
  #include "src/core/lib/gprpp/crash.h"
73
72
  #include "src/core/lib/gprpp/debug_location.h"
74
73
  #include "src/core/lib/gprpp/manual_constructor.h"
@@ -80,7 +79,6 @@
80
79
  #include "src/core/lib/iomgr/polling_entity.h"
81
80
  #include "src/core/lib/iomgr/pollset_set.h"
82
81
  #include "src/core/lib/iomgr/resolved_address.h"
83
- #include "src/core/lib/json/json.h"
84
82
  #include "src/core/lib/promise/cancel_callback.h"
85
83
  #include "src/core/lib/promise/context.h"
86
84
  #include "src/core/lib/promise/latch.h"
@@ -104,6 +102,8 @@
104
102
  #include "src/core/resolver/resolver_registry.h"
105
103
  #include "src/core/service_config/service_config_call_data.h"
106
104
  #include "src/core/service_config/service_config_impl.h"
105
+ #include "src/core/util/json/json.h"
106
+ #include "src/core/util/useful.h"
107
107
 
108
108
  //
109
109
  // Client channel filter
@@ -113,10 +113,6 @@ namespace grpc_core {
113
113
 
114
114
  using internal::ClientChannelMethodParsedConfig;
115
115
 
116
- TraceFlag grpc_client_channel_trace(false, "client_channel");
117
- TraceFlag grpc_client_channel_call_trace(false, "client_channel_call");
118
- TraceFlag grpc_client_channel_lb_call_trace(false, "client_channel_lb_call");
119
-
120
116
  //
121
117
  // ClientChannelFilter::CallData definition
122
118
  //
@@ -159,7 +155,6 @@ class ClientChannelFilter::CallData {
159
155
  virtual Arena* arena() const = 0;
160
156
  virtual grpc_polling_entity* pollent() = 0;
161
157
  virtual grpc_metadata_batch* send_initial_metadata() = 0;
162
- virtual grpc_call_context_element* call_context() const = 0;
163
158
 
164
159
  // Helper function for CheckResolution(). Returns true if the call
165
160
  // can continue (i.e., there is a valid resolution result, or there is
@@ -222,9 +217,6 @@ class ClientChannelFilter::FilterBasedCallData final
222
217
  return pending_batches_[0]
223
218
  ->payload->send_initial_metadata.send_initial_metadata;
224
219
  }
225
- grpc_call_context_element* call_context() const override {
226
- return call_context_;
227
- }
228
220
 
229
221
  // Returns the index into pending_batches_ to be used for batch.
230
222
  static size_t GetBatchIndex(grpc_transport_stream_op_batch* batch);
@@ -269,8 +261,7 @@ class ClientChannelFilter::FilterBasedCallData final
269
261
  void ResetDeadline(Duration timeout) override {
270
262
  const Timestamp per_method_deadline =
271
263
  Timestamp::FromCycleCounterRoundUp(call_start_time_) + timeout;
272
- static_cast<Call*>(call_context_[GRPC_CONTEXT_CALL].value)
273
- ->UpdateDeadline(per_method_deadline);
264
+ arena_->GetContext<Call>()->UpdateDeadline(per_method_deadline);
274
265
  }
275
266
 
276
267
  void CreateDynamicCall();
@@ -279,7 +270,6 @@ class ClientChannelFilter::FilterBasedCallData final
279
270
  void* arg, grpc_error_handle error);
280
271
 
281
272
  grpc_slice path_; // Request path.
282
- grpc_call_context_element* call_context_;
283
273
  gpr_cycle_counter call_start_time_;
284
274
  Timestamp deadline_;
285
275
 
@@ -310,122 +300,12 @@ class ClientChannelFilter::FilterBasedCallData final
310
300
  grpc_error_handle cancel_error_;
311
301
  };
312
302
 
313
- class ClientChannelFilter::PromiseBasedCallData final
314
- : public ClientChannelFilter::CallData {
315
- public:
316
- explicit PromiseBasedCallData(ClientChannelFilter* chand) : chand_(chand) {}
317
-
318
- ~PromiseBasedCallData() override {
319
- if (was_queued_ && client_initial_metadata_ != nullptr) {
320
- MutexLock lock(&chand_->resolution_mu_);
321
- RemoveCallFromResolverQueuedCallsLocked();
322
- chand_->resolver_queued_calls_.erase(this);
323
- }
324
- }
325
-
326
- ArenaPromise<absl::StatusOr<CallArgs>> MakeNameResolutionPromise(
327
- CallArgs call_args) {
328
- pollent_ = NowOrNever(call_args.polling_entity->WaitAndCopy()).value();
329
- client_initial_metadata_ = std::move(call_args.client_initial_metadata);
330
- // If we're still in IDLE, we need to start resolving.
331
- if (GPR_UNLIKELY(chand_->CheckConnectivityState(false) ==
332
- GRPC_CHANNEL_IDLE)) {
333
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
334
- gpr_log(GPR_INFO, "chand=%p calld=%p: %striggering exit idle", chand_,
335
- this, GetContext<Activity>()->DebugTag().c_str());
336
- }
337
- // Bounce into the control plane work serializer to start resolving.
338
- GRPC_CHANNEL_STACK_REF(chand_->owning_stack_, "ExitIdle");
339
- chand_->work_serializer_->Run(
340
- [chand = chand_]()
341
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
342
- chand->CheckConnectivityState(/*try_to_connect=*/true);
343
- GRPC_CHANNEL_STACK_UNREF(chand->owning_stack_, "ExitIdle");
344
- },
345
- DEBUG_LOCATION);
346
- }
347
- return [this, call_args = std::move(
348
- call_args)]() mutable -> Poll<absl::StatusOr<CallArgs>> {
349
- auto result = CheckResolution(was_queued_);
350
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
351
- gpr_log(GPR_INFO, "chand=%p calld=%p: %sCheckResolution returns %s",
352
- chand_, this, GetContext<Activity>()->DebugTag().c_str(),
353
- result.has_value() ? result->ToString().c_str() : "Pending");
354
- }
355
- if (!result.has_value()) return Pending{};
356
- if (!result->ok()) return *result;
357
- call_args.client_initial_metadata = std::move(client_initial_metadata_);
358
- return std::move(call_args);
359
- };
360
- }
361
-
362
- private:
363
- ClientChannelFilter* chand() const override { return chand_; }
364
- Arena* arena() const override { return GetContext<Arena>(); }
365
- grpc_polling_entity* pollent() override { return &pollent_; }
366
- grpc_metadata_batch* send_initial_metadata() override {
367
- return client_initial_metadata_.get();
368
- }
369
- grpc_call_context_element* call_context() const override {
370
- return GetContext<grpc_call_context_element>();
371
- }
372
-
373
- void OnAddToQueueLocked() override
374
- ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannelFilter::resolution_mu_) {
375
- waker_ = GetContext<Activity>()->MakeNonOwningWaker();
376
- was_queued_ = true;
377
- }
378
-
379
- void RetryCheckResolutionLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(
380
- &ClientChannelFilter::resolution_mu_) override {
381
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
382
- gpr_log(GPR_INFO, "chand=%p calld=%p: RetryCheckResolutionLocked(): %s",
383
- chand_, this, waker_.ActivityDebugTag().c_str());
384
- }
385
- waker_.WakeupAsync();
386
- }
387
-
388
- void ResetDeadline(Duration timeout) override {
389
- Call* call = GetContext<Call>();
390
- CallContext* call_context = GetContext<CallContext>();
391
- const Timestamp per_method_deadline =
392
- Timestamp::FromCycleCounterRoundUp(call_context->call_start_time()) +
393
- timeout;
394
- call->UpdateDeadline(per_method_deadline);
395
- }
396
-
397
- ClientChannelFilter* chand_;
398
- grpc_polling_entity pollent_;
399
- ClientMetadataHandle client_initial_metadata_;
400
- bool was_queued_ = false;
401
- Waker waker_ ABSL_GUARDED_BY(&ClientChannelFilter::resolution_mu_);
402
- };
403
-
404
303
  //
405
304
  // Filter vtable
406
305
  //
407
306
 
408
- const grpc_channel_filter ClientChannelFilter::kFilterVtableWithPromises = {
307
+ const grpc_channel_filter ClientChannelFilter::kFilter = {
409
308
  ClientChannelFilter::FilterBasedCallData::StartTransportStreamOpBatch,
410
- ClientChannelFilter::MakeCallPromise,
411
- /* init_call: */ nullptr,
412
- ClientChannelFilter::StartTransportOp,
413
- sizeof(ClientChannelFilter::FilterBasedCallData),
414
- ClientChannelFilter::FilterBasedCallData::Init,
415
- ClientChannelFilter::FilterBasedCallData::SetPollent,
416
- ClientChannelFilter::FilterBasedCallData::Destroy,
417
- sizeof(ClientChannelFilter),
418
- ClientChannelFilter::Init,
419
- grpc_channel_stack_no_post_init,
420
- ClientChannelFilter::Destroy,
421
- ClientChannelFilter::GetChannelInfo,
422
- "client-channel",
423
- };
424
-
425
- const grpc_channel_filter ClientChannelFilter::kFilterVtableWithoutPromises = {
426
- ClientChannelFilter::FilterBasedCallData::StartTransportStreamOpBatch,
427
- nullptr,
428
- /* init_call: */ nullptr,
429
309
  ClientChannelFilter::StartTransportOp,
430
310
  sizeof(ClientChannelFilter::FilterBasedCallData),
431
311
  ClientChannelFilter::FilterBasedCallData::Init,
@@ -445,10 +325,9 @@ const grpc_channel_filter ClientChannelFilter::kFilterVtableWithoutPromises = {
445
325
 
446
326
  namespace {
447
327
 
448
- ClientChannelServiceConfigCallData* GetServiceConfigCallData(
449
- grpc_call_context_element* context) {
450
- return static_cast<ClientChannelServiceConfigCallData*>(
451
- context[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value);
328
+ ClientChannelServiceConfigCallData* GetServiceConfigCallData(Arena* arena) {
329
+ return DownCast<ClientChannelServiceConfigCallData*>(
330
+ arena->GetContext<ServiceConfigCallData>());
452
331
  }
453
332
 
454
333
  class DynamicTerminationFilter final {
@@ -476,19 +355,6 @@ class DynamicTerminationFilter final {
476
355
  static void GetChannelInfo(grpc_channel_element* /*elem*/,
477
356
  const grpc_channel_info* /*info*/) {}
478
357
 
479
- static ArenaPromise<ServerMetadataHandle> MakeCallPromise(
480
- grpc_channel_element* elem, CallArgs call_args, NextPromiseFactory) {
481
- auto* chand = static_cast<DynamicTerminationFilter*>(elem->channel_data);
482
- return chand->chand_->CreateLoadBalancedCallPromise(
483
- std::move(call_args),
484
- []() {
485
- auto* service_config_call_data =
486
- GetServiceConfigCallData(GetContext<grpc_call_context_element>());
487
- service_config_call_data->Commit();
488
- },
489
- /*is_transparent_retry=*/false);
490
- }
491
-
492
358
  private:
493
359
  explicit DynamicTerminationFilter(const ChannelArgs& args)
494
360
  : chand_(args.GetObject<ClientChannelFilter>()) {}
@@ -532,21 +398,18 @@ class DynamicTerminationFilter::CallData final {
532
398
  auto* calld = static_cast<CallData*>(elem->call_data);
533
399
  auto* chand = static_cast<DynamicTerminationFilter*>(elem->channel_data);
534
400
  ClientChannelFilter* client_channel = chand->chand_;
535
- grpc_call_element_args args = {calld->owning_call_, nullptr,
536
- calld->call_context_, calld->path_,
537
- /*start_time=*/0, calld->deadline_,
538
- calld->arena_, calld->call_combiner_};
539
- auto* service_config_call_data =
540
- GetServiceConfigCallData(calld->call_context_);
401
+ grpc_call_element_args args = {calld->owning_call_, nullptr,
402
+ calld->path_,
403
+ /*start_time=*/0, calld->deadline_,
404
+ calld->arena_, calld->call_combiner_};
405
+ auto* service_config_call_data = GetServiceConfigCallData(calld->arena_);
541
406
  calld->lb_call_ = client_channel->CreateLoadBalancedCall(
542
407
  args, pollent, nullptr,
543
408
  [service_config_call_data]() { service_config_call_data->Commit(); },
544
409
  /*is_transparent_retry=*/false);
545
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
546
- gpr_log(GPR_INFO,
547
- "chand=%p dynamic_termination_calld=%p: create lb_call=%p", chand,
548
- client_channel, calld->lb_call_.get());
549
- }
410
+ GRPC_TRACE_LOG(client_channel_call, INFO)
411
+ << "chand=" << chand << " dynamic_termination_calld=" << client_channel
412
+ << ": create lb_call=" << calld->lb_call_.get();
550
413
  }
551
414
 
552
415
  private:
@@ -555,8 +418,7 @@ class DynamicTerminationFilter::CallData final {
555
418
  deadline_(args.deadline),
556
419
  arena_(args.arena),
557
420
  owning_call_(args.call_stack),
558
- call_combiner_(args.call_combiner),
559
- call_context_(args.context) {}
421
+ call_combiner_(args.call_combiner) {}
560
422
 
561
423
  ~CallData() { CSliceUnref(path_); }
562
424
 
@@ -565,15 +427,12 @@ class DynamicTerminationFilter::CallData final {
565
427
  Arena* arena_;
566
428
  grpc_call_stack* owning_call_;
567
429
  CallCombiner* call_combiner_;
568
- grpc_call_context_element* call_context_;
569
430
 
570
431
  OrphanablePtr<ClientChannelFilter::FilterBasedLoadBalancedCall> lb_call_;
571
432
  };
572
433
 
573
434
  const grpc_channel_filter DynamicTerminationFilter::kFilterVtable = {
574
435
  DynamicTerminationFilter::CallData::StartTransportStreamOpBatch,
575
- DynamicTerminationFilter::MakeCallPromise,
576
- /* init_call: */ nullptr,
577
436
  DynamicTerminationFilter::StartTransportOp,
578
437
  sizeof(DynamicTerminationFilter::CallData),
579
438
  DynamicTerminationFilter::CallData::Init,
@@ -601,9 +460,8 @@ class ClientChannelFilter::ResolverResultHandler final
601
460
  }
602
461
 
603
462
  ~ResolverResultHandler() override {
604
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
605
- gpr_log(GPR_INFO, "chand=%p: resolver shutdown complete", chand_);
606
- }
463
+ GRPC_TRACE_LOG(client_channel, INFO)
464
+ << "chand=" << chand_ << ": resolver shutdown complete";
607
465
  GRPC_CHANNEL_STACK_UNREF(chand_->owning_stack_, "ResolverResultHandler");
608
466
  }
609
467
 
@@ -633,16 +491,14 @@ class ClientChannelFilter::SubchannelWrapper final
633
491
  public:
634
492
  SubchannelWrapper(ClientChannelFilter* chand,
635
493
  RefCountedPtr<Subchannel> subchannel)
636
- : SubchannelInterface(GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)
494
+ : SubchannelInterface(GRPC_TRACE_FLAG_ENABLED(client_channel)
637
495
  ? "SubchannelWrapper"
638
496
  : nullptr),
639
497
  chand_(chand),
640
498
  subchannel_(std::move(subchannel)) {
641
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
642
- gpr_log(GPR_INFO,
643
- "chand=%p: creating subchannel wrapper %p for subchannel %p",
644
- chand, this, subchannel_.get());
645
- }
499
+ GRPC_TRACE_LOG(client_channel, INFO)
500
+ << "chand=" << chand << ": creating subchannel wrapper " << this
501
+ << " for subchannel " << subchannel_.get();
646
502
  GRPC_CHANNEL_STACK_REF(chand_->owning_stack_, "SubchannelWrapper");
647
503
  #ifndef NDEBUG
648
504
  DCHECK(chand_->work_serializer_->RunningInWorkSerializer());
@@ -663,11 +519,9 @@ class ClientChannelFilter::SubchannelWrapper final
663
519
  }
664
520
 
665
521
  ~SubchannelWrapper() override {
666
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
667
- gpr_log(GPR_INFO,
668
- "chand=%p: destroying subchannel wrapper %p for subchannel %p",
669
- chand_, this, subchannel_.get());
670
- }
522
+ GRPC_TRACE_LOG(client_channel, INFO)
523
+ << "chand=" << chand_ << ": destroying subchannel wrapper " << this
524
+ << "for subchannel " << subchannel_.get();
671
525
  if (!IsWorkSerializerDispatchEnabled()) {
672
526
  chand_->subchannel_wrappers_.erase(this);
673
527
  if (chand_->channelz_node_ != nullptr) {
@@ -800,12 +654,11 @@ class ClientChannelFilter::SubchannelWrapper final
800
654
  void OnConnectivityStateChange(
801
655
  RefCountedPtr<ConnectivityStateWatcherInterface> self,
802
656
  grpc_connectivity_state state, const absl::Status& status) override {
803
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
804
- gpr_log(GPR_INFO,
805
- "chand=%p: connectivity change for subchannel wrapper %p "
806
- "subchannel %p; hopping into work_serializer",
807
- parent_->chand_, parent_.get(), parent_->subchannel_.get());
808
- }
657
+ GRPC_TRACE_LOG(client_channel, INFO)
658
+ << "chand=" << parent_->chand_
659
+ << ": connectivity change for subchannel wrapper " << parent_.get()
660
+ << " subchannel " << parent_->subchannel_.get()
661
+ << "hopping into work_serializer";
809
662
  self.release(); // Held by callback.
810
663
  parent_->chand_->work_serializer_->Run(
811
664
  [this, state, status]() ABSL_EXCLUSIVE_LOCKS_REQUIRED(
@@ -824,15 +677,13 @@ class ClientChannelFilter::SubchannelWrapper final
824
677
  void ApplyUpdateInControlPlaneWorkSerializer(grpc_connectivity_state state,
825
678
  const absl::Status& status)
826
679
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(*parent_->chand_->work_serializer_) {
827
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
828
- gpr_log(GPR_INFO,
829
- "chand=%p: processing connectivity change in work serializer "
830
- "for subchannel wrapper %p subchannel %p watcher=%p "
831
- "state=%s status=%s",
832
- parent_->chand_, parent_.get(), parent_->subchannel_.get(),
833
- watcher_.get(), ConnectivityStateName(state),
834
- status.ToString().c_str());
835
- }
680
+ GRPC_TRACE_LOG(client_channel, INFO)
681
+ << "chand=" << parent_->chand_
682
+ << ": processing connectivity change in work serializer for "
683
+ "subchannel wrapper "
684
+ << parent_.get() << " subchannel " << parent_->subchannel_.get()
685
+ << " watcher=" << watcher_.get()
686
+ << " state=" << ConnectivityStateName(state) << " status=" << status;
836
687
  absl::optional<absl::Cord> keepalive_throttling =
837
688
  status.GetPayload(kKeepaliveThrottlingKey);
838
689
  if (keepalive_throttling.has_value()) {
@@ -841,10 +692,10 @@ class ClientChannelFilter::SubchannelWrapper final
841
692
  &new_keepalive_time)) {
842
693
  if (new_keepalive_time > parent_->chand_->keepalive_time_) {
843
694
  parent_->chand_->keepalive_time_ = new_keepalive_time;
844
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
845
- gpr_log(GPR_INFO, "chand=%p: throttling keepalive time to %d",
846
- parent_->chand_, parent_->chand_->keepalive_time_);
847
- }
695
+ GRPC_TRACE_LOG(client_channel, INFO)
696
+ << "chand=" << parent_->chand_
697
+ << ": throttling keepalive time to "
698
+ << parent_->chand_->keepalive_time_;
848
699
  // Propagate the new keepalive time to all subchannels. This is so
849
700
  // that new transports created by any subchannel (and not just the
850
701
  // subchannel that received the GOAWAY), use the new keepalive time.
@@ -1109,7 +960,7 @@ class ClientChannelFilter::ClientChannelControlHelper final
1109
960
  const ChannelArgs& args) override
1110
961
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
1111
962
  if (chand_->resolver_ == nullptr) return nullptr; // Shutting down.
1112
- ChannelArgs subchannel_args = ClientChannelFilter::MakeSubchannelArgs(
963
+ ChannelArgs subchannel_args = Subchannel::MakeSubchannelArgs(
1113
964
  args, per_address_args, chand_->subchannel_pool_,
1114
965
  chand_->default_authority_);
1115
966
  // Create subchannel.
@@ -1127,14 +978,13 @@ class ClientChannelFilter::ClientChannelControlHelper final
1127
978
  RefCountedPtr<LoadBalancingPolicy::SubchannelPicker> picker)
1128
979
  override ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
1129
980
  if (chand_->resolver_ == nullptr) return; // Shutting down.
1130
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1131
- const char* extra = chand_->disconnect_error_.ok()
1132
- ? ""
1133
- : " (ignoring -- channel shutting down)";
1134
- gpr_log(GPR_INFO, "chand=%p: update: state=%s status=(%s) picker=%p%s",
1135
- chand_, ConnectivityStateName(state), status.ToString().c_str(),
1136
- picker.get(), extra);
1137
- }
981
+ GRPC_TRACE_LOG(client_channel, INFO)
982
+ << "chand=" << chand_
983
+ << ": update: state=" << ConnectivityStateName(state) << " status=("
984
+ << status << ") picker=" << picker.get()
985
+ << (chand_->disconnect_error_.ok()
986
+ ? ""
987
+ : " (ignoring -- channel shutting down)");
1138
988
  // Do update only if not shutting down.
1139
989
  if (chand_->disconnect_error_.ok()) {
1140
990
  chand_->UpdateStateAndPickerLocked(state, status, "helper",
@@ -1145,9 +995,8 @@ class ClientChannelFilter::ClientChannelControlHelper final
1145
995
  void RequestReresolution() override
1146
996
  ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_->work_serializer_) {
1147
997
  if (chand_->resolver_ == nullptr) return; // Shutting down.
1148
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1149
- gpr_log(GPR_INFO, "chand=%p: started name re-resolving", chand_);
1150
- }
998
+ GRPC_TRACE_LOG(client_channel, INFO)
999
+ << "chand=" << chand_ << ": started name re-resolving";
1151
1000
  chand_->resolver_->RequestReresolutionLocked();
1152
1001
  }
1153
1002
 
@@ -1203,8 +1052,7 @@ class ClientChannelFilter::ClientChannelControlHelper final
1203
1052
  grpc_error_handle ClientChannelFilter::Init(grpc_channel_element* elem,
1204
1053
  grpc_channel_element_args* args) {
1205
1054
  CHECK(args->is_last);
1206
- CHECK(elem->filter == &kFilterVtableWithPromises ||
1207
- elem->filter == &kFilterVtableWithoutPromises);
1055
+ CHECK(elem->filter == &kFilter);
1208
1056
  grpc_error_handle error;
1209
1057
  new (elem->channel_data) ClientChannelFilter(args, &error);
1210
1058
  return error;
@@ -1240,10 +1088,9 @@ ClientChannelFilter::ClientChannelFilter(grpc_channel_element_args* args,
1240
1088
  std::make_shared<WorkSerializer>(*args->channel_stack->event_engine)),
1241
1089
  state_tracker_("client_channel", GRPC_CHANNEL_IDLE),
1242
1090
  subchannel_pool_(GetSubchannelPool(channel_args_)) {
1243
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1244
- gpr_log(GPR_INFO, "chand=%p: creating client_channel for channel stack %p",
1245
- this, owning_stack_);
1246
- }
1091
+ GRPC_TRACE_LOG(client_channel, INFO)
1092
+ << "chand=" << this << ": creating client_channel for channel stack "
1093
+ << owning_stack_;
1247
1094
  // Start backup polling.
1248
1095
  grpc_client_channel_start_backup_polling(interested_parties_);
1249
1096
  // Check client channel factory.
@@ -1312,30 +1159,14 @@ ClientChannelFilter::ClientChannelFilter(grpc_channel_element_args* args,
1312
1159
  }
1313
1160
 
1314
1161
  ClientChannelFilter::~ClientChannelFilter() {
1315
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1316
- gpr_log(GPR_INFO, "chand=%p: destroying channel", this);
1317
- }
1162
+ GRPC_TRACE_LOG(client_channel, INFO)
1163
+ << "chand=" << this << ": destroying channel";
1318
1164
  DestroyResolverAndLbPolicyLocked();
1319
1165
  // Stop backup polling.
1320
1166
  grpc_client_channel_stop_backup_polling(interested_parties_);
1321
1167
  grpc_pollset_set_destroy(interested_parties_);
1322
1168
  }
1323
1169
 
1324
- ArenaPromise<ServerMetadataHandle> ClientChannelFilter::MakeCallPromise(
1325
- grpc_channel_element* elem, CallArgs call_args, NextPromiseFactory) {
1326
- auto* chand = static_cast<ClientChannelFilter*>(elem->channel_data);
1327
- // TODO(roth): Is this the right lifetime story for calld?
1328
- auto* calld = GetContext<Arena>()->ManagedNew<PromiseBasedCallData>(chand);
1329
- return TrySeq(
1330
- // Name resolution.
1331
- calld->MakeNameResolutionPromise(std::move(call_args)),
1332
- // Dynamic filter stack.
1333
- [calld](CallArgs call_args) mutable {
1334
- return calld->dynamic_filters()->channel_stack()->MakeClientCallPromise(
1335
- std::move(call_args));
1336
- });
1337
- }
1338
-
1339
1170
  OrphanablePtr<ClientChannelFilter::FilterBasedLoadBalancedCall>
1340
1171
  ClientChannelFilter::CreateLoadBalancedCall(
1341
1172
  const grpc_call_element_args& args, grpc_polling_entity* pollent,
@@ -1348,42 +1179,6 @@ ClientChannelFilter::CreateLoadBalancedCall(
1348
1179
  std::move(on_commit), is_transparent_retry));
1349
1180
  }
1350
1181
 
1351
- ArenaPromise<ServerMetadataHandle>
1352
- ClientChannelFilter::CreateLoadBalancedCallPromise(
1353
- CallArgs call_args, absl::AnyInvocable<void()> on_commit,
1354
- bool is_transparent_retry) {
1355
- OrphanablePtr<PromiseBasedLoadBalancedCall> lb_call(
1356
- GetContext<Arena>()->New<PromiseBasedLoadBalancedCall>(
1357
- this, std::move(on_commit), is_transparent_retry));
1358
- auto* call_ptr = lb_call.get();
1359
- return call_ptr->MakeCallPromise(std::move(call_args), std::move(lb_call));
1360
- }
1361
-
1362
- ChannelArgs ClientChannelFilter::MakeSubchannelArgs(
1363
- const ChannelArgs& channel_args, const ChannelArgs& address_args,
1364
- const RefCountedPtr<SubchannelPoolInterface>& subchannel_pool,
1365
- const std::string& channel_default_authority) {
1366
- // Note that we start with the channel-level args and then apply the
1367
- // per-address args, so that if a value is present in both, the one
1368
- // in the channel-level args is used. This is particularly important
1369
- // for the GRPC_ARG_DEFAULT_AUTHORITY arg, which we want to allow
1370
- // resolvers to set on a per-address basis only if the application
1371
- // did not explicitly set it at the channel level.
1372
- return channel_args.UnionWith(address_args)
1373
- .SetObject(subchannel_pool)
1374
- // If we haven't already set the default authority arg (i.e., it
1375
- // was not explicitly set by the application nor overridden by
1376
- // the resolver), add it from the channel's default.
1377
- .SetIfUnset(GRPC_ARG_DEFAULT_AUTHORITY, channel_default_authority)
1378
- // Remove channel args that should not affect subchannel
1379
- // uniqueness.
1380
- .Remove(GRPC_ARG_HEALTH_CHECK_SERVICE_NAME)
1381
- .Remove(GRPC_ARG_INHIBIT_HEALTH_CHECKING)
1382
- .Remove(GRPC_ARG_CHANNELZ_CHANNEL_NODE)
1383
- // Remove all keys with the no-subchannel prefix.
1384
- .RemoveAllKeysWithPrefix(GRPC_ARG_NO_SUBCHANNEL_PREFIX);
1385
- }
1386
-
1387
1182
  void ClientChannelFilter::ReprocessQueuedResolverCalls() {
1388
1183
  for (CallData* calld : resolver_queued_calls_) {
1389
1184
  calld->RemoveCallFromResolverQueuedCallsLocked();
@@ -1457,9 +1252,8 @@ void ClientChannelFilter::OnResolverResultChangedLocked(
1457
1252
  Resolver::Result result) {
1458
1253
  // Handle race conditions.
1459
1254
  if (resolver_ == nullptr) return;
1460
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1461
- gpr_log(GPR_INFO, "chand=%p: got resolver result", this);
1462
- }
1255
+ GRPC_TRACE_LOG(client_channel, INFO)
1256
+ << "chand=" << this << ": got resolver result";
1463
1257
  // Grab resolver result health callback.
1464
1258
  auto resolver_callback = std::move(result.result_health_callback);
1465
1259
  absl::Status resolver_result_status;
@@ -1493,19 +1287,16 @@ void ClientChannelFilter::OnResolverResultChangedLocked(
1493
1287
  RefCountedPtr<ServiceConfig> service_config;
1494
1288
  RefCountedPtr<ConfigSelector> config_selector;
1495
1289
  if (!result.service_config.ok()) {
1496
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1497
- gpr_log(GPR_INFO, "chand=%p: resolver returned service config error: %s",
1498
- this, result.service_config.status().ToString().c_str());
1499
- }
1290
+ GRPC_TRACE_LOG(client_channel, INFO)
1291
+ << "chand=" << this << ": resolver returned service config error: "
1292
+ << result.service_config.status();
1500
1293
  // If the service config was invalid, then fallback to the
1501
1294
  // previously returned service config.
1502
1295
  if (saved_service_config_ != nullptr) {
1503
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1504
- gpr_log(GPR_INFO,
1505
- "chand=%p: resolver returned invalid service config. "
1506
- "Continuing to use previous service config.",
1507
- this);
1508
- }
1296
+ GRPC_TRACE_LOG(client_channel, INFO)
1297
+ << "chand=" << this
1298
+ << ": resolver returned invalid service config. "
1299
+ "Continuing to use previous service config.";
1509
1300
  service_config = saved_service_config_;
1510
1301
  config_selector = saved_config_selector_;
1511
1302
  } else {
@@ -1519,12 +1310,10 @@ void ClientChannelFilter::OnResolverResultChangedLocked(
1519
1310
  }
1520
1311
  } else if (*result.service_config == nullptr) {
1521
1312
  // Resolver did not return any service config.
1522
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1523
- gpr_log(GPR_INFO,
1524
- "chand=%p: resolver returned no service config. Using default "
1525
- "service config for channel.",
1526
- this);
1527
- }
1313
+ GRPC_TRACE_LOG(client_channel, INFO)
1314
+ << "chand=" << this
1315
+ << ": resolver returned no service config. Using default service "
1316
+ "config for channel.";
1528
1317
  service_config = default_service_config_;
1529
1318
  } else {
1530
1319
  // Use ServiceConfig and ConfigSelector returned by resolver.
@@ -1556,8 +1345,9 @@ void ClientChannelFilter::OnResolverResultChangedLocked(
1556
1345
  UpdateServiceConfigInControlPlaneLocked(
1557
1346
  std::move(service_config), std::move(config_selector),
1558
1347
  std::string(lb_policy_config->name()));
1559
- } else if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1560
- gpr_log(GPR_INFO, "chand=%p: service config not changed", this);
1348
+ } else {
1349
+ GRPC_TRACE_LOG(client_channel, INFO)
1350
+ << "chand=" << this << ": service config not changed";
1561
1351
  }
1562
1352
  // Create or update LB policy, as needed.
1563
1353
  resolver_result_status = CreateOrUpdateLbPolicyLocked(
@@ -1591,10 +1381,8 @@ void ClientChannelFilter::OnResolverResultChangedLocked(
1591
1381
 
1592
1382
  void ClientChannelFilter::OnResolverErrorLocked(absl::Status status) {
1593
1383
  if (resolver_ == nullptr) return;
1594
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1595
- gpr_log(GPR_INFO, "chand=%p: resolver transient failure: %s", this,
1596
- status.ToString().c_str());
1597
- }
1384
+ GRPC_TRACE_LOG(client_channel, INFO)
1385
+ << "chand=" << this << ": resolver transient failure: " << status;
1598
1386
  // If we already have an LB policy from a previous resolution
1599
1387
  // result, then we continue to let it set the connectivity state.
1600
1388
  // Otherwise, we go into TRANSIENT_FAILURE.
@@ -1640,10 +1428,8 @@ absl::Status ClientChannelFilter::CreateOrUpdateLbPolicyLocked(
1640
1428
  lb_policy_ = CreateLbPolicyLocked(update_args.args);
1641
1429
  }
1642
1430
  // Update the policy.
1643
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1644
- gpr_log(GPR_INFO, "chand=%p: Updating child policy %p", this,
1645
- lb_policy_.get());
1646
- }
1431
+ GRPC_TRACE_LOG(client_channel, INFO)
1432
+ << "chand=" << this << ": Updating child policy " << lb_policy_.get();
1647
1433
  return lb_policy_->UpdateLocked(std::move(update_args));
1648
1434
  }
1649
1435
 
@@ -1665,11 +1451,9 @@ OrphanablePtr<LoadBalancingPolicy> ClientChannelFilter::CreateLbPolicyLocked(
1665
1451
  lb_policy_args.args = args;
1666
1452
  OrphanablePtr<LoadBalancingPolicy> lb_policy =
1667
1453
  MakeOrphanable<ChildPolicyHandler>(std::move(lb_policy_args),
1668
- &grpc_client_channel_trace);
1669
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1670
- gpr_log(GPR_INFO, "chand=%p: created new LB policy %p", this,
1671
- lb_policy.get());
1672
- }
1454
+ &client_channel_trace);
1455
+ GRPC_TRACE_LOG(client_channel, INFO)
1456
+ << "chand=" << this << ": created new LB policy " << lb_policy.get();
1673
1457
  grpc_pollset_set_add_pollset_set(lb_policy->interested_parties(),
1674
1458
  interested_parties_);
1675
1459
  return lb_policy;
@@ -1679,10 +1463,9 @@ void ClientChannelFilter::UpdateServiceConfigInControlPlaneLocked(
1679
1463
  RefCountedPtr<ServiceConfig> service_config,
1680
1464
  RefCountedPtr<ConfigSelector> config_selector, std::string lb_policy_name) {
1681
1465
  std::string service_config_json(service_config->json_string());
1682
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1683
- gpr_log(GPR_INFO, "chand=%p: using service config: \"%s\"", this,
1684
- service_config_json.c_str());
1685
- }
1466
+ GRPC_TRACE_LOG(client_channel, INFO)
1467
+ << "chand=" << this << ": using service config: \"" << service_config_json
1468
+ << "\"";
1686
1469
  // Save service config.
1687
1470
  saved_service_config_ = std::move(service_config);
1688
1471
  // Swap out the data used by GetChannelInfo().
@@ -1693,10 +1476,9 @@ void ClientChannelFilter::UpdateServiceConfigInControlPlaneLocked(
1693
1476
  }
1694
1477
  // Save config selector.
1695
1478
  saved_config_selector_ = std::move(config_selector);
1696
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1697
- gpr_log(GPR_INFO, "chand=%p: using ConfigSelector %p", this,
1698
- saved_config_selector_.get());
1699
- }
1479
+ GRPC_TRACE_LOG(client_channel, INFO)
1480
+ << "chand=" << this << ": using ConfigSelector "
1481
+ << saved_config_selector_.get();
1700
1482
  }
1701
1483
 
1702
1484
  void ClientChannelFilter::UpdateServiceConfigInDataPlaneLocked() {
@@ -1704,10 +1486,9 @@ void ClientChannelFilter::UpdateServiceConfigInDataPlaneLocked() {
1704
1486
  RefCountedPtr<ServiceConfig> service_config = saved_service_config_;
1705
1487
  // Grab ref to config selector. Use default if resolver didn't supply one.
1706
1488
  RefCountedPtr<ConfigSelector> config_selector = saved_config_selector_;
1707
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1708
- gpr_log(GPR_INFO, "chand=%p: switching to ConfigSelector %p", this,
1709
- saved_config_selector_.get());
1710
- }
1489
+ GRPC_TRACE_LOG(client_channel, INFO)
1490
+ << "chand=" << this << ": switching to ConfigSelector "
1491
+ << saved_config_selector_.get();
1711
1492
  if (config_selector == nullptr) {
1712
1493
  config_selector =
1713
1494
  MakeRefCounted<DefaultConfigSelector>(saved_service_config_);
@@ -1749,10 +1530,9 @@ void ClientChannelFilter::UpdateServiceConfigInDataPlaneLocked() {
1749
1530
  }
1750
1531
 
1751
1532
  void ClientChannelFilter::CreateResolverLocked() {
1752
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1753
- gpr_log(GPR_INFO, "chand=%p: starting name resolution for %s", this,
1754
- uri_to_resolve_.c_str());
1755
- }
1533
+ GRPC_TRACE_LOG(client_channel, INFO)
1534
+ << "chand=" << this << ": starting name resolution for "
1535
+ << uri_to_resolve_;
1756
1536
  resolver_ = CoreConfiguration::Get().resolver_registry().CreateResolver(
1757
1537
  uri_to_resolve_, channel_args_, interested_parties_, work_serializer_,
1758
1538
  std::make_unique<ResolverResultHandler>(this));
@@ -1762,17 +1542,14 @@ void ClientChannelFilter::CreateResolverLocked() {
1762
1542
  UpdateStateLocked(GRPC_CHANNEL_CONNECTING, absl::Status(),
1763
1543
  "started resolving");
1764
1544
  resolver_->StartLocked();
1765
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1766
- gpr_log(GPR_INFO, "chand=%p: created resolver=%p", this, resolver_.get());
1767
- }
1545
+ GRPC_TRACE_LOG(client_channel, INFO)
1546
+ << "chand=" << this << ": created resolver=" << resolver_.get();
1768
1547
  }
1769
1548
 
1770
1549
  void ClientChannelFilter::DestroyResolverAndLbPolicyLocked() {
1771
1550
  if (resolver_ != nullptr) {
1772
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1773
- gpr_log(GPR_INFO, "chand=%p: shutting down resolver=%p", this,
1774
- resolver_.get());
1775
- }
1551
+ GRPC_TRACE_LOG(client_channel, INFO)
1552
+ << "chand=" << this << ": shutting down resolver=" << resolver_.get();
1776
1553
  resolver_.reset();
1777
1554
  // Clear resolution state.
1778
1555
  saved_service_config_.reset();
@@ -1792,10 +1569,9 @@ void ClientChannelFilter::DestroyResolverAndLbPolicyLocked() {
1792
1569
  }
1793
1570
  // Clear LB policy if set.
1794
1571
  if (lb_policy_ != nullptr) {
1795
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1796
- gpr_log(GPR_INFO, "chand=%p: shutting down lb_policy=%p", this,
1797
- lb_policy_.get());
1798
- }
1572
+ GRPC_TRACE_LOG(client_channel, INFO)
1573
+ << "chand=" << this
1574
+ << ": shutting down lb_policy=" << lb_policy_.get();
1799
1575
  grpc_pollset_set_del_pollset_set(lb_policy_->interested_parties(),
1800
1576
  interested_parties_);
1801
1577
  lb_policy_.reset();
@@ -1941,10 +1717,9 @@ void ClientChannelFilter::StartTransportOpLocked(grpc_transport_op* op) {
1941
1717
  }
1942
1718
  // Disconnect or enter IDLE.
1943
1719
  if (!op->disconnect_with_error.ok()) {
1944
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_trace)) {
1945
- gpr_log(GPR_INFO, "chand=%p: disconnect_with_error: %s", this,
1946
- StatusToString(op->disconnect_with_error).c_str());
1947
- }
1720
+ GRPC_TRACE_LOG(client_channel, INFO)
1721
+ << "chand=" << this << ": disconnect_with_error: "
1722
+ << StatusToString(op->disconnect_with_error);
1948
1723
  DestroyResolverAndLbPolicyLocked();
1949
1724
  intptr_t value;
1950
1725
  if (grpc_error_get_int(op->disconnect_with_error,
@@ -2049,11 +1824,9 @@ void ClientChannelFilter::RemoveConnectivityWatcher(
2049
1824
  //
2050
1825
 
2051
1826
  void ClientChannelFilter::CallData::RemoveCallFromResolverQueuedCallsLocked() {
2052
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2053
- gpr_log(GPR_INFO,
2054
- "chand=%p calld=%p: removing from resolver queued picks list",
2055
- chand(), this);
2056
- }
1827
+ GRPC_TRACE_LOG(client_channel_call, INFO)
1828
+ << "chand=" << chand() << " calld=" << this
1829
+ << ": removing from resolver queued picks list";
2057
1830
  // Remove call's pollent from channel's interested_parties.
2058
1831
  grpc_polling_entity_del_from_pollset_set(pollent(),
2059
1832
  chand()->interested_parties_);
@@ -2064,12 +1837,10 @@ void ClientChannelFilter::CallData::RemoveCallFromResolverQueuedCallsLocked() {
2064
1837
  }
2065
1838
 
2066
1839
  void ClientChannelFilter::CallData::AddCallToResolverQueuedCallsLocked() {
2067
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2068
- gpr_log(
2069
- GPR_INFO,
2070
- "chand=%p calld=%p: adding to resolver queued picks list; pollent=%s",
2071
- chand(), this, grpc_polling_entity_string(pollent()).c_str());
2072
- }
1840
+ GRPC_TRACE_LOG(client_channel_call, INFO)
1841
+ << "chand=" << chand() << " calld=" << this
1842
+ << ": adding to resolver queued picks list; pollent="
1843
+ << grpc_polling_entity_string(pollent());
2073
1844
  // Add call's pollent to channel's interested_parties, so that I/O
2074
1845
  // can be done under the call's CQ.
2075
1846
  grpc_polling_entity_add_to_pollset_set(pollent(),
@@ -2081,10 +1852,9 @@ void ClientChannelFilter::CallData::AddCallToResolverQueuedCallsLocked() {
2081
1852
 
2082
1853
  grpc_error_handle ClientChannelFilter::CallData::ApplyServiceConfigToCallLocked(
2083
1854
  const absl::StatusOr<RefCountedPtr<ConfigSelector>>& config_selector) {
2084
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2085
- gpr_log(GPR_INFO, "chand=%p calld=%p: applying service config to call",
2086
- chand(), this);
2087
- }
1855
+ GRPC_TRACE_LOG(client_channel_call, INFO)
1856
+ << "chand=" << chand() << " calld=" << this
1857
+ << ": applying service config to call";
2088
1858
  if (!config_selector.ok()) return config_selector.status();
2089
1859
  // Create a ClientChannelServiceConfigCallData for the call. This stores
2090
1860
  // a ref to the ServiceConfig and caches the right set of parsed configs
@@ -2092,7 +1862,7 @@ grpc_error_handle ClientChannelFilter::CallData::ApplyServiceConfigToCallLocked(
2092
1862
  // itself in the call context, so that it can be accessed by filters
2093
1863
  // below us in the stack, and it will be cleaned up when the call ends.
2094
1864
  auto* service_config_call_data =
2095
- arena()->New<ClientChannelServiceConfigCallData>(arena(), call_context());
1865
+ arena()->New<ClientChannelServiceConfigCallData>(arena());
2096
1866
  // Use the ConfigSelector to determine the config for the call.
2097
1867
  absl::Status call_config_status =
2098
1868
  (*config_selector)
@@ -2149,17 +1919,14 @@ absl::optional<absl::Status> ClientChannelFilter::CallData::CheckResolution(
2149
1919
  }
2150
1920
  // Handle errors.
2151
1921
  if (!error.ok()) {
2152
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2153
- gpr_log(GPR_INFO,
2154
- "chand=%p calld=%p: error applying config to call: error=%s",
2155
- chand(), this, StatusToString(error).c_str());
2156
- }
1922
+ GRPC_TRACE_LOG(client_channel_call, INFO)
1923
+ << "chand=" << chand() << " calld=" << this
1924
+ << ": error applying config to call: error=" << StatusToString(error);
2157
1925
  return error;
2158
1926
  }
2159
1927
  // If the call was queued, add trace annotation.
2160
1928
  if (was_queued) {
2161
- auto* call_tracer = static_cast<CallTracerAnnotationInterface*>(
2162
- call_context()[GRPC_CONTEXT_CALL_TRACER_ANNOTATION_INTERFACE].value);
1929
+ auto* call_tracer = arena()->GetContext<CallTracerAnnotationInterface>();
2163
1930
  if (call_tracer != nullptr) {
2164
1931
  call_tracer->RecordAnnotation("Delayed name resolution complete.");
2165
1932
  }
@@ -2177,20 +1944,18 @@ bool ClientChannelFilter::CallData::CheckResolutionLocked(
2177
1944
  absl::Status resolver_error = chand()->resolver_transient_failure_error_;
2178
1945
  if (!resolver_error.ok() &&
2179
1946
  !send_initial_metadata()->GetOrCreatePointer(WaitForReady())->value) {
2180
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2181
- gpr_log(GPR_INFO, "chand=%p calld=%p: resolution failed, failing call",
2182
- chand(), this);
2183
- }
1947
+ GRPC_TRACE_LOG(client_channel_call, INFO)
1948
+ << "chand=" << chand() << " calld=" << this
1949
+ << ": resolution failed, failing call";
2184
1950
  *config_selector = absl_status_to_grpc_error(resolver_error);
2185
1951
  return true;
2186
1952
  }
2187
1953
  // Either the resolver has not yet returned a result, or it has
2188
1954
  // returned transient failure but the call is wait_for_ready. In
2189
1955
  // either case, queue the call.
2190
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2191
- gpr_log(GPR_INFO, "chand=%p calld=%p: no resolver result yet", chand(),
2192
- this);
2193
- }
1956
+ GRPC_TRACE_LOG(client_channel_call, INFO)
1957
+ << "chand=" << chand() << " calld=" << this
1958
+ << ": no resolver result yet";
2194
1959
  return false;
2195
1960
  }
2196
1961
  // Result found.
@@ -2206,16 +1971,14 @@ bool ClientChannelFilter::CallData::CheckResolutionLocked(
2206
1971
  ClientChannelFilter::FilterBasedCallData::FilterBasedCallData(
2207
1972
  grpc_call_element* elem, const grpc_call_element_args& args)
2208
1973
  : path_(CSliceRef(args.path)),
2209
- call_context_(args.context),
2210
1974
  call_start_time_(args.start_time),
2211
1975
  deadline_(args.deadline),
2212
1976
  arena_(args.arena),
2213
1977
  elem_(elem),
2214
1978
  owning_call_(args.call_stack),
2215
1979
  call_combiner_(args.call_combiner) {
2216
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2217
- gpr_log(GPR_INFO, "chand=%p calld=%p: created call", chand(), this);
2218
- }
1980
+ GRPC_TRACE_LOG(client_channel_call, INFO)
1981
+ << "chand=" << chand() << " calld=" << this << ": created call";
2219
1982
  }
2220
1983
 
2221
1984
  ClientChannelFilter::FilterBasedCallData::~FilterBasedCallData() {
@@ -2251,8 +2014,8 @@ void ClientChannelFilter::FilterBasedCallData::StartTransportStreamOpBatch(
2251
2014
  grpc_call_element* elem, grpc_transport_stream_op_batch* batch) {
2252
2015
  auto* calld = static_cast<FilterBasedCallData*>(elem->call_data);
2253
2016
  auto* chand = static_cast<ClientChannelFilter*>(elem->channel_data);
2254
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace) &&
2255
- !GRPC_TRACE_FLAG_ENABLED(grpc_trace_channel)) {
2017
+ if (GRPC_TRACE_FLAG_ENABLED(client_channel_call) &&
2018
+ !GRPC_TRACE_FLAG_ENABLED(channel)) {
2256
2019
  gpr_log(GPR_INFO, "chand=%p calld=%p: batch started from above: %s", chand,
2257
2020
  calld, grpc_transport_stream_op_batch_string(batch, false).c_str());
2258
2021
  }
@@ -2271,10 +2034,9 @@ void ClientChannelFilter::FilterBasedCallData::StartTransportStreamOpBatch(
2271
2034
  // Note that once we have done so, we do not need to acquire the channel's
2272
2035
  // resolution mutex, which is more efficient (especially for streaming calls).
2273
2036
  if (calld->dynamic_call_ != nullptr) {
2274
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2275
- gpr_log(GPR_INFO, "chand=%p calld=%p: starting batch on dynamic_call=%p",
2276
- chand, calld, calld->dynamic_call_.get());
2277
- }
2037
+ GRPC_TRACE_LOG(client_channel_call, INFO)
2038
+ << "chand=" << chand << " calld=" << calld
2039
+ << ": starting batch on dynamic_call=" << calld->dynamic_call_.get();
2278
2040
  calld->dynamic_call_->StartTransportStreamOpBatch(batch);
2279
2041
  return;
2280
2042
  }
@@ -2282,10 +2044,10 @@ void ClientChannelFilter::FilterBasedCallData::StartTransportStreamOpBatch(
2282
2044
  //
2283
2045
  // If we've previously been cancelled, immediately fail any new batches.
2284
2046
  if (GPR_UNLIKELY(!calld->cancel_error_.ok())) {
2285
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2286
- gpr_log(GPR_INFO, "chand=%p calld=%p: failing batch with error: %s",
2287
- chand, calld, StatusToString(calld->cancel_error_).c_str());
2288
- }
2047
+ GRPC_TRACE_LOG(client_channel_call, INFO)
2048
+ << "chand=" << chand << " calld=" << calld
2049
+ << ": failing batch with error: "
2050
+ << StatusToString(calld->cancel_error_);
2289
2051
  // Note: This will release the call combiner.
2290
2052
  grpc_transport_stream_op_batch_finish_with_failure(
2291
2053
  batch, calld->cancel_error_, calld->call_combiner());
@@ -2299,10 +2061,9 @@ void ClientChannelFilter::FilterBasedCallData::StartTransportStreamOpBatch(
2299
2061
  // is in the past when the call starts), we can return the right
2300
2062
  // error to the caller when the first batch does get passed down.
2301
2063
  calld->cancel_error_ = batch->payload->cancel_stream.cancel_error;
2302
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2303
- gpr_log(GPR_INFO, "chand=%p calld=%p: recording cancel_error=%s", chand,
2304
- calld, StatusToString(calld->cancel_error_).c_str());
2305
- }
2064
+ GRPC_TRACE_LOG(client_channel_call, INFO)
2065
+ << "chand=" << chand << " calld=" << calld
2066
+ << ": recording cancel_error=" << StatusToString(calld->cancel_error_);
2306
2067
  // Fail all pending batches.
2307
2068
  calld->PendingBatchesFail(calld->cancel_error_, NoYieldCallCombiner);
2308
2069
  // Note: This will release the call combiner.
@@ -2316,19 +2077,15 @@ void ClientChannelFilter::FilterBasedCallData::StartTransportStreamOpBatch(
2316
2077
  // channel's resolution mutex to apply the service config to the call,
2317
2078
  // after which we will create a dynamic call.
2318
2079
  if (GPR_LIKELY(batch->send_initial_metadata)) {
2319
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2320
- gpr_log(GPR_INFO,
2321
- "chand=%p calld=%p: grabbing resolution mutex to apply service "
2322
- "config",
2323
- chand, calld);
2324
- }
2080
+ GRPC_TRACE_LOG(client_channel_call, INFO)
2081
+ << "chand=" << chand << " calld=" << calld
2082
+ << ": grabbing resolution mutex to apply service ";
2325
2083
  // If we're still in IDLE, we need to start resolving.
2326
2084
  if (GPR_UNLIKELY(chand->CheckConnectivityState(false) ==
2327
2085
  GRPC_CHANNEL_IDLE)) {
2328
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2329
- gpr_log(GPR_INFO, "chand=%p calld=%p: triggering exit idle", chand,
2330
- calld);
2331
- }
2086
+ GRPC_TRACE_LOG(client_channel_call, INFO)
2087
+ << "chand=" << chand << " calld=" << calld
2088
+ << ": triggering exit idle";
2332
2089
  // Bounce into the control plane work serializer to start resolving.
2333
2090
  GRPC_CHANNEL_STACK_REF(chand->owning_stack_, "ExitIdle");
2334
2091
  chand->work_serializer_->Run(
@@ -2341,11 +2098,9 @@ void ClientChannelFilter::FilterBasedCallData::StartTransportStreamOpBatch(
2341
2098
  calld->TryCheckResolution(/*was_queued=*/false);
2342
2099
  } else {
2343
2100
  // For all other batches, release the call combiner.
2344
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2345
- gpr_log(GPR_INFO,
2346
- "chand=%p calld=%p: saved batch, yielding call combiner", chand,
2347
- calld);
2348
- }
2101
+ GRPC_TRACE_LOG(client_channel_call, INFO)
2102
+ << "chand=" << chand << " calld=" << calld
2103
+ << ": saved batch, yielding call combiner";
2349
2104
  GRPC_CALL_COMBINER_STOP(calld->call_combiner(),
2350
2105
  "batch does not include send_initial_metadata");
2351
2106
  }
@@ -2374,11 +2129,9 @@ size_t ClientChannelFilter::FilterBasedCallData::GetBatchIndex(
2374
2129
  void ClientChannelFilter::FilterBasedCallData::PendingBatchesAdd(
2375
2130
  grpc_transport_stream_op_batch* batch) {
2376
2131
  const size_t idx = GetBatchIndex(batch);
2377
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2378
- gpr_log(GPR_INFO,
2379
- "chand=%p calld=%p: adding pending batch at index %" PRIuPTR,
2380
- chand(), this, idx);
2381
- }
2132
+ GRPC_TRACE_LOG(client_channel_call, INFO)
2133
+ << "chand=" << chand() << " calld=" << this
2134
+ << ": adding pending batch at index " << idx;
2382
2135
  grpc_transport_stream_op_batch*& pending = pending_batches_[idx];
2383
2136
  CHECK_EQ(pending, nullptr);
2384
2137
  pending = batch;
@@ -2401,7 +2154,7 @@ void ClientChannelFilter::FilterBasedCallData::PendingBatchesFail(
2401
2154
  grpc_error_handle error,
2402
2155
  YieldCallCombinerPredicate yield_call_combiner_predicate) {
2403
2156
  CHECK(!error.ok());
2404
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2157
+ if (GRPC_TRACE_FLAG_ENABLED(client_channel_call)) {
2405
2158
  size_t num_batches = 0;
2406
2159
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
2407
2160
  if (pending_batches_[i] != nullptr) ++num_batches;
@@ -2444,7 +2197,7 @@ void ClientChannelFilter::FilterBasedCallData::ResumePendingBatchInCallCombiner(
2444
2197
  // This is called via the call combiner, so access to calld is synchronized.
2445
2198
  void ClientChannelFilter::FilterBasedCallData::PendingBatchesResume() {
2446
2199
  // Retries not enabled; send down batches as-is.
2447
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2200
+ if (GRPC_TRACE_FLAG_ENABLED(client_channel_call)) {
2448
2201
  size_t num_batches = 0;
2449
2202
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
2450
2203
  if (pending_batches_[i] != nullptr) ++num_batches;
@@ -2490,13 +2243,13 @@ class ClientChannelFilter::FilterBasedCallData::ResolverQueuedCallCanceller
2490
2243
  auto* chand = calld->chand();
2491
2244
  {
2492
2245
  MutexLock lock(&chand->resolution_mu_);
2493
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2494
- gpr_log(GPR_INFO,
2495
- "chand=%p calld=%p: cancelling resolver queued pick: "
2496
- "error=%s self=%p calld->resolver_pick_canceller=%p",
2497
- chand, calld, StatusToString(error).c_str(), self,
2498
- calld->resolver_call_canceller_);
2499
- }
2246
+ GRPC_TRACE_LOG(client_channel_call, INFO)
2247
+ << "chand=" << chand << " calld=" << calld
2248
+ << ": cancelling resolver queued pick: "
2249
+ "error="
2250
+ << StatusToString(error) << " self=" << self
2251
+ << " calld->resolver_pick_canceller="
2252
+ << calld->resolver_call_canceller_;
2500
2253
  if (calld->resolver_call_canceller_ == self && !error.ok()) {
2501
2254
  // Remove pick from list of queued picks.
2502
2255
  calld->RemoveCallFromResolverQueuedCallsLocked();
@@ -2544,24 +2297,19 @@ void ClientChannelFilter::FilterBasedCallData::RetryCheckResolutionLocked() {
2544
2297
  }
2545
2298
 
2546
2299
  void ClientChannelFilter::FilterBasedCallData::CreateDynamicCall() {
2547
- DynamicFilters::Call::Args args = {dynamic_filters(), pollent_, path_,
2548
- call_start_time_, deadline_, arena(),
2549
- call_context_, call_combiner()};
2300
+ DynamicFilters::Call::Args args = {dynamic_filters(), pollent_, path_,
2301
+ call_start_time_, deadline_, arena(),
2302
+ call_combiner()};
2550
2303
  grpc_error_handle error;
2551
2304
  DynamicFilters* channel_stack = args.channel_stack.get();
2552
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2553
- gpr_log(
2554
- GPR_INFO,
2555
- "chand=%p calld=%p: creating dynamic call stack on channel_stack=%p",
2556
- chand(), this, channel_stack);
2557
- }
2305
+ GRPC_TRACE_LOG(client_channel_call, INFO)
2306
+ << "chand=" << chand() << " calld=" << this
2307
+ << ": creating dynamic call stack on channel_stack=" << channel_stack;
2558
2308
  dynamic_call_ = channel_stack->CreateCall(std::move(args), &error);
2559
2309
  if (!error.ok()) {
2560
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2561
- gpr_log(GPR_INFO,
2562
- "chand=%p calld=%p: failed to create dynamic call: error=%s",
2563
- chand(), this, StatusToString(error).c_str());
2564
- }
2310
+ GRPC_TRACE_LOG(client_channel_call, INFO)
2311
+ << "chand=" << chand() << " calld=" << this
2312
+ << ": failed to create dynamic call: error=" << StatusToString(error);
2565
2313
  PendingBatchesFail(error, YieldCallCombiner);
2566
2314
  return;
2567
2315
  }
@@ -2573,15 +2321,11 @@ void ClientChannelFilter::FilterBasedCallData::
2573
2321
  void* arg, grpc_error_handle error) {
2574
2322
  auto* calld = static_cast<FilterBasedCallData*>(arg);
2575
2323
  auto* chand = calld->chand();
2576
- auto* service_config_call_data =
2577
- GetServiceConfigCallData(calld->call_context());
2578
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_call_trace)) {
2579
- gpr_log(GPR_INFO,
2580
- "chand=%p calld=%p: got recv_trailing_metadata_ready: error=%s "
2581
- "service_config_call_data=%p",
2582
- chand, calld, StatusToString(error).c_str(),
2583
- service_config_call_data);
2584
- }
2324
+ auto* service_config_call_data = GetServiceConfigCallData(calld->arena());
2325
+ GRPC_TRACE_LOG(client_channel_call, INFO)
2326
+ << "chand=" << chand << " calld=" << calld
2327
+ << ": got recv_trailing_metadata_ready: error=" << StatusToString(error)
2328
+ << " service_config_call_data=" << service_config_call_data;
2585
2329
  if (service_config_call_data != nullptr) {
2586
2330
  service_config_call_data->Commit();
2587
2331
  }
@@ -2599,7 +2343,7 @@ class ClientChannelFilter::LoadBalancedCall::LbCallState final
2599
2343
  public:
2600
2344
  explicit LbCallState(LoadBalancedCall* lb_call) : lb_call_(lb_call) {}
2601
2345
 
2602
- void* Alloc(size_t size) override { return lb_call_->arena()->Alloc(size); }
2346
+ void* Alloc(size_t size) override { return lb_call_->arena_->Alloc(size); }
2603
2347
 
2604
2348
  // Internal API to allow first-party LB policies to access per-call
2605
2349
  // attributes set by the ConfigSelector.
@@ -2694,8 +2438,7 @@ class ClientChannelFilter::LoadBalancedCall::Metadata final
2694
2438
  ServiceConfigCallData::CallAttributeInterface*
2695
2439
  ClientChannelFilter::LoadBalancedCall::LbCallState::GetCallAttribute(
2696
2440
  UniqueTypeName type) const {
2697
- auto* service_config_call_data =
2698
- GetServiceConfigCallData(lb_call_->call_context_);
2441
+ auto* service_config_call_data = GetServiceConfigCallData(lb_call_->arena_);
2699
2442
  return service_config_call_data->GetCallAttribute(type);
2700
2443
  }
2701
2444
 
@@ -2721,7 +2464,7 @@ class ClientChannelFilter::LoadBalancedCall::BackendMetricAccessor final
2721
2464
  recv_trailing_metadata_ != nullptr) {
2722
2465
  if (const auto* md = recv_trailing_metadata_->get_pointer(
2723
2466
  EndpointLoadMetricsBinMetadata())) {
2724
- BackendMetricAllocator allocator(lb_call_->arena());
2467
+ BackendMetricAllocator allocator(lb_call_->arena_);
2725
2468
  lb_call_->backend_metric_data_ =
2726
2469
  ParseBackendMetricData(md->as_string_view(), &allocator);
2727
2470
  }
@@ -2756,31 +2499,28 @@ class ClientChannelFilter::LoadBalancedCall::BackendMetricAccessor final
2756
2499
 
2757
2500
  namespace {
2758
2501
 
2759
- void CreateCallAttemptTracer(grpc_call_context_element* context,
2760
- bool is_transparent_retry) {
2761
- auto* call_tracer = static_cast<ClientCallTracer*>(
2762
- context[GRPC_CONTEXT_CALL_TRACER_ANNOTATION_INTERFACE].value);
2502
+ void CreateCallAttemptTracer(Arena* arena, bool is_transparent_retry) {
2503
+ auto* call_tracer = DownCast<ClientCallTracer*>(
2504
+ arena->GetContext<CallTracerAnnotationInterface>());
2763
2505
  if (call_tracer == nullptr) return;
2764
2506
  auto* tracer = call_tracer->StartNewAttempt(is_transparent_retry);
2765
- context[GRPC_CONTEXT_CALL_TRACER].value = tracer;
2507
+ arena->SetContext<CallTracerInterface>(tracer);
2766
2508
  }
2767
2509
 
2768
2510
  } // namespace
2769
2511
 
2770
2512
  ClientChannelFilter::LoadBalancedCall::LoadBalancedCall(
2771
- ClientChannelFilter* chand, grpc_call_context_element* call_context,
2513
+ ClientChannelFilter* chand, Arena* arena,
2772
2514
  absl::AnyInvocable<void()> on_commit, bool is_transparent_retry)
2773
- : InternallyRefCounted(
2774
- GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)
2775
- ? "LoadBalancedCall"
2776
- : nullptr),
2515
+ : InternallyRefCounted(GRPC_TRACE_FLAG_ENABLED(client_channel_lb_call)
2516
+ ? "LoadBalancedCall"
2517
+ : nullptr),
2777
2518
  chand_(chand),
2778
2519
  on_commit_(std::move(on_commit)),
2779
- call_context_(call_context) {
2780
- CreateCallAttemptTracer(call_context, is_transparent_retry);
2781
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2782
- gpr_log(GPR_INFO, "chand=%p lb_call=%p: created", chand_, this);
2783
- }
2520
+ arena_(arena) {
2521
+ CreateCallAttemptTracer(arena, is_transparent_retry);
2522
+ GRPC_TRACE_LOG(client_channel_lb_call, INFO)
2523
+ << "chand=" << chand_ << " lb_call=" << this << ": created";
2784
2524
  }
2785
2525
 
2786
2526
  ClientChannelFilter::LoadBalancedCall::~LoadBalancedCall() {
@@ -2821,10 +2561,9 @@ void ClientChannelFilter::LoadBalancedCall::RecordLatency() {
2821
2561
 
2822
2562
  void ClientChannelFilter::LoadBalancedCall::
2823
2563
  RemoveCallFromLbQueuedCallsLocked() {
2824
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2825
- gpr_log(GPR_INFO, "chand=%p lb_call=%p: removing from queued picks list",
2826
- chand_, this);
2827
- }
2564
+ GRPC_TRACE_LOG(client_channel_lb_call, INFO)
2565
+ << "chand=" << chand_ << " lb_call=" << this
2566
+ << ": removing from queued picks list";
2828
2567
  // Remove pollset_set linkage.
2829
2568
  grpc_polling_entity_del_from_pollset_set(pollent(),
2830
2569
  chand_->interested_parties_);
@@ -2835,10 +2574,9 @@ void ClientChannelFilter::LoadBalancedCall::
2835
2574
  }
2836
2575
 
2837
2576
  void ClientChannelFilter::LoadBalancedCall::AddCallToLbQueuedCallsLocked() {
2838
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2839
- gpr_log(GPR_INFO, "chand=%p lb_call=%p: adding to queued picks list",
2840
- chand_, this);
2841
- }
2577
+ GRPC_TRACE_LOG(client_channel_lb_call, INFO)
2578
+ << "chand=" << chand_ << " lb_call=" << this
2579
+ << ": adding to queued picks list";
2842
2580
  // Add call's pollent to channel's interested_parties, so that I/O
2843
2581
  // can be done under the call's CQ.
2844
2582
  grpc_polling_entity_add_to_pollset_set(pollent(),
@@ -2880,10 +2618,9 @@ ClientChannelFilter::LoadBalancedCall::PickSubchannel(bool was_queued) {
2880
2618
  };
2881
2619
  }
2882
2620
  // Grab mutex and take a ref to the picker.
2883
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2884
- gpr_log(GPR_INFO, "chand=%p lb_call=%p: grabbing LB mutex to get picker",
2885
- chand_, this);
2886
- }
2621
+ GRPC_TRACE_LOG(client_channel_lb_call, INFO)
2622
+ << "chand=" << chand_ << " lb_call=" << this
2623
+ << ": grabbing LB mutex to get picker";
2887
2624
  RefCountedPtr<LoadBalancingPolicy::SubchannelPicker> picker;
2888
2625
  {
2889
2626
  MutexLock lock(&chand_->lb_mu_);
@@ -2893,17 +2630,15 @@ ClientChannelFilter::LoadBalancedCall::PickSubchannel(bool was_queued) {
2893
2630
  // TODO(roth): Fix race condition in channel_idle filter and any
2894
2631
  // other possible causes of this.
2895
2632
  if (pickers.back() == nullptr) {
2896
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2897
- gpr_log(GPR_ERROR, "chand=%p lb_call=%p: picker is null, failing call",
2898
- chand_, this);
2899
- }
2633
+ GRPC_TRACE_LOG(client_channel_lb_call, INFO)
2634
+ << "chand=" << chand_ << " lb_call=" << this
2635
+ << ": picker is null, failing call";
2900
2636
  return absl::InternalError("picker is null -- shouldn't happen");
2901
2637
  }
2902
2638
  // Do pick.
2903
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2904
- gpr_log(GPR_INFO, "chand=%p lb_call=%p: performing pick with picker=%p",
2905
- chand_, this, pickers.back().get());
2906
- }
2639
+ GRPC_TRACE_LOG(client_channel_lb_call, INFO)
2640
+ << "chand=" << chand_ << " lb_call=" << this
2641
+ << ": performing pick with picker=" << pickers.back().get();
2907
2642
  grpc_error_handle error;
2908
2643
  bool pick_complete = PickSubchannelImpl(pickers.back().get(), &error);
2909
2644
  if (!pick_complete) {
@@ -2911,11 +2646,9 @@ ClientChannelFilter::LoadBalancedCall::PickSubchannel(bool was_queued) {
2911
2646
  MutexLock lock(&chand_->lb_mu_);
2912
2647
  // If picker has been swapped out since we grabbed it, try again.
2913
2648
  if (pickers.back() != chand_->picker_) {
2914
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2915
- gpr_log(GPR_INFO,
2916
- "chand=%p lb_call=%p: pick not complete, but picker changed",
2917
- chand_, this);
2918
- }
2649
+ GRPC_TRACE_LOG(client_channel_lb_call, INFO)
2650
+ << "chand=" << chand_ << " lb_call=" << this
2651
+ << ": pick not complete, but picker changed";
2919
2652
  if (IsWorkSerializerDispatchEnabled()) {
2920
2653
  // Don't unref until after we release the mutex.
2921
2654
  old_picker = std::move(pickers.back());
@@ -2934,11 +2667,9 @@ ClientChannelFilter::LoadBalancedCall::PickSubchannel(bool was_queued) {
2934
2667
  }
2935
2668
  // If the pick failed, fail the call.
2936
2669
  if (!error.ok()) {
2937
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2938
- gpr_log(GPR_INFO,
2939
- "chand=%p lb_call=%p: failed to pick subchannel: error=%s",
2940
- chand_, this, StatusToString(error).c_str());
2941
- }
2670
+ GRPC_TRACE_LOG(client_channel_lb_call, INFO)
2671
+ << "chand=" << chand_ << " lb_call=" << this
2672
+ << ": failed to pick subchannel: error=" << StatusToString(error);
2942
2673
  return error;
2943
2674
  }
2944
2675
  // Pick succeeded.
@@ -2964,11 +2695,10 @@ bool ClientChannelFilter::LoadBalancedCall::PickSubchannelImpl(
2964
2695
  &result,
2965
2696
  // CompletePick
2966
2697
  [this](LoadBalancingPolicy::PickResult::Complete* complete_pick) {
2967
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2968
- gpr_log(GPR_INFO,
2969
- "chand=%p lb_call=%p: LB pick succeeded: subchannel=%p",
2970
- chand_, this, complete_pick->subchannel.get());
2971
- }
2698
+ GRPC_TRACE_LOG(client_channel_lb_call, INFO)
2699
+ << "chand=" << chand_ << " lb_call=" << this
2700
+ << ": LB pick succeeded: subchannel="
2701
+ << complete_pick->subchannel.get();
2972
2702
  CHECK(complete_pick->subchannel != nullptr);
2973
2703
  // Grab a ref to the connected subchannel while we're still
2974
2704
  // holding the data plane mutex.
@@ -2980,12 +2710,10 @@ bool ClientChannelFilter::LoadBalancedCall::PickSubchannelImpl(
2980
2710
  // yet seen that change and given us a new picker), then just
2981
2711
  // queue the pick. We'll try again as soon as we get a new picker.
2982
2712
  if (connected_subchannel_ == nullptr) {
2983
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2984
- gpr_log(GPR_INFO,
2985
- "chand=%p lb_call=%p: subchannel returned by LB picker "
2986
- "has no connected subchannel; queueing pick",
2987
- chand_, this);
2988
- }
2713
+ GRPC_TRACE_LOG(client_channel_lb_call, INFO)
2714
+ << "chand=" << chand_ << " lb_call=" << this
2715
+ << ": subchannel returned by LB picker "
2716
+ "has no connected subchannel; queueing pick";
2989
2717
  return false;
2990
2718
  }
2991
2719
  lb_subchannel_call_tracker_ =
@@ -2997,18 +2725,15 @@ bool ClientChannelFilter::LoadBalancedCall::PickSubchannelImpl(
2997
2725
  },
2998
2726
  // QueuePick
2999
2727
  [this](LoadBalancingPolicy::PickResult::Queue* /*queue_pick*/) {
3000
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3001
- gpr_log(GPR_INFO, "chand=%p lb_call=%p: LB pick queued", chand_,
3002
- this);
3003
- }
2728
+ GRPC_TRACE_LOG(client_channel_lb_call, INFO)
2729
+ << "chand=" << chand_ << " lb_call=" << this << ": LB pick queued";
3004
2730
  return false;
3005
2731
  },
3006
2732
  // FailPick
3007
2733
  [this, &error](LoadBalancingPolicy::PickResult::Fail* fail_pick) {
3008
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3009
- gpr_log(GPR_INFO, "chand=%p lb_call=%p: LB pick failed: %s", chand_,
3010
- this, fail_pick->status.ToString().c_str());
3011
- }
2734
+ GRPC_TRACE_LOG(client_channel_lb_call, INFO)
2735
+ << "chand=" << chand_ << " lb_call=" << this
2736
+ << ": LB pick failed: " << fail_pick->status;
3012
2737
  // If wait_for_ready is false, then the error indicates the RPC
3013
2738
  // attempt's final status.
3014
2739
  if (!send_initial_metadata()
@@ -3024,10 +2749,9 @@ bool ClientChannelFilter::LoadBalancedCall::PickSubchannelImpl(
3024
2749
  },
3025
2750
  // DropPick
3026
2751
  [this, &error](LoadBalancingPolicy::PickResult::Drop* drop_pick) {
3027
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3028
- gpr_log(GPR_INFO, "chand=%p lb_call=%p: LB pick dropped: %s", chand_,
3029
- this, drop_pick->status.ToString().c_str());
3030
- }
2752
+ GRPC_TRACE_LOG(client_channel_lb_call, INFO)
2753
+ << "chand=" << chand_ << " lb_call=" << this
2754
+ << ": LB pick dropped: " << drop_pick->status;
3031
2755
  *error = grpc_error_set_int(
3032
2756
  absl_status_to_grpc_error(MaybeRewriteIllegalStatusCode(
3033
2757
  std::move(drop_pick->status), "LB drop")),
@@ -3044,9 +2768,8 @@ ClientChannelFilter::FilterBasedLoadBalancedCall::FilterBasedLoadBalancedCall(
3044
2768
  ClientChannelFilter* chand, const grpc_call_element_args& args,
3045
2769
  grpc_polling_entity* pollent, grpc_closure* on_call_destruction_complete,
3046
2770
  absl::AnyInvocable<void()> on_commit, bool is_transparent_retry)
3047
- : LoadBalancedCall(chand, args.context, std::move(on_commit),
2771
+ : LoadBalancedCall(chand, args.arena, std::move(on_commit),
3048
2772
  is_transparent_retry),
3049
- arena_(args.arena),
3050
2773
  owning_call_(args.call_stack),
3051
2774
  call_combiner_(args.call_combiner),
3052
2775
  pollent_(pollent),
@@ -3094,11 +2817,9 @@ size_t ClientChannelFilter::FilterBasedLoadBalancedCall::GetBatchIndex(
3094
2817
  void ClientChannelFilter::FilterBasedLoadBalancedCall::PendingBatchesAdd(
3095
2818
  grpc_transport_stream_op_batch* batch) {
3096
2819
  const size_t idx = GetBatchIndex(batch);
3097
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3098
- gpr_log(GPR_INFO,
3099
- "chand=%p lb_call=%p: adding pending batch at index %" PRIuPTR,
3100
- chand(), this, idx);
3101
- }
2820
+ GRPC_TRACE_LOG(client_channel_lb_call, INFO)
2821
+ << "chand=" << chand() << " lb_call=" << this
2822
+ << ": adding pending batch at index " << idx;
3102
2823
  CHECK_EQ(pending_batches_[idx], nullptr);
3103
2824
  pending_batches_[idx] = batch;
3104
2825
  }
@@ -3121,7 +2842,7 @@ void ClientChannelFilter::FilterBasedLoadBalancedCall::PendingBatchesFail(
3121
2842
  YieldCallCombinerPredicate yield_call_combiner_predicate) {
3122
2843
  CHECK(!error.ok());
3123
2844
  failure_error_ = error;
3124
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2845
+ if (GRPC_TRACE_FLAG_ENABLED(client_channel_lb_call)) {
3125
2846
  size_t num_batches = 0;
3126
2847
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
3127
2848
  if (pending_batches_[i] != nullptr) ++num_batches;
@@ -3163,7 +2884,7 @@ void ClientChannelFilter::FilterBasedLoadBalancedCall::
3163
2884
 
3164
2885
  // This is called via the call combiner, so access to calld is synchronized.
3165
2886
  void ClientChannelFilter::FilterBasedLoadBalancedCall::PendingBatchesResume() {
3166
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
2887
+ if (GRPC_TRACE_FLAG_ENABLED(client_channel_lb_call)) {
3167
2888
  size_t num_batches = 0;
3168
2889
  for (size_t i = 0; i < GPR_ARRAY_SIZE(pending_batches_); ++i) {
3169
2890
  if (pending_batches_[i] != nullptr) ++num_batches;
@@ -3192,8 +2913,8 @@ void ClientChannelFilter::FilterBasedLoadBalancedCall::PendingBatchesResume() {
3192
2913
 
3193
2914
  void ClientChannelFilter::FilterBasedLoadBalancedCall::
3194
2915
  StartTransportStreamOpBatch(grpc_transport_stream_op_batch* batch) {
3195
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace) ||
3196
- GRPC_TRACE_FLAG_ENABLED(grpc_trace_channel)) {
2916
+ if (GRPC_TRACE_FLAG_ENABLED(client_channel_lb_call) ||
2917
+ GRPC_TRACE_FLAG_ENABLED(channel)) {
3197
2918
  gpr_log(GPR_INFO,
3198
2919
  "chand=%p lb_call=%p: batch started from above: %s, "
3199
2920
  "call_attempt_tracer()=%p",
@@ -3247,11 +2968,9 @@ void ClientChannelFilter::FilterBasedLoadBalancedCall::
3247
2968
  // the channel's data plane mutex, which is more efficient (especially for
3248
2969
  // streaming calls).
3249
2970
  if (subchannel_call_ != nullptr) {
3250
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3251
- gpr_log(GPR_INFO,
3252
- "chand=%p lb_call=%p: starting batch on subchannel_call=%p",
3253
- chand(), this, subchannel_call_.get());
3254
- }
2971
+ GRPC_TRACE_LOG(client_channel_lb_call, INFO)
2972
+ << "chand=" << chand() << " lb_call=" << this
2973
+ << ": starting batch on subchannel_call=" << subchannel_call_.get();
3255
2974
  subchannel_call_->StartTransportStreamOpBatch(batch);
3256
2975
  return;
3257
2976
  }
@@ -3259,10 +2978,9 @@ void ClientChannelFilter::FilterBasedLoadBalancedCall::
3259
2978
  //
3260
2979
  // If we've previously been cancelled, immediately fail any new batches.
3261
2980
  if (GPR_UNLIKELY(!cancel_error_.ok())) {
3262
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3263
- gpr_log(GPR_INFO, "chand=%p lb_call=%p: failing batch with error: %s",
3264
- chand(), this, StatusToString(cancel_error_).c_str());
3265
- }
2981
+ GRPC_TRACE_LOG(client_channel_lb_call, INFO)
2982
+ << "chand=" << chand() << " lb_call=" << this
2983
+ << ": failing batch with error: " << StatusToString(cancel_error_);
3266
2984
  // Note: This will release the call combiner.
3267
2985
  grpc_transport_stream_op_batch_finish_with_failure(batch, cancel_error_,
3268
2986
  call_combiner_);
@@ -3276,10 +2994,9 @@ void ClientChannelFilter::FilterBasedLoadBalancedCall::
3276
2994
  // is in the past when the call starts), we can return the right
3277
2995
  // error to the caller when the first batch does get passed down.
3278
2996
  cancel_error_ = batch->payload->cancel_stream.cancel_error;
3279
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3280
- gpr_log(GPR_INFO, "chand=%p lb_call=%p: recording cancel_error=%s",
3281
- chand(), this, StatusToString(cancel_error_).c_str());
3282
- }
2997
+ GRPC_TRACE_LOG(client_channel_lb_call, INFO)
2998
+ << "chand=" << chand() << " lb_call=" << this
2999
+ << ": recording cancel_error=" << StatusToString(cancel_error_).c_str();
3283
3000
  // Fail all pending batches.
3284
3001
  PendingBatchesFail(cancel_error_, NoYieldCallCombiner);
3285
3002
  // Note: This will release the call combiner.
@@ -3295,11 +3012,9 @@ void ClientChannelFilter::FilterBasedLoadBalancedCall::
3295
3012
  TryPick(/*was_queued=*/false);
3296
3013
  } else {
3297
3014
  // For all other batches, release the call combiner.
3298
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3299
- gpr_log(GPR_INFO,
3300
- "chand=%p lb_call=%p: saved batch, yielding call combiner",
3301
- chand(), this);
3302
- }
3015
+ GRPC_TRACE_LOG(client_channel_lb_call, INFO)
3016
+ << "chand=" << chand() << " lb_call=" << this
3017
+ << ": saved batch, yielding call combiner";
3303
3018
  GRPC_CALL_COMBINER_STOP(call_combiner_,
3304
3019
  "batch does not include send_initial_metadata");
3305
3020
  }
@@ -3308,11 +3023,9 @@ void ClientChannelFilter::FilterBasedLoadBalancedCall::
3308
3023
  void ClientChannelFilter::FilterBasedLoadBalancedCall::RecvInitialMetadataReady(
3309
3024
  void* arg, grpc_error_handle error) {
3310
3025
  auto* self = static_cast<FilterBasedLoadBalancedCall*>(arg);
3311
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3312
- gpr_log(GPR_INFO,
3313
- "chand=%p lb_call=%p: got recv_initial_metadata_ready: error=%s",
3314
- self->chand(), self, StatusToString(error).c_str());
3315
- }
3026
+ GRPC_TRACE_LOG(client_channel_lb_call, INFO)
3027
+ << "chand=" << self->chand() << " lb_call=" << self
3028
+ << ": got recv_initial_metadata_ready: error=" << StatusToString(error);
3316
3029
  if (error.ok()) {
3317
3030
  // recv_initial_metadata_flags is not populated for clients
3318
3031
  self->call_attempt_tracer()->RecordReceivedInitialMetadata(
@@ -3327,15 +3040,12 @@ void ClientChannelFilter::FilterBasedLoadBalancedCall::RecvInitialMetadataReady(
3327
3040
  void ClientChannelFilter::FilterBasedLoadBalancedCall::
3328
3041
  RecvTrailingMetadataReady(void* arg, grpc_error_handle error) {
3329
3042
  auto* self = static_cast<FilterBasedLoadBalancedCall*>(arg);
3330
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3331
- gpr_log(GPR_INFO,
3332
- "chand=%p lb_call=%p: got recv_trailing_metadata_ready: error=%s "
3333
- "call_attempt_tracer()=%p lb_subchannel_call_tracker_=%p "
3334
- "failure_error_=%s",
3335
- self->chand(), self, StatusToString(error).c_str(),
3336
- self->call_attempt_tracer(), self->lb_subchannel_call_tracker(),
3337
- StatusToString(self->failure_error_).c_str());
3338
- }
3043
+ GRPC_TRACE_LOG(client_channel_lb_call, INFO)
3044
+ << "chand=" << self->chand() << " lb_call=" << self
3045
+ << ": got recv_trailing_metadata_ready: error=" << StatusToString(error)
3046
+ << " call_attempt_tracer()=" << self->call_attempt_tracer()
3047
+ << " lb_subchannel_call_tracker_=" << self->lb_subchannel_call_tracker()
3048
+ << " failure_error_=" << StatusToString(self->failure_error_);
3339
3049
  // Check if we have a tracer or an LB callback to invoke.
3340
3050
  if (self->call_attempt_tracer() != nullptr ||
3341
3051
  self->lb_subchannel_call_tracker() != nullptr) {
@@ -3346,10 +3056,7 @@ void ClientChannelFilter::FilterBasedLoadBalancedCall::
3346
3056
  grpc_status_code code;
3347
3057
  std::string message;
3348
3058
  grpc_error_get_status(
3349
- error,
3350
- static_cast<Call*>(self->call_context()[GRPC_CONTEXT_CALL].value)
3351
- ->deadline(),
3352
- &code, &message,
3059
+ error, self->arena()->GetContext<Call>()->deadline(), &code, &message,
3353
3060
  /*http_error=*/nullptr, /*error_string=*/nullptr);
3354
3061
  status = absl::Status(static_cast<absl::StatusCode>(code), message);
3355
3062
  } else {
@@ -3406,13 +3113,11 @@ class ClientChannelFilter::FilterBasedLoadBalancedCall::LbQueuedCallCanceller
3406
3113
  auto* chand = lb_call->chand();
3407
3114
  {
3408
3115
  MutexLock lock(&chand->lb_mu_);
3409
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3410
- gpr_log(GPR_INFO,
3411
- "chand=%p lb_call=%p: cancelling queued pick: "
3412
- "error=%s self=%p calld->pick_canceller=%p",
3413
- chand, lb_call, StatusToString(error).c_str(), self,
3414
- lb_call->lb_call_canceller_);
3415
- }
3116
+ GRPC_TRACE_LOG(client_channel_lb_call, INFO)
3117
+ << "chand=" << chand << " lb_call=" << lb_call
3118
+ << ": cancelling queued pick: error=" << StatusToString(error)
3119
+ << " self=" << self
3120
+ << " calld->pick_canceller=" << lb_call->lb_call_canceller_;
3416
3121
  if (lb_call->lb_call_canceller_ == self && !error.ok()) {
3417
3122
  lb_call->Commit();
3418
3123
  // Remove pick from list of queued picks.
@@ -3488,18 +3193,16 @@ void ClientChannelFilter::FilterBasedLoadBalancedCall::CreateSubchannelCall() {
3488
3193
  CHECK_NE(path, nullptr);
3489
3194
  SubchannelCall::Args call_args = {
3490
3195
  connected_subchannel()->Ref(), pollent_, path->Ref(), /*start_time=*/0,
3491
- static_cast<Call*>(call_context()[GRPC_CONTEXT_CALL].value)->deadline(),
3492
- arena_,
3196
+ arena()->GetContext<Call>()->deadline(),
3493
3197
  // TODO(roth): When we implement hedging support, we will probably
3494
- // need to use a separate call context for each subchannel call.
3495
- call_context(), call_combiner_};
3198
+ // need to use a separate call arena for each subchannel call.
3199
+ arena(), call_combiner_};
3496
3200
  grpc_error_handle error;
3497
3201
  subchannel_call_ = SubchannelCall::Create(std::move(call_args), &error);
3498
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3499
- gpr_log(GPR_INFO,
3500
- "chand=%p lb_call=%p: create subchannel_call=%p: error=%s", chand(),
3501
- this, subchannel_call_.get(), StatusToString(error).c_str());
3502
- }
3202
+ GRPC_TRACE_LOG(client_channel_lb_call, INFO)
3203
+ << "chand=" << chand() << " lb_call=" << this
3204
+ << ": create subchannel_call=" << subchannel_call_.get()
3205
+ << ": error=" << StatusToString(error);
3503
3206
  if (on_call_destruction_complete_ != nullptr) {
3504
3207
  subchannel_call_->SetAfterCallStackDestroy(on_call_destruction_complete_);
3505
3208
  on_call_destruction_complete_ = nullptr;
@@ -3511,150 +3214,4 @@ void ClientChannelFilter::FilterBasedLoadBalancedCall::CreateSubchannelCall() {
3511
3214
  }
3512
3215
  }
3513
3216
 
3514
- //
3515
- // ClientChannelFilter::PromiseBasedLoadBalancedCall
3516
- //
3517
-
3518
- ClientChannelFilter::PromiseBasedLoadBalancedCall::PromiseBasedLoadBalancedCall(
3519
- ClientChannelFilter* chand, absl::AnyInvocable<void()> on_commit,
3520
- bool is_transparent_retry)
3521
- : LoadBalancedCall(chand, GetContext<grpc_call_context_element>(),
3522
- std::move(on_commit), is_transparent_retry) {}
3523
-
3524
- ArenaPromise<ServerMetadataHandle>
3525
- ClientChannelFilter::PromiseBasedLoadBalancedCall::MakeCallPromise(
3526
- CallArgs call_args, OrphanablePtr<PromiseBasedLoadBalancedCall> lb_call) {
3527
- pollent_ = NowOrNever(call_args.polling_entity->WaitAndCopy()).value();
3528
- // Record ops in tracer.
3529
- if (call_attempt_tracer() != nullptr) {
3530
- call_attempt_tracer()->RecordSendInitialMetadata(
3531
- call_args.client_initial_metadata.get());
3532
- // TODO(ctiller): Find a way to do this without registering a no-op mapper.
3533
- call_args.client_to_server_messages->InterceptAndMapWithHalfClose(
3534
- [](MessageHandle message) { return message; }, // No-op.
3535
- [this]() {
3536
- // TODO(roth): Change CallTracer API to not pass metadata
3537
- // batch to this method, since the batch is always empty.
3538
- grpc_metadata_batch metadata;
3539
- call_attempt_tracer()->RecordSendTrailingMetadata(&metadata);
3540
- });
3541
- }
3542
- // Extract peer name from server initial metadata.
3543
- call_args.server_initial_metadata->InterceptAndMap(
3544
- [self = lb_call->RefAsSubclass<PromiseBasedLoadBalancedCall>()](
3545
- ServerMetadataHandle metadata) {
3546
- if (self->call_attempt_tracer() != nullptr) {
3547
- self->call_attempt_tracer()->RecordReceivedInitialMetadata(
3548
- metadata.get());
3549
- }
3550
- Slice* peer_string = metadata->get_pointer(PeerString());
3551
- if (peer_string != nullptr) self->peer_string_ = peer_string->Ref();
3552
- return metadata;
3553
- });
3554
- client_initial_metadata_ = std::move(call_args.client_initial_metadata);
3555
- return OnCancel(
3556
- Map(TrySeq(
3557
- // LB pick.
3558
- [this]() -> Poll<absl::Status> {
3559
- auto result = PickSubchannel(was_queued_);
3560
- if (GRPC_TRACE_FLAG_ENABLED(
3561
- grpc_client_channel_lb_call_trace)) {
3562
- gpr_log(GPR_INFO,
3563
- "chand=%p lb_call=%p: %sPickSubchannel() returns %s",
3564
- chand(), this,
3565
- GetContext<Activity>()->DebugTag().c_str(),
3566
- result.has_value() ? result->ToString().c_str()
3567
- : "Pending");
3568
- }
3569
- if (result == absl::nullopt) return Pending{};
3570
- return std::move(*result);
3571
- },
3572
- [this, call_args = std::move(call_args)]() mutable
3573
- -> ArenaPromise<ServerMetadataHandle> {
3574
- call_args.client_initial_metadata =
3575
- std::move(client_initial_metadata_);
3576
- return connected_subchannel()->MakeCallPromise(
3577
- std::move(call_args));
3578
- }),
3579
- // Record call completion.
3580
- [this](ServerMetadataHandle metadata) {
3581
- if (call_attempt_tracer() != nullptr ||
3582
- lb_subchannel_call_tracker() != nullptr) {
3583
- absl::Status status;
3584
- grpc_status_code code = metadata->get(GrpcStatusMetadata())
3585
- .value_or(GRPC_STATUS_UNKNOWN);
3586
- if (code != GRPC_STATUS_OK) {
3587
- absl::string_view message;
3588
- if (const auto* grpc_message =
3589
- metadata->get_pointer(GrpcMessageMetadata())) {
3590
- message = grpc_message->as_string_view();
3591
- }
3592
- status =
3593
- absl::Status(static_cast<absl::StatusCode>(code), message);
3594
- }
3595
- RecordCallCompletion(status, metadata.get(),
3596
- &GetContext<CallContext>()
3597
- ->call_stats()
3598
- ->transport_stream_stats,
3599
- peer_string_.as_string_view());
3600
- }
3601
- RecordLatency();
3602
- return metadata;
3603
- }),
3604
- [lb_call = std::move(lb_call)]() {
3605
- // If the waker is pending, then we need to remove ourself from
3606
- // the list of queued LB calls.
3607
- if (!lb_call->waker_.is_unwakeable()) {
3608
- MutexLock lock(&lb_call->chand()->lb_mu_);
3609
- lb_call->Commit();
3610
- // Remove pick from list of queued picks.
3611
- lb_call->RemoveCallFromLbQueuedCallsLocked();
3612
- // Remove from queued picks list.
3613
- lb_call->chand()->lb_queued_calls_.erase(lb_call.get());
3614
- }
3615
- // TODO(ctiller): We don't have access to the call's actual status
3616
- // here, so we just assume CANCELLED. We could change this to use
3617
- // CallFinalization instead of OnCancel() so that we can get the
3618
- // actual status. But we should also have access to the trailing
3619
- // metadata, which we don't have in either case. Ultimately, we
3620
- // need a better story for code that needs to run at the end of a
3621
- // call in both cancellation and non-cancellation cases that needs
3622
- // access to server trailing metadata and the call's real status.
3623
- if (lb_call->call_attempt_tracer() != nullptr) {
3624
- lb_call->call_attempt_tracer()->RecordCancel(
3625
- absl::CancelledError("call cancelled"));
3626
- }
3627
- if (lb_call->call_attempt_tracer() != nullptr ||
3628
- lb_call->lb_subchannel_call_tracker() != nullptr) {
3629
- // If we were cancelled without recording call completion, then
3630
- // record call completion here, as best we can. We assume status
3631
- // CANCELLED in this case.
3632
- lb_call->RecordCallCompletion(absl::CancelledError("call cancelled"),
3633
- nullptr, nullptr, "");
3634
- }
3635
- });
3636
- }
3637
-
3638
- Arena* ClientChannelFilter::PromiseBasedLoadBalancedCall::arena() const {
3639
- return GetContext<Arena>();
3640
- }
3641
-
3642
- grpc_metadata_batch*
3643
- ClientChannelFilter::PromiseBasedLoadBalancedCall::send_initial_metadata()
3644
- const {
3645
- return client_initial_metadata_.get();
3646
- }
3647
-
3648
- void ClientChannelFilter::PromiseBasedLoadBalancedCall::OnAddToQueueLocked() {
3649
- waker_ = GetContext<Activity>()->MakeNonOwningWaker();
3650
- was_queued_ = true;
3651
- }
3652
-
3653
- void ClientChannelFilter::PromiseBasedLoadBalancedCall::RetryPickLocked() {
3654
- if (GRPC_TRACE_FLAG_ENABLED(grpc_client_channel_lb_call_trace)) {
3655
- gpr_log(GPR_INFO, "chand=%p lb_call=%p: RetryPickLocked()", chand(), this);
3656
- }
3657
- waker_.WakeupAsync();
3658
- }
3659
-
3660
3217
  } // namespace grpc_core