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
@@ -27,13 +27,13 @@
27
27
  #include <grpc/support/log.h>
28
28
  #include <grpc/support/port_platform.h>
29
29
 
30
+ #include "src/core/lib/debug/trace.h"
30
31
  #include "src/core/lib/gprpp/construct_destruct.h"
31
32
  #include "src/core/lib/promise/activity.h"
32
33
  #include "src/core/lib/promise/detail/promise_factory.h"
33
34
  #include "src/core/lib/promise/detail/status.h"
34
35
  #include "src/core/lib/promise/poll.h"
35
36
  #include "src/core/lib/promise/status_flag.h"
36
- #include "src/core/lib/promise/trace.h"
37
37
 
38
38
  namespace grpc_core {
39
39
 
@@ -164,14 +164,14 @@ class ForEach {
164
164
  }
165
165
 
166
166
  Poll<Result> PollReaderNext() {
167
- if (grpc_trace_promise_primitives.enabled()) {
167
+ if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
168
168
  gpr_log(GPR_INFO, "%s PollReaderNext", DebugTag().c_str());
169
169
  }
170
170
  auto r = reader_next_();
171
171
  if (auto* p = r.value_if_ready()) {
172
172
  switch (NextValueTraits<ReaderResult>::Type(*p)) {
173
173
  case NextValueType::kValue: {
174
- if (grpc_trace_promise_primitives.enabled()) {
174
+ if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
175
175
  gpr_log(GPR_INFO, "%s PollReaderNext: got value",
176
176
  DebugTag().c_str());
177
177
  }
@@ -183,14 +183,14 @@ class ForEach {
183
183
  return PollAction();
184
184
  }
185
185
  case NextValueType::kEndOfStream: {
186
- if (grpc_trace_promise_primitives.enabled()) {
186
+ if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
187
187
  gpr_log(GPR_INFO, "%s PollReaderNext: got end of stream",
188
188
  DebugTag().c_str());
189
189
  }
190
190
  return Done<Result>::Make(false);
191
191
  }
192
192
  case NextValueType::kError: {
193
- if (grpc_trace_promise_primitives.enabled()) {
193
+ if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
194
194
  gpr_log(GPR_INFO, "%s PollReaderNext: got error",
195
195
  DebugTag().c_str());
196
196
  }
@@ -202,7 +202,7 @@ class ForEach {
202
202
  }
203
203
 
204
204
  Poll<Result> PollAction() {
205
- if (grpc_trace_promise_primitives.enabled()) {
205
+ if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
206
206
  gpr_log(GPR_INFO, "%s PollAction", DebugTag().c_str());
207
207
  }
208
208
  auto r = in_action_.promise();
@@ -35,7 +35,6 @@
35
35
  #include "src/core/lib/promise/context.h"
36
36
  #include "src/core/lib/promise/detail/promise_factory.h"
37
37
  #include "src/core/lib/promise/poll.h"
38
- #include "src/core/lib/promise/trace.h"
39
38
  #include "src/core/lib/resource_quota/arena.h"
40
39
 
41
40
  namespace grpc_core {
@@ -88,7 +87,7 @@ class InterceptorList {
88
87
  public:
89
88
  RunPromise(size_t memory_required, Map** factory, absl::optional<T> value) {
90
89
  if (!value.has_value() || *factory == nullptr) {
91
- if (grpc_trace_promise_primitives.enabled()) {
90
+ if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
92
91
  gpr_log(GPR_DEBUG,
93
92
  "InterceptorList::RunPromise[%p]: create immediate", this);
94
93
  }
@@ -101,7 +100,7 @@ class InterceptorList {
101
100
  async_resolution_.space.get());
102
101
  async_resolution_.current_factory = *factory;
103
102
  async_resolution_.first_factory = factory;
104
- if (grpc_trace_promise_primitives.enabled()) {
103
+ if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
105
104
  gpr_log(GPR_DEBUG,
106
105
  "InterceptorList::RunPromise[%p]: create async; mem=%p", this,
107
106
  async_resolution_.space.get());
@@ -110,7 +109,7 @@ class InterceptorList {
110
109
  }
111
110
 
112
111
  ~RunPromise() {
113
- if (grpc_trace_promise_primitives.enabled()) {
112
+ if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
114
113
  gpr_log(GPR_DEBUG, "InterceptorList::RunPromise[%p]: destroy", this);
115
114
  }
116
115
  if (is_immediately_resolved_) {
@@ -129,7 +128,7 @@ class InterceptorList {
129
128
 
130
129
  RunPromise(RunPromise&& other) noexcept
131
130
  : is_immediately_resolved_(other.is_immediately_resolved_) {
132
- if (grpc_trace_promise_primitives.enabled()) {
131
+ if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
133
132
  gpr_log(GPR_DEBUG, "InterceptorList::RunPromise[%p]: move from %p",
134
133
  this, &other);
135
134
  }
@@ -143,7 +142,7 @@ class InterceptorList {
143
142
  RunPromise& operator=(RunPromise&& other) noexcept = delete;
144
143
 
145
144
  Poll<absl::optional<T>> operator()() {
146
- if (grpc_trace_promise_primitives.enabled()) {
145
+ if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
147
146
  gpr_log(GPR_DEBUG, "InterceptorList::RunPromise[%p]: %s", this,
148
147
  DebugString().c_str());
149
148
  }
@@ -161,7 +160,7 @@ class InterceptorList {
161
160
  async_resolution_.current_factory =
162
161
  async_resolution_.current_factory->next();
163
162
  if (!p->has_value()) async_resolution_.current_factory = nullptr;
164
- if (grpc_trace_promise_primitives.enabled()) {
163
+ if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
165
164
  gpr_log(GPR_DEBUG, "InterceptorList::RunPromise[%p]: %s", this,
166
165
  DebugString().c_str());
167
166
  }
@@ -27,9 +27,9 @@
27
27
  #include <grpc/support/log.h>
28
28
  #include <grpc/support/port_platform.h>
29
29
 
30
+ #include "src/core/lib/debug/trace.h"
30
31
  #include "src/core/lib/promise/activity.h"
31
32
  #include "src/core/lib/promise/poll.h"
32
- #include "src/core/lib/promise/trace.h"
33
33
 
34
34
  namespace grpc_core {
35
35
 
@@ -67,7 +67,7 @@ class Latch {
67
67
  has_had_waiters_ = true;
68
68
  #endif
69
69
  return [this]() -> Poll<T> {
70
- if (grpc_trace_promise_primitives.enabled()) {
70
+ if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
71
71
  gpr_log(GPR_INFO, "%sWait %s", DebugTag().c_str(),
72
72
  StateString().c_str());
73
73
  }
@@ -86,7 +86,7 @@ class Latch {
86
86
  has_had_waiters_ = true;
87
87
  #endif
88
88
  return [this]() -> Poll<T> {
89
- if (grpc_trace_promise_primitives.enabled()) {
89
+ if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
90
90
  gpr_log(GPR_INFO, "%sWaitAndCopy %s", DebugTag().c_str(),
91
91
  StateString().c_str());
92
92
  }
@@ -100,7 +100,7 @@ class Latch {
100
100
 
101
101
  // Set the value of the latch. Can only be called once.
102
102
  void Set(T value) {
103
- if (grpc_trace_promise_primitives.enabled()) {
103
+ if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
104
104
  gpr_log(GPR_INFO, "%sSet %s", DebugTag().c_str(), StateString().c_str());
105
105
  }
106
106
  DCHECK(!has_value_);
@@ -163,7 +163,7 @@ class Latch<void> {
163
163
  has_had_waiters_ = true;
164
164
  #endif
165
165
  return [this]() -> Poll<Empty> {
166
- if (grpc_trace_promise_primitives.enabled()) {
166
+ if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
167
167
  gpr_log(GPR_INFO, "%sPollWait %s", DebugTag().c_str(),
168
168
  StateString().c_str());
169
169
  }
@@ -177,7 +177,7 @@ class Latch<void> {
177
177
 
178
178
  // Set the latch. Can only be called once.
179
179
  void Set() {
180
- if (grpc_trace_promise_primitives.enabled()) {
180
+ if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
181
181
  gpr_log(GPR_INFO, "%sSet %s", DebugTag().c_str(), StateString().c_str());
182
182
  }
183
183
  DCHECK(!is_set_);
@@ -226,7 +226,7 @@ class ExternallyObservableLatch<void> {
226
226
  // Produce a promise to wait for this latch.
227
227
  auto Wait() {
228
228
  return [this]() -> Poll<Empty> {
229
- if (grpc_trace_promise_primitives.enabled()) {
229
+ if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
230
230
  gpr_log(GPR_INFO, "%sPollWait %s", DebugTag().c_str(),
231
231
  StateString().c_str());
232
232
  }
@@ -240,7 +240,7 @@ class ExternallyObservableLatch<void> {
240
240
 
241
241
  // Set the latch.
242
242
  void Set() {
243
- if (grpc_trace_promise_primitives.enabled()) {
243
+ if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
244
244
  gpr_log(GPR_INFO, "%sSet %s", DebugTag().c_str(), StateString().c_str());
245
245
  }
246
246
  is_set_.store(true, std::memory_order_relaxed);
@@ -250,7 +250,7 @@ class ExternallyObservableLatch<void> {
250
250
  bool IsSet() const { return is_set_.load(std::memory_order_relaxed); }
251
251
 
252
252
  void Reset() {
253
- if (grpc_trace_promise_primitives.enabled()) {
253
+ if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
254
254
  gpr_log(GPR_INFO, "%sReset %s", DebugTag().c_str(),
255
255
  StateString().c_str());
256
256
  }
@@ -72,6 +72,23 @@ promise_detail::Map<Promise, Fn> Map(Promise promise, Fn fn) {
72
72
  return promise_detail::Map<Promise, Fn>(std::move(promise), std::move(fn));
73
73
  }
74
74
 
75
+ // Maps a promise to a new promise that returns a tuple of the original result
76
+ // and a bool indicating whether there was ever a Pending{} value observed from
77
+ // polling.
78
+ template <typename Promise>
79
+ auto CheckDelayed(Promise promise) {
80
+ using P = promise_detail::PromiseLike<Promise>;
81
+ return [delayed = false, promise = P(std::move(promise))]() mutable
82
+ -> Poll<std::tuple<typename P::Result, bool>> {
83
+ auto r = promise();
84
+ if (r.pending()) {
85
+ delayed = true;
86
+ return Pending{};
87
+ }
88
+ return std::make_tuple(r.value(), delayed);
89
+ };
90
+ }
91
+
75
92
  // Callable that takes a tuple and returns one element
76
93
  template <size_t kElem>
77
94
  struct JustElem {
@@ -0,0 +1,182 @@
1
+ // Copyright 2024 gRPC authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #ifndef GRPC_SRC_CORE_LIB_PROMISE_OBSERVABLE_H
16
+ #define GRPC_SRC_CORE_LIB_PROMISE_OBSERVABLE_H
17
+
18
+ #include "absl/container/flat_hash_set.h"
19
+ #include "absl/functional/any_invocable.h"
20
+ #include "absl/log/check.h"
21
+
22
+ #include <grpc/support/port_platform.h>
23
+
24
+ #include "src/core/lib/gprpp/sync.h"
25
+ #include "src/core/lib/promise/activity.h"
26
+ #include "src/core/lib/promise/poll.h"
27
+
28
+ namespace grpc_core {
29
+
30
+ // Observable allows broadcasting a value to multiple interested observers.
31
+ template <typename T>
32
+ class Observable {
33
+ public:
34
+ // We need to assign a value initially.
35
+ explicit Observable(T initial)
36
+ : state_(MakeRefCounted<State>(std::move(initial))) {}
37
+
38
+ // Update the value to something new. Awakes any waiters.
39
+ void Set(T value) { state_->Set(std::move(value)); }
40
+
41
+ // Returns a promise that resolves to a T when is_acceptable returns true for
42
+ // that value.
43
+ // is_acceptable is any invocable that takes a `const T&` and returns a bool.
44
+ template <typename F>
45
+ auto NextWhen(F is_acceptable) {
46
+ return ObserverWhen<F>(state_, std::move(is_acceptable));
47
+ }
48
+
49
+ // Returns a promise that resolves to a T when the value becomes != current.
50
+ auto Next(T current) {
51
+ return NextWhen([current = std::move(current)](const T& value) {
52
+ return value != current;
53
+ });
54
+ }
55
+
56
+ private:
57
+ // Forward declaration so we can form pointers to Observer in State.
58
+ class Observer;
59
+
60
+ // State keeps track of all observable state.
61
+ // It's a refcounted object so that promises reading the state are not tied
62
+ // to the lifetime of the Observable.
63
+ class State : public RefCounted<State> {
64
+ public:
65
+ explicit State(T value) : value_(std::move(value)) {}
66
+
67
+ // Update the value and wake all observers.
68
+ void Set(T value) {
69
+ MutexLock lock(&mu_);
70
+ std::swap(value_, value);
71
+ WakeAll();
72
+ }
73
+
74
+ // Export our mutex so that Observer can use it.
75
+ Mutex* mu() ABSL_LOCK_RETURNED(mu_) { return &mu_; }
76
+
77
+ // Fetch a ref to the current value.
78
+ const T& current() const ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) {
79
+ return value_;
80
+ }
81
+
82
+ // Remove an observer from the set (it no longer needs updates).
83
+ void Remove(Observer* observer) ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) {
84
+ observers_.erase(observer);
85
+ }
86
+
87
+ // Add an observer to the set (it needs updates).
88
+ GRPC_MUST_USE_RESULT Waker Add(Observer* observer)
89
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) {
90
+ observers_.insert(observer);
91
+ return GetContext<Activity>()->MakeNonOwningWaker();
92
+ }
93
+
94
+ private:
95
+ // Wake all observers.
96
+ void WakeAll() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) {
97
+ for (auto* observer : observers_) {
98
+ observer->Wakeup();
99
+ }
100
+ }
101
+
102
+ Mutex mu_;
103
+ // All observers that may need an update.
104
+ absl::flat_hash_set<Observer*> observers_ ABSL_GUARDED_BY(mu_);
105
+ // The current value.
106
+ T value_ ABSL_GUARDED_BY(mu_);
107
+ };
108
+
109
+ // A promise that resolves to a T when ShouldReturn() returns true.
110
+ // Subclasses must implement ShouldReturn().
111
+ class Observer {
112
+ public:
113
+ explicit Observer(RefCountedPtr<State> state) : state_(std::move(state)) {}
114
+
115
+ virtual ~Observer() {
116
+ // If we saw a pending at all then we *may* be in the set of observers.
117
+ // If not we're definitely not and we can avoid taking the lock at all.
118
+ if (!saw_pending_) return;
119
+ MutexLock lock(state_->mu());
120
+ auto w = std::move(waker_);
121
+ state_->Remove(this);
122
+ }
123
+
124
+ Observer(const Observer&) = delete;
125
+ Observer& operator=(const Observer&) = delete;
126
+ Observer(Observer&& other) noexcept : state_(std::move(other.state_)) {
127
+ CHECK(other.waker_.is_unwakeable());
128
+ DCHECK(waker_.is_unwakeable());
129
+ CHECK(!other.saw_pending_);
130
+ }
131
+ Observer& operator=(Observer&& other) noexcept = delete;
132
+
133
+ void Wakeup() { waker_.WakeupAsync(); }
134
+
135
+ virtual bool ShouldReturn(const T& current) = 0;
136
+
137
+ Poll<T> operator()() {
138
+ MutexLock lock(state_->mu());
139
+ // Check if the value has changed yet.
140
+ if (ShouldReturn(state_->current())) {
141
+ if (saw_pending_ && !waker_.is_unwakeable()) state_->Remove(this);
142
+ return state_->current();
143
+ }
144
+ // Record that we saw at least one pending and then register for wakeup.
145
+ saw_pending_ = true;
146
+ if (waker_.is_unwakeable()) waker_ = state_->Add(this);
147
+ return Pending{};
148
+ }
149
+
150
+ private:
151
+ RefCountedPtr<State> state_;
152
+ Waker waker_;
153
+ bool saw_pending_ = false;
154
+ };
155
+
156
+ // A promise that resolves to a T when is_acceptable returns true for
157
+ // the current value.
158
+ template <typename F>
159
+ class ObserverWhen : public Observer {
160
+ public:
161
+ ObserverWhen(RefCountedPtr<State> state, F is_acceptable)
162
+ : Observer(std::move(state)),
163
+ is_acceptable_(std::move(is_acceptable)) {}
164
+
165
+ ObserverWhen(ObserverWhen&& other) noexcept
166
+ : Observer(std::move(other)),
167
+ is_acceptable_(std::move(other.is_acceptable_)) {}
168
+
169
+ bool ShouldReturn(const T& current) override {
170
+ return is_acceptable_(current);
171
+ }
172
+
173
+ private:
174
+ F is_acceptable_;
175
+ };
176
+
177
+ RefCountedPtr<State> state_;
178
+ };
179
+
180
+ } // namespace grpc_core
181
+
182
+ #endif // GRPC_SRC_CORE_LIB_PROMISE_OBSERVABLE_H
@@ -26,15 +26,12 @@
26
26
  #include "src/core/lib/gprpp/sync.h"
27
27
  #include "src/core/lib/iomgr/exec_ctx.h"
28
28
  #include "src/core/lib/promise/activity.h"
29
- #include "src/core/lib/promise/trace.h"
30
29
 
31
30
  #ifdef GRPC_MAXIMIZE_THREADYNESS
32
31
  #include "src/core/lib/gprpp/thd.h" // IWYU pragma: keep
33
32
  #include "src/core/lib/iomgr/exec_ctx.h" // IWYU pragma: keep
34
33
  #endif
35
34
 
36
- grpc_core::DebugOnlyTraceFlag grpc_trace_party_state(false, "party_state");
37
-
38
35
  namespace grpc_core {
39
36
 
40
37
  namespace {
@@ -273,14 +270,14 @@ bool Party::RunOneParticipant(int i) {
273
270
  // somewhere.
274
271
  auto* participant = participants_[i].load(std::memory_order_acquire);
275
272
  if (participant == nullptr) {
276
- if (grpc_trace_promise_primitives.enabled()) {
273
+ if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
277
274
  gpr_log(GPR_INFO, "%s[party] wakeup %d already complete",
278
275
  DebugTag().c_str(), i);
279
276
  }
280
277
  return false;
281
278
  }
282
279
  absl::string_view name;
283
- if (grpc_trace_promise_primitives.enabled()) {
280
+ if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
284
281
  name = participant->name();
285
282
  gpr_log(GPR_INFO, "%s[%s] begin job %d", DebugTag().c_str(),
286
283
  std::string(name).c_str(), i);
@@ -306,10 +303,12 @@ void Party::AddParticipants(Participant** participants, size_t count) {
306
303
  bool run_party = sync_.AddParticipantsAndRef(count, [this, participants,
307
304
  count](size_t* slots) {
308
305
  for (size_t i = 0; i < count; i++) {
309
- if (grpc_trace_party_state.enabled()) {
306
+ if (GRPC_TRACE_FLAG_ENABLED(party_state)) {
310
307
  gpr_log(GPR_INFO,
311
- "Party %p AddParticipant: %s @ %" PRIdPTR,
312
- &sync_, std::string(participants[i]->name()).c_str(), slots[i]);
308
+ "Party %p AddParticipant: %s @ %" PRIdPTR
309
+ " [participant=%p]",
310
+ &sync_, std::string(participants[i]->name()).c_str(), slots[i],
311
+ participants[i]);
313
312
  }
314
313
  participants_[slots[i]].store(participants[i], std::memory_order_release);
315
314
  }
@@ -31,6 +31,7 @@
31
31
  #include <grpc/support/log.h>
32
32
  #include <grpc/support/port_platform.h>
33
33
 
34
+ #include "src/core/lib/debug/trace.h"
34
35
  #include "src/core/lib/gprpp/construct_destruct.h"
35
36
  #include "src/core/lib/gprpp/crash.h"
36
37
  #include "src/core/lib/gprpp/ref_counted.h"
@@ -40,7 +41,6 @@
40
41
  #include "src/core/lib/promise/context.h"
41
42
  #include "src/core/lib/promise/detail/promise_factory.h"
42
43
  #include "src/core/lib/promise/poll.h"
43
- #include "src/core/lib/promise/trace.h"
44
44
 
45
45
  // Two implementations of party synchronization are provided: one using a single
46
46
  // atomic, the other using a mutex and a set of state variables.
@@ -52,8 +52,6 @@
52
52
  // There's a thought of fuzzing the two implementations against each other as
53
53
  // a correctness check of both, but that's not implemented yet.
54
54
 
55
- extern grpc_core::DebugOnlyTraceFlag grpc_trace_party_state;
56
-
57
55
  #define GRPC_PARTY_SYNC_USING_ATOMICS
58
56
  // #define GRPC_PARTY_SYNC_USING_MUTEX
59
57
 
@@ -231,7 +229,7 @@ class PartySyncUsingAtomics {
231
229
 
232
230
  void LogStateChange(const char* op, uint64_t prev_state, uint64_t new_state,
233
231
  DebugLocation loc = {}) {
234
- if (grpc_trace_party_state.enabled()) {
232
+ if (GRPC_TRACE_FLAG_ENABLED(party_state)) {
235
233
  gpr_log(loc.file(), loc.line(), GPR_LOG_SEVERITY_INFO,
236
234
  "Party %p %30s: %016" PRIx64 " -> %016" PRIx64, this, op,
237
235
  prev_state, new_state);
@@ -379,6 +377,11 @@ class Party : public Activity, private Wakeable {
379
377
  // The on_complete callback will be called with the result of the promise if
380
378
  // it completes.
381
379
  // A maximum of sixteen promises can be spawned onto a party.
380
+ // promise_factory called to create the promise with the party lock taken;
381
+ // after the promise is created the factory is destroyed.
382
+ // This means that pointers or references to factory members will be
383
+ // invalidated after the promise is created - so the promise should not retain
384
+ // any of these.
382
385
  template <typename Factory, typename OnComplete>
383
386
  void Spawn(absl::string_view name, Factory promise_factory,
384
387
  OnComplete on_complete);
@@ -641,10 +644,9 @@ struct ContextSubclass<Party> {
641
644
  template <typename Factory, typename OnComplete>
642
645
  void Party::BulkSpawner::Spawn(absl::string_view name, Factory promise_factory,
643
646
  OnComplete on_complete) {
644
- if (grpc_trace_promise_primitives.enabled()) {
645
- gpr_log(GPR_DEBUG, "%s[bulk_spawn] On %p queue %s",
646
- party_->DebugTag().c_str(), this, std::string(name).c_str());
647
- }
647
+ GRPC_TRACE_LOG(promise_primitives, INFO)
648
+ << party_->DebugTag() << "[bulk_spawn] On " << this << " queue " << name
649
+ << " (" << sizeof(ParticipantImpl<Factory, OnComplete>) << " bytes)";
648
650
  participants_[num_participants_++] = new ParticipantImpl<Factory, OnComplete>(
649
651
  name, std::move(promise_factory), std::move(on_complete));
650
652
  }
@@ -23,6 +23,7 @@
23
23
  #include <utility>
24
24
 
25
25
  #include "absl/log/check.h"
26
+ #include "absl/log/log.h"
26
27
  #include "absl/strings/str_cat.h"
27
28
  #include "absl/types/optional.h"
28
29
  #include "absl/types/variant.h"
@@ -39,7 +40,6 @@
39
40
  #include "src/core/lib/promise/map.h"
40
41
  #include "src/core/lib/promise/poll.h"
41
42
  #include "src/core/lib/promise/seq.h"
42
- #include "src/core/lib/promise/trace.h"
43
43
  #include "src/core/lib/resource_quota/arena.h"
44
44
 
45
45
  namespace grpc_core {
@@ -118,9 +118,8 @@ class Center : public InterceptorList<T> {
118
118
 
119
119
  // Add one ref to this object, and return this.
120
120
  void IncrementRefCount() {
121
- if (grpc_trace_promise_primitives.enabled()) {
122
- gpr_log(GPR_DEBUG, "%s", DebugOpString("IncrementRefCount").c_str());
123
- }
121
+ GRPC_TRACE_VLOG(promise_primitives, 2)
122
+ << DebugOpString("IncrementRefCount");
124
123
  refs_++;
125
124
  DCHECK_NE(refs_, 0);
126
125
  }
@@ -133,9 +132,7 @@ class Center : public InterceptorList<T> {
133
132
  // Drop a ref
134
133
  // If no refs remain, destroy this object
135
134
  void Unref() {
136
- if (grpc_trace_promise_primitives.enabled()) {
137
- gpr_log(GPR_DEBUG, "%s", DebugOpString("Unref").c_str());
138
- }
135
+ GRPC_TRACE_VLOG(promise_primitives, 2) << DebugOpString("Unref");
139
136
  DCHECK_GT(refs_, 0);
140
137
  refs_--;
141
138
  if (0 == refs_) {
@@ -148,9 +145,7 @@ class Center : public InterceptorList<T> {
148
145
  // Return true if the value was pushed.
149
146
  // Return false if the recv end is closed.
150
147
  Poll<bool> Push(T* value) {
151
- if (grpc_trace_promise_primitives.enabled()) {
152
- gpr_log(GPR_INFO, "%s", DebugOpString("Push").c_str());
153
- }
148
+ GRPC_TRACE_LOG(promise_primitives, INFO) << DebugOpString("Push");
154
149
  DCHECK_NE(refs_, 0);
155
150
  switch (value_state_) {
156
151
  case ValueState::kClosed:
@@ -172,9 +167,7 @@ class Center : public InterceptorList<T> {
172
167
  }
173
168
 
174
169
  Poll<bool> PollAck() {
175
- if (grpc_trace_promise_primitives.enabled()) {
176
- gpr_log(GPR_INFO, "%s", DebugOpString("PollAck").c_str());
177
- }
170
+ GRPC_TRACE_LOG(promise_primitives, INFO) << DebugOpString("PollAck");
178
171
  DCHECK_NE(refs_, 0);
179
172
  switch (value_state_) {
180
173
  case ValueState::kClosed:
@@ -200,9 +193,7 @@ class Center : public InterceptorList<T> {
200
193
  // Return the value if one was retrieved.
201
194
  // Return nullopt if the send end is closed and no value had been pushed.
202
195
  Poll<absl::optional<T>> Next() {
203
- if (grpc_trace_promise_primitives.enabled()) {
204
- gpr_log(GPR_INFO, "%s", DebugOpString("Next").c_str());
205
- }
196
+ GRPC_TRACE_LOG(promise_primitives, INFO) << DebugOpString("Next");
206
197
  DCHECK_NE(refs_, 0);
207
198
  switch (value_state_) {
208
199
  case ValueState::kEmpty:
@@ -226,9 +217,8 @@ class Center : public InterceptorList<T> {
226
217
  // Check if the pipe is closed for sending (if there is a value still queued
227
218
  // but the pipe is closed, reports closed).
228
219
  Poll<bool> PollClosedForSender() {
229
- if (grpc_trace_promise_primitives.enabled()) {
230
- gpr_log(GPR_INFO, "%s", DebugOpString("PollClosedForSender").c_str());
231
- }
220
+ GRPC_TRACE_LOG(promise_primitives, INFO)
221
+ << DebugOpString("PollClosedForSender");
232
222
  DCHECK_NE(refs_, 0);
233
223
  switch (value_state_) {
234
224
  case ValueState::kEmpty:
@@ -249,9 +239,8 @@ class Center : public InterceptorList<T> {
249
239
  // Check if the pipe is closed for receiving (if there is a value still queued
250
240
  // but the pipe is closed, reports open).
251
241
  Poll<bool> PollClosedForReceiver() {
252
- if (grpc_trace_promise_primitives.enabled()) {
253
- gpr_log(GPR_INFO, "%s", DebugOpString("PollClosedForReceiver").c_str());
254
- }
242
+ GRPC_TRACE_LOG(promise_primitives, INFO)
243
+ << DebugOpString("PollClosedForReceiver");
255
244
  DCHECK_NE(refs_, 0);
256
245
  switch (value_state_) {
257
246
  case ValueState::kEmpty:
@@ -270,9 +259,7 @@ class Center : public InterceptorList<T> {
270
259
  }
271
260
 
272
261
  Poll<Empty> PollEmpty() {
273
- if (grpc_trace_promise_primitives.enabled()) {
274
- gpr_log(GPR_INFO, "%s", DebugOpString("PollEmpty").c_str());
275
- }
262
+ GRPC_TRACE_LOG(promise_primitives, INFO) << DebugOpString("PollEmpty");
276
263
  DCHECK_NE(refs_, 0);
277
264
  switch (value_state_) {
278
265
  case ValueState::kReady:
@@ -290,9 +277,7 @@ class Center : public InterceptorList<T> {
290
277
  }
291
278
 
292
279
  void AckNext() {
293
- if (grpc_trace_promise_primitives.enabled()) {
294
- gpr_log(GPR_INFO, "%s", DebugOpString("AckNext").c_str());
295
- }
280
+ GRPC_TRACE_LOG(promise_primitives, INFO) << DebugOpString("AckNext");
296
281
  switch (value_state_) {
297
282
  case ValueState::kReady:
298
283
  case ValueState::kWaitingForAck:
@@ -317,9 +302,7 @@ class Center : public InterceptorList<T> {
317
302
  }
318
303
 
319
304
  void MarkClosed() {
320
- if (grpc_trace_promise_primitives.enabled()) {
321
- gpr_log(GPR_INFO, "%s", DebugOpString("MarkClosed").c_str());
322
- }
305
+ GRPC_TRACE_LOG(promise_primitives, INFO) << DebugOpString("MarkClosed");
323
306
  switch (value_state_) {
324
307
  case ValueState::kEmpty:
325
308
  case ValueState::kAcked:
@@ -346,9 +329,7 @@ class Center : public InterceptorList<T> {
346
329
  }
347
330
 
348
331
  void MarkCancelled() {
349
- if (grpc_trace_promise_primitives.enabled()) {
350
- gpr_log(GPR_INFO, "%s", DebugOpString("MarkCancelled").c_str());
351
- }
332
+ GRPC_TRACE_LOG(promise_primitives, INFO) << DebugOpString("MarkCancelled");
352
333
  switch (value_state_) {
353
334
  case ValueState::kEmpty:
354
335
  case ValueState::kAcked:
@@ -654,7 +635,7 @@ class Push {
654
635
 
655
636
  Poll<bool> operator()() {
656
637
  if (center_ == nullptr) {
657
- if (grpc_trace_promise_primitives.enabled()) {
638
+ if (GRPC_TRACE_FLAG_ENABLED(promise_primitives)) {
658
639
  gpr_log(GPR_DEBUG, "%s Pipe push has a null center",
659
640
  GetContext<Activity>()->DebugTag().c_str());
660
641
  }
@@ -18,6 +18,7 @@
18
18
  #include <type_traits>
19
19
 
20
20
  #include "absl/functional/any_invocable.h"
21
+ #include "absl/log/log.h"
21
22
  #include "absl/status/status.h"
22
23
  #include "absl/types/optional.h"
23
24
 
@@ -171,6 +171,8 @@ class ValueOrFailure {
171
171
  T& value() { return value_.value(); }
172
172
  const T& operator*() const { return *value_; }
173
173
  T& operator*() { return *value_; }
174
+ const T* operator->() const { return &*value_; }
175
+ T* operator->() { return &*value_; }
174
176
 
175
177
  bool operator==(const ValueOrFailure& other) const {
176
178
  return value_ == other.value_;