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
@@ -21,6 +21,7 @@
21
21
 
22
22
  #include <functional>
23
23
 
24
+ #include <grpc/passive_listener.h>
24
25
  #include <grpc/support/port_platform.h>
25
26
 
26
27
  #include "src/core/lib/channel/channel_args.h"
@@ -42,6 +43,38 @@ grpc_error_handle Chttp2ServerAddPort(
42
43
  Server* server, const char* addr, const ChannelArgs& args,
43
44
  Chttp2ServerArgsModifier connection_args_modifier, int* port_num);
44
45
 
46
+ class Chttp2ServerListener;
47
+ namespace experimental {
48
+
49
+ // An implementation of the public C++ passive listener interface.
50
+ // The server builder holds a weak_ptr to one of these objects, and the
51
+ // application owns the instance.
52
+ class PassiveListenerImpl final : public PassiveListener {
53
+ public:
54
+ absl::Status AcceptConnectedEndpoint(
55
+ std::unique_ptr<grpc_event_engine::experimental::EventEngine::Endpoint>
56
+ endpoint) override ABSL_LOCKS_EXCLUDED(mu_);
57
+
58
+ absl::Status AcceptConnectedFd(GRPC_UNUSED int fd) override
59
+ ABSL_LOCKS_EXCLUDED(mu_);
60
+
61
+ void ListenerDestroyed() ABSL_LOCKS_EXCLUDED(mu_);
62
+
63
+ private:
64
+ // note: the grpc_core::Server redundant namespace qualification is
65
+ // required for older gcc versions.
66
+ friend absl::Status(::grpc_server_add_passive_listener)(
67
+ grpc_core::Server* server, grpc_server_credentials* credentials,
68
+ std::shared_ptr<grpc_core::experimental::PassiveListenerImpl>
69
+ passive_listener);
70
+
71
+ Mutex mu_;
72
+ // Data members will be populated when initialized.
73
+ RefCountedPtr<Server> server_;
74
+ Chttp2ServerListener* listener_;
75
+ };
76
+
77
+ } // namespace experimental
45
78
  } // namespace grpc_core
46
79
 
47
80
  #endif // GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_SERVER_CHTTP2_SERVER_H
@@ -35,6 +35,7 @@
35
35
  #include "absl/container/flat_hash_map.h"
36
36
  #include "absl/hash/hash.h"
37
37
  #include "absl/log/check.h"
38
+ #include "absl/log/log.h"
38
39
  #include "absl/meta/type_traits.h"
39
40
  #include "absl/random/random.h"
40
41
  #include "absl/status/status.h"
@@ -63,7 +64,6 @@
63
64
  #include "src/core/ext/transport/chttp2/transport/frame_rst_stream.h"
64
65
  #include "src/core/ext/transport/chttp2/transport/hpack_encoder.h"
65
66
  #include "src/core/ext/transport/chttp2/transport/http2_settings.h"
66
- #include "src/core/ext/transport/chttp2/transport/http_trace.h"
67
67
  #include "src/core/ext/transport/chttp2/transport/internal.h"
68
68
  #include "src/core/ext/transport/chttp2/transport/legacy_frame.h"
69
69
  #include "src/core/ext/transport/chttp2/transport/max_concurrent_streams_policy.h"
@@ -72,24 +72,21 @@
72
72
  #include "src/core/ext/transport/chttp2/transport/ping_rate_policy.h"
73
73
  #include "src/core/ext/transport/chttp2/transport/varint.h"
74
74
  #include "src/core/ext/transport/chttp2/transport/write_size_policy.h"
75
- #include "src/core/lib/channel/call_tracer.h"
76
75
  #include "src/core/lib/channel/channel_args.h"
77
- #include "src/core/lib/channel/context.h"
78
- #include "src/core/lib/channel/tcp_tracer.h"
79
- #include "src/core/lib/debug/stats.h"
80
- #include "src/core/lib/debug/stats_data.h"
76
+ #include "src/core/lib/config/config_vars.h"
77
+ #include "src/core/lib/event_engine/extensions/tcp_trace.h"
78
+ #include "src/core/lib/event_engine/query_extensions.h"
81
79
  #include "src/core/lib/experiments/experiments.h"
82
- #include "src/core/lib/gpr/string.h"
83
- #include "src/core/lib/gpr/useful.h"
84
80
  #include "src/core/lib/gprpp/bitset.h"
85
81
  #include "src/core/lib/gprpp/crash.h"
86
82
  #include "src/core/lib/gprpp/debug_location.h"
87
83
  #include "src/core/lib/gprpp/ref_counted.h"
88
84
  #include "src/core/lib/gprpp/status_helper.h"
89
85
  #include "src/core/lib/gprpp/time.h"
90
- #include "src/core/lib/http/parser.h"
91
86
  #include "src/core/lib/iomgr/combiner.h"
92
87
  #include "src/core/lib/iomgr/error.h"
88
+ #include "src/core/lib/iomgr/ev_posix.h"
89
+ #include "src/core/lib/iomgr/event_engine_shims/endpoint.h"
93
90
  #include "src/core/lib/iomgr/exec_ctx.h"
94
91
  #include "src/core/lib/iomgr/iomgr_fwd.h"
95
92
  #include "src/core/lib/iomgr/port.h"
@@ -97,7 +94,6 @@
97
94
  #include "src/core/lib/resource_quota/arena.h"
98
95
  #include "src/core/lib/resource_quota/memory_quota.h"
99
96
  #include "src/core/lib/resource_quota/resource_quota.h"
100
- #include "src/core/lib/resource_quota/trace.h"
101
97
  #include "src/core/lib/slice/slice.h"
102
98
  #include "src/core/lib/slice/slice_buffer.h"
103
99
  #include "src/core/lib/slice/slice_internal.h"
@@ -109,10 +105,13 @@
109
105
  #include "src/core/lib/transport/metadata_info.h"
110
106
  #include "src/core/lib/transport/status_conversion.h"
111
107
  #include "src/core/lib/transport/transport.h"
112
-
113
- #ifdef GRPC_POSIX_SOCKET_TCP
114
- #include "src/core/lib/iomgr/ev_posix.h"
115
- #endif
108
+ #include "src/core/telemetry/call_tracer.h"
109
+ #include "src/core/telemetry/stats.h"
110
+ #include "src/core/telemetry/stats_data.h"
111
+ #include "src/core/telemetry/tcp_tracer.h"
112
+ #include "src/core/util/http_client/parser.h"
113
+ #include "src/core/util/string.h"
114
+ #include "src/core/util/useful.h"
116
115
 
117
116
  #define DEFAULT_CONNECTION_WINDOW_TARGET (1024 * 1024)
118
117
  #define MAX_WINDOW 0x7fffffffu
@@ -142,9 +141,6 @@ static bool g_default_server_keepalive_permit_without_calls = false;
142
141
  #define GRPC_ARG_HTTP_TARPIT_MAX_DURATION_MS "grpc.http.tarpit_max_duration_ms"
143
142
 
144
143
  #define MAX_CLIENT_STREAM_ID 0x7fffffffu
145
- grpc_core::TraceFlag grpc_keepalive_trace(false, "http_keepalive");
146
- grpc_core::DebugOnlyTraceFlag grpc_trace_chttp2_refcount(false,
147
- "chttp2_refcount");
148
144
 
149
145
  // forward declarations of various callbacks that we'll build closures around
150
146
  static void write_action_begin_locked(
@@ -228,14 +224,13 @@ namespace {
228
224
 
229
225
  using TaskHandle = ::grpc_event_engine::experimental::EventEngine::TaskHandle;
230
226
 
231
- grpc_core::CallTracerInterface* CallTracerIfSampled(grpc_chttp2_stream* s) {
232
- if (s->context == nullptr || !grpc_core::IsTraceRecordCallopsEnabled()) {
227
+ grpc_core::CallTracerAnnotationInterface* CallTracerIfSampled(
228
+ grpc_chttp2_stream* s) {
229
+ if (!grpc_core::IsTraceRecordCallopsEnabled()) {
233
230
  return nullptr;
234
231
  }
235
- auto* call_tracer = static_cast<grpc_core::CallTracerInterface*>(
236
- static_cast<grpc_call_context_element*>(
237
- s->context)[GRPC_CONTEXT_CALL_TRACER_ANNOTATION_INTERFACE]
238
- .value);
232
+ auto* call_tracer =
233
+ s->arena->GetContext<grpc_core::CallTracerAnnotationInterface>();
239
234
  if (call_tracer == nullptr || !call_tracer->IsSampled()) {
240
235
  return nullptr;
241
236
  }
@@ -244,13 +239,11 @@ grpc_core::CallTracerInterface* CallTracerIfSampled(grpc_chttp2_stream* s) {
244
239
 
245
240
  std::shared_ptr<grpc_core::TcpTracerInterface> TcpTracerIfSampled(
246
241
  grpc_chttp2_stream* s) {
247
- if (s->context == nullptr || !grpc_core::IsTraceRecordCallopsEnabled()) {
242
+ if (!grpc_core::IsTraceRecordCallopsEnabled()) {
248
243
  return nullptr;
249
244
  }
250
- auto* call_attempt_tracer = static_cast<grpc_core::CallTracerInterface*>(
251
- static_cast<grpc_call_context_element*>(
252
- s->context)[GRPC_CONTEXT_CALL_TRACER]
253
- .value);
245
+ auto* call_attempt_tracer =
246
+ s->arena->GetContext<grpc_core::CallTracerInterface>();
254
247
  if (call_attempt_tracer == nullptr || !call_attempt_tracer->IsSampled()) {
255
248
  return nullptr;
256
249
  }
@@ -385,17 +378,17 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
385
378
  channelz_socket.reset();
386
379
  }
387
380
 
388
- grpc_endpoint_destroy(ep);
381
+ if (ep != nullptr) grpc_endpoint_destroy(ep);
389
382
 
390
383
  grpc_slice_buffer_destroy(&qbuf);
391
384
 
392
385
  grpc_error_handle error = GRPC_ERROR_CREATE("Transport destroyed");
393
386
  // ContextList::Execute follows semantics of a callback function and does not
394
387
  // take a ref on error
395
- if (cl != nullptr) {
396
- grpc_core::ForEachContextListEntryExecute(cl, nullptr, error);
388
+ if (context_list != nullptr) {
389
+ grpc_core::ForEachContextListEntryExecute(context_list, nullptr, error);
397
390
  }
398
- cl = nullptr;
391
+ context_list = nullptr;
399
392
 
400
393
  grpc_slice_buffer_destroy(&read_buffer);
401
394
  grpc_chttp2_goaway_parser_destroy(&goaway_parser);
@@ -592,15 +585,13 @@ static void init_keepalive_pings_if_enabled_locked(
592
585
  }
593
586
  }
594
587
 
588
+ using grpc_event_engine::experimental::QueryExtension;
589
+ using grpc_event_engine::experimental::TcpTraceExtension;
590
+
595
591
  grpc_chttp2_transport::grpc_chttp2_transport(
596
592
  const grpc_core::ChannelArgs& channel_args, grpc_endpoint* ep,
597
593
  bool is_client)
598
- : grpc_core::RefCounted<grpc_chttp2_transport,
599
- grpc_core::NonPolymorphicRefCount>(
600
- GRPC_TRACE_FLAG_ENABLED(grpc_trace_chttp2_refcount)
601
- ? "chttp2_refcount"
602
- : nullptr),
603
- ep(ep),
594
+ : ep(ep),
604
595
  peer_string(
605
596
  grpc_core::Slice::FromCopiedString(grpc_endpoint_get_peer(ep))),
606
597
  memory_owner(channel_args.GetObject<grpc_core::ResourceQuota>()
@@ -623,7 +614,18 @@ grpc_chttp2_transport::grpc_chttp2_transport(
623
614
  &memory_owner),
624
615
  deframe_state(is_client ? GRPC_DTS_FH_0 : GRPC_DTS_CLIENT_PREFIX_0),
625
616
  is_client(is_client) {
626
- cl = new grpc_core::ContextList();
617
+ context_list = new grpc_core::ContextList();
618
+
619
+ if (channel_args.GetBool(GRPC_ARG_TCP_TRACING_ENABLED).value_or(false) &&
620
+ grpc_event_engine::experimental::grpc_is_event_engine_endpoint(ep)) {
621
+ auto epte = QueryExtension<TcpTraceExtension>(
622
+ grpc_event_engine::experimental::grpc_get_wrapped_event_engine_endpoint(
623
+ ep));
624
+ if (epte != nullptr) {
625
+ epte->InitializeAndReturnTcpTracer();
626
+ }
627
+ }
628
+
627
629
  CHECK(strlen(GRPC_CHTTP2_CLIENT_CONNECT_STRING) ==
628
630
  GRPC_CHTTP2_CLIENT_CONNECT_STRLEN);
629
631
 
@@ -759,9 +761,21 @@ static void close_transport_locked(grpc_chttp2_transport* t,
759
761
  GRPC_CHTTP2_STREAM_UNREF(s, "chttp2_writing:close");
760
762
  }
761
763
  CHECK(t->write_state == GRPC_CHTTP2_WRITE_STATE_IDLE);
762
- grpc_endpoint_shutdown(t->ep, error);
764
+ if (t->interested_parties_until_recv_settings != nullptr) {
765
+ grpc_endpoint_delete_from_pollset_set(
766
+ t->ep, t->interested_parties_until_recv_settings);
767
+ t->interested_parties_until_recv_settings = nullptr;
768
+ }
769
+ grpc_core::MutexLock lock(&t->ep_destroy_mu);
770
+ grpc_endpoint_destroy(t->ep);
771
+ t->ep = nullptr;
763
772
  }
764
773
  if (t->notify_on_receive_settings != nullptr) {
774
+ if (t->interested_parties_until_recv_settings != nullptr) {
775
+ grpc_endpoint_delete_from_pollset_set(
776
+ t->ep, t->interested_parties_until_recv_settings);
777
+ t->interested_parties_until_recv_settings = nullptr;
778
+ }
765
779
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, t->notify_on_receive_settings,
766
780
  error);
767
781
  t->notify_on_receive_settings = nullptr;
@@ -790,7 +804,8 @@ void grpc_chttp2_stream_unref(grpc_chttp2_stream* s) {
790
804
 
791
805
  grpc_chttp2_stream::grpc_chttp2_stream(grpc_chttp2_transport* t,
792
806
  grpc_stream_refcount* refcount,
793
- const void* server_data)
807
+ const void* server_data,
808
+ grpc_core::Arena* arena)
794
809
  : t(t->Ref()),
795
810
  refcount([refcount]() {
796
811
  // We reserve one 'active stream' that's dropped when the stream is
@@ -804,14 +819,14 @@ grpc_chttp2_stream::grpc_chttp2_stream(grpc_chttp2_transport* t,
804
819
  #endif
805
820
  return refcount;
806
821
  }()),
822
+ arena(arena),
807
823
  flow_control(&t->flow_control) {
808
824
  t->streams_allocated.fetch_add(1, std::memory_order_relaxed);
809
825
  if (server_data) {
810
826
  id = static_cast<uint32_t>(reinterpret_cast<uintptr_t>(server_data));
811
- if (grpc_http_trace.enabled()) {
812
- gpr_log(GPR_DEBUG, "HTTP:%p/%p creating accept stream %d [from %p]", t,
813
- this, id, server_data);
814
- }
827
+ GRPC_TRACE_VLOG(http, 2)
828
+ << "HTTP:" << t << "/" << this << " creating accept stream " << id
829
+ << " [from " << server_data << "]";
815
830
  *t->accepting_stream = this;
816
831
  t->stream_map.emplace(id, this);
817
832
  post_destructive_reclaimer(t);
@@ -861,8 +876,8 @@ grpc_chttp2_stream::~grpc_chttp2_stream() {
861
876
  void grpc_chttp2_transport::InitStream(grpc_stream* gs,
862
877
  grpc_stream_refcount* refcount,
863
878
  const void* server_data,
864
- grpc_core::Arena*) {
865
- new (gs) grpc_chttp2_stream(this, refcount, server_data);
879
+ grpc_core::Arena* arena) {
880
+ new (gs) grpc_chttp2_stream(this, refcount, server_data, arena);
866
881
  }
867
882
 
868
883
  static void destroy_stream_locked(void* sp, grpc_error_handle /*error*/) {
@@ -1021,13 +1036,13 @@ static void write_action_begin_locked(
1021
1036
  }
1022
1037
 
1023
1038
  static void write_action(grpc_chttp2_transport* t) {
1024
- void* cl = t->cl;
1025
- if (!t->cl->empty()) {
1039
+ void* cl = t->context_list;
1040
+ if (!t->context_list->empty()) {
1026
1041
  // Transfer the ownership of the context list to the endpoint and create and
1027
1042
  // associate a new context list with the transport.
1028
1043
  // The old context list is stored in the cl local variable which is passed
1029
1044
  // to the endpoint. Its upto the endpoint to manage its lifetime.
1030
- t->cl = new grpc_core::ContextList();
1045
+ t->context_list = new grpc_core::ContextList();
1031
1046
  } else {
1032
1047
  // t->cl is Empty. There is nothing to trace in this endpoint_write. set cl
1033
1048
  // to nullptr.
@@ -1042,10 +1057,9 @@ static void write_action(grpc_chttp2_transport* t) {
1042
1057
  if (max_frame_size == 0) {
1043
1058
  max_frame_size = INT_MAX;
1044
1059
  }
1045
- if (GRPC_TRACE_FLAG_ENABLED(grpc_ping_trace)) {
1046
- gpr_log(GPR_INFO, "%s[%p]: Write %" PRIdPTR " bytes",
1047
- t->is_client ? "CLIENT" : "SERVER", t, t->outbuf.Length());
1048
- }
1060
+ GRPC_TRACE_LOG(http2_ping, INFO)
1061
+ << (t->is_client ? "CLIENT" : "SERVER") << "[" << t << "]: Write "
1062
+ << t->outbuf.Length() << " bytes";
1049
1063
  t->write_size_policy.BeginWrite(t->outbuf.Length());
1050
1064
  grpc_endpoint_write(t->ep, t->outbuf.c_slice_buffer(),
1051
1065
  grpc_core::InitTransportClosure<write_action_end>(
@@ -1056,10 +1070,8 @@ static void write_action(grpc_chttp2_transport* t) {
1056
1070
  static void write_action_end(grpc_core::RefCountedPtr<grpc_chttp2_transport> t,
1057
1071
  grpc_error_handle error) {
1058
1072
  auto* tp = t.get();
1059
- if (GRPC_TRACE_FLAG_ENABLED(grpc_ping_trace)) {
1060
- gpr_log(GPR_INFO, "%s[%p]: Finish write",
1061
- t->is_client ? "CLIENT" : "SERVER", t.get());
1062
- }
1073
+ GRPC_TRACE_LOG(http2_ping, INFO) << (t->is_client ? "CLIENT" : "SERVER")
1074
+ << "[" << t.get() << "]: Finish write";
1063
1075
  tp->combiner->Run(grpc_core::InitTransportClosure<write_action_end_locked>(
1064
1076
  std::move(t), &tp->write_action_end_locked),
1065
1077
  error);
@@ -1129,19 +1141,16 @@ void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
1129
1141
  uint32_t goaway_error,
1130
1142
  uint32_t last_stream_id,
1131
1143
  absl::string_view goaway_text) {
1132
- t->goaway_error = grpc_error_set_str(
1144
+ t->goaway_error = grpc_error_set_int(
1133
1145
  grpc_error_set_int(
1134
- grpc_error_set_int(
1135
- grpc_core::StatusCreate(
1136
- absl::StatusCode::kUnavailable,
1137
- absl::StrFormat(
1138
- "GOAWAY received; Error code: %u; Debug Text: %s",
1139
- goaway_error, goaway_text),
1140
- DEBUG_LOCATION, {}),
1141
- grpc_core::StatusIntProperty::kHttp2Error,
1142
- static_cast<intptr_t>(goaway_error)),
1143
- grpc_core::StatusIntProperty::kRpcStatus, GRPC_STATUS_UNAVAILABLE),
1144
- grpc_core::StatusStrProperty::kRawBytes, goaway_text);
1146
+ grpc_core::StatusCreate(
1147
+ absl::StatusCode::kUnavailable,
1148
+ absl::StrFormat("GOAWAY received; Error code: %u; Debug Text: %s",
1149
+ goaway_error, goaway_text),
1150
+ DEBUG_LOCATION, {}),
1151
+ grpc_core::StatusIntProperty::kHttp2Error,
1152
+ static_cast<intptr_t>(goaway_error)),
1153
+ grpc_core::StatusIntProperty::kRpcStatus, GRPC_STATUS_UNAVAILABLE);
1145
1154
 
1146
1155
  GRPC_CHTTP2_IF_TRACING(
1147
1156
  gpr_log(GPR_INFO, "transport %p got goaway with last stream id %d", t,
@@ -1279,7 +1288,7 @@ void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
1279
1288
  return;
1280
1289
  }
1281
1290
  closure->next_data.scratch -= CLOSURE_BARRIER_FIRST_REF_BIT;
1282
- if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
1291
+ if (GRPC_TRACE_FLAG_ENABLED(http)) {
1283
1292
  gpr_log(
1284
1293
  GPR_INFO,
1285
1294
  "complete_closure_step: t=%p %p refs=%d flags=0x%04x desc=%s err=%s "
@@ -1299,12 +1308,10 @@ void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
1299
1308
  if (cl_err.ok()) {
1300
1309
  cl_err = GRPC_ERROR_CREATE(absl::StrCat(
1301
1310
  "Error in HTTP transport completing operation: ", desc,
1302
- " write_state=", write_state_name(t->write_state), " refs=",
1303
- closure->next_data.scratch / CLOSURE_BARRIER_FIRST_REF_BIT, " flags=",
1304
- closure->next_data.scratch % CLOSURE_BARRIER_FIRST_REF_BIT));
1305
- cl_err = grpc_error_set_str(cl_err,
1306
- grpc_core::StatusStrProperty::kTargetAddress,
1307
- std::string(t->peer_string.as_string_view()));
1311
+ " write_state=", write_state_name(t->write_state),
1312
+ " refs=", closure->next_data.scratch / CLOSURE_BARRIER_FIRST_REF_BIT,
1313
+ " flags=", closure->next_data.scratch % CLOSURE_BARRIER_FIRST_REF_BIT,
1314
+ " peer_address=", t->peer_string.as_string_view()));
1308
1315
  }
1309
1316
  cl_err = grpc_error_add_child(cl_err, error);
1310
1317
  closure->error_data.error = grpc_core::internal::StatusAllocHeapPtr(cl_err);
@@ -1331,11 +1338,11 @@ static bool contains_non_ok_status(grpc_metadata_batch* batch) {
1331
1338
 
1332
1339
  static void log_metadata(const grpc_metadata_batch* md_batch, uint32_t id,
1333
1340
  bool is_client, bool is_initial) {
1334
- gpr_log(GPR_INFO, "--metadata--");
1341
+ VLOG(2) << "--metadata--";
1335
1342
  const std::string prefix = absl::StrCat(
1336
1343
  "HTTP:", id, is_initial ? ":HDR" : ":TRL", is_client ? ":CLI:" : ":SVR:");
1337
1344
  md_batch->Log([&prefix](absl::string_view key, absl::string_view value) {
1338
- gpr_log(GPR_INFO, "%s", absl::StrCat(prefix, key, ": ", value).c_str());
1345
+ VLOG(2) << absl::StrCat(prefix, key, ": ", value);
1339
1346
  });
1340
1347
  }
1341
1348
 
@@ -1348,11 +1355,10 @@ static void perform_stream_op_locked(void* stream_op,
1348
1355
  grpc_transport_stream_op_batch_payload* op_payload = op->payload;
1349
1356
  grpc_chttp2_transport* t = s->t.get();
1350
1357
 
1351
- s->context = op->payload->context;
1352
1358
  s->traced = op->is_traced;
1353
1359
  s->call_tracer = CallTracerIfSampled(s);
1354
1360
  s->tcp_tracer = TcpTracerIfSampled(s);
1355
- if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
1361
+ if (GRPC_TRACE_FLAG_ENABLED(http)) {
1356
1362
  gpr_log(GPR_INFO,
1357
1363
  "perform_stream_op_locked[s=%p; op=%p]: %s; on_complete = %p", s,
1358
1364
  op, grpc_transport_stream_op_batch_string(op, false).c_str(),
@@ -1382,7 +1388,7 @@ static void perform_stream_op_locked(void* stream_op,
1382
1388
  }
1383
1389
 
1384
1390
  if (op->send_initial_metadata) {
1385
- if (s->call_tracer) {
1391
+ if (s->call_tracer != nullptr) {
1386
1392
  s->call_tracer->RecordAnnotation(
1387
1393
  grpc_core::HttpAnnotation(grpc_core::HttpAnnotation::Type::kStart,
1388
1394
  gpr_now(GPR_CLOCK_REALTIME))
@@ -1619,7 +1625,7 @@ void grpc_chttp2_transport::PerformStreamOp(
1619
1625
  }
1620
1626
  }
1621
1627
 
1622
- if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
1628
+ if (GRPC_TRACE_FLAG_ENABLED(http)) {
1623
1629
  gpr_log(GPR_INFO, "perform_stream_op[s=%p; op=%p]: %s", s, op,
1624
1630
  grpc_transport_stream_op_batch_string(op, false).c_str());
1625
1631
  }
@@ -1963,7 +1969,7 @@ static void perform_transport_op_locked(void* stream_op,
1963
1969
  }
1964
1970
 
1965
1971
  void grpc_chttp2_transport::PerformOp(grpc_transport_op* op) {
1966
- if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
1972
+ if (GRPC_TRACE_FLAG_ENABLED(http)) {
1967
1973
  gpr_log(GPR_INFO, "perform_transport_op[t=%p]: %s", this,
1968
1974
  grpc_transport_op_string(op).c_str());
1969
1975
  }
@@ -2016,7 +2022,7 @@ void grpc_chttp2_maybe_complete_recv_message(grpc_chttp2_transport* t,
2016
2022
  // Lambda is immediately invoked as a big scoped section that can be
2017
2023
  // exited out of at any point by returning.
2018
2024
  [&]() {
2019
- if (grpc_http_trace.enabled()) {
2025
+ if (GRPC_TRACE_FLAG_ENABLED(http)) {
2020
2026
  gpr_log(GPR_DEBUG,
2021
2027
  "maybe_complete_recv_message %p final_metadata_requested=%d "
2022
2028
  "seen_error=%d",
@@ -2032,7 +2038,7 @@ void grpc_chttp2_maybe_complete_recv_message(grpc_chttp2_transport* t,
2032
2038
  int64_t min_progress_size;
2033
2039
  auto r = grpc_deframe_unprocessed_incoming_frames(
2034
2040
  s, &min_progress_size, &**s->recv_message, s->recv_message_flags);
2035
- if (grpc_http_trace.enabled()) {
2041
+ if (GRPC_TRACE_FLAG_ENABLED(http)) {
2036
2042
  gpr_log(GPR_DEBUG, "Deframe data frame: %s",
2037
2043
  grpc_core::PollToString(r, [](absl::Status r) {
2038
2044
  return r.ToString();
@@ -2088,7 +2094,7 @@ void grpc_chttp2_maybe_complete_recv_message(grpc_chttp2_transport* t,
2088
2094
  void grpc_chttp2_maybe_complete_recv_trailing_metadata(grpc_chttp2_transport* t,
2089
2095
  grpc_chttp2_stream* s) {
2090
2096
  grpc_chttp2_maybe_complete_recv_message(t, s);
2091
- if (grpc_http_trace.enabled()) {
2097
+ if (GRPC_TRACE_FLAG_ENABLED(http)) {
2092
2098
  gpr_log(GPR_DEBUG,
2093
2099
  "maybe_complete_recv_trailing_metadata cli=%d s=%p closure=%p "
2094
2100
  "read_closed=%d "
@@ -2299,7 +2305,7 @@ grpc_chttp2_transport::RemovedStreamHandle grpc_chttp2_mark_stream_closed(
2299
2305
  grpc_chttp2_transport* t, grpc_chttp2_stream* s, int close_reads,
2300
2306
  int close_writes, grpc_error_handle error) {
2301
2307
  grpc_chttp2_transport::RemovedStreamHandle rsh;
2302
- if (grpc_http_trace.enabled()) {
2308
+ if (GRPC_TRACE_FLAG_ENABLED(http)) {
2303
2309
  gpr_log(
2304
2310
  GPR_DEBUG, "MARK_STREAM_CLOSED: t=%p s=%p(id=%d) %s [%s]", t, s, s->id,
2305
2311
  (close_reads && close_writes)
@@ -2619,9 +2625,9 @@ static grpc_error_handle try_http_parsing(grpc_chttp2_transport* t) {
2619
2625
  if (parse_error.ok() &&
2620
2626
  (parse_error = grpc_http_parser_eof(&parser)) == absl::OkStatus()) {
2621
2627
  error = grpc_error_set_int(
2622
- grpc_error_set_int(
2623
- GRPC_ERROR_CREATE("Trying to connect an http1.x server"),
2624
- grpc_core::StatusIntProperty::kHttpStatus, response.status),
2628
+ GRPC_ERROR_CREATE(
2629
+ absl::StrCat("Trying to connect an http1.x server (HTTP status ",
2630
+ response.status, ")")),
2625
2631
  grpc_core::StatusIntProperty::kRpcStatus,
2626
2632
  grpc_http2_status_to_grpc_status(response.status));
2627
2633
  }
@@ -2730,8 +2736,8 @@ static void read_action_locked(
2730
2736
  // got an incoming read, cancel any pending keepalive timers
2731
2737
  t->keepalive_incoming_data_wanted = false;
2732
2738
  if (t->keepalive_ping_timeout_handle != TaskHandle::kInvalid) {
2733
- if (GRPC_TRACE_FLAG_ENABLED(grpc_ping_trace) ||
2734
- GRPC_TRACE_FLAG_ENABLED(grpc_keepalive_trace)) {
2739
+ if (GRPC_TRACE_FLAG_ENABLED(http2_ping) ||
2740
+ GRPC_TRACE_FLAG_ENABLED(http_keepalive)) {
2735
2741
  gpr_log(GPR_INFO,
2736
2742
  "%s[%p]: Clear keepalive timer because data was received",
2737
2743
  t->is_client ? "CLIENT" : "SERVER", t.get());
@@ -2784,7 +2790,7 @@ static void start_bdp_ping(grpc_core::RefCountedPtr<grpc_chttp2_transport> t,
2784
2790
  static void start_bdp_ping_locked(
2785
2791
  grpc_core::RefCountedPtr<grpc_chttp2_transport> t,
2786
2792
  grpc_error_handle error) {
2787
- if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
2793
+ if (GRPC_TRACE_FLAG_ENABLED(http)) {
2788
2794
  gpr_log(GPR_INFO, "%s: Start BDP ping err=%s",
2789
2795
  std::string(t->peer_string.as_string_view()).c_str(),
2790
2796
  grpc_core::StatusToString(error).c_str());
@@ -2811,7 +2817,7 @@ static void finish_bdp_ping(grpc_core::RefCountedPtr<grpc_chttp2_transport> t,
2811
2817
  static void finish_bdp_ping_locked(
2812
2818
  grpc_core::RefCountedPtr<grpc_chttp2_transport> t,
2813
2819
  grpc_error_handle error) {
2814
- if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
2820
+ if (GRPC_TRACE_FLAG_ENABLED(http)) {
2815
2821
  gpr_log(GPR_INFO, "%s: Complete BDP ping err=%s",
2816
2822
  std::string(t->peer_string.as_string_view()).c_str(),
2817
2823
  grpc_core::StatusToString(error).c_str());
@@ -2955,8 +2961,8 @@ static void finish_keepalive_ping_locked(
2955
2961
  grpc_error_handle error) {
2956
2962
  if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_PINGING) {
2957
2963
  if (error.ok()) {
2958
- if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace) ||
2959
- GRPC_TRACE_FLAG_ENABLED(grpc_keepalive_trace)) {
2964
+ if (GRPC_TRACE_FLAG_ENABLED(http) ||
2965
+ GRPC_TRACE_FLAG_ENABLED(http_keepalive)) {
2960
2966
  gpr_log(GPR_INFO, "%s: Finish keepalive ping",
2961
2967
  std::string(t->peer_string.as_string_view()).c_str());
2962
2968
  }
@@ -2977,8 +2983,8 @@ static void maybe_reset_keepalive_ping_timer_locked(grpc_chttp2_transport* t) {
2977
2983
  t->event_engine->Cancel(t->keepalive_ping_timer_handle)) {
2978
2984
  // Cancel succeeds, resets the keepalive ping timer. Note that we don't
2979
2985
  // need to Ref or Unref here since we still hold the Ref.
2980
- if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace) ||
2981
- GRPC_TRACE_FLAG_ENABLED(grpc_keepalive_trace)) {
2986
+ if (GRPC_TRACE_FLAG_ENABLED(http) ||
2987
+ GRPC_TRACE_FLAG_ENABLED(http_keepalive)) {
2982
2988
  gpr_log(GPR_INFO, "%s: Keepalive ping cancelled. Resetting timer.",
2983
2989
  std::string(t->peer_string.as_string_view()).c_str());
2984
2990
  }
@@ -3011,12 +3017,22 @@ static void connectivity_state_set(grpc_chttp2_transport* t,
3011
3017
 
3012
3018
  void grpc_chttp2_transport::SetPollset(grpc_stream* /*gs*/,
3013
3019
  grpc_pollset* pollset) {
3014
- grpc_endpoint_add_to_pollset(ep, pollset);
3020
+ // We don't want the overhead of acquiring the mutex unless we're
3021
+ // using the "poll" polling engine, which is the only one that
3022
+ // actually uses pollsets.
3023
+ if (strcmp(grpc_get_poll_strategy_name(), "poll") != 0) return;
3024
+ grpc_core::MutexLock lock(&ep_destroy_mu);
3025
+ if (ep != nullptr) grpc_endpoint_add_to_pollset(ep, pollset);
3015
3026
  }
3016
3027
 
3017
3028
  void grpc_chttp2_transport::SetPollsetSet(grpc_stream* /*gs*/,
3018
3029
  grpc_pollset_set* pollset_set) {
3019
- grpc_endpoint_add_to_pollset_set(ep, pollset_set);
3030
+ // We don't want the overhead of acquiring the mutex unless we're
3031
+ // using the "poll" polling engine, which is the only one that
3032
+ // actually uses pollsets.
3033
+ if (strcmp(grpc_get_poll_strategy_name(), "poll") != 0) return;
3034
+ grpc_core::MutexLock lock(&ep_destroy_mu);
3035
+ if (ep != nullptr) grpc_endpoint_add_to_pollset_set(ep, pollset_set);
3020
3036
  }
3021
3037
 
3022
3038
  //
@@ -3067,7 +3083,7 @@ static void benign_reclaimer_locked(
3067
3083
  if (error.ok() && t->stream_map.empty()) {
3068
3084
  // Channel with no active streams: send a goaway to try and make it
3069
3085
  // disconnect cleanly
3070
- if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
3086
+ if (GRPC_TRACE_FLAG_ENABLED(resource_quota)) {
3071
3087
  gpr_log(GPR_INFO, "HTTP2: %s - send goaway to free memory",
3072
3088
  std::string(t->peer_string.as_string_view()).c_str());
3073
3089
  }
@@ -3076,7 +3092,7 @@ static void benign_reclaimer_locked(
3076
3092
  grpc_core::StatusIntProperty::kHttp2Error,
3077
3093
  GRPC_HTTP2_ENHANCE_YOUR_CALM),
3078
3094
  /*immediate_disconnect_hint=*/true);
3079
- } else if (error.ok() && GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
3095
+ } else if (error.ok() && GRPC_TRACE_FLAG_ENABLED(resource_quota)) {
3080
3096
  gpr_log(GPR_INFO,
3081
3097
  "HTTP2: %s - skip benign reclamation, there are still %" PRIdPTR
3082
3098
  " streams",
@@ -3096,7 +3112,7 @@ static void destructive_reclaimer_locked(
3096
3112
  if (error.ok() && !t->stream_map.empty()) {
3097
3113
  // As stream_map is a hash map, this selects effectively a random stream.
3098
3114
  grpc_chttp2_stream* s = t->stream_map.begin()->second;
3099
- if (GRPC_TRACE_FLAG_ENABLED(grpc_resource_quota_trace)) {
3115
+ if (GRPC_TRACE_FLAG_ENABLED(resource_quota)) {
3100
3116
  gpr_log(GPR_INFO, "HTTP2: %s - abandon stream id %d",
3101
3117
  std::string(t->peer_string.as_string_view()).c_str(), s->id);
3102
3118
  }
@@ -3174,8 +3190,6 @@ const char* grpc_chttp2_initiate_write_reason_string(
3174
3190
  GPR_UNREACHABLE_CODE(return "unknown");
3175
3191
  }
3176
3192
 
3177
- grpc_endpoint* grpc_chttp2_transport::GetEndpoint() { return ep; }
3178
-
3179
3193
  size_t grpc_chttp2_transport::SizeOfStream() const {
3180
3194
  return sizeof(grpc_chttp2_stream);
3181
3195
  }
@@ -3204,7 +3218,9 @@ grpc_core::Transport* grpc_create_chttp2_transport(
3204
3218
 
3205
3219
  void grpc_chttp2_transport_start_reading(
3206
3220
  grpc_core::Transport* transport, grpc_slice_buffer* read_buffer,
3207
- grpc_closure* notify_on_receive_settings, grpc_closure* notify_on_close) {
3221
+ grpc_closure* notify_on_receive_settings,
3222
+ grpc_pollset_set* interested_parties_until_recv_settings,
3223
+ grpc_closure* notify_on_close) {
3208
3224
  auto t = reinterpret_cast<grpc_chttp2_transport*>(transport)->Ref();
3209
3225
  if (read_buffer != nullptr) {
3210
3226
  grpc_slice_buffer_move_into(read_buffer, &t->read_buffer);
@@ -3213,9 +3229,15 @@ void grpc_chttp2_transport_start_reading(
3213
3229
  auto* tp = t.get();
3214
3230
  tp->combiner->Run(
3215
3231
  grpc_core::NewClosure([t = std::move(t), notify_on_receive_settings,
3232
+ interested_parties_until_recv_settings,
3216
3233
  notify_on_close](grpc_error_handle) mutable {
3217
3234
  if (!t->closed_with_error.ok()) {
3218
3235
  if (notify_on_receive_settings != nullptr) {
3236
+ if (t->ep != nullptr &&
3237
+ interested_parties_until_recv_settings != nullptr) {
3238
+ grpc_endpoint_delete_from_pollset_set(
3239
+ t->ep, interested_parties_until_recv_settings);
3240
+ }
3219
3241
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, notify_on_receive_settings,
3220
3242
  t->closed_with_error);
3221
3243
  }
@@ -3225,6 +3247,8 @@ void grpc_chttp2_transport_start_reading(
3225
3247
  }
3226
3248
  return;
3227
3249
  }
3250
+ t->interested_parties_until_recv_settings =
3251
+ interested_parties_until_recv_settings;
3228
3252
  t->notify_on_receive_settings = notify_on_receive_settings;
3229
3253
  t->notify_on_close = notify_on_close;
3230
3254
  read_action_locked(std::move(t), absl::OkStatus());