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
@@ -15,6 +15,7 @@
15
15
 
16
16
  #ifdef GPR_WINDOWS
17
17
  #include "absl/log/check.h"
18
+ #include "absl/log/log.h"
18
19
 
19
20
  #include <grpc/support/alloc.h>
20
21
  #include <grpc/support/log_windows.h>
@@ -68,14 +69,19 @@ void WinSocket::Shutdown() {
68
69
  int status = WSAIoctl(socket_, SIO_GET_EXTENSION_FUNCTION_POINTER, &guid,
69
70
  sizeof(guid), &DisconnectEx, sizeof(DisconnectEx),
70
71
  &ioctl_num_bytes, NULL, NULL);
71
-
72
- if (status == 0) {
73
- DisconnectEx(socket_, NULL, 0, 0);
74
- } else {
72
+ if (status != 0) {
75
73
  char* utf8_message = gpr_format_message(WSAGetLastError());
76
- gpr_log(GPR_INFO, "Unable to retrieve DisconnectEx pointer : %s",
77
- utf8_message);
74
+ LOG(INFO) << "Unable to retrieve DisconnectEx pointer : " << utf8_message;
78
75
  gpr_free(utf8_message);
76
+ } else if (DisconnectEx(socket_, NULL, 0, 0) == FALSE) {
77
+ auto last_error = WSAGetLastError();
78
+ // DisconnectEx may be called when the socket is not connected. Ignore that
79
+ // error, and log all others.
80
+ if (last_error != WSAENOTCONN) {
81
+ char* utf8_message = gpr_format_message(last_error);
82
+ LOG(INFO) << "DisconnectEx failed: " << utf8_message;
83
+ gpr_free(utf8_message);
84
+ }
79
85
  }
80
86
  closesocket(socket_);
81
87
  GRPC_EVENT_ENGINE_ENDPOINT_TRACE("WinSocket::%p socket closed", this);
@@ -91,7 +97,7 @@ void WinSocket::Shutdown(const grpc_core::DebugLocation& location,
91
97
 
92
98
  void WinSocket::NotifyOnReady(OpState& info, EventEngine::Closure* closure) {
93
99
  if (IsShutdown()) {
94
- info.SetError(WSAESHUTDOWN);
100
+ info.SetResult(WSAESHUTDOWN, 0, "NotifyOnReady");
95
101
  thread_pool_->Run(closure);
96
102
  return;
97
103
  };
@@ -130,12 +136,13 @@ void WinSocket::OpState::SetReady() {
130
136
  win_socket_->thread_pool_->Run(closure);
131
137
  }
132
138
 
133
- void WinSocket::OpState::SetError(int wsa_error) {
134
- result_ = OverlappedResult{/*wsa_error=*/wsa_error, /*bytes_transferred=*/0};
135
- }
136
-
137
- void WinSocket::OpState::SetResult(OverlappedResult result) {
138
- result_ = result;
139
+ void WinSocket::OpState::SetResult(int wsa_error, DWORD bytes,
140
+ absl::string_view context) {
141
+ bytes = wsa_error == 0 ? bytes : 0;
142
+ result_ = OverlappedResult{
143
+ /*wsa_error=*/wsa_error, /*bytes_transferred=*/bytes,
144
+ /*error_status=*/wsa_error == 0 ? absl::OkStatus()
145
+ : GRPC_WSA_ERROR(wsa_error, context)};
139
146
  }
140
147
 
141
148
  void WinSocket::OpState::SetErrorStatus(absl::Status error_status) {
@@ -149,16 +156,15 @@ void WinSocket::OpState::GetOverlappedResult() {
149
156
 
150
157
  void WinSocket::OpState::GetOverlappedResult(SOCKET sock) {
151
158
  if (win_socket_->IsShutdown()) {
152
- result_ = OverlappedResult{/*wsa_error=*/WSA_OPERATION_ABORTED,
153
- /*bytes_transferred=*/0};
159
+ SetResult(WSA_OPERATION_ABORTED, 0, "GetOverlappedResult");
154
160
  return;
155
161
  }
156
162
  DWORD flags = 0;
157
163
  DWORD bytes;
158
164
  BOOL success =
159
165
  WSAGetOverlappedResult(sock, &overlapped_, &bytes, FALSE, &flags);
160
- result_ = OverlappedResult{/*wsa_error=*/success ? 0 : WSAGetLastError(),
161
- /*bytes_transferred=*/bytes};
166
+ auto wsa_error = success ? 0 : WSAGetLastError();
167
+ SetResult(wsa_error, bytes, "WSAGetOverlappedResult");
162
168
  }
163
169
 
164
170
  bool WinSocket::IsShutdown() { return is_shutdown_.load(); }
@@ -47,12 +47,11 @@ class WinSocket {
47
47
  // the WinSocket's ThreadPool. Otherwise, a "pending iocp" flag will
48
48
  // be set.
49
49
  void SetReady();
50
- // Set WSA error results for a completed op.
51
- void SetError(int wsa_error);
52
- // Set an OverlappedResult. Useful when WSARecv returns immediately.
53
- void SetResult(OverlappedResult result);
50
+ // Set WSA result for a completed op.
51
+ // If the error is non-zero, bytes will be overridden to 0.
52
+ void SetResult(int wsa_error, DWORD bytes, absl::string_view context);
54
53
  // Set error results for a completed op.
55
- // This is a manual override, meant to override any WSA status code.
54
+ // This is a manual override, meant to ignore any WSA status code.
56
55
  void SetErrorStatus(absl::Status error_status);
57
56
  // Retrieve the results of an overlapped operation (via Winsock API) and
58
57
  // store them locally.
@@ -102,8 +102,7 @@ void WindowsEndpoint::AsyncIOState::DoTcpRead(SliceBuffer* buffer) {
102
102
  int wsa_error = status == 0 ? 0 : WSAGetLastError();
103
103
  if (wsa_error != WSAEWOULDBLOCK) {
104
104
  // Data or some error was returned immediately.
105
- socket->read_info()->SetResult(
106
- {/*wsa_error=*/wsa_error, /*bytes_read=*/bytes_read});
105
+ socket->read_info()->SetResult(wsa_error, bytes_read, "WSARecv");
107
106
  thread_pool->Run(&handle_read_event);
108
107
  return;
109
108
  }
@@ -120,9 +119,8 @@ void WindowsEndpoint::AsyncIOState::DoTcpRead(SliceBuffer* buffer) {
120
119
  if (wsa_error != 0 && wsa_error != WSA_IO_PENDING) {
121
120
  // The async read attempt returned an error immediately.
122
121
  socket->UnregisterReadCallback();
123
- socket->read_info()->SetErrorStatus(GRPC_WSA_ERROR(
124
- wsa_error,
125
- absl::StrFormat("WindowsEndpont::%p Read failed", this).c_str()));
122
+ socket->read_info()->SetResult(
123
+ wsa_error, 0, absl::StrFormat("WindowsEndpont::%p Read failed", this));
126
124
  thread_pool->Run(&handle_read_event);
127
125
  }
128
126
  }
@@ -158,7 +156,7 @@ bool WindowsEndpoint::Write(absl::AnyInvocable<void(absl::Status)> on_writable,
158
156
  });
159
157
  return false;
160
158
  }
161
- if (grpc_event_engine_endpoint_data_trace.enabled()) {
159
+ if (GRPC_TRACE_FLAG_ENABLED(event_engine_endpoint_data)) {
162
160
  for (size_t i = 0; i < data->Count(); i++) {
163
161
  auto str = data->RefSlice(i).as_string_view();
164
162
  gpr_log(GPR_INFO, "WindowsEndpoint::%p WRITE (peer=%s): %.*s", this,
@@ -220,8 +218,7 @@ bool WindowsEndpoint::Write(absl::AnyInvocable<void(absl::Status)> on_writable,
220
218
  int wsa_error = WSAGetLastError();
221
219
  if (wsa_error != WSA_IO_PENDING) {
222
220
  io_state_->socket->UnregisterWriteCallback();
223
- io_state_->socket->write_info()->SetErrorStatus(
224
- GRPC_WSA_ERROR(wsa_error, "WSASend"));
221
+ io_state_->socket->write_info()->SetResult(wsa_error, 0, "WSASend");
225
222
  io_state_->thread_pool->Run(&io_state_->handle_write_event);
226
223
  }
227
224
  }
@@ -296,7 +293,7 @@ void WindowsEndpoint::HandleReadClosure::Run() {
296
293
  }
297
294
  if (result.bytes_transferred == 0) {
298
295
  // Either the endpoint is shut down or we've seen the end of the stream
299
- if (grpc_event_engine_endpoint_data_trace.enabled()) {
296
+ if (GRPC_TRACE_FLAG_ENABLED(event_engine_endpoint_data)) {
300
297
  DumpSliceBuffer(buffer_, absl::StrFormat("WindowsEndpoint::%p READ",
301
298
  io_state->endpoint));
302
299
  }
@@ -16,8 +16,10 @@
16
16
  #ifdef GPR_WINDOWS
17
17
 
18
18
  #include <memory>
19
+ #include <ostream>
19
20
 
20
21
  #include "absl/log/check.h"
22
+ #include "absl/log/log.h"
21
23
  #include "absl/status/status.h"
22
24
  #include "absl/status/statusor.h"
23
25
  #include "absl/strings/string_view.h"
@@ -43,6 +45,7 @@
43
45
  #include "src/core/lib/event_engine/windows/windows_engine.h"
44
46
  #include "src/core/lib/event_engine/windows/windows_listener.h"
45
47
  #include "src/core/lib/gprpp/crash.h"
48
+ #include "src/core/lib/gprpp/dump_args.h"
46
49
  #include "src/core/lib/gprpp/sync.h"
47
50
  #include "src/core/lib/gprpp/time.h"
48
51
  #include "src/core/lib/iomgr/error.h"
@@ -50,13 +53,104 @@
50
53
  namespace grpc_event_engine {
51
54
  namespace experimental {
52
55
 
53
- namespace {
54
- EventEngine::OnConnectCallback CreateCrashingOnConnectCallback() {
55
- return [](absl::StatusOr<std::unique_ptr<EventEngine::Endpoint>>) {
56
- grpc_core::Crash("Internal Error: OnConnect callback called when unset");
57
- };
56
+ std::ostream& operator<<(
57
+ std::ostream& out,
58
+ const WindowsEventEngine::ConnectionState& connection_state) {
59
+ out << "ConnectionState::" << &connection_state
60
+ << ": connection_state.address="
61
+ << ResolvedAddressToURI(connection_state.address_) << ","
62
+ << GRPC_DUMP_ARGS(connection_state.has_run_,
63
+ connection_state.connection_handle_,
64
+ connection_state.timer_handle_);
65
+ return out;
58
66
  }
59
- } // namespace
67
+
68
+ // ---- ConnectionState ----
69
+
70
+ WindowsEventEngine::ConnectionState::ConnectionState(
71
+ std::shared_ptr<WindowsEventEngine> engine,
72
+ std::unique_ptr<WinSocket> socket, EventEngine::ResolvedAddress address,
73
+ MemoryAllocator allocator,
74
+ EventEngine::OnConnectCallback on_connect_user_callback)
75
+ : socket_(std::move(socket)),
76
+ address_(address),
77
+ allocator_(std::move(allocator)),
78
+ on_connect_user_callback_(std::move(on_connect_user_callback)),
79
+ engine_(std::move(engine)) {
80
+ CHECK(socket_ != nullptr);
81
+ connection_handle_ = ConnectionHandle{reinterpret_cast<intptr_t>(this),
82
+ engine_->aba_token_.fetch_add(1)};
83
+ }
84
+
85
+ void WindowsEventEngine::ConnectionState::Start(Duration timeout) {
86
+ on_connected_cb_ =
87
+ std::make_unique<OnConnectedCallback>(engine_.get(), shared_from_this());
88
+ socket_->NotifyOnWrite(on_connected_cb_.get());
89
+ deadline_timer_cb_ = std::make_unique<DeadlineTimerCallback>(
90
+ engine_.get(), shared_from_this());
91
+ timer_handle_ = engine_->RunAfter(timeout, deadline_timer_cb_.get());
92
+ }
93
+
94
+ EventEngine::OnConnectCallback
95
+ WindowsEventEngine::ConnectionState::TakeCallback() {
96
+ return std::exchange(on_connect_user_callback_, nullptr);
97
+ }
98
+
99
+ std::unique_ptr<WindowsEndpoint>
100
+ WindowsEventEngine::ConnectionState::FinishConnectingAndMakeEndpoint(
101
+ ThreadPool* thread_pool) {
102
+ ChannelArgsEndpointConfig cfg;
103
+ return std::make_unique<WindowsEndpoint>(address_, std::move(socket_),
104
+ std::move(allocator_), cfg,
105
+ thread_pool, engine_);
106
+ }
107
+
108
+ void WindowsEventEngine::ConnectionState::AbortOnConnect() {
109
+ on_connected_cb_.reset();
110
+ }
111
+
112
+ void WindowsEventEngine::ConnectionState::AbortDeadlineTimer() {
113
+ deadline_timer_cb_.reset();
114
+ }
115
+
116
+ void WindowsEventEngine::ConnectionState::OnConnectedCallback::Run() {
117
+ DCHECK_NE(connection_state_, nullptr)
118
+ << "ConnectionState::OnConnectedCallback::" << this
119
+ << " has already run. It should only ever run once.";
120
+ bool has_run;
121
+ {
122
+ grpc_core::MutexLock lock(&connection_state_->mu_);
123
+ has_run = std::exchange(connection_state_->has_run_, true);
124
+ }
125
+ // This could race with the deadline timer. If so, the engine's
126
+ // OnConnectCompleted callback should not run, and the refs should be
127
+ // released.
128
+ if (has_run) {
129
+ connection_state_.reset();
130
+ return;
131
+ }
132
+ engine_->OnConnectCompleted(std::move(connection_state_));
133
+ }
134
+
135
+ void WindowsEventEngine::ConnectionState::DeadlineTimerCallback::Run() {
136
+ DCHECK_NE(connection_state_, nullptr)
137
+ << "ConnectionState::DeadlineTimerCallback::" << this
138
+ << " has already run. It should only ever run once.";
139
+ bool has_run;
140
+ {
141
+ grpc_core::MutexLock lock(&connection_state_->mu_);
142
+ has_run = std::exchange(connection_state_->has_run_, true);
143
+ }
144
+ // This could race with the on connected callback. If so, the engine's
145
+ // OnDeadlineTimerFired callback should not run, and the refs should be
146
+ // released.
147
+ if (has_run) {
148
+ connection_state_.reset();
149
+ return;
150
+ }
151
+ engine_->OnDeadlineTimerFired(std::move(connection_state_));
152
+ }
153
+
60
154
  // ---- IOCPWorkClosure ----
61
155
 
62
156
  WindowsEventEngine::IOCPWorkClosure::IOCPWorkClosure(ThreadPool* thread_pool,
@@ -66,6 +160,7 @@ WindowsEventEngine::IOCPWorkClosure::IOCPWorkClosure(ThreadPool* thread_pool,
66
160
  }
67
161
 
68
162
  void WindowsEventEngine::IOCPWorkClosure::Run() {
163
+ if (done_signal_.HasBeenNotified()) return;
69
164
  auto result = iocp_->Work(std::chrono::seconds(60), [this] {
70
165
  workers_.fetch_add(1);
71
166
  thread_pool_->Run(this);
@@ -123,7 +218,7 @@ WindowsEventEngine::~WindowsEventEngine() {
123
218
  {
124
219
  task_mu_.Lock();
125
220
  if (!known_handles_.empty()) {
126
- if (GRPC_TRACE_FLAG_ENABLED(grpc_event_engine_trace)) {
221
+ if (GRPC_TRACE_FLAG_ENABLED(event_engine)) {
127
222
  for (auto handle : known_handles_) {
128
223
  gpr_log(GPR_ERROR,
129
224
  "WindowsEventEngine:%p uncleared TaskHandle at shutdown:%s",
@@ -135,7 +230,7 @@ WindowsEventEngine::~WindowsEventEngine() {
135
230
  auto deadline =
136
231
  timer_manager_.Now() + grpc_core::Duration::FromSecondsAsDouble(10);
137
232
  while (!known_handles_.empty() && timer_manager_.Now() < deadline) {
138
- if (GRPC_TRACE_FLAG_ENABLED(grpc_event_engine_trace)) {
233
+ if (GRPC_TRACE_FLAG_ENABLED(event_engine)) {
139
234
  GRPC_LOG_EVERY_N_SEC(1, GPR_DEBUG, "Waiting for timers. %d remaining",
140
235
  known_handles_.size());
141
236
  }
@@ -242,8 +337,8 @@ WindowsEventEngine::GetDNSResolver(
242
337
  return std::make_unique<WindowsEventEngine::WindowsDNSResolver>(
243
338
  std::move(*ares_resolver));
244
339
  #else // GRPC_ARES == 1 && defined(GRPC_WINDOWS_SOCKET_ARES_EV_DRIVER)
245
- GRPC_EVENT_ENGINE_DNS_TRACE(
246
- "WindowsEventEngine:%p creating NativeWindowsDNSResolver", this);
340
+ GRPC_TRACE_LOG(event_engine_dns, INFO)
341
+ << "WindowsEventEngine::" << this << " creating NativeWindowsDNSResolver";
247
342
  return std::make_unique<NativeWindowsDNSResolver>(shared_from_this());
248
343
  #endif // GRPC_ARES == 1 && defined(GRPC_WINDOWS_SOCKET_ARES_EV_DRIVER)
249
344
  }
@@ -256,35 +351,54 @@ void WindowsEventEngine::OnConnectCompleted(
256
351
  EventEngine::OnConnectCallback cb;
257
352
  {
258
353
  // Connection attempt complete!
259
- grpc_core::MutexLock lock(&state->mu);
260
- cb = std::move(state->on_connected_user_callback);
261
- state->on_connected_user_callback = CreateCrashingOnConnectCallback();
262
- state->on_connected = nullptr;
354
+ grpc_core::MutexLock lock(&state->mu());
355
+ // return early if we cannot cancel the connection timeout timer.
356
+ int erased_handles = 0;
263
357
  {
264
358
  grpc_core::MutexLock handle_lock(&connection_mu_);
265
- known_connection_handles_.erase(state->connection_handle);
359
+ erased_handles =
360
+ known_connection_handles_.erase(state->connection_handle());
266
361
  }
267
- const auto& overlapped_result = state->socket->write_info()->result();
268
- // return early if we cannot cancel the connection timeout timer.
269
- if (!Cancel(state->timer_handle)) return;
362
+ if (erased_handles != 1 || !Cancel(state->timer_handle())) {
363
+ GRPC_EVENT_ENGINE_TRACE(
364
+ "%s", "Not accepting connection since the deadline timer has fired");
365
+ return;
366
+ }
367
+ // Release refs held by the deadline timer.
368
+ state->AbortDeadlineTimer();
369
+ const auto& overlapped_result = state->socket()->write_info()->result();
270
370
  if (!overlapped_result.error_status.ok()) {
271
- state->socket->Shutdown(DEBUG_LOCATION, "ConnectEx failure");
371
+ state->socket()->Shutdown(DEBUG_LOCATION, "ConnectEx failure");
272
372
  endpoint = overlapped_result.error_status;
273
373
  } else if (overlapped_result.wsa_error != 0) {
274
- state->socket->Shutdown(DEBUG_LOCATION, "ConnectEx failure");
374
+ state->socket()->Shutdown(DEBUG_LOCATION, "ConnectEx failure");
275
375
  endpoint = GRPC_WSA_ERROR(overlapped_result.wsa_error, "ConnectEx");
276
376
  } else {
277
- ChannelArgsEndpointConfig cfg;
278
- endpoint = std::make_unique<WindowsEndpoint>(
279
- state->address, std::move(state->socket), std::move(state->allocator),
280
- cfg, thread_pool_.get(), shared_from_this());
377
+ endpoint = state->FinishConnectingAndMakeEndpoint(thread_pool_.get());
281
378
  }
379
+ cb = state->TakeCallback();
282
380
  }
283
381
  // This code should be running in a thread pool thread already, so the
284
382
  // callback can be run directly.
383
+ state.reset();
285
384
  cb(std::move(endpoint));
286
385
  }
287
386
 
387
+ void WindowsEventEngine::OnDeadlineTimerFired(
388
+ std::shared_ptr<ConnectionState> connection_state) {
389
+ bool cancelled = false;
390
+ EventEngine::OnConnectCallback cb;
391
+ {
392
+ grpc_core::MutexLock lock(&connection_state->mu());
393
+ cancelled = CancelConnectFromDeadlineTimer(connection_state.get());
394
+ if (cancelled) cb = connection_state->TakeCallback();
395
+ }
396
+ if (cancelled) {
397
+ connection_state.reset();
398
+ cb(absl::DeadlineExceededError("Connection timed out"));
399
+ }
400
+ }
401
+
288
402
  EventEngine::ConnectionHandle WindowsEventEngine::Connect(
289
403
  OnConnectCallback on_connect, const ResolvedAddress& addr,
290
404
  const EndpointConfig& /* args */, MemoryAllocator memory_allocator,
@@ -367,65 +481,61 @@ EventEngine::ConnectionHandle WindowsEventEngine::Connect(
367
481
  return EventEngine::ConnectionHandle::kInvalid;
368
482
  }
369
483
  // Prepare the socket to receive a connection
370
- auto connection_state = std::make_shared<ConnectionState>();
371
- grpc_core::MutexLock lock(&connection_state->mu);
372
- connection_state->socket = iocp_.Watch(sock);
373
- CHECK(connection_state->socket != nullptr);
374
- auto* info = connection_state->socket->write_info();
375
- connection_state->address = address;
376
- connection_state->allocator = std::move(memory_allocator);
377
- connection_state->on_connected_user_callback = std::move(on_connect);
378
- connection_state->on_connected =
379
- SelfDeletingClosure::Create([this, connection_state]() mutable {
380
- OnConnectCompleted(std::move(connection_state));
381
- });
382
- connection_state->timer_handle =
383
- RunAfter(timeout, [this, connection_state]() {
384
- grpc_core::ReleasableMutexLock lock(&connection_state->mu);
385
- if (CancelConnectFromDeadlineTimer(connection_state.get())) {
386
- auto cb = std::move(connection_state->on_connected_user_callback);
387
- connection_state->on_connected_user_callback =
388
- CreateCrashingOnConnectCallback();
389
- lock.Release();
390
- cb(absl::DeadlineExceededError("Connection timed out"));
391
- }
392
- // else: The connection attempt could not be canceled. We can assume
393
- // the connection callback will be called.
394
- });
395
- // Connect
396
- connection_state->socket->NotifyOnWrite(connection_state->on_connected);
484
+ auto connection_state = std::make_shared<ConnectionState>(
485
+ std::static_pointer_cast<WindowsEventEngine>(shared_from_this()),
486
+ /*socket=*/iocp_.Watch(sock), address,
487
+ /*memory_allocator=*/std::move(memory_allocator),
488
+ /*on_connect_user_callback=*/std::move(on_connect));
489
+ grpc_core::MutexLock lock(&connection_state->mu());
490
+ auto* info = connection_state->socket()->write_info();
491
+ {
492
+ grpc_core::MutexLock connection_handle_lock(&connection_mu_);
493
+ known_connection_handles_.insert(connection_state->connection_handle());
494
+ }
495
+ connection_state->Start(timeout);
397
496
  bool success =
398
- ConnectEx(connection_state->socket->raw_socket(), address.address(),
497
+ ConnectEx(connection_state->socket()->raw_socket(), address.address(),
399
498
  address.size(), nullptr, 0, nullptr, info->overlapped());
400
499
  // It wouldn't be unusual to get a success immediately. But we'll still get an
401
500
  // IOCP notification, so let's ignore it.
402
- if (!success) {
403
- int last_error = WSAGetLastError();
404
- if (last_error != ERROR_IO_PENDING) {
405
- if (!Cancel(connection_state->timer_handle)) {
406
- return EventEngine::ConnectionHandle::kInvalid;
407
- }
408
- connection_state->socket->Shutdown(DEBUG_LOCATION, "ConnectEx");
409
- Run([connection_state = std::move(connection_state),
410
- status = GRPC_WSA_ERROR(WSAGetLastError(), "ConnectEx")]() mutable {
411
- EventEngine::OnConnectCallback cb;
412
- {
413
- grpc_core::MutexLock lock(&connection_state->mu);
414
- cb = std::move(connection_state->on_connected_user_callback);
415
- connection_state->on_connected_user_callback =
416
- CreateCrashingOnConnectCallback();
417
- }
418
- cb(status);
419
- });
420
- return EventEngine::ConnectionHandle::kInvalid;
421
- }
501
+ if (success) return connection_state->connection_handle();
502
+ // Otherwise, we need to handle an error or a pending IO Event.
503
+ int last_error = WSAGetLastError();
504
+ if (last_error == ERROR_IO_PENDING) {
505
+ // Overlapped I/O operation is in progress.
506
+ return connection_state->connection_handle();
507
+ }
508
+ // Time to abort the connection.
509
+ // The on-connect callback won't run, so we must clean up its state.
510
+ connection_state->AbortOnConnect();
511
+ int erased_handles = 0;
512
+ {
513
+ grpc_core::MutexLock connection_handle_lock(&connection_mu_);
514
+ erased_handles =
515
+ known_connection_handles_.erase(connection_state->connection_handle());
516
+ }
517
+ CHECK_EQ(erased_handles, 1) << "Did not find connection handle "
518
+ << connection_state->connection_handle()
519
+ << " after a synchronous connection failure. "
520
+ "This should not be possible.";
521
+ connection_state->socket()->Shutdown(DEBUG_LOCATION, "ConnectEx");
522
+ if (!Cancel(connection_state->timer_handle())) {
523
+ // The deadline timer will run, or is running.
524
+ return EventEngine::ConnectionHandle::kInvalid;
422
525
  }
423
- connection_state->connection_handle =
424
- ConnectionHandle{reinterpret_cast<intptr_t>(connection_state.get()),
425
- aba_token_.fetch_add(1)};
426
- grpc_core::MutexLock connection_handle_lock(&connection_mu_);
427
- known_connection_handles_.insert(connection_state->connection_handle);
428
- return connection_state->connection_handle;
526
+ // The deadline timer won't run, so we must clean up its state.
527
+ connection_state->AbortDeadlineTimer();
528
+ Run([connection_state = std::move(connection_state),
529
+ status = GRPC_WSA_ERROR(WSAGetLastError(), "ConnectEx")]() mutable {
530
+ EventEngine::OnConnectCallback cb;
531
+ {
532
+ grpc_core::MutexLock lock(&connection_state->mu());
533
+ cb = connection_state->TakeCallback();
534
+ }
535
+ connection_state.reset();
536
+ cb(std::move(status));
537
+ });
538
+ return EventEngine::ConnectionHandle::kInvalid;
429
539
  }
430
540
 
431
541
  bool WindowsEventEngine::CancelConnect(EventEngine::ConnectionHandle handle) {
@@ -437,17 +547,20 @@ bool WindowsEventEngine::CancelConnect(EventEngine::ConnectionHandle handle) {
437
547
  // Erase the connection handle, which may be unknown
438
548
  {
439
549
  grpc_core::MutexLock lock(&connection_mu_);
440
- if (!known_connection_handles_.contains(handle)) {
550
+ if (known_connection_handles_.erase(handle) != 1) {
441
551
  GRPC_EVENT_ENGINE_TRACE(
442
552
  "Unknown connection handle: %s",
443
553
  HandleToString<EventEngine::ConnectionHandle>(handle).c_str());
444
554
  return false;
445
555
  }
446
- known_connection_handles_.erase(handle);
447
556
  }
448
557
  auto* connection_state = reinterpret_cast<ConnectionState*>(handle.keys[0]);
449
- grpc_core::MutexLock state_lock(&connection_state->mu);
450
- if (!Cancel(connection_state->timer_handle)) return false;
558
+ grpc_core::MutexLock state_lock(&connection_state->mu());
559
+ // The connection cannot be cancelled if the deadline timer is already firing.
560
+ if (!Cancel(connection_state->timer_handle())) return false;
561
+ // The deadline timer was cancelled, so we must clean up its state.
562
+ connection_state->AbortDeadlineTimer();
563
+ // The on-connect callback will run when the socket shutdown event occurs.
451
564
  return CancelConnectInternalStateLocked(connection_state);
452
565
  }
453
566
 
@@ -456,20 +569,21 @@ bool WindowsEventEngine::CancelConnectFromDeadlineTimer(
456
569
  // Erase the connection handle, which is guaranteed to exist.
457
570
  {
458
571
  grpc_core::MutexLock lock(&connection_mu_);
459
- CHECK(known_connection_handles_.erase(
460
- connection_state->connection_handle) == 1);
572
+ if (known_connection_handles_.erase(
573
+ connection_state->connection_handle()) != 1) {
574
+ return false;
575
+ }
461
576
  }
462
577
  return CancelConnectInternalStateLocked(connection_state);
463
578
  }
464
579
 
465
580
  bool WindowsEventEngine::CancelConnectInternalStateLocked(
466
581
  ConnectionState* connection_state) {
467
- connection_state->socket->Shutdown(DEBUG_LOCATION, "CancelConnect");
582
+ connection_state->socket()->Shutdown(DEBUG_LOCATION, "CancelConnect");
468
583
  // Release the connection_state shared_ptr owned by the connected callback.
469
- delete connection_state->on_connected;
470
584
  GRPC_EVENT_ENGINE_TRACE("Successfully cancelled connection %s",
471
585
  HandleToString<EventEngine::ConnectionHandle>(
472
- connection_state->connection_handle)
586
+ connection_state->connection_handle())
473
587
  .c_str());
474
588
  return true;
475
589
  }