Revert "Windows IOCP implementation for the WindowsEventEngine (#30389)" (#30466)

This reverts commit 52402afdd4.
pull/30470/head
AJ Heller 3 years ago committed by GitHub
parent 756498e157
commit 9d4e0e17fe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 243
      BUILD
  2. 262
      CMakeLists.txt
  3. 30
      Makefile
  4. 208
      build_autogenerated.yaml
  5. 19
      config.m4
  6. 19
      config.w32
  7. 36
      gRPC-C++.podspec
  8. 51
      gRPC-Core.podspec
  9. 33
      grpc.gemspec
  10. 30
      grpc.gyp
  11. 33
      package.xml
  12. 5
      src/core/ext/filters/load_reporting/server_load_reporting_filter.cc
  13. 2
      src/core/lib/event_engine/common_closures.h
  14. 21
      src/core/lib/event_engine/default_event_engine_factory.cc
  15. 38
      src/core/lib/event_engine/executor/executor.h
  16. 36
      src/core/lib/event_engine/executor/threaded_executor.cc
  17. 44
      src/core/lib/event_engine/executor/threaded_executor.h
  18. 26
      src/core/lib/event_engine/iomgr_engine/ev_epoll1_linux.cc
  19. 14
      src/core/lib/event_engine/iomgr_engine/ev_epoll1_linux.h
  20. 22
      src/core/lib/event_engine/iomgr_engine/ev_poll_posix.cc
  21. 14
      src/core/lib/event_engine/iomgr_engine/ev_poll_posix.h
  22. 12
      src/core/lib/event_engine/iomgr_engine/event_poller.h
  23. 10
      src/core/lib/event_engine/iomgr_engine/event_poller_posix_default.cc
  24. 10
      src/core/lib/event_engine/iomgr_engine/event_poller_posix_default.h
  25. 68
      src/core/lib/event_engine/iomgr_engine/iomgr_engine.cc
  26. 36
      src/core/lib/event_engine/iomgr_engine/iomgr_engine.h
  27. 10
      src/core/lib/event_engine/iomgr_engine/iomgr_engine_closure.h
  28. 10
      src/core/lib/event_engine/iomgr_engine/lockfree_event.cc
  29. 12
      src/core/lib/event_engine/iomgr_engine/lockfree_event.h
  30. 8
      src/core/lib/event_engine/iomgr_engine/thread_pool.cc
  31. 10
      src/core/lib/event_engine/iomgr_engine/thread_pool.h
  32. 8
      src/core/lib/event_engine/iomgr_engine/timer.cc
  33. 12
      src/core/lib/event_engine/iomgr_engine/timer.h
  34. 8
      src/core/lib/event_engine/iomgr_engine/timer_heap.cc
  35. 10
      src/core/lib/event_engine/iomgr_engine/timer_heap.h
  36. 6
      src/core/lib/event_engine/iomgr_engine/timer_manager.cc
  37. 12
      src/core/lib/event_engine/iomgr_engine/timer_manager.h
  38. 8
      src/core/lib/event_engine/iomgr_engine/wakeup_fd_eventfd.cc
  39. 12
      src/core/lib/event_engine/iomgr_engine/wakeup_fd_eventfd.h
  40. 8
      src/core/lib/event_engine/iomgr_engine/wakeup_fd_pipe.cc
  41. 12
      src/core/lib/event_engine/iomgr_engine/wakeup_fd_pipe.h
  42. 10
      src/core/lib/event_engine/iomgr_engine/wakeup_fd_posix.h
  43. 10
      src/core/lib/event_engine/iomgr_engine/wakeup_fd_posix_default.cc
  44. 10
      src/core/lib/event_engine/iomgr_engine/wakeup_fd_posix_default.h
  45. 125
      src/core/lib/event_engine/posix_engine/thread_pool.cc
  46. 6
      src/core/lib/event_engine/promise.h
  47. 55
      src/core/lib/event_engine/socket_notifier.h
  48. 49
      src/core/lib/event_engine/utils.cc
  49. 40
      src/core/lib/event_engine/utils.h
  50. 148
      src/core/lib/event_engine/windows/iocp.cc
  51. 68
      src/core/lib/event_engine/windows/iocp.h
  52. 200
      src/core/lib/event_engine/windows/win_socket.cc
  53. 112
      src/core/lib/event_engine/windows/win_socket.h
  54. 159
      src/core/lib/event_engine/windows/windows_engine.cc
  55. 120
      src/core/lib/event_engine/windows/windows_engine.h
  56. 15
      src/python/grpcio/grpc_core_dependencies.py
  57. 26
      test/core/event_engine/iomgr_event_engine/BUILD
  58. 22
      test/core/event_engine/iomgr_event_engine/event_poller_posix_test.cc
  59. 12
      test/core/event_engine/iomgr_event_engine/lock_free_event_test.cc
  60. 8
      test/core/event_engine/iomgr_event_engine/timer_heap_test.cc
  61. 6
      test/core/event_engine/iomgr_event_engine/timer_list_test.cc
  62. 10
      test/core/event_engine/iomgr_event_engine/wakeup_fd_posix_test.cc
  63. 24
      test/core/event_engine/test_suite/BUILD
  64. 4
      test/core/event_engine/test_suite/iomgr_event_engine_test.cc
  65. 37
      test/core/event_engine/test_suite/windows_event_engine_test.cc
  66. 81
      test/core/event_engine/windows/BUILD
  67. 80
      test/core/event_engine/windows/create_sockpair.cc
  68. 31
      test/core/event_engine/windows/create_sockpair.h
  69. 359
      test/core/event_engine/windows/iocp_test.cc
  70. 102
      test/core/event_engine/windows/win_socket_test.cc
  71. 15
      test/core/iomgr/BUILD
  72. 33
      tools/doxygen/Doxyfile.c++.internal
  73. 33
      tools/doxygen/Doxyfile.core.internal
  74. 76
      tools/run_tests/generated/tests.json

243
BUILD

@ -2251,18 +2251,6 @@ grpc_cc_library(
],
)
grpc_cc_library(
name = "event_engine_executor",
hdrs = [
"src/core/lib/event_engine/executor/executor.h",
],
external_deps = ["absl/functional:any_invocable"],
deps = [
"event_engine_base_hdrs",
"gpr_platform",
],
)
grpc_cc_library(
name = "event_engine_time_util",
srcs = ["src/core/lib/event_engine/time_util.cc"],
@ -2273,23 +2261,6 @@ grpc_cc_library(
],
)
grpc_cc_library(
name = "event_engine_threaded_executor",
srcs = [
"src/core/lib/event_engine/executor/threaded_executor.cc",
],
hdrs = [
"src/core/lib/event_engine/executor/threaded_executor.h",
],
external_deps = ["absl/functional:any_invocable"],
deps = [
"event_engine_base_hdrs",
"event_engine_executor",
"event_engine_thread_pool",
"gpr_platform",
],
)
grpc_cc_library(
name = "common_event_engine_closures",
hdrs = ["src/core/lib/event_engine/common_closures.h"],
@ -2301,14 +2272,14 @@ grpc_cc_library(
)
grpc_cc_library(
name = "posix_event_engine_timer",
name = "iomgr_ee_timer",
srcs = [
"src/core/lib/event_engine/posix_engine/timer.cc",
"src/core/lib/event_engine/posix_engine/timer_heap.cc",
"src/core/lib/event_engine/iomgr_engine/timer.cc",
"src/core/lib/event_engine/iomgr_engine/timer_heap.cc",
],
hdrs = [
"src/core/lib/event_engine/posix_engine/timer.h",
"src/core/lib/event_engine/posix_engine/timer_heap.h",
"src/core/lib/event_engine/iomgr_engine/timer.h",
"src/core/lib/event_engine/iomgr_engine/timer_heap.h",
],
external_deps = [
"absl/base:core_headers",
@ -2324,20 +2295,20 @@ grpc_cc_library(
)
grpc_cc_library(
name = "event_engine_thread_pool",
srcs = ["src/core/lib/event_engine/thread_pool.cc"],
name = "iomgr_ee_thread_pool",
srcs = ["src/core/lib/event_engine/iomgr_engine/thread_pool.cc"],
hdrs = [
"src/core/lib/event_engine/thread_pool.h",
"src/core/lib/event_engine/iomgr_engine/thread_pool.h",
],
external_deps = ["absl/functional:any_invocable"],
deps = ["gpr_base"],
)
grpc_cc_library(
name = "posix_event_engine_timer_manager",
srcs = ["src/core/lib/event_engine/posix_engine/timer_manager.cc"],
name = "iomgr_ee_timer_manager",
srcs = ["src/core/lib/event_engine/iomgr_engine/timer_manager.cc"],
hdrs = [
"src/core/lib/event_engine/posix_engine/timer_manager.h",
"src/core/lib/event_engine/iomgr_engine/timer_manager.h",
],
external_deps = [
"absl/base:core_headers",
@ -2349,16 +2320,16 @@ grpc_cc_library(
"event_engine_base_hdrs",
"gpr_base",
"gpr_codegen",
"posix_event_engine_timer",
"iomgr_ee_timer",
"time",
],
)
grpc_cc_library(
name = "posix_event_engine_event_poller",
name = "iomgr_ee_event_poller",
srcs = [],
hdrs = [
"src/core/lib/event_engine/posix_engine/event_poller.h",
"src/core/lib/event_engine/iomgr_engine/event_poller.h",
],
external_deps = [
"absl/status",
@ -2367,16 +2338,16 @@ grpc_cc_library(
deps = [
"event_engine_base_hdrs",
"gpr_platform",
"posix_event_engine_closure",
"iomgr_ee_closure",
"time",
],
)
grpc_cc_library(
name = "posix_event_engine_closure",
name = "iomgr_ee_closure",
srcs = [],
hdrs = [
"src/core/lib/event_engine/posix_engine/posix_engine_closure.h",
"src/core/lib/event_engine/iomgr_engine/iomgr_engine_closure.h",
],
external_deps = [
"absl/functional:any_invocable",
@ -2390,38 +2361,38 @@ grpc_cc_library(
)
grpc_cc_library(
name = "posix_event_engine_lockfree_event",
name = "iomgr_ee_lockfree_event",
srcs = [
"src/core/lib/event_engine/posix_engine/lockfree_event.cc",
"src/core/lib/event_engine/iomgr_engine/lockfree_event.cc",
],
hdrs = [
"src/core/lib/event_engine/posix_engine/lockfree_event.h",
"src/core/lib/event_engine/iomgr_engine/lockfree_event.h",
],
external_deps = ["absl/status"],
deps = [
"gpr_base",
"posix_event_engine_closure",
"posix_event_engine_event_poller",
"iomgr_ee_closure",
"iomgr_ee_event_poller",
"status_helper",
],
)
grpc_cc_library(
name = "posix_event_engine_wakeup_fd_posix",
name = "iomgr_ee_wakeup_fd_posix",
hdrs = [
"src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h",
"src/core/lib/event_engine/iomgr_engine/wakeup_fd_posix.h",
],
external_deps = ["absl/status"],
deps = ["gpr_platform"],
)
grpc_cc_library(
name = "posix_event_engine_wakeup_fd_posix_pipe",
name = "iomgr_ee_wakeup_fd_posix_pipe",
srcs = [
"src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc",
"src/core/lib/event_engine/iomgr_engine/wakeup_fd_pipe.cc",
],
hdrs = [
"src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h",
"src/core/lib/event_engine/iomgr_engine/wakeup_fd_pipe.h",
],
external_deps = [
"absl/memory",
@ -2431,18 +2402,18 @@ grpc_cc_library(
],
deps = [
"gpr_base",
"iomgr_ee_wakeup_fd_posix",
"iomgr_port",
"posix_event_engine_wakeup_fd_posix",
],
)
grpc_cc_library(
name = "posix_event_engine_wakeup_fd_posix_eventfd",
name = "iomgr_ee_wakeup_fd_posix_eventfd",
srcs = [
"src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc",
"src/core/lib/event_engine/iomgr_engine/wakeup_fd_eventfd.cc",
],
hdrs = [
"src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h",
"src/core/lib/event_engine/iomgr_engine/wakeup_fd_eventfd.h",
],
external_deps = [
"absl/memory",
@ -2452,18 +2423,18 @@ grpc_cc_library(
],
deps = [
"gpr_base",
"iomgr_ee_wakeup_fd_posix",
"iomgr_port",
"posix_event_engine_wakeup_fd_posix",
],
)
grpc_cc_library(
name = "posix_event_engine_wakeup_fd_posix_default",
name = "iomgr_ee_wakeup_fd_posix_default",
srcs = [
"src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc",
"src/core/lib/event_engine/iomgr_engine/wakeup_fd_posix_default.cc",
],
hdrs = [
"src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h",
"src/core/lib/event_engine/iomgr_engine/wakeup_fd_posix_default.h",
],
external_deps = [
"absl/status",
@ -2471,20 +2442,20 @@ grpc_cc_library(
],
deps = [
"gpr_platform",
"iomgr_ee_wakeup_fd_posix",
"iomgr_ee_wakeup_fd_posix_eventfd",
"iomgr_ee_wakeup_fd_posix_pipe",
"iomgr_port",
"posix_event_engine_wakeup_fd_posix",
"posix_event_engine_wakeup_fd_posix_eventfd",
"posix_event_engine_wakeup_fd_posix_pipe",
],
)
grpc_cc_library(
name = "posix_event_engine_poller_posix_epoll1",
name = "iomgr_ee_poller_posix_epoll1",
srcs = [
"src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc",
"src/core/lib/event_engine/iomgr_engine/ev_epoll1_linux.cc",
],
hdrs = [
"src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h",
"src/core/lib/event_engine/iomgr_engine/ev_epoll1_linux.h",
],
external_deps = [
"absl/base:core_headers",
@ -2497,23 +2468,23 @@ grpc_cc_library(
deps = [
"gpr_base",
"gpr_codegen",
"iomgr_ee_closure",
"iomgr_ee_event_poller",
"iomgr_ee_lockfree_event",
"iomgr_ee_wakeup_fd_posix",
"iomgr_ee_wakeup_fd_posix_default",
"iomgr_port",
"posix_event_engine_closure",
"posix_event_engine_event_poller",
"posix_event_engine_lockfree_event",
"posix_event_engine_wakeup_fd_posix",
"posix_event_engine_wakeup_fd_posix_default",
"time",
],
)
grpc_cc_library(
name = "posix_event_engine_poller_posix_poll",
name = "iomgr_ee_poller_posix_poll",
srcs = [
"src/core/lib/event_engine/posix_engine/ev_poll_posix.cc",
"src/core/lib/event_engine/iomgr_engine/ev_poll_posix.cc",
],
hdrs = [
"src/core/lib/event_engine/posix_engine/ev_poll_posix.h",
"src/core/lib/event_engine/iomgr_engine/ev_poll_posix.h",
],
external_deps = [
"absl/base:core_headers",
@ -2526,58 +2497,36 @@ grpc_cc_library(
deps = [
"gpr_base",
"gpr_codegen",
"iomgr_ee_closure",
"iomgr_ee_event_poller",
"iomgr_ee_wakeup_fd_posix",
"iomgr_ee_wakeup_fd_posix_default",
"iomgr_port",
"posix_event_engine_closure",
"posix_event_engine_event_poller",
"posix_event_engine_wakeup_fd_posix",
"posix_event_engine_wakeup_fd_posix_default",
"time",
],
)
grpc_cc_library(
name = "posix_event_engine_poller_posix_default",
name = "iomgr_ee_poller_posix_default",
srcs = [
"src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc",
"src/core/lib/event_engine/iomgr_engine/event_poller_posix_default.cc",
],
hdrs = [
"src/core/lib/event_engine/posix_engine/event_poller_posix_default.h",
"src/core/lib/event_engine/iomgr_engine/event_poller_posix_default.h",
],
external_deps = ["absl/strings"],
deps = [
"gpr_base",
"posix_event_engine_event_poller",
"posix_event_engine_poller_posix_epoll1",
"posix_event_engine_poller_posix_poll",
],
)
grpc_cc_library(
name = "event_engine_utils",
srcs = ["src/core/lib/event_engine/utils.cc"],
hdrs = ["src/core/lib/event_engine/utils.h"],
external_deps = ["absl/strings"],
deps = [
"event_engine_base_hdrs",
"gpr_platform",
"time",
],
)
grpc_cc_library(
name = "event_engine_socket_notifier",
hdrs = ["src/core/lib/event_engine/socket_notifier.h"],
external_deps = ["absl/status"],
deps = [
"event_engine_base_hdrs",
"gpr_platform",
"iomgr_ee_event_poller",
"iomgr_ee_poller_posix_epoll1",
"iomgr_ee_poller_posix_poll",
],
)
grpc_cc_library(
name = "posix_event_engine",
srcs = ["src/core/lib/event_engine/posix_engine/posix_engine.cc"],
hdrs = ["src/core/lib/event_engine/posix_engine/posix_engine.h"],
name = "iomgr_event_engine",
srcs = ["src/core/lib/event_engine/iomgr_engine/iomgr_engine.cc"],
hdrs = ["src/core/lib/event_engine/iomgr_engine/iomgr_engine.h"],
external_deps = [
"absl/base:core_headers",
"absl/container:flat_hash_set",
@ -2589,64 +2538,13 @@ grpc_cc_library(
deps = [
"event_engine_base_hdrs",
"event_engine_common",
"event_engine_threaded_executor",
"event_engine_trace",
"event_engine_utils",
"gpr_base",
"grpc_trace",
"posix_event_engine_timer",
"posix_event_engine_timer_manager",
],
)
grpc_cc_library(
name = "windows_event_engine",
srcs = ["src/core/lib/event_engine/windows/windows_engine.cc"],
hdrs = ["src/core/lib/event_engine/windows/windows_engine.h"],
external_deps = [
"absl/status",
"absl/status:statusor",
"absl/strings",
],
deps = [
"event_engine_base_hdrs",
"event_engine_common",
"event_engine_threaded_executor",
"event_engine_trace",
"event_engine_utils",
"gpr_base",
"posix_event_engine_timer_manager",
"iomgr_ee_thread_pool",
"iomgr_ee_timer",
"iomgr_ee_timer_manager",
"time",
"windows_iocp",
],
)
grpc_cc_library(
name = "windows_iocp",
srcs = [
"src/core/lib/event_engine/windows/iocp.cc",
"src/core/lib/event_engine/windows/win_socket.cc",
],
hdrs = [
"src/core/lib/event_engine/windows/iocp.h",
"src/core/lib/event_engine/windows/win_socket.h",
],
external_deps = [
"absl/base:core_headers",
"absl/functional:any_invocable",
"absl/status",
"absl/strings:str_format",
],
deps = [
"error",
"event_engine_base_hdrs",
"event_engine_executor",
"event_engine_poller",
"event_engine_socket_notifier",
"event_engine_trace",
"event_engine_utils",
"gpr_base",
"gpr_platform",
],
)
@ -2696,16 +2594,14 @@ grpc_cc_library(
grpc_cc_library(
name = "default_event_engine_factory",
srcs = ["src/core/lib/event_engine/default_event_engine_factory.cc"],
hdrs = ["src/core/lib/event_engine/default_event_engine_factory.h"],
hdrs = [
"src/core/lib/event_engine/default_event_engine_factory.h",
],
external_deps = ["absl/memory"],
select_deps = [{
"//:windows": ["windows_event_engine"],
"//:windows_msvc": ["windows_event_engine"],
"//conditions:default": ["posix_event_engine"],
}],
deps = [
"event_engine_base_hdrs",
"gpr_platform",
"iomgr_event_engine",
],
)
@ -3059,6 +2955,7 @@ grpc_cc_library(
"config",
"cpp_impl_of",
"debug_location",
"default_event_engine_factory",
"default_event_engine_factory_hdrs",
"dual_ref_counted",
"error",

262
CMakeLists.txt generated

@ -802,9 +802,6 @@ if(gRPC_BUILD_TESTS)
add_dependencies(buildtests_c minimal_stack_is_minimal_test)
add_dependencies(buildtests_c multiple_server_queues_test)
add_dependencies(buildtests_c no_server_test)
if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX OR _gRPC_PLATFORM_WINDOWS)
add_dependencies(buildtests_c pollset_windows_starvation_test)
endif()
add_dependencies(buildtests_c public_headers_must_be_c89)
if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX)
add_dependencies(buildtests_c tcp_posix_test)
@ -1020,9 +1017,7 @@ if(gRPC_BUILD_TESTS)
add_dependencies(buildtests_cxx insecure_security_connector_test)
add_dependencies(buildtests_cxx interop_client)
add_dependencies(buildtests_cxx interop_server)
if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX OR _gRPC_PLATFORM_WINDOWS)
add_dependencies(buildtests_cxx iocp_test)
endif()
add_dependencies(buildtests_cxx iomgr_event_engine_test)
add_dependencies(buildtests_cxx istio_echo_server_test)
add_dependencies(buildtests_cxx join_test)
add_dependencies(buildtests_cxx json_test)
@ -1075,7 +1070,6 @@ if(gRPC_BUILD_TESTS)
add_dependencies(buildtests_cxx pipe_test)
add_dependencies(buildtests_cxx poll_test)
add_dependencies(buildtests_cxx port_sharing_end2end_test)
add_dependencies(buildtests_cxx posix_event_engine_test)
add_dependencies(buildtests_cxx promise_factory_test)
add_dependencies(buildtests_cxx promise_map_test)
add_dependencies(buildtests_cxx promise_test)
@ -1176,8 +1170,8 @@ if(gRPC_BUILD_TESTS)
if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
add_dependencies(buildtests_cxx tcp_server_posix_test)
endif()
add_dependencies(buildtests_cxx test_core_event_engine_posix_timer_heap_test)
add_dependencies(buildtests_cxx test_core_event_engine_posix_timer_list_test)
add_dependencies(buildtests_cxx test_core_event_engine_iomgr_event_engine_timer_heap_test)
add_dependencies(buildtests_cxx test_core_event_engine_iomgr_event_engine_timer_list_test)
add_dependencies(buildtests_cxx test_core_event_engine_slice_buffer_test)
add_dependencies(buildtests_cxx test_core_gpr_time_test)
add_dependencies(buildtests_cxx test_core_gprpp_time_test)
@ -1220,9 +1214,6 @@ if(gRPC_BUILD_TESTS)
if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
add_dependencies(buildtests_cxx wakeup_fd_posix_test)
endif()
if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX OR _gRPC_PLATFORM_WINDOWS)
add_dependencies(buildtests_cxx win_socket_test)
endif()
add_dependencies(buildtests_cxx window_overflow_bad_client_test)
add_dependencies(buildtests_cxx wire_reader_test)
add_dependencies(buildtests_cxx wire_writer_test)
@ -2093,21 +2084,16 @@ add_library(grpc
src/core/lib/event_engine/channel_args_endpoint_config.cc
src/core/lib/event_engine/default_event_engine_factory.cc
src/core/lib/event_engine/event_engine.cc
src/core/lib/event_engine/executor/threaded_executor.cc
src/core/lib/event_engine/iomgr_engine/iomgr_engine.cc
src/core/lib/event_engine/iomgr_engine/thread_pool.cc
src/core/lib/event_engine/iomgr_engine/timer.cc
src/core/lib/event_engine/iomgr_engine/timer_heap.cc
src/core/lib/event_engine/iomgr_engine/timer_manager.cc
src/core/lib/event_engine/memory_allocator.cc
src/core/lib/event_engine/posix_engine/posix_engine.cc
src/core/lib/event_engine/posix_engine/timer.cc
src/core/lib/event_engine/posix_engine/timer_heap.cc
src/core/lib/event_engine/posix_engine/timer_manager.cc
src/core/lib/event_engine/resolved_address.cc
src/core/lib/event_engine/slice.cc
src/core/lib/event_engine/slice_buffer.cc
src/core/lib/event_engine/thread_pool.cc
src/core/lib/event_engine/trace.cc
src/core/lib/event_engine/utils.cc
src/core/lib/event_engine/windows/iocp.cc
src/core/lib/event_engine/windows/win_socket.cc
src/core/lib/event_engine/windows/windows_engine.cc
src/core/lib/gprpp/status_helper.cc
src/core/lib/gprpp/time.cc
src/core/lib/gprpp/time_averaged_stats.cc
@ -2702,21 +2688,16 @@ add_library(grpc_unsecure
src/core/lib/event_engine/channel_args_endpoint_config.cc
src/core/lib/event_engine/default_event_engine_factory.cc
src/core/lib/event_engine/event_engine.cc
src/core/lib/event_engine/executor/threaded_executor.cc
src/core/lib/event_engine/iomgr_engine/iomgr_engine.cc
src/core/lib/event_engine/iomgr_engine/thread_pool.cc
src/core/lib/event_engine/iomgr_engine/timer.cc
src/core/lib/event_engine/iomgr_engine/timer_heap.cc
src/core/lib/event_engine/iomgr_engine/timer_manager.cc
src/core/lib/event_engine/memory_allocator.cc
src/core/lib/event_engine/posix_engine/posix_engine.cc
src/core/lib/event_engine/posix_engine/timer.cc
src/core/lib/event_engine/posix_engine/timer_heap.cc
src/core/lib/event_engine/posix_engine/timer_manager.cc
src/core/lib/event_engine/resolved_address.cc
src/core/lib/event_engine/slice.cc
src/core/lib/event_engine/slice_buffer.cc
src/core/lib/event_engine/thread_pool.cc
src/core/lib/event_engine/trace.cc
src/core/lib/event_engine/utils.cc
src/core/lib/event_engine/windows/iocp.cc
src/core/lib/event_engine/windows/win_socket.cc
src/core/lib/event_engine/windows/windows_engine.cc
src/core/lib/gprpp/status_helper.cc
src/core/lib/gprpp/time.cc
src/core/lib/gprpp/time_averaged_stats.cc
@ -4778,35 +4759,6 @@ target_link_libraries(no_server_test
)
endif()
if(gRPC_BUILD_TESTS)
if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX OR _gRPC_PLATFORM_WINDOWS)
add_executable(pollset_windows_starvation_test
test/core/iomgr/pollset_windows_starvation_test.cc
)
target_include_directories(pollset_windows_starvation_test
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/include
${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
${_gRPC_RE2_INCLUDE_DIR}
${_gRPC_SSL_INCLUDE_DIR}
${_gRPC_UPB_GENERATED_DIR}
${_gRPC_UPB_GRPC_GENERATED_DIR}
${_gRPC_UPB_INCLUDE_DIR}
${_gRPC_XXHASH_INCLUDE_DIR}
${_gRPC_ZLIB_INCLUDE_DIR}
)
target_link_libraries(pollset_windows_starvation_test
${_gRPC_ALLTARGETS_LIBRARIES}
grpc_test_util
)
endif()
endif()
if(gRPC_BUILD_TESTS)
@ -9452,14 +9404,14 @@ if(gRPC_BUILD_TESTS)
if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
add_executable(event_poller_posix_test
src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc
src/core/lib/event_engine/posix_engine/ev_poll_posix.cc
src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc
src/core/lib/event_engine/posix_engine/lockfree_event.cc
src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc
src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc
src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc
test/core/event_engine/posix/event_poller_posix_test.cc
src/core/lib/event_engine/iomgr_engine/ev_epoll1_linux.cc
src/core/lib/event_engine/iomgr_engine/ev_poll_posix.cc
src/core/lib/event_engine/iomgr_engine/event_poller_posix_default.cc
src/core/lib/event_engine/iomgr_engine/lockfree_event.cc
src/core/lib/event_engine/iomgr_engine/wakeup_fd_eventfd.cc
src/core/lib/event_engine/iomgr_engine/wakeup_fd_pipe.cc
src/core/lib/event_engine/iomgr_engine/wakeup_fd_posix_default.cc
test/core/event_engine/iomgr_event_engine/event_poller_posix_test.cc
third_party/googletest/googletest/src/gtest-all.cc
third_party/googletest/googlemock/src/gmock-all.cc
)
@ -12507,42 +12459,42 @@ target_link_libraries(interop_server
endif()
if(gRPC_BUILD_TESTS)
if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX OR _gRPC_PLATFORM_WINDOWS)
add_executable(iocp_test
test/core/event_engine/windows/create_sockpair.cc
test/core/event_engine/windows/iocp_test.cc
third_party/googletest/googletest/src/gtest-all.cc
third_party/googletest/googlemock/src/gmock-all.cc
)
add_executable(iomgr_event_engine_test
test/core/event_engine/test_suite/event_engine_test.cc
test/core/event_engine/test_suite/event_engine_test_utils.cc
test/core/event_engine/test_suite/iomgr_event_engine_test.cc
test/core/event_engine/test_suite/timer_test.cc
third_party/googletest/googletest/src/gtest-all.cc
third_party/googletest/googlemock/src/gmock-all.cc
)
target_include_directories(iocp_test
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/include
${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
${_gRPC_RE2_INCLUDE_DIR}
${_gRPC_SSL_INCLUDE_DIR}
${_gRPC_UPB_GENERATED_DIR}
${_gRPC_UPB_GRPC_GENERATED_DIR}
${_gRPC_UPB_INCLUDE_DIR}
${_gRPC_XXHASH_INCLUDE_DIR}
${_gRPC_ZLIB_INCLUDE_DIR}
third_party/googletest/googletest/include
third_party/googletest/googletest
third_party/googletest/googlemock/include
third_party/googletest/googlemock
${_gRPC_PROTO_GENS_DIR}
)
target_include_directories(iomgr_event_engine_test
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/include
${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
${_gRPC_RE2_INCLUDE_DIR}
${_gRPC_SSL_INCLUDE_DIR}
${_gRPC_UPB_GENERATED_DIR}
${_gRPC_UPB_GRPC_GENERATED_DIR}
${_gRPC_UPB_INCLUDE_DIR}
${_gRPC_XXHASH_INCLUDE_DIR}
${_gRPC_ZLIB_INCLUDE_DIR}
third_party/googletest/googletest/include
third_party/googletest/googletest
third_party/googletest/googlemock/include
third_party/googletest/googlemock
${_gRPC_PROTO_GENS_DIR}
)
target_link_libraries(iocp_test
${_gRPC_PROTOBUF_LIBRARIES}
${_gRPC_ALLTARGETS_LIBRARIES}
grpc_test_util
)
target_link_libraries(iomgr_event_engine_test
${_gRPC_PROTOBUF_LIBRARIES}
${_gRPC_ALLTARGETS_LIBRARIES}
grpc_test_util
)
endif()
endif()
if(gRPC_BUILD_TESTS)
@ -13045,8 +12997,8 @@ endif()
if(gRPC_BUILD_TESTS)
add_executable(lock_free_event_test
src/core/lib/event_engine/posix_engine/lockfree_event.cc
test/core/event_engine/posix/lock_free_event_test.cc
src/core/lib/event_engine/iomgr_engine/lockfree_event.cc
test/core/event_engine/iomgr_event_engine/lock_free_event_test.cc
third_party/googletest/googletest/src/gtest-all.cc
third_party/googletest/googlemock/src/gmock-all.cc
)
@ -14534,44 +14486,6 @@ target_link_libraries(port_sharing_end2end_test
)
endif()
if(gRPC_BUILD_TESTS)
add_executable(posix_event_engine_test
test/core/event_engine/test_suite/event_engine_test.cc
test/core/event_engine/test_suite/event_engine_test_utils.cc
test/core/event_engine/test_suite/posix_event_engine_test.cc
test/core/event_engine/test_suite/timer_test.cc
third_party/googletest/googletest/src/gtest-all.cc
third_party/googletest/googlemock/src/gmock-all.cc
)
target_include_directories(posix_event_engine_test
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/include
${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
${_gRPC_RE2_INCLUDE_DIR}
${_gRPC_SSL_INCLUDE_DIR}
${_gRPC_UPB_GENERATED_DIR}
${_gRPC_UPB_GRPC_GENERATED_DIR}
${_gRPC_UPB_INCLUDE_DIR}
${_gRPC_XXHASH_INCLUDE_DIR}
${_gRPC_ZLIB_INCLUDE_DIR}
third_party/googletest/googletest/include
third_party/googletest/googletest
third_party/googletest/googlemock/include
third_party/googletest/googlemock
${_gRPC_PROTO_GENS_DIR}
)
target_link_libraries(posix_event_engine_test
${_gRPC_PROTOBUF_LIBRARIES}
${_gRPC_ALLTARGETS_LIBRARIES}
grpc_test_util
)
endif()
if(gRPC_BUILD_TESTS)
@ -17812,9 +17726,9 @@ endif()
endif()
if(gRPC_BUILD_TESTS)
add_executable(test_core_event_engine_posix_timer_heap_test
src/core/lib/event_engine/posix_engine/timer.cc
src/core/lib/event_engine/posix_engine/timer_heap.cc
add_executable(test_core_event_engine_iomgr_event_engine_timer_heap_test
src/core/lib/event_engine/iomgr_engine/timer.cc
src/core/lib/event_engine/iomgr_engine/timer_heap.cc
src/core/lib/gpr/alloc.cc
src/core/lib/gpr/atm.cc
src/core/lib/gpr/cpu_iphone.cc
@ -17860,12 +17774,12 @@ add_executable(test_core_event_engine_posix_timer_heap_test
src/core/lib/gprpp/time_util.cc
src/core/lib/profiling/basic_timers.cc
src/core/lib/profiling/stap_timers.cc
test/core/event_engine/posix/timer_heap_test.cc
test/core/event_engine/iomgr_event_engine/timer_heap_test.cc
third_party/googletest/googletest/src/gtest-all.cc
third_party/googletest/googlemock/src/gmock-all.cc
)
target_include_directories(test_core_event_engine_posix_timer_heap_test
target_include_directories(test_core_event_engine_iomgr_event_engine_timer_heap_test
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/include
@ -17884,7 +17798,7 @@ target_include_directories(test_core_event_engine_posix_timer_heap_test
${_gRPC_PROTO_GENS_DIR}
)
target_link_libraries(test_core_event_engine_posix_timer_heap_test
target_link_libraries(test_core_event_engine_iomgr_event_engine_timer_heap_test
${_gRPC_PROTOBUF_LIBRARIES}
${_gRPC_ALLTARGETS_LIBRARIES}
absl::base
@ -17907,9 +17821,9 @@ target_link_libraries(test_core_event_engine_posix_timer_heap_test
endif()
if(gRPC_BUILD_TESTS)
add_executable(test_core_event_engine_posix_timer_list_test
src/core/lib/event_engine/posix_engine/timer.cc
src/core/lib/event_engine/posix_engine/timer_heap.cc
add_executable(test_core_event_engine_iomgr_event_engine_timer_list_test
src/core/lib/event_engine/iomgr_engine/timer.cc
src/core/lib/event_engine/iomgr_engine/timer_heap.cc
src/core/lib/gpr/alloc.cc
src/core/lib/gpr/atm.cc
src/core/lib/gpr/cpu_iphone.cc
@ -17955,12 +17869,12 @@ add_executable(test_core_event_engine_posix_timer_list_test
src/core/lib/gprpp/time_util.cc
src/core/lib/profiling/basic_timers.cc
src/core/lib/profiling/stap_timers.cc
test/core/event_engine/posix/timer_list_test.cc
test/core/event_engine/iomgr_event_engine/timer_list_test.cc
third_party/googletest/googletest/src/gtest-all.cc
third_party/googletest/googlemock/src/gmock-all.cc
)
target_include_directories(test_core_event_engine_posix_timer_list_test
target_include_directories(test_core_event_engine_iomgr_event_engine_timer_list_test
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/include
@ -17979,7 +17893,7 @@ target_include_directories(test_core_event_engine_posix_timer_list_test
${_gRPC_PROTO_GENS_DIR}
)
target_link_libraries(test_core_event_engine_posix_timer_list_test
target_link_libraries(test_core_event_engine_iomgr_event_engine_timer_list_test
${_gRPC_PROTOBUF_LIBRARIES}
${_gRPC_ALLTARGETS_LIBRARIES}
absl::base
@ -19514,9 +19428,9 @@ if(gRPC_BUILD_TESTS)
if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
add_executable(wakeup_fd_posix_test
src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc
src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc
test/core/event_engine/posix/wakeup_fd_posix_test.cc
src/core/lib/event_engine/iomgr_engine/wakeup_fd_eventfd.cc
src/core/lib/event_engine/iomgr_engine/wakeup_fd_pipe.cc
test/core/event_engine/iomgr_event_engine/wakeup_fd_posix_test.cc
third_party/googletest/googletest/src/gtest-all.cc
third_party/googletest/googlemock/src/gmock-all.cc
)
@ -19547,44 +19461,6 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
)
endif()
endif()
if(gRPC_BUILD_TESTS)
if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_POSIX OR _gRPC_PLATFORM_WINDOWS)
add_executable(win_socket_test
test/core/event_engine/windows/create_sockpair.cc
test/core/event_engine/windows/win_socket_test.cc
third_party/googletest/googletest/src/gtest-all.cc
third_party/googletest/googlemock/src/gmock-all.cc
)
target_include_directories(win_socket_test
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/include
${_gRPC_ADDRESS_SORTING_INCLUDE_DIR}
${_gRPC_RE2_INCLUDE_DIR}
${_gRPC_SSL_INCLUDE_DIR}
${_gRPC_UPB_GENERATED_DIR}
${_gRPC_UPB_GRPC_GENERATED_DIR}
${_gRPC_UPB_INCLUDE_DIR}
${_gRPC_XXHASH_INCLUDE_DIR}
${_gRPC_ZLIB_INCLUDE_DIR}
third_party/googletest/googletest/include
third_party/googletest/googletest
third_party/googletest/googlemock/include
third_party/googletest/googlemock
${_gRPC_PROTO_GENS_DIR}
)
target_link_libraries(win_socket_test
${_gRPC_PROTOBUF_LIBRARIES}
${_gRPC_ALLTARGETS_LIBRARIES}
grpc_test_util
)
endif()
endif()
if(gRPC_BUILD_TESTS)

30
Makefile generated

@ -1455,21 +1455,16 @@ LIBGRPC_SRC = \
src/core/lib/event_engine/channel_args_endpoint_config.cc \
src/core/lib/event_engine/default_event_engine_factory.cc \
src/core/lib/event_engine/event_engine.cc \
src/core/lib/event_engine/executor/threaded_executor.cc \
src/core/lib/event_engine/iomgr_engine/iomgr_engine.cc \
src/core/lib/event_engine/iomgr_engine/thread_pool.cc \
src/core/lib/event_engine/iomgr_engine/timer.cc \
src/core/lib/event_engine/iomgr_engine/timer_heap.cc \
src/core/lib/event_engine/iomgr_engine/timer_manager.cc \
src/core/lib/event_engine/memory_allocator.cc \
src/core/lib/event_engine/posix_engine/posix_engine.cc \
src/core/lib/event_engine/posix_engine/timer.cc \
src/core/lib/event_engine/posix_engine/timer_heap.cc \
src/core/lib/event_engine/posix_engine/timer_manager.cc \
src/core/lib/event_engine/resolved_address.cc \
src/core/lib/event_engine/slice.cc \
src/core/lib/event_engine/slice_buffer.cc \
src/core/lib/event_engine/thread_pool.cc \
src/core/lib/event_engine/trace.cc \
src/core/lib/event_engine/utils.cc \
src/core/lib/event_engine/windows/iocp.cc \
src/core/lib/event_engine/windows/win_socket.cc \
src/core/lib/event_engine/windows/windows_engine.cc \
src/core/lib/gprpp/status_helper.cc \
src/core/lib/gprpp/time.cc \
src/core/lib/gprpp/time_averaged_stats.cc \
@ -1928,21 +1923,16 @@ LIBGRPC_UNSECURE_SRC = \
src/core/lib/event_engine/channel_args_endpoint_config.cc \
src/core/lib/event_engine/default_event_engine_factory.cc \
src/core/lib/event_engine/event_engine.cc \
src/core/lib/event_engine/executor/threaded_executor.cc \
src/core/lib/event_engine/iomgr_engine/iomgr_engine.cc \
src/core/lib/event_engine/iomgr_engine/thread_pool.cc \
src/core/lib/event_engine/iomgr_engine/timer.cc \
src/core/lib/event_engine/iomgr_engine/timer_heap.cc \
src/core/lib/event_engine/iomgr_engine/timer_manager.cc \
src/core/lib/event_engine/memory_allocator.cc \
src/core/lib/event_engine/posix_engine/posix_engine.cc \
src/core/lib/event_engine/posix_engine/timer.cc \
src/core/lib/event_engine/posix_engine/timer_heap.cc \
src/core/lib/event_engine/posix_engine/timer_manager.cc \
src/core/lib/event_engine/resolved_address.cc \
src/core/lib/event_engine/slice.cc \
src/core/lib/event_engine/slice_buffer.cc \
src/core/lib/event_engine/thread_pool.cc \
src/core/lib/event_engine/trace.cc \
src/core/lib/event_engine/utils.cc \
src/core/lib/event_engine/windows/iocp.cc \
src/core/lib/event_engine/windows/win_socket.cc \
src/core/lib/event_engine/windows/windows_engine.cc \
src/core/lib/gprpp/status_helper.cc \
src/core/lib/gprpp/time.cc \
src/core/lib/gprpp/time_averaged_stats.cc \

@ -754,22 +754,14 @@ libs:
- src/core/lib/event_engine/channel_args_endpoint_config.h
- src/core/lib/event_engine/default_event_engine_factory.h
- src/core/lib/event_engine/event_engine_factory.h
- src/core/lib/event_engine/executor/executor.h
- src/core/lib/event_engine/executor/threaded_executor.h
- src/core/lib/event_engine/handle_containers.h
- src/core/lib/event_engine/poller.h
- src/core/lib/event_engine/posix_engine/posix_engine.h
- src/core/lib/event_engine/posix_engine/timer.h
- src/core/lib/event_engine/posix_engine/timer_heap.h
- src/core/lib/event_engine/posix_engine/timer_manager.h
- src/core/lib/event_engine/iomgr_engine/iomgr_engine.h
- src/core/lib/event_engine/iomgr_engine/thread_pool.h
- src/core/lib/event_engine/iomgr_engine/timer.h
- src/core/lib/event_engine/iomgr_engine/timer_heap.h
- src/core/lib/event_engine/iomgr_engine/timer_manager.h
- src/core/lib/event_engine/promise.h
- src/core/lib/event_engine/socket_notifier.h
- src/core/lib/event_engine/thread_pool.h
- src/core/lib/event_engine/trace.h
- src/core/lib/event_engine/utils.h
- src/core/lib/event_engine/windows/iocp.h
- src/core/lib/event_engine/windows/win_socket.h
- src/core/lib/event_engine/windows/windows_engine.h
- src/core/lib/gprpp/atomic_utils.h
- src/core/lib/gprpp/bitset.h
- src/core/lib/gprpp/chunked_vector.h
@ -1447,21 +1439,16 @@ libs:
- src/core/lib/event_engine/channel_args_endpoint_config.cc
- src/core/lib/event_engine/default_event_engine_factory.cc
- src/core/lib/event_engine/event_engine.cc
- src/core/lib/event_engine/executor/threaded_executor.cc
- src/core/lib/event_engine/iomgr_engine/iomgr_engine.cc
- src/core/lib/event_engine/iomgr_engine/thread_pool.cc
- src/core/lib/event_engine/iomgr_engine/timer.cc
- src/core/lib/event_engine/iomgr_engine/timer_heap.cc
- src/core/lib/event_engine/iomgr_engine/timer_manager.cc
- src/core/lib/event_engine/memory_allocator.cc
- src/core/lib/event_engine/posix_engine/posix_engine.cc
- src/core/lib/event_engine/posix_engine/timer.cc
- src/core/lib/event_engine/posix_engine/timer_heap.cc
- src/core/lib/event_engine/posix_engine/timer_manager.cc
- src/core/lib/event_engine/resolved_address.cc
- src/core/lib/event_engine/slice.cc
- src/core/lib/event_engine/slice_buffer.cc
- src/core/lib/event_engine/thread_pool.cc
- src/core/lib/event_engine/trace.cc
- src/core/lib/event_engine/utils.cc
- src/core/lib/event_engine/windows/iocp.cc
- src/core/lib/event_engine/windows/win_socket.cc
- src/core/lib/event_engine/windows/windows_engine.cc
- src/core/lib/gprpp/status_helper.cc
- src/core/lib/gprpp/time.cc
- src/core/lib/gprpp/time_averaged_stats.cc
@ -1937,22 +1924,14 @@ libs:
- src/core/lib/event_engine/channel_args_endpoint_config.h
- src/core/lib/event_engine/default_event_engine_factory.h
- src/core/lib/event_engine/event_engine_factory.h
- src/core/lib/event_engine/executor/executor.h
- src/core/lib/event_engine/executor/threaded_executor.h
- src/core/lib/event_engine/handle_containers.h
- src/core/lib/event_engine/poller.h
- src/core/lib/event_engine/posix_engine/posix_engine.h
- src/core/lib/event_engine/posix_engine/timer.h
- src/core/lib/event_engine/posix_engine/timer_heap.h
- src/core/lib/event_engine/posix_engine/timer_manager.h
- src/core/lib/event_engine/iomgr_engine/iomgr_engine.h
- src/core/lib/event_engine/iomgr_engine/thread_pool.h
- src/core/lib/event_engine/iomgr_engine/timer.h
- src/core/lib/event_engine/iomgr_engine/timer_heap.h
- src/core/lib/event_engine/iomgr_engine/timer_manager.h
- src/core/lib/event_engine/promise.h
- src/core/lib/event_engine/socket_notifier.h
- src/core/lib/event_engine/thread_pool.h
- src/core/lib/event_engine/trace.h
- src/core/lib/event_engine/utils.h
- src/core/lib/event_engine/windows/iocp.h
- src/core/lib/event_engine/windows/win_socket.h
- src/core/lib/event_engine/windows/windows_engine.h
- src/core/lib/gprpp/atomic_utils.h
- src/core/lib/gprpp/bitset.h
- src/core/lib/gprpp/chunked_vector.h
@ -2271,21 +2250,16 @@ libs:
- src/core/lib/event_engine/channel_args_endpoint_config.cc
- src/core/lib/event_engine/default_event_engine_factory.cc
- src/core/lib/event_engine/event_engine.cc
- src/core/lib/event_engine/executor/threaded_executor.cc
- src/core/lib/event_engine/iomgr_engine/iomgr_engine.cc
- src/core/lib/event_engine/iomgr_engine/thread_pool.cc
- src/core/lib/event_engine/iomgr_engine/timer.cc
- src/core/lib/event_engine/iomgr_engine/timer_heap.cc
- src/core/lib/event_engine/iomgr_engine/timer_manager.cc
- src/core/lib/event_engine/memory_allocator.cc
- src/core/lib/event_engine/posix_engine/posix_engine.cc
- src/core/lib/event_engine/posix_engine/timer.cc
- src/core/lib/event_engine/posix_engine/timer_heap.cc
- src/core/lib/event_engine/posix_engine/timer_manager.cc
- src/core/lib/event_engine/resolved_address.cc
- src/core/lib/event_engine/slice.cc
- src/core/lib/event_engine/slice_buffer.cc
- src/core/lib/event_engine/thread_pool.cc
- src/core/lib/event_engine/trace.cc
- src/core/lib/event_engine/utils.cc
- src/core/lib/event_engine/windows/iocp.cc
- src/core/lib/event_engine/windows/win_socket.cc
- src/core/lib/event_engine/windows/windows_engine.cc
- src/core/lib/gprpp/status_helper.cc
- src/core/lib/gprpp/time.cc
- src/core/lib/gprpp/time_averaged_stats.cc
@ -3519,18 +3493,6 @@ targets:
- test/core/end2end/no_server_test.cc
deps:
- grpc_test_util
- name: pollset_windows_starvation_test
build: test
language: c
headers: []
src:
- test/core/iomgr/pollset_windows_starvation_test.cc
deps:
- grpc_test_util
platforms:
- linux
- posix
- windows
- name: public_headers_must_be_c89
build: test
language: c
@ -5797,25 +5759,25 @@ targets:
build: test
language: c++
headers:
- src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h
- src/core/lib/event_engine/posix_engine/ev_poll_posix.h
- src/core/lib/event_engine/posix_engine/event_poller.h
- src/core/lib/event_engine/posix_engine/event_poller_posix_default.h
- src/core/lib/event_engine/posix_engine/lockfree_event.h
- src/core/lib/event_engine/posix_engine/posix_engine_closure.h
- src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h
- src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h
- src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h
- src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h
- src/core/lib/event_engine/iomgr_engine/ev_epoll1_linux.h
- src/core/lib/event_engine/iomgr_engine/ev_poll_posix.h
- src/core/lib/event_engine/iomgr_engine/event_poller.h
- src/core/lib/event_engine/iomgr_engine/event_poller_posix_default.h
- src/core/lib/event_engine/iomgr_engine/iomgr_engine_closure.h
- src/core/lib/event_engine/iomgr_engine/lockfree_event.h
- src/core/lib/event_engine/iomgr_engine/wakeup_fd_eventfd.h
- src/core/lib/event_engine/iomgr_engine/wakeup_fd_pipe.h
- src/core/lib/event_engine/iomgr_engine/wakeup_fd_posix.h
- src/core/lib/event_engine/iomgr_engine/wakeup_fd_posix_default.h
src:
- src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc
- src/core/lib/event_engine/posix_engine/ev_poll_posix.cc
- src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc
- src/core/lib/event_engine/posix_engine/lockfree_event.cc
- src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc
- src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc
- src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc
- test/core/event_engine/posix/event_poller_posix_test.cc
- src/core/lib/event_engine/iomgr_engine/ev_epoll1_linux.cc
- src/core/lib/event_engine/iomgr_engine/ev_poll_posix.cc
- src/core/lib/event_engine/iomgr_engine/event_poller_posix_default.cc
- src/core/lib/event_engine/iomgr_engine/lockfree_event.cc
- src/core/lib/event_engine/iomgr_engine/wakeup_fd_eventfd.cc
- src/core/lib/event_engine/iomgr_engine/wakeup_fd_pipe.cc
- src/core/lib/event_engine/iomgr_engine/wakeup_fd_posix_default.cc
- test/core/event_engine/iomgr_event_engine/event_poller_posix_test.cc
deps:
- grpc_test_util
platforms:
@ -7341,22 +7303,20 @@ targets:
deps:
- grpc++_test_config
- grpc++_test_util
- name: iocp_test
- name: iomgr_event_engine_test
gtest: true
build: test
language: c++
headers:
- src/core/lib/event_engine/common_closures.h
- test/core/event_engine/windows/create_sockpair.h
- test/core/event_engine/test_suite/event_engine_test.h
- test/core/event_engine/test_suite/event_engine_test_utils.h
src:
- test/core/event_engine/windows/create_sockpair.cc
- test/core/event_engine/windows/iocp_test.cc
- test/core/event_engine/test_suite/event_engine_test.cc
- test/core/event_engine/test_suite/event_engine_test_utils.cc
- test/core/event_engine/test_suite/iomgr_event_engine_test.cc
- test/core/event_engine/test_suite/timer_test.cc
deps:
- grpc_test_util
platforms:
- linux
- posix
- windows
uses_polling: false
- name: istio_echo_server_test
gtest: true
@ -7677,12 +7637,12 @@ targets:
build: test
language: c++
headers:
- src/core/lib/event_engine/posix_engine/event_poller.h
- src/core/lib/event_engine/posix_engine/lockfree_event.h
- src/core/lib/event_engine/posix_engine/posix_engine_closure.h
- src/core/lib/event_engine/iomgr_engine/event_poller.h
- src/core/lib/event_engine/iomgr_engine/iomgr_engine_closure.h
- src/core/lib/event_engine/iomgr_engine/lockfree_event.h
src:
- src/core/lib/event_engine/posix_engine/lockfree_event.cc
- test/core/event_engine/posix/lock_free_event_test.cc
- src/core/lib/event_engine/iomgr_engine/lockfree_event.cc
- test/core/event_engine/iomgr_event_engine/lock_free_event_test.cc
deps:
- grpc_test_util
uses_polling: false
@ -8542,21 +8502,6 @@ targets:
- test/cpp/end2end/test_service_impl.cc
deps:
- grpc++_test_util
- name: posix_event_engine_test
gtest: true
build: test
language: c++
headers:
- test/core/event_engine/test_suite/event_engine_test.h
- test/core/event_engine/test_suite/event_engine_test_utils.h
src:
- test/core/event_engine/test_suite/event_engine_test.cc
- test/core/event_engine/test_suite/event_engine_test_utils.cc
- test/core/event_engine/test_suite/posix_event_engine_test.cc
- test/core/event_engine/test_suite/timer_test.cc
deps:
- grpc_test_util
uses_polling: false
- name: promise_factory_test
gtest: true
build: test
@ -10172,13 +10117,13 @@ targets:
- linux
- posix
- mac
- name: test_core_event_engine_posix_timer_heap_test
- name: test_core_event_engine_iomgr_event_engine_timer_heap_test
gtest: true
build: test
language: c++
headers:
- src/core/lib/event_engine/posix_engine/timer.h
- src/core/lib/event_engine/posix_engine/timer_heap.h
- src/core/lib/event_engine/iomgr_engine/timer.h
- src/core/lib/event_engine/iomgr_engine/timer_heap.h
- src/core/lib/gpr/alloc.h
- src/core/lib/gpr/env.h
- src/core/lib/gpr/murmur_hash.h
@ -10210,8 +10155,8 @@ targets:
- src/core/lib/gprpp/time_util.h
- src/core/lib/profiling/timers.h
src:
- src/core/lib/event_engine/posix_engine/timer.cc
- src/core/lib/event_engine/posix_engine/timer_heap.cc
- src/core/lib/event_engine/iomgr_engine/timer.cc
- src/core/lib/event_engine/iomgr_engine/timer_heap.cc
- src/core/lib/gpr/alloc.cc
- src/core/lib/gpr/atm.cc
- src/core/lib/gpr/cpu_iphone.cc
@ -10257,7 +10202,7 @@ targets:
- src/core/lib/gprpp/time_util.cc
- src/core/lib/profiling/basic_timers.cc
- src/core/lib/profiling/stap_timers.cc
- test/core/event_engine/posix/timer_heap_test.cc
- test/core/event_engine/iomgr_event_engine/timer_heap_test.cc
deps:
- absl/base:base
- absl/base:core_headers
@ -10274,13 +10219,13 @@ targets:
- absl/types:optional
- absl/types:variant
uses_polling: false
- name: test_core_event_engine_posix_timer_list_test
- name: test_core_event_engine_iomgr_event_engine_timer_list_test
gtest: true
build: test
language: c++
headers:
- src/core/lib/event_engine/posix_engine/timer.h
- src/core/lib/event_engine/posix_engine/timer_heap.h
- src/core/lib/event_engine/iomgr_engine/timer.h
- src/core/lib/event_engine/iomgr_engine/timer_heap.h
- src/core/lib/gpr/alloc.h
- src/core/lib/gpr/env.h
- src/core/lib/gpr/murmur_hash.h
@ -10311,8 +10256,8 @@ targets:
- src/core/lib/gprpp/time_util.h
- src/core/lib/profiling/timers.h
src:
- src/core/lib/event_engine/posix_engine/timer.cc
- src/core/lib/event_engine/posix_engine/timer_heap.cc
- src/core/lib/event_engine/iomgr_engine/timer.cc
- src/core/lib/event_engine/iomgr_engine/timer_heap.cc
- src/core/lib/gpr/alloc.cc
- src/core/lib/gpr/atm.cc
- src/core/lib/gpr/cpu_iphone.cc
@ -10358,7 +10303,7 @@ targets:
- src/core/lib/gprpp/time_util.cc
- src/core/lib/profiling/basic_timers.cc
- src/core/lib/profiling/stap_timers.cc
- test/core/event_engine/posix/timer_list_test.cc
- test/core/event_engine/iomgr_event_engine/timer_list_test.cc
deps:
- absl/base:base
- absl/base:core_headers
@ -11141,36 +11086,19 @@ targets:
build: test
language: c++
headers:
- src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h
- src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h
- src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h
- src/core/lib/event_engine/iomgr_engine/wakeup_fd_eventfd.h
- src/core/lib/event_engine/iomgr_engine/wakeup_fd_pipe.h
- src/core/lib/event_engine/iomgr_engine/wakeup_fd_posix.h
src:
- src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc
- src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc
- test/core/event_engine/posix/wakeup_fd_posix_test.cc
- src/core/lib/event_engine/iomgr_engine/wakeup_fd_eventfd.cc
- src/core/lib/event_engine/iomgr_engine/wakeup_fd_pipe.cc
- test/core/event_engine/iomgr_event_engine/wakeup_fd_posix_test.cc
deps:
- grpc_test_util
platforms:
- linux
- posix
- mac
- name: win_socket_test
gtest: true
build: test
language: c++
headers:
- src/core/lib/event_engine/common_closures.h
- test/core/event_engine/windows/create_sockpair.h
src:
- test/core/event_engine/windows/create_sockpair.cc
- test/core/event_engine/windows/win_socket_test.cc
deps:
- grpc_test_util
platforms:
- linux
- posix
- windows
uses_polling: false
- name: window_overflow_bad_client_test
gtest: true
build: test

19
config.m4 generated

@ -473,21 +473,16 @@ if test "$PHP_GRPC" != "no"; then
src/core/lib/event_engine/channel_args_endpoint_config.cc \
src/core/lib/event_engine/default_event_engine_factory.cc \
src/core/lib/event_engine/event_engine.cc \
src/core/lib/event_engine/executor/threaded_executor.cc \
src/core/lib/event_engine/iomgr_engine/iomgr_engine.cc \
src/core/lib/event_engine/iomgr_engine/thread_pool.cc \
src/core/lib/event_engine/iomgr_engine/timer.cc \
src/core/lib/event_engine/iomgr_engine/timer_heap.cc \
src/core/lib/event_engine/iomgr_engine/timer_manager.cc \
src/core/lib/event_engine/memory_allocator.cc \
src/core/lib/event_engine/posix_engine/posix_engine.cc \
src/core/lib/event_engine/posix_engine/timer.cc \
src/core/lib/event_engine/posix_engine/timer_heap.cc \
src/core/lib/event_engine/posix_engine/timer_manager.cc \
src/core/lib/event_engine/resolved_address.cc \
src/core/lib/event_engine/slice.cc \
src/core/lib/event_engine/slice_buffer.cc \
src/core/lib/event_engine/thread_pool.cc \
src/core/lib/event_engine/trace.cc \
src/core/lib/event_engine/utils.cc \
src/core/lib/event_engine/windows/iocp.cc \
src/core/lib/event_engine/windows/win_socket.cc \
src/core/lib/event_engine/windows/windows_engine.cc \
src/core/lib/gpr/alloc.cc \
src/core/lib/gpr/atm.cc \
src/core/lib/gpr/cpu_iphone.cc \
@ -1327,9 +1322,7 @@ if test "$PHP_GRPC" != "no"; then
PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/config)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/debug)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/event_engine)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/event_engine/executor)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/event_engine/posix_engine)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/event_engine/windows)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/event_engine/iomgr_engine)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/gpr)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/gprpp)
PHP_ADD_BUILD_DIR($ext_builddir/src/core/lib/http)

19
config.w32 generated

@ -439,21 +439,16 @@ if (PHP_GRPC != "no") {
"src\\core\\lib\\event_engine\\channel_args_endpoint_config.cc " +
"src\\core\\lib\\event_engine\\default_event_engine_factory.cc " +
"src\\core\\lib\\event_engine\\event_engine.cc " +
"src\\core\\lib\\event_engine\\executor\\threaded_executor.cc " +
"src\\core\\lib\\event_engine\\iomgr_engine\\iomgr_engine.cc " +
"src\\core\\lib\\event_engine\\iomgr_engine\\thread_pool.cc " +
"src\\core\\lib\\event_engine\\iomgr_engine\\timer.cc " +
"src\\core\\lib\\event_engine\\iomgr_engine\\timer_heap.cc " +
"src\\core\\lib\\event_engine\\iomgr_engine\\timer_manager.cc " +
"src\\core\\lib\\event_engine\\memory_allocator.cc " +
"src\\core\\lib\\event_engine\\posix_engine\\posix_engine.cc " +
"src\\core\\lib\\event_engine\\posix_engine\\timer.cc " +
"src\\core\\lib\\event_engine\\posix_engine\\timer_heap.cc " +
"src\\core\\lib\\event_engine\\posix_engine\\timer_manager.cc " +
"src\\core\\lib\\event_engine\\resolved_address.cc " +
"src\\core\\lib\\event_engine\\slice.cc " +
"src\\core\\lib\\event_engine\\slice_buffer.cc " +
"src\\core\\lib\\event_engine\\thread_pool.cc " +
"src\\core\\lib\\event_engine\\trace.cc " +
"src\\core\\lib\\event_engine\\utils.cc " +
"src\\core\\lib\\event_engine\\windows\\iocp.cc " +
"src\\core\\lib\\event_engine\\windows\\win_socket.cc " +
"src\\core\\lib\\event_engine\\windows\\windows_engine.cc " +
"src\\core\\lib\\gpr\\alloc.cc " +
"src\\core\\lib\\gpr\\atm.cc " +
"src\\core\\lib\\gpr\\cpu_iphone.cc " +
@ -1449,9 +1444,7 @@ if (PHP_GRPC != "no") {
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\config");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\debug");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\event_engine");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\event_engine\\executor");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\event_engine\\posix_engine");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\event_engine\\windows");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\event_engine\\iomgr_engine");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\gpr");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\gprpp");
FSO.CreateFolder(base_dir+"\\ext\\grpc\\src\\core\\lib\\http");

36
gRPC-C++.podspec generated

@ -686,22 +686,14 @@ Pod::Spec.new do |s|
'src/core/lib/event_engine/channel_args_endpoint_config.h',
'src/core/lib/event_engine/default_event_engine_factory.h',
'src/core/lib/event_engine/event_engine_factory.h',
'src/core/lib/event_engine/executor/executor.h',
'src/core/lib/event_engine/executor/threaded_executor.h',
'src/core/lib/event_engine/handle_containers.h',
'src/core/lib/event_engine/poller.h',
'src/core/lib/event_engine/posix_engine/posix_engine.h',
'src/core/lib/event_engine/posix_engine/timer.h',
'src/core/lib/event_engine/posix_engine/timer_heap.h',
'src/core/lib/event_engine/posix_engine/timer_manager.h',
'src/core/lib/event_engine/iomgr_engine/iomgr_engine.h',
'src/core/lib/event_engine/iomgr_engine/thread_pool.h',
'src/core/lib/event_engine/iomgr_engine/timer.h',
'src/core/lib/event_engine/iomgr_engine/timer_heap.h',
'src/core/lib/event_engine/iomgr_engine/timer_manager.h',
'src/core/lib/event_engine/promise.h',
'src/core/lib/event_engine/socket_notifier.h',
'src/core/lib/event_engine/thread_pool.h',
'src/core/lib/event_engine/trace.h',
'src/core/lib/event_engine/utils.h',
'src/core/lib/event_engine/windows/iocp.h',
'src/core/lib/event_engine/windows/win_socket.h',
'src/core/lib/event_engine/windows/windows_engine.h',
'src/core/lib/gpr/alloc.h',
'src/core/lib/gpr/env.h',
'src/core/lib/gpr/murmur_hash.h',
@ -1538,22 +1530,14 @@ Pod::Spec.new do |s|
'src/core/lib/event_engine/channel_args_endpoint_config.h',
'src/core/lib/event_engine/default_event_engine_factory.h',
'src/core/lib/event_engine/event_engine_factory.h',
'src/core/lib/event_engine/executor/executor.h',
'src/core/lib/event_engine/executor/threaded_executor.h',
'src/core/lib/event_engine/handle_containers.h',
'src/core/lib/event_engine/poller.h',
'src/core/lib/event_engine/posix_engine/posix_engine.h',
'src/core/lib/event_engine/posix_engine/timer.h',
'src/core/lib/event_engine/posix_engine/timer_heap.h',
'src/core/lib/event_engine/posix_engine/timer_manager.h',
'src/core/lib/event_engine/iomgr_engine/iomgr_engine.h',
'src/core/lib/event_engine/iomgr_engine/thread_pool.h',
'src/core/lib/event_engine/iomgr_engine/timer.h',
'src/core/lib/event_engine/iomgr_engine/timer_heap.h',
'src/core/lib/event_engine/iomgr_engine/timer_manager.h',
'src/core/lib/event_engine/promise.h',
'src/core/lib/event_engine/socket_notifier.h',
'src/core/lib/event_engine/thread_pool.h',
'src/core/lib/event_engine/trace.h',
'src/core/lib/event_engine/utils.h',
'src/core/lib/event_engine/windows/iocp.h',
'src/core/lib/event_engine/windows/win_socket.h',
'src/core/lib/event_engine/windows/windows_engine.h',
'src/core/lib/gpr/alloc.h',
'src/core/lib/gpr/env.h',
'src/core/lib/gpr/murmur_hash.h',

51
gRPC-Core.podspec generated

@ -1057,37 +1057,24 @@ Pod::Spec.new do |s|
'src/core/lib/event_engine/default_event_engine_factory.h',
'src/core/lib/event_engine/event_engine.cc',
'src/core/lib/event_engine/event_engine_factory.h',
'src/core/lib/event_engine/executor/executor.h',
'src/core/lib/event_engine/executor/threaded_executor.cc',
'src/core/lib/event_engine/executor/threaded_executor.h',
'src/core/lib/event_engine/handle_containers.h',
'src/core/lib/event_engine/iomgr_engine/iomgr_engine.cc',
'src/core/lib/event_engine/iomgr_engine/iomgr_engine.h',
'src/core/lib/event_engine/iomgr_engine/thread_pool.cc',
'src/core/lib/event_engine/iomgr_engine/thread_pool.h',
'src/core/lib/event_engine/iomgr_engine/timer.cc',
'src/core/lib/event_engine/iomgr_engine/timer.h',
'src/core/lib/event_engine/iomgr_engine/timer_heap.cc',
'src/core/lib/event_engine/iomgr_engine/timer_heap.h',
'src/core/lib/event_engine/iomgr_engine/timer_manager.cc',
'src/core/lib/event_engine/iomgr_engine/timer_manager.h',
'src/core/lib/event_engine/memory_allocator.cc',
'src/core/lib/event_engine/poller.h',
'src/core/lib/event_engine/posix_engine/posix_engine.cc',
'src/core/lib/event_engine/posix_engine/posix_engine.h',
'src/core/lib/event_engine/posix_engine/timer.cc',
'src/core/lib/event_engine/posix_engine/timer.h',
'src/core/lib/event_engine/posix_engine/timer_heap.cc',
'src/core/lib/event_engine/posix_engine/timer_heap.h',
'src/core/lib/event_engine/posix_engine/timer_manager.cc',
'src/core/lib/event_engine/posix_engine/timer_manager.h',
'src/core/lib/event_engine/promise.h',
'src/core/lib/event_engine/resolved_address.cc',
'src/core/lib/event_engine/slice.cc',
'src/core/lib/event_engine/slice_buffer.cc',
'src/core/lib/event_engine/socket_notifier.h',
'src/core/lib/event_engine/thread_pool.cc',
'src/core/lib/event_engine/thread_pool.h',
'src/core/lib/event_engine/trace.cc',
'src/core/lib/event_engine/trace.h',
'src/core/lib/event_engine/utils.cc',
'src/core/lib/event_engine/utils.h',
'src/core/lib/event_engine/windows/iocp.cc',
'src/core/lib/event_engine/windows/iocp.h',
'src/core/lib/event_engine/windows/win_socket.cc',
'src/core/lib/event_engine/windows/win_socket.h',
'src/core/lib/event_engine/windows/windows_engine.cc',
'src/core/lib/event_engine/windows/windows_engine.h',
'src/core/lib/gpr/alloc.cc',
'src/core/lib/gpr/alloc.h',
'src/core/lib/gpr/atm.cc',
@ -2159,22 +2146,14 @@ Pod::Spec.new do |s|
'src/core/lib/event_engine/channel_args_endpoint_config.h',
'src/core/lib/event_engine/default_event_engine_factory.h',
'src/core/lib/event_engine/event_engine_factory.h',
'src/core/lib/event_engine/executor/executor.h',
'src/core/lib/event_engine/executor/threaded_executor.h',
'src/core/lib/event_engine/handle_containers.h',
'src/core/lib/event_engine/poller.h',
'src/core/lib/event_engine/posix_engine/posix_engine.h',
'src/core/lib/event_engine/posix_engine/timer.h',
'src/core/lib/event_engine/posix_engine/timer_heap.h',
'src/core/lib/event_engine/posix_engine/timer_manager.h',
'src/core/lib/event_engine/iomgr_engine/iomgr_engine.h',
'src/core/lib/event_engine/iomgr_engine/thread_pool.h',
'src/core/lib/event_engine/iomgr_engine/timer.h',
'src/core/lib/event_engine/iomgr_engine/timer_heap.h',
'src/core/lib/event_engine/iomgr_engine/timer_manager.h',
'src/core/lib/event_engine/promise.h',
'src/core/lib/event_engine/socket_notifier.h',
'src/core/lib/event_engine/thread_pool.h',
'src/core/lib/event_engine/trace.h',
'src/core/lib/event_engine/utils.h',
'src/core/lib/event_engine/windows/iocp.h',
'src/core/lib/event_engine/windows/win_socket.h',
'src/core/lib/event_engine/windows/windows_engine.h',
'src/core/lib/gpr/alloc.h',
'src/core/lib/gpr/env.h',
'src/core/lib/gpr/murmur_hash.h',

33
grpc.gemspec generated

@ -970,37 +970,24 @@ Gem::Specification.new do |s|
s.files += %w( src/core/lib/event_engine/default_event_engine_factory.h )
s.files += %w( src/core/lib/event_engine/event_engine.cc )
s.files += %w( src/core/lib/event_engine/event_engine_factory.h )
s.files += %w( src/core/lib/event_engine/executor/executor.h )
s.files += %w( src/core/lib/event_engine/executor/threaded_executor.cc )
s.files += %w( src/core/lib/event_engine/executor/threaded_executor.h )
s.files += %w( src/core/lib/event_engine/handle_containers.h )
s.files += %w( src/core/lib/event_engine/iomgr_engine/iomgr_engine.cc )
s.files += %w( src/core/lib/event_engine/iomgr_engine/iomgr_engine.h )
s.files += %w( src/core/lib/event_engine/iomgr_engine/thread_pool.cc )
s.files += %w( src/core/lib/event_engine/iomgr_engine/thread_pool.h )
s.files += %w( src/core/lib/event_engine/iomgr_engine/timer.cc )
s.files += %w( src/core/lib/event_engine/iomgr_engine/timer.h )
s.files += %w( src/core/lib/event_engine/iomgr_engine/timer_heap.cc )
s.files += %w( src/core/lib/event_engine/iomgr_engine/timer_heap.h )
s.files += %w( src/core/lib/event_engine/iomgr_engine/timer_manager.cc )
s.files += %w( src/core/lib/event_engine/iomgr_engine/timer_manager.h )
s.files += %w( src/core/lib/event_engine/memory_allocator.cc )
s.files += %w( src/core/lib/event_engine/poller.h )
s.files += %w( src/core/lib/event_engine/posix_engine/posix_engine.cc )
s.files += %w( src/core/lib/event_engine/posix_engine/posix_engine.h )
s.files += %w( src/core/lib/event_engine/posix_engine/timer.cc )
s.files += %w( src/core/lib/event_engine/posix_engine/timer.h )
s.files += %w( src/core/lib/event_engine/posix_engine/timer_heap.cc )
s.files += %w( src/core/lib/event_engine/posix_engine/timer_heap.h )
s.files += %w( src/core/lib/event_engine/posix_engine/timer_manager.cc )
s.files += %w( src/core/lib/event_engine/posix_engine/timer_manager.h )
s.files += %w( src/core/lib/event_engine/promise.h )
s.files += %w( src/core/lib/event_engine/resolved_address.cc )
s.files += %w( src/core/lib/event_engine/slice.cc )
s.files += %w( src/core/lib/event_engine/slice_buffer.cc )
s.files += %w( src/core/lib/event_engine/socket_notifier.h )
s.files += %w( src/core/lib/event_engine/thread_pool.cc )
s.files += %w( src/core/lib/event_engine/thread_pool.h )
s.files += %w( src/core/lib/event_engine/trace.cc )
s.files += %w( src/core/lib/event_engine/trace.h )
s.files += %w( src/core/lib/event_engine/utils.cc )
s.files += %w( src/core/lib/event_engine/utils.h )
s.files += %w( src/core/lib/event_engine/windows/iocp.cc )
s.files += %w( src/core/lib/event_engine/windows/iocp.h )
s.files += %w( src/core/lib/event_engine/windows/win_socket.cc )
s.files += %w( src/core/lib/event_engine/windows/win_socket.h )
s.files += %w( src/core/lib/event_engine/windows/windows_engine.cc )
s.files += %w( src/core/lib/event_engine/windows/windows_engine.h )
s.files += %w( src/core/lib/gpr/alloc.cc )
s.files += %w( src/core/lib/gpr/alloc.h )
s.files += %w( src/core/lib/gpr/atm.cc )

30
grpc.gyp generated

@ -806,21 +806,16 @@
'src/core/lib/event_engine/channel_args_endpoint_config.cc',
'src/core/lib/event_engine/default_event_engine_factory.cc',
'src/core/lib/event_engine/event_engine.cc',
'src/core/lib/event_engine/executor/threaded_executor.cc',
'src/core/lib/event_engine/iomgr_engine/iomgr_engine.cc',
'src/core/lib/event_engine/iomgr_engine/thread_pool.cc',
'src/core/lib/event_engine/iomgr_engine/timer.cc',
'src/core/lib/event_engine/iomgr_engine/timer_heap.cc',
'src/core/lib/event_engine/iomgr_engine/timer_manager.cc',
'src/core/lib/event_engine/memory_allocator.cc',
'src/core/lib/event_engine/posix_engine/posix_engine.cc',
'src/core/lib/event_engine/posix_engine/timer.cc',
'src/core/lib/event_engine/posix_engine/timer_heap.cc',
'src/core/lib/event_engine/posix_engine/timer_manager.cc',
'src/core/lib/event_engine/resolved_address.cc',
'src/core/lib/event_engine/slice.cc',
'src/core/lib/event_engine/slice_buffer.cc',
'src/core/lib/event_engine/thread_pool.cc',
'src/core/lib/event_engine/trace.cc',
'src/core/lib/event_engine/utils.cc',
'src/core/lib/event_engine/windows/iocp.cc',
'src/core/lib/event_engine/windows/win_socket.cc',
'src/core/lib/event_engine/windows/windows_engine.cc',
'src/core/lib/gprpp/status_helper.cc',
'src/core/lib/gprpp/time.cc',
'src/core/lib/gprpp/time_averaged_stats.cc',
@ -1247,21 +1242,16 @@
'src/core/lib/event_engine/channel_args_endpoint_config.cc',
'src/core/lib/event_engine/default_event_engine_factory.cc',
'src/core/lib/event_engine/event_engine.cc',
'src/core/lib/event_engine/executor/threaded_executor.cc',
'src/core/lib/event_engine/iomgr_engine/iomgr_engine.cc',
'src/core/lib/event_engine/iomgr_engine/thread_pool.cc',
'src/core/lib/event_engine/iomgr_engine/timer.cc',
'src/core/lib/event_engine/iomgr_engine/timer_heap.cc',
'src/core/lib/event_engine/iomgr_engine/timer_manager.cc',
'src/core/lib/event_engine/memory_allocator.cc',
'src/core/lib/event_engine/posix_engine/posix_engine.cc',
'src/core/lib/event_engine/posix_engine/timer.cc',
'src/core/lib/event_engine/posix_engine/timer_heap.cc',
'src/core/lib/event_engine/posix_engine/timer_manager.cc',
'src/core/lib/event_engine/resolved_address.cc',
'src/core/lib/event_engine/slice.cc',
'src/core/lib/event_engine/slice_buffer.cc',
'src/core/lib/event_engine/thread_pool.cc',
'src/core/lib/event_engine/trace.cc',
'src/core/lib/event_engine/utils.cc',
'src/core/lib/event_engine/windows/iocp.cc',
'src/core/lib/event_engine/windows/win_socket.cc',
'src/core/lib/event_engine/windows/windows_engine.cc',
'src/core/lib/gprpp/status_helper.cc',
'src/core/lib/gprpp/time.cc',
'src/core/lib/gprpp/time_averaged_stats.cc',

33
package.xml generated

@ -952,37 +952,24 @@
<file baseinstalldir="/" name="src/core/lib/event_engine/default_event_engine_factory.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/event_engine.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/event_engine_factory.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/executor/executor.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/executor/threaded_executor.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/executor/threaded_executor.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/handle_containers.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/iomgr_engine/iomgr_engine.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/iomgr_engine/iomgr_engine.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/iomgr_engine/thread_pool.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/iomgr_engine/thread_pool.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/iomgr_engine/timer.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/iomgr_engine/timer.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/iomgr_engine/timer_heap.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/iomgr_engine/timer_heap.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/iomgr_engine/timer_manager.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/iomgr_engine/timer_manager.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/memory_allocator.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/poller.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/posix_engine/posix_engine.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/posix_engine/posix_engine.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/posix_engine/timer.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/posix_engine/timer.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/posix_engine/timer_heap.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/posix_engine/timer_heap.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/posix_engine/timer_manager.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/posix_engine/timer_manager.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/promise.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/resolved_address.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/slice.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/slice_buffer.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/socket_notifier.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/thread_pool.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/thread_pool.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/trace.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/trace.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/utils.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/utils.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/windows/iocp.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/windows/iocp.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/windows/win_socket.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/windows/win_socket.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/windows/windows_engine.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/event_engine/windows/windows_engine.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/gpr/alloc.cc" role="src" />
<file baseinstalldir="/" name="src/core/lib/gpr/alloc.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/gpr/atm.cc" role="src" />

@ -22,7 +22,6 @@
#include <limits.h>
#include <stdint.h>
#include <stdlib.h>
#include <functional>
#include <string>
@ -137,7 +136,7 @@ std::string GetCensusSafeClientIpString(
}
return client_ip;
} else {
GPR_UNREACHABLE_CODE(abort());
GPR_UNREACHABLE_CODE();
}
}
@ -156,7 +155,7 @@ std::string MakeClientIpAndLrToken(
prefix = kEncodedIpv6AddressLengthString;
break;
default:
GPR_UNREACHABLE_CODE(abort());
GPR_UNREACHABLE_CODE();
}
return absl::StrCat(prefix, client_ip, lr_token);
}

@ -68,4 +68,4 @@ class SelfDeletingClosure : public EventEngine::Closure {
} // namespace experimental
} // namespace grpc_event_engine
#endif // GRPC_CORE_LIB_EVENT_ENGINE_COMMON_CLOSURES_H
#endif // GRPC_CORE_LIB_EVENT_ENGINE_COMMON_CLOSURES_H

@ -14,37 +14,20 @@
#include <grpc/support/port_platform.h>
#include "src/core/lib/event_engine/default_event_engine_factory.h"
#include <memory>
#include "absl/memory/memory.h"
#include <grpc/event_engine/event_engine.h>
#ifdef GPR_WINDOWS
#include "src/core/lib/event_engine/windows/windows_engine.h"
#include "src/core/lib/event_engine/iomgr_engine/iomgr_engine.h"
namespace grpc_event_engine {
namespace experimental {
std::unique_ptr<EventEngine> DefaultEventEngineFactory() {
return absl::make_unique<WindowsEventEngine>();
return absl::make_unique<IomgrEventEngine>();
}
} // namespace experimental
} // namespace grpc_event_engine
#else // not GPR_WINDOWS
#include "src/core/lib/event_engine/posix_engine/posix_engine.h"
namespace grpc_event_engine {
namespace experimental {
std::unique_ptr<EventEngine> DefaultEventEngineFactory() {
return absl::make_unique<PosixEventEngine>();
}
} // namespace experimental
} // namespace grpc_event_engine
#endif

@ -1,38 +0,0 @@
// Copyright 2022 gRPC authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_EXECUTOR_EXECUTOR_H
#define GRPC_CORE_LIB_EVENT_ENGINE_EXECUTOR_EXECUTOR_H
#include <grpc/support/port_platform.h>
#include "absl/functional/any_invocable.h"
#include <grpc/event_engine/event_engine.h>
namespace grpc_event_engine {
namespace experimental {
// A subset of the EventEngine execution API. See event_engine.h for details
class Executor {
public:
virtual ~Executor() = default;
virtual void Run(EventEngine::Closure* closure) = 0;
virtual void Run(absl::AnyInvocable<void()> closure) = 0;
};
} // namespace experimental
} // namespace grpc_event_engine
#endif // GRPC_CORE_LIB_EVENT_ENGINE_EXECUTOR_EXECUTOR_H

@ -1,36 +0,0 @@
// Copyright 2022 gRPC authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include <grpc/support/port_platform.h>
#include "src/core/lib/event_engine/executor/threaded_executor.h"
#include <utility>
namespace grpc_event_engine {
namespace experimental {
ThreadedExecutor::ThreadedExecutor(int reserve_threads)
: thread_pool_(reserve_threads){};
void ThreadedExecutor::Run(EventEngine::Closure* closure) {
thread_pool_.Add([closure]() { closure->Run(); });
}
void ThreadedExecutor::Run(absl::AnyInvocable<void()> closure) {
thread_pool_.Add(std::move(closure));
}
} // namespace experimental
} // namespace grpc_event_engine

@ -1,44 +0,0 @@
// Copyright 2022 gRPC authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_EXECUTOR_THREADED_EXECUTOR_H
#define GRPC_CORE_LIB_EVENT_ENGINE_EXECUTOR_THREADED_EXECUTOR_H
#include <grpc/support/port_platform.h>
#include "absl/functional/any_invocable.h"
#include <grpc/event_engine/event_engine.h>
#include "src/core/lib/event_engine/executor/executor.h"
#include "src/core/lib/event_engine/thread_pool.h"
namespace grpc_event_engine {
namespace experimental {
class ThreadedExecutor : public Executor {
public:
explicit ThreadedExecutor(int reserve_threads);
~ThreadedExecutor() override = default;
void Run(EventEngine::Closure* closure) override;
void Run(absl::AnyInvocable<void()> closure) override;
private:
ThreadPool thread_pool_;
};
} // namespace experimental
} // namespace grpc_event_engine
#endif // GRPC_CORE_LIB_EVENT_ENGINE_EXECUTOR_THREADED_EXECUTOR_H

@ -13,7 +13,7 @@
// limitations under the License.
#include <grpc/support/port_platform.h>
#include "src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h"
#include "src/core/lib/event_engine/iomgr_engine/ev_epoll1_linux.h"
#include <stdint.h>
@ -45,21 +45,21 @@
#include "absl/synchronization/mutex.h"
#include "src/core/lib/event_engine/posix_engine/event_poller.h"
#include "src/core/lib/event_engine/posix_engine/lockfree_event.h"
#include "src/core/lib/event_engine/posix_engine/posix_engine_closure.h"
#include "src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h"
#include "src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h"
#include "src/core/lib/event_engine/iomgr_engine/event_poller.h"
#include "src/core/lib/event_engine/iomgr_engine/iomgr_engine_closure.h"
#include "src/core/lib/event_engine/iomgr_engine/lockfree_event.h"
#include "src/core/lib/event_engine/iomgr_engine/wakeup_fd_posix.h"
#include "src/core/lib/event_engine/iomgr_engine/wakeup_fd_posix_default.h"
#include "src/core/lib/gprpp/fork.h"
#include "src/core/lib/gprpp/time.h"
using ::grpc_event_engine::posix_engine::LockfreeEvent;
using ::grpc_event_engine::posix_engine::WakeupFd;
using ::grpc_event_engine::iomgr_engine::LockfreeEvent;
using ::grpc_event_engine::iomgr_engine::WakeupFd;
#define MAX_EPOLL_EVENTS_HANDLED_PER_ITERATION 1
namespace grpc_event_engine {
namespace posix_engine {
namespace iomgr_engine {
class Epoll1EventHandle : public EventHandle {
public:
@ -252,7 +252,7 @@ void ResetEventManagerOnFork() {
// It is possible that GLIBC has epoll but the underlying kernel doesn't.
// Create epoll_fd to make sure epoll support is available
bool InitEpoll1PollerLinux() {
if (!grpc_event_engine::posix_engine::SupportsWakeupFd()) {
if (!grpc_event_engine::iomgr_engine::SupportsWakeupFd()) {
return false;
}
int fd = EpollCreateAndCloexec();
@ -525,14 +525,14 @@ Epoll1Poller* GetEpoll1Poller(Scheduler* scheduler) {
return nullptr;
}
} // namespace posix_engine
} // namespace iomgr_engine
} // namespace grpc_event_engine
#else /* defined(GRPC_LINUX_EPOLL) */
#if defined(GRPC_POSIX_SOCKET_EV_EPOLL1)
namespace grpc_event_engine {
namespace posix_engine {
namespace iomgr_engine {
Epoll1Poller::Epoll1Poller(Scheduler* /* engine */) {
GPR_ASSERT(false && "unimplemented");
@ -568,7 +568,7 @@ void Epoll1Poller::Kick() { GPR_ASSERT(false && "unimplemented"); }
// nullptr.
Epoll1Poller* GetEpoll1Poller(Scheduler* /*scheduler*/) { return nullptr; }
} // namespace posix_engine
} // namespace iomgr_engine
} // namespace grpc_event_engine
#endif /* defined(GRPC_POSIX_SOCKET_EV_EPOLL1) */

@ -12,8 +12,8 @@
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_EV_EPOLL1_LINUX_H
#define GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_EV_EPOLL1_LINUX_H
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_EV_EPOLL1_LINUX_H
#define GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_EV_EPOLL1_LINUX_H
#include <grpc/support/port_platform.h>
#include <list>
@ -25,8 +25,8 @@
#include "absl/strings/string_view.h"
#include "absl/synchronization/mutex.h"
#include "src/core/lib/event_engine/posix_engine/event_poller.h"
#include "src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h"
#include "src/core/lib/event_engine/iomgr_engine/event_poller.h"
#include "src/core/lib/event_engine/iomgr_engine/wakeup_fd_posix.h"
#include "src/core/lib/gprpp/time.h"
#include "src/core/lib/iomgr/port.h"
@ -37,7 +37,7 @@
#define MAX_EPOLL_EVENTS 100
namespace grpc_event_engine {
namespace posix_engine {
namespace iomgr_engine {
class Epoll1EventHandle;
@ -94,7 +94,7 @@ class Epoll1Poller : public EventPoller {
// engine.
Epoll1Poller* GetEpoll1Poller(Scheduler* scheduler);
} // namespace posix_engine
} // namespace iomgr_engine
} // namespace grpc_event_engine
#endif // GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_EV_EPOLL1_LINUX_H
#endif // GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_EV_EPOLL1_LINUX_H

@ -14,7 +14,7 @@
#include <grpc/support/port_platform.h>
#include "src/core/lib/event_engine/posix_engine/ev_poll_posix.h"
#include "src/core/lib/event_engine/iomgr_engine/ev_poll_posix.h"
#include <stdint.h>
#include <stdlib.h>
@ -33,8 +33,8 @@
#include <grpc/support/sync.h>
#include <grpc/support/time.h>
#include "src/core/lib/event_engine/posix_engine/event_poller.h"
#include "src/core/lib/event_engine/posix_engine/posix_engine_closure.h"
#include "src/core/lib/event_engine/iomgr_engine/event_poller.h"
#include "src/core/lib/event_engine/iomgr_engine/iomgr_engine_closure.h"
#include "src/core/lib/gprpp/memory.h"
#include "src/core/lib/iomgr/port.h"
@ -53,15 +53,15 @@
#include <grpc/support/alloc.h>
#include "src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h"
#include "src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h"
#include "src/core/lib/event_engine/iomgr_engine/wakeup_fd_posix.h"
#include "src/core/lib/event_engine/iomgr_engine/wakeup_fd_posix_default.h"
#include "src/core/lib/gprpp/fork.h"
#include "src/core/lib/gprpp/global_config.h"
#include "src/core/lib/gprpp/time.h"
GPR_GLOBAL_CONFIG_DECLARE_STRING(grpc_poll_strategy);
using ::grpc_event_engine::posix_engine::WakeupFd;
using ::grpc_event_engine::iomgr_engine::WakeupFd;
static const intptr_t kClosureNotReady = 0;
static const intptr_t kClosureReady = 1;
@ -69,7 +69,7 @@ static const int kPollinCheck = POLLIN | POLLHUP | POLLERR;
static const int kPolloutCheck = POLLOUT | POLLHUP | POLLERR;
namespace grpc_event_engine {
namespace posix_engine {
namespace iomgr_engine {
class PollEventHandle : public EventHandle {
public:
@ -319,7 +319,7 @@ void ResetEventManagerOnFork() {
// It is possible that GLIBC has epoll but the underlying kernel doesn't.
// Create epoll_fd to make sure epoll support is available
bool InitPollPollerPosix() {
if (!grpc_event_engine::posix_engine::SupportsWakeupFd()) {
if (!grpc_event_engine::iomgr_engine::SupportsWakeupFd()) {
return false;
}
if (grpc_core::Fork::Enabled()) {
@ -806,13 +806,13 @@ PollPoller* GetPollPoller(Scheduler* scheduler, bool use_phony_poll) {
return nullptr;
}
} // namespace posix_engine
} // namespace iomgr_engine
} // namespace grpc_event_engine
#else /* GRPC_POSIX_SOCKET_EV_POLL */
namespace grpc_event_engine {
namespace posix_engine {
namespace iomgr_engine {
PollPoller::PollPoller(Scheduler* /* engine */) {
GPR_ASSERT(false && "unimplemented");
@ -852,7 +852,7 @@ void PollPoller::PollerHandlesListRemoveHandle(PollEventHandle* /*handle*/) {
GPR_ASSERT(false && "unimplemented");
}
} // namespace posix_engine
} // namespace iomgr_engine
} // namespace grpc_event_engine
#endif /* GRPC_POSIX_SOCKET_EV_POLL */

@ -12,8 +12,8 @@
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_EV_POLL_POSIX_H
#define GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_EV_POLL_POSIX_H
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_EV_POLL_POSIX_H
#define GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_EV_POLL_POSIX_H
#include <grpc/support/port_platform.h>
@ -26,12 +26,12 @@
#include "absl/strings/string_view.h"
#include "absl/synchronization/mutex.h"
#include "src/core/lib/event_engine/posix_engine/event_poller.h"
#include "src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h"
#include "src/core/lib/event_engine/iomgr_engine/event_poller.h"
#include "src/core/lib/event_engine/iomgr_engine/wakeup_fd_posix.h"
#include "src/core/lib/gprpp/time.h"
namespace grpc_event_engine {
namespace posix_engine {
namespace iomgr_engine {
class PollEventHandle;
@ -83,7 +83,7 @@ class PollPoller : public EventPoller {
// and any attempt to schedule a blocking poll will result in a crash failure.
PollPoller* GetPollPoller(Scheduler* scheduler, bool use_phony_poll);
} // namespace posix_engine
} // namespace iomgr_engine
} // namespace grpc_event_engine
#endif // GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_EV_POLL_POSIX_H
#endif // GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_EV_POLL_POSIX_H

@ -12,8 +12,8 @@
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_EVENT_POLLER_H
#define GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_EVENT_POLLER_H
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_EVENT_POLLER_H
#define GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_EVENT_POLLER_H
#include <grpc/support/port_platform.h>
#include <vector>
@ -23,11 +23,11 @@
#include <grpc/event_engine/event_engine.h>
#include "src/core/lib/event_engine/posix_engine/posix_engine_closure.h"
#include "src/core/lib/event_engine/iomgr_engine/iomgr_engine_closure.h"
#include "src/core/lib/gprpp/time.h"
namespace grpc_event_engine {
namespace posix_engine {
namespace iomgr_engine {
class Scheduler {
public:
@ -99,7 +99,7 @@ class EventPoller {
virtual ~EventPoller() = default;
};
} // namespace posix_engine
} // namespace iomgr_engine
} // namespace grpc_event_engine
#endif // GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_EVENT_POLLER_H
#endif // GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_EVENT_POLLER_H

@ -17,16 +17,16 @@
#include "absl/strings/str_split.h"
#include "absl/strings/string_view.h"
#include "src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h"
#include "src/core/lib/event_engine/posix_engine/ev_poll_posix.h"
#include "src/core/lib/event_engine/posix_engine/event_poller.h"
#include "src/core/lib/event_engine/iomgr_engine/ev_epoll1_linux.h"
#include "src/core/lib/event_engine/iomgr_engine/ev_poll_posix.h"
#include "src/core/lib/event_engine/iomgr_engine/event_poller.h"
#include "src/core/lib/gprpp/global_config.h"
#include "src/core/lib/gprpp/memory.h"
GPR_GLOBAL_CONFIG_DECLARE_STRING(grpc_poll_strategy);
namespace grpc_event_engine {
namespace posix_engine {
namespace iomgr_engine {
namespace {
@ -54,5 +54,5 @@ EventPoller* GetDefaultPoller(Scheduler* scheduler) {
return poller;
}
} // namespace posix_engine
} // namespace iomgr_engine
} // namespace grpc_event_engine

@ -12,13 +12,13 @@
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_EVENT_POLLER_POSIX_DEFAULT_H
#define GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_EVENT_POLLER_POSIX_DEFAULT_H
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_EVENT_POLLER_POSIX_DEFAULT_H
#define GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_EVENT_POLLER_POSIX_DEFAULT_H
#include <grpc/support/port_platform.h>
namespace grpc_event_engine {
namespace posix_engine {
namespace iomgr_engine {
class EventPoller;
class Scheduler;
@ -27,7 +27,7 @@ class Scheduler;
// scheduler.
EventPoller* GetDefaultPoller(Scheduler* scheduler);
} // namespace posix_engine
} // namespace iomgr_engine
} // namespace grpc_event_engine
#endif // GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_EVENT_POLLER_POSIX_DEFAULT_H
#endif // GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_EVENT_POLLER_POSIX_DEFAULT_H

@ -13,34 +13,50 @@
// limitations under the License.
#include <grpc/support/port_platform.h>
#include "src/core/lib/event_engine/posix_engine/posix_engine.h"
#include "src/core/lib/event_engine/iomgr_engine/iomgr_engine.h"
#include <algorithm>
#include <string>
#include <utility>
#include "absl/container/flat_hash_set.h"
#include "absl/functional/any_invocable.h"
#include "absl/strings/str_cat.h"
#include <grpc/event_engine/event_engine.h>
#include <grpc/support/log.h>
#include "src/core/lib/debug/trace.h"
#include "src/core/lib/event_engine/executor/threaded_executor.h"
#include "src/core/lib/event_engine/posix_engine/timer.h"
#include "src/core/lib/event_engine/iomgr_engine/timer.h"
#include "src/core/lib/event_engine/trace.h"
#include "src/core/lib/event_engine/utils.h"
#include "src/core/lib/gprpp/time.h"
namespace grpc_event_engine {
namespace experimental {
struct PosixEventEngine::ClosureData final : public EventEngine::Closure {
namespace {
std::string HandleToString(EventEngine::TaskHandle handle) {
return absl::StrCat("{", handle.keys[0], ",", handle.keys[1], "}");
}
} // namespace
grpc_core::Timestamp IomgrEventEngine::ToTimestamp(EventEngine::Duration when) {
return timer_manager_.Now() +
std::max(grpc_core::Duration::Milliseconds(1),
grpc_core::Duration::NanosecondsRoundUp(when.count())) +
grpc_core::Duration::Milliseconds(1);
}
struct IomgrEventEngine::ClosureData final : public EventEngine::Closure {
absl::AnyInvocable<void()> cb;
posix_engine::Timer timer;
PosixEventEngine* engine;
iomgr_engine::Timer timer;
IomgrEventEngine* engine;
EventEngine::TaskHandle handle;
void Run() override {
GRPC_EVENT_ENGINE_TRACE("PosixEventEngine:%p executing callback:%s", engine,
GRPC_EVENT_ENGINE_TRACE("IomgrEventEngine:%p executing callback:%s", engine,
HandleToString(handle).c_str());
{
grpc_core::MutexLock lock(&engine->mu_);
@ -51,14 +67,14 @@ struct PosixEventEngine::ClosureData final : public EventEngine::Closure {
}
};
PosixEventEngine::PosixEventEngine() {}
IomgrEventEngine::IomgrEventEngine() {}
PosixEventEngine::~PosixEventEngine() {
IomgrEventEngine::~IomgrEventEngine() {
grpc_core::MutexLock lock(&mu_);
if (GRPC_TRACE_FLAG_ENABLED(grpc_event_engine_trace)) {
for (auto handle : known_handles_) {
gpr_log(GPR_ERROR,
"(event_engine) PosixEventEngine:%p uncleared TaskHandle at "
"(event_engine) IomgrEventEngine:%p uncleared TaskHandle at "
"shutdown:%s",
this, HandleToString(handle).c_str());
}
@ -66,7 +82,7 @@ PosixEventEngine::~PosixEventEngine() {
GPR_ASSERT(GPR_LIKELY(known_handles_.empty()));
}
bool PosixEventEngine::Cancel(EventEngine::TaskHandle handle) {
bool IomgrEventEngine::Cancel(EventEngine::TaskHandle handle) {
grpc_core::MutexLock lock(&mu_);
if (!known_handles_.contains(handle)) return false;
auto* cd = reinterpret_cast<ClosureData*>(handle.keys[0]);
@ -76,27 +92,27 @@ bool PosixEventEngine::Cancel(EventEngine::TaskHandle handle) {
return r;
}
EventEngine::TaskHandle PosixEventEngine::RunAfter(
EventEngine::TaskHandle IomgrEventEngine::RunAfter(
Duration when, absl::AnyInvocable<void()> closure) {
return RunAfterInternal(when, std::move(closure));
}
EventEngine::TaskHandle PosixEventEngine::RunAfter(
EventEngine::TaskHandle IomgrEventEngine::RunAfter(
Duration when, EventEngine::Closure* closure) {
return RunAfterInternal(when, [closure]() { closure->Run(); });
}
void PosixEventEngine::Run(absl::AnyInvocable<void()> closure) {
executor_.Run(std::move(closure));
void IomgrEventEngine::Run(absl::AnyInvocable<void()> closure) {
thread_pool_.Add(std::move(closure));
}
void PosixEventEngine::Run(EventEngine::Closure* closure) {
executor_.Run(closure);
void IomgrEventEngine::Run(EventEngine::Closure* closure) {
thread_pool_.Add([closure]() { closure->Run(); });
}
EventEngine::TaskHandle PosixEventEngine::RunAfterInternal(
EventEngine::TaskHandle IomgrEventEngine::RunAfterInternal(
Duration when, absl::AnyInvocable<void()> cb) {
auto when_ts = ToTimestamp(timer_manager_.Now(), when);
auto when_ts = ToTimestamp(when);
auto* cd = new ClosureData;
cd->cb = std::move(cb);
cd->engine = this;
@ -105,26 +121,26 @@ EventEngine::TaskHandle PosixEventEngine::RunAfterInternal(
grpc_core::MutexLock lock(&mu_);
known_handles_.insert(handle);
cd->handle = handle;
GRPC_EVENT_ENGINE_TRACE("PosixEventEngine:%p scheduling callback:%s", this,
GRPC_EVENT_ENGINE_TRACE("IomgrEventEngine:%p scheduling callback:%s", this,
HandleToString(handle).c_str());
timer_manager_.TimerInit(&cd->timer, when_ts, cd);
return handle;
}
std::unique_ptr<EventEngine::DNSResolver> PosixEventEngine::GetDNSResolver(
std::unique_ptr<EventEngine::DNSResolver> IomgrEventEngine::GetDNSResolver(
EventEngine::DNSResolver::ResolverOptions const& /*options*/) {
GPR_ASSERT(false && "unimplemented");
}
bool PosixEventEngine::IsWorkerThread() {
bool IomgrEventEngine::IsWorkerThread() {
GPR_ASSERT(false && "unimplemented");
}
bool PosixEventEngine::CancelConnect(EventEngine::ConnectionHandle /*handle*/) {
bool IomgrEventEngine::CancelConnect(EventEngine::ConnectionHandle /*handle*/) {
GPR_ASSERT(false && "unimplemented");
}
EventEngine::ConnectionHandle PosixEventEngine::Connect(
EventEngine::ConnectionHandle IomgrEventEngine::Connect(
OnConnectCallback /*on_connect*/, const ResolvedAddress& /*addr*/,
const EndpointConfig& /*args*/, MemoryAllocator /*memory_allocator*/,
Duration /*deadline*/) {
@ -132,7 +148,7 @@ EventEngine::ConnectionHandle PosixEventEngine::Connect(
}
absl::StatusOr<std::unique_ptr<EventEngine::Listener>>
PosixEventEngine::CreateListener(
IomgrEventEngine::CreateListener(
Listener::AcceptCallback /*on_accept*/,
absl::AnyInvocable<void(absl::Status)> /*on_shutdown*/,
const EndpointConfig& /*config*/,

@ -11,8 +11,8 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_POSIX_ENGINE_H
#define GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_POSIX_ENGINE_H
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_IOMGR_ENGINE_H
#define GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_IOMGR_ENGINE_H
#include <grpc/support/port_platform.h>
#include <stdint.h>
@ -31,21 +31,22 @@
#include <grpc/event_engine/memory_allocator.h>
#include <grpc/event_engine/slice_buffer.h>
#include "src/core/lib/event_engine/executor/threaded_executor.h"
#include "src/core/lib/event_engine/handle_containers.h"
#include "src/core/lib/event_engine/posix_engine/timer_manager.h"
#include "src/core/lib/event_engine/iomgr_engine/thread_pool.h"
#include "src/core/lib/event_engine/iomgr_engine/timer_manager.h"
#include "src/core/lib/gprpp/sync.h"
#include "src/core/lib/gprpp/time.h"
namespace grpc_event_engine {
namespace experimental {
// An iomgr-based Posix EventEngine implementation.
// An iomgr-based EventEngine implementation.
// All methods require an ExecCtx to already exist on the thread's stack.
class PosixEventEngine final : public EventEngine {
class IomgrEventEngine final : public EventEngine {
public:
class PosixEndpoint : public EventEngine::Endpoint {
class IomgrEndpoint : public EventEngine::Endpoint {
public:
~PosixEndpoint() override;
~IomgrEndpoint() override;
void Read(absl::AnyInvocable<void(absl::Status)> on_read,
SliceBuffer* buffer, const ReadArgs* args) override;
void Write(absl::AnyInvocable<void(absl::Status)> on_writable,
@ -53,15 +54,15 @@ class PosixEventEngine final : public EventEngine {
const ResolvedAddress& GetPeerAddress() const override;
const ResolvedAddress& GetLocalAddress() const override;
};
class PosixListener : public EventEngine::Listener {
class IomgrListener : public EventEngine::Listener {
public:
~PosixListener() override;
~IomgrListener() override;
absl::StatusOr<int> Bind(const ResolvedAddress& addr) override;
absl::Status Start() override;
};
class PosixDNSResolver : public EventEngine::DNSResolver {
class IomgrDNSResolver : public EventEngine::DNSResolver {
public:
~PosixDNSResolver() override;
~IomgrDNSResolver() override;
LookupTaskHandle LookupHostname(LookupHostnameCallback on_resolve,
absl::string_view name,
absl::string_view default_port,
@ -75,8 +76,8 @@ class PosixEventEngine final : public EventEngine {
bool CancelLookup(LookupTaskHandle handle) override;
};
PosixEventEngine();
~PosixEventEngine() override;
IomgrEventEngine();
~IomgrEventEngine() override;
absl::StatusOr<std::unique_ptr<Listener>> CreateListener(
Listener::AcceptCallback on_accept,
@ -106,9 +107,10 @@ class PosixEventEngine final : public EventEngine {
struct ClosureData;
EventEngine::TaskHandle RunAfterInternal(Duration when,
absl::AnyInvocable<void()> cb);
grpc_core::Timestamp ToTimestamp(EventEngine::Duration when);
posix_engine::TimerManager timer_manager_;
ThreadedExecutor executor_{2};
iomgr_engine::TimerManager timer_manager_;
iomgr_engine::ThreadPool thread_pool_{2};
grpc_core::Mutex mu_;
TaskHandleSet known_handles_ ABSL_GUARDED_BY(mu_);
@ -118,4 +120,4 @@ class PosixEventEngine final : public EventEngine {
} // namespace experimental
} // namespace grpc_event_engine
#endif // GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_POSIX_ENGINE_H
#endif // GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_IOMGR_ENGINE_H

@ -12,8 +12,8 @@
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_POSIX_ENGINE_CLOSURE_H
#define GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_POSIX_ENGINE_CLOSURE_H
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_IOMGR_ENGINE_CLOSURE_H
#define GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_IOMGR_ENGINE_CLOSURE_H
#include <grpc/support/port_platform.h>
#include <utility>
@ -25,7 +25,7 @@
#include <grpc/event_engine/event_engine.h>
namespace grpc_event_engine {
namespace posix_engine {
namespace iomgr_engine {
// The callbacks for Endpoint read and write take an absl::Status as
// argument - this is important for the tcp code to function correctly. We need
@ -69,7 +69,7 @@ class IomgrEngineClosure final
absl::Status status_;
};
} // namespace posix_engine
} // namespace iomgr_engine
} // namespace grpc_event_engine
#endif // GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_POSIX_ENGINE_CLOSURE_H
#endif // GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_IOMGR_ENGINE_CLOSURE_H

@ -13,7 +13,7 @@
// limitations under the License.
#include <grpc/support/port_platform.h>
#include "src/core/lib/event_engine/posix_engine/lockfree_event.h"
#include "src/core/lib/event_engine/iomgr_engine/lockfree_event.h"
#include <stdlib.h>
@ -25,8 +25,8 @@
#include <grpc/support/atm.h>
#include <grpc/support/log.h>
#include "src/core/lib/event_engine/posix_engine/event_poller.h"
#include "src/core/lib/event_engine/posix_engine/posix_engine_closure.h"
#include "src/core/lib/event_engine/iomgr_engine/event_poller.h"
#include "src/core/lib/event_engine/iomgr_engine/iomgr_engine_closure.h"
#include "src/core/lib/gprpp/status_helper.h"
// 'state' holds the to call when the fd is readable or writable respectively.
@ -61,7 +61,7 @@
// For 5,6,7: See SetShutdown() function
namespace grpc_event_engine {
namespace posix_engine {
namespace iomgr_engine {
void LockfreeEvent::InitEvent() {
// Perform an atomic store to start the state machine.
@ -263,5 +263,5 @@ void LockfreeEvent::SetReady() {
}
}
} // namespace posix_engine
} // namespace iomgr_engine
} // namespace grpc_event_engine

@ -12,8 +12,8 @@
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_LOCKFREE_EVENT_H
#define GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_LOCKFREE_EVENT_H
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_LOCKFREE_EVENT_H
#define GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_LOCKFREE_EVENT_H
#include <grpc/support/port_platform.h>
#include <atomic>
@ -21,10 +21,10 @@
#include "absl/status/status.h"
#include "src/core/lib/event_engine/posix_engine/posix_engine_closure.h"
#include "src/core/lib/event_engine/iomgr_engine/iomgr_engine_closure.h"
namespace grpc_event_engine {
namespace posix_engine {
namespace iomgr_engine {
class Scheduler;
@ -67,7 +67,7 @@ class LockfreeEvent {
Scheduler* scheduler_;
};
} // namespace posix_engine
} // namespace iomgr_engine
} // namespace grpc_event_engine
#endif // GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_LOCKFREE_EVENT_H
#endif // GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_LOCKFREE_EVENT_H

@ -18,19 +18,19 @@
#include <grpc/support/port_platform.h>
#include "src/core/lib/event_engine/thread_pool.h"
#include "src/core/lib/event_engine/iomgr_engine/thread_pool.h"
#include <utility>
#include "src/core/lib/gprpp/thd.h"
namespace grpc_event_engine {
namespace experimental {
namespace iomgr_engine {
ThreadPool::Thread::Thread(ThreadPool* pool)
: pool_(pool),
thd_(
"posix_eventengine_pool",
"iomgr_eventengine_pool",
[](void* th) { static_cast<ThreadPool::Thread*>(th)->ThreadFunc(); },
this) {
thd_.Start();
@ -121,5 +121,5 @@ void ThreadPool::Add(absl::AnyInvocable<void()> callback) {
}
}
} // namespace experimental
} // namespace iomgr_engine
} // namespace grpc_event_engine

@ -16,8 +16,8 @@
*
*/
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_THREAD_POOL_H
#define GRPC_CORE_LIB_EVENT_ENGINE_THREAD_POOL_H
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_THREAD_POOL_H
#define GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_THREAD_POOL_H
#include <grpc/support/port_platform.h>
@ -30,7 +30,7 @@
#include "src/core/lib/gprpp/thd.h"
namespace grpc_event_engine {
namespace experimental {
namespace iomgr_engine {
class ThreadPool final {
public:
@ -65,7 +65,7 @@ class ThreadPool final {
std::vector<Thread*> dead_threads_;
};
} // namespace experimental
} // namespace iomgr_engine
} // namespace grpc_event_engine
#endif // GRPC_CORE_LIB_EVENT_ENGINE_THREAD_POOL_H
#endif // GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_THREAD_POOL_H

@ -18,7 +18,7 @@
#include <grpc/support/port_platform.h>
#include "src/core/lib/event_engine/posix_engine/timer.h"
#include "src/core/lib/event_engine/iomgr_engine/timer.h"
#include <algorithm>
#include <atomic>
@ -27,12 +27,12 @@
#include <grpc/support/cpu.h>
#include "src/core/lib/event_engine/posix_engine/timer_heap.h"
#include "src/core/lib/event_engine/iomgr_engine/timer_heap.h"
#include "src/core/lib/gpr/useful.h"
#include "src/core/lib/gprpp/time.h"
namespace grpc_event_engine {
namespace posix_engine {
namespace iomgr_engine {
static const size_t kInvalidHeapIndex = std::numeric_limits<size_t>::max();
static const double kAddDeadlineScale = 0.33;
@ -307,5 +307,5 @@ TimerList::TimerCheck(grpc_core::Timestamp* next) {
return std::move(run);
}
} // namespace posix_engine
} // namespace iomgr_engine
} // namespace grpc_event_engine

@ -16,8 +16,8 @@
*
*/
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_TIMER_H
#define GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_TIMER_H
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_TIMER_H
#define GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_TIMER_H
#include <grpc/support/port_platform.h>
@ -33,13 +33,13 @@
#include <grpc/event_engine/event_engine.h>
#include "src/core/lib/event_engine/posix_engine/timer_heap.h"
#include "src/core/lib/event_engine/iomgr_engine/timer_heap.h"
#include "src/core/lib/gprpp/sync.h"
#include "src/core/lib/gprpp/time.h"
#include "src/core/lib/gprpp/time_averaged_stats.h"
namespace grpc_event_engine {
namespace posix_engine {
namespace iomgr_engine {
struct Timer {
int64_t deadline;
@ -187,7 +187,7 @@ class TimerList {
const std::unique_ptr<Shard*[]> shard_queue_ ABSL_GUARDED_BY(mu_);
};
} // namespace posix_engine
} // namespace iomgr_engine
} // namespace grpc_event_engine
#endif /* GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_TIMER_H */
#endif /* GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_TIMER_H */

@ -18,16 +18,16 @@
#include <grpc/support/port_platform.h>
#include "src/core/lib/event_engine/posix_engine/timer_heap.h"
#include "src/core/lib/event_engine/iomgr_engine/timer_heap.h"
#include <stdint.h>
#include <algorithm>
#include "src/core/lib/event_engine/posix_engine/timer.h"
#include "src/core/lib/event_engine/iomgr_engine/timer.h"
namespace grpc_event_engine {
namespace posix_engine {
namespace iomgr_engine {
/* Adjusts a heap so as to move a hole at position i closer to the root,
until a suitable position is found for element t. Then, copies t into that
@ -103,5 +103,5 @@ Timer* TimerHeap::Top() { return timers_[0]; }
void TimerHeap::Pop() { Remove(Top()); }
} // namespace posix_engine
} // namespace iomgr_engine
} // namespace grpc_event_engine

@ -16,8 +16,8 @@
*
*/
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_TIMER_HEAP_H
#define GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_TIMER_HEAP_H
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_TIMER_HEAP_H
#define GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_TIMER_HEAP_H
#include <grpc/support/port_platform.h>
@ -25,7 +25,7 @@
#include <vector>
namespace grpc_event_engine {
namespace posix_engine {
namespace iomgr_engine {
struct Timer;
@ -50,7 +50,7 @@ class TimerHeap {
std::vector<Timer*> timers_;
};
} // namespace posix_engine
} // namespace iomgr_engine
} // namespace grpc_event_engine
#endif /* GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_TIMER_HEAP_H */
#endif /* GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_TIMER_HEAP_H */

@ -18,7 +18,7 @@
#include <grpc/support/port_platform.h>
#include "src/core/lib/event_engine/posix_engine/timer_manager.h"
#include "src/core/lib/event_engine/iomgr_engine/timer_manager.h"
#include <algorithm>
#include <memory>
@ -35,7 +35,7 @@
#include "src/core/lib/gprpp/thd.h"
namespace grpc_event_engine {
namespace posix_engine {
namespace iomgr_engine {
namespace {
class ThreadCollector {
@ -250,5 +250,5 @@ void TimerManager::Kick() {
cv_.Signal();
}
} // namespace posix_engine
} // namespace iomgr_engine
} // namespace grpc_event_engine

@ -16,8 +16,8 @@
*
*/
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_TIMER_MANAGER_H
#define GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_TIMER_MANAGER_H
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_TIMER_MANAGER_H
#define GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_TIMER_MANAGER_H
#include <grpc/support/port_platform.h>
@ -31,13 +31,13 @@
#include <grpc/event_engine/event_engine.h>
#include "src/core/lib/event_engine/posix_engine/timer.h"
#include "src/core/lib/event_engine/iomgr_engine/timer.h"
#include "src/core/lib/gprpp/sync.h"
#include "src/core/lib/gprpp/thd.h"
#include "src/core/lib/gprpp/time.h"
namespace grpc_event_engine {
namespace posix_engine {
namespace iomgr_engine {
// Timer Manager tries to keep only one thread waiting for the next timeout at
// all times, and thus effectively preventing the thundering herd problem.
@ -105,7 +105,7 @@ class TimerManager final {
std::unique_ptr<TimerList> timer_list_;
};
} // namespace posix_engine
} // namespace iomgr_engine
} // namespace grpc_event_engine
#endif /* GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_TIMER_MANAGER_H */
#endif /* GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_TIMER_MANAGER_H */

@ -31,13 +31,13 @@
#include <sys/eventfd.h>
#include <unistd.h>
#include "src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h"
#include "src/core/lib/event_engine/iomgr_engine/wakeup_fd_posix.h"
#endif
#include "src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h"
#include "src/core/lib/event_engine/iomgr_engine/wakeup_fd_eventfd.h"
namespace grpc_event_engine {
namespace posix_engine {
namespace iomgr_engine {
#ifdef GRPC_LINUX_EVENTFD
@ -121,5 +121,5 @@ EventFdWakeupFd::CreateEventFdWakeupFd() {
#endif // GRPC_LINUX_EVENTFD
} // namespace posix_engine
} // namespace iomgr_engine
} // namespace grpc_event_engine

@ -11,8 +11,8 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_WAKEUP_FD_EVENTFD_H
#define GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_WAKEUP_FD_EVENTFD_H
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_WAKEUP_FD_EVENTFD_H
#define GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_WAKEUP_FD_EVENTFD_H
#include <grpc/support/port_platform.h>
@ -21,10 +21,10 @@
#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h"
#include "src/core/lib/event_engine/iomgr_engine/wakeup_fd_posix.h"
namespace grpc_event_engine {
namespace posix_engine {
namespace iomgr_engine {
class EventFdWakeupFd : public WakeupFd {
public:
@ -39,7 +39,7 @@ class EventFdWakeupFd : public WakeupFd {
absl::Status Init();
};
} // namespace posix_engine
} // namespace iomgr_engine
} // namespace grpc_event_engine
#endif // GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_WAKEUP_FD_EVENTFD_H
#endif // GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_WAKEUP_FD_EVENTFD_H

@ -31,13 +31,13 @@
#include <string.h>
#include <unistd.h>
#include "src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h"
#include "src/core/lib/event_engine/iomgr_engine/wakeup_fd_posix.h"
#endif
#include "src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h"
#include "src/core/lib/event_engine/iomgr_engine/wakeup_fd_pipe.h"
namespace grpc_event_engine {
namespace posix_engine {
namespace iomgr_engine {
#ifdef GRPC_POSIX_WAKEUP_FD
@ -148,5 +148,5 @@ absl::StatusOr<std::unique_ptr<WakeupFd>> PipeWakeupFd::CreatePipeWakeupFd() {
#endif // GRPC_POSIX_WAKEUP_FD
} // namespace posix_engine
} // namespace iomgr_engine
} // namespace grpc_event_engine

@ -11,8 +11,8 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_WAKEUP_FD_PIPE_H
#define GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_WAKEUP_FD_PIPE_H
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_WAKEUP_FD_PIPE_H
#define GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_WAKEUP_FD_PIPE_H
#include <grpc/support/port_platform.h>
@ -21,10 +21,10 @@
#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h"
#include "src/core/lib/event_engine/iomgr_engine/wakeup_fd_posix.h"
namespace grpc_event_engine {
namespace posix_engine {
namespace iomgr_engine {
class PipeWakeupFd : public WakeupFd {
public:
@ -39,7 +39,7 @@ class PipeWakeupFd : public WakeupFd {
absl::Status Init();
};
} // namespace posix_engine
} // namespace iomgr_engine
} // namespace grpc_event_engine
#endif // GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_WAKEUP_FD_PIPE_H
#endif // GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_WAKEUP_FD_PIPE_H

@ -39,15 +39,15 @@
* 2. If the polling thread was awakened by a WakeupFd event, call
* WakeupFd::Consume() on it.
*/
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_WAKEUP_FD_POSIX_H
#define GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_WAKEUP_FD_POSIX_H
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_WAKEUP_FD_POSIX_H
#define GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_WAKEUP_FD_POSIX_H
#include <grpc/support/port_platform.h>
#include "absl/status/status.h"
namespace grpc_event_engine {
namespace posix_engine {
namespace iomgr_engine {
class WakeupFd {
public:
@ -70,7 +70,7 @@ class WakeupFd {
int write_fd_;
};
} // namespace posix_engine
} // namespace iomgr_engine
} // namespace grpc_event_engine
#endif // GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_WAKEUP_FD_POSIX_H
#endif // GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_WAKEUP_FD_POSIX_H

@ -18,13 +18,13 @@
#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h"
#include "src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h"
#include "src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h"
#include "src/core/lib/event_engine/iomgr_engine/wakeup_fd_eventfd.h"
#include "src/core/lib/event_engine/iomgr_engine/wakeup_fd_pipe.h"
#include "src/core/lib/event_engine/iomgr_engine/wakeup_fd_posix.h"
#include "src/core/lib/iomgr/port.h"
namespace grpc_event_engine {
namespace posix_engine {
namespace iomgr_engine {
#ifdef GRPC_POSIX_WAKEUP_FD
@ -63,5 +63,5 @@ absl::StatusOr<std::unique_ptr<WakeupFd>> CreateWakeupFd() {
#endif /* GRPC_POSIX_WAKEUP_FD */
} // namespace posix_engine
} // namespace iomgr_engine
} // namespace grpc_event_engine

@ -12,8 +12,8 @@
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_WAKEUP_FD_POSIX_DEFAULT_H
#define GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_WAKEUP_FD_POSIX_DEFAULT_H
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_WAKEUP_FD_POSIX_DEFAULT_H
#define GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_WAKEUP_FD_POSIX_DEFAULT_H
#include <grpc/support/port_platform.h>
#include <memory>
@ -21,7 +21,7 @@
#include "absl/status/statusor.h"
namespace grpc_event_engine {
namespace posix_engine {
namespace iomgr_engine {
class WakeupFd;
@ -31,7 +31,7 @@ bool SupportsWakeupFd();
// Create and return an initialized WakeupFd instance if supported.
absl::StatusOr<std::unique_ptr<WakeupFd>> CreateWakeupFd();
} // namespace posix_engine
} // namespace iomgr_engine
} // namespace grpc_event_engine
#endif // GRPC_CORE_LIB_EVENT_ENGINE_POSIX_ENGINE_WAKEUP_FD_POSIX_DEFAULT_H
#endif // GRPC_CORE_LIB_EVENT_ENGINE_IOMGR_ENGINE_WAKEUP_FD_POSIX_DEFAULT_H

@ -1,125 +0,0 @@
/*
*
* Copyright 2015 gRPC authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
#include <grpc/support/port_platform.h>
#include "src/core/lib/event_engine/thread_pool.h"
#include <utility>
#include "src/core/lib/gprpp/thd.h"
namespace grpc_event_engine {
namespace posix_engine {
ThreadPool::Thread::Thread(ThreadPool* pool)
: pool_(pool),
thd_(
"posix_eventengine_pool",
[](void* th) { static_cast<ThreadPool::Thread*>(th)->ThreadFunc(); },
this) {
thd_.Start();
}
ThreadPool::Thread::~Thread() { thd_.Join(); }
void ThreadPool::Thread::ThreadFunc() {
pool_->ThreadFunc();
// Now that we have killed ourselves, we should reduce the thread count
grpc_core::MutexLock lock(&pool_->mu_);
pool_->nthreads_--;
// Move ourselves to dead list
pool_->dead_threads_.push_back(this);
if ((pool_->shutdown_) && (pool_->nthreads_ == 0)) {
pool_->shutdown_cv_.Signal();
}
}
void ThreadPool::ThreadFunc() {
for (;;) {
// Wait until work is available or we are shutting down.
grpc_core::ReleasableMutexLock lock(&mu_);
if (!shutdown_ && callbacks_.empty()) {
// If there are too many threads waiting, then quit this thread
if (threads_waiting_ >= reserve_threads_) {
break;
}
threads_waiting_++;
cv_.Wait(&mu_);
threads_waiting_--;
}
// Drain callbacks before considering shutdown to ensure all work
// gets completed.
if (!callbacks_.empty()) {
auto cb = std::move(callbacks_.front());
callbacks_.pop();
lock.Release();
cb();
} else if (shutdown_) {
break;
}
}
}
ThreadPool::ThreadPool(int reserve_threads)
: shutdown_(false),
reserve_threads_(reserve_threads),
nthreads_(0),
threads_waiting_(0) {
for (int i = 0; i < reserve_threads_; i++) {
grpc_core::MutexLock lock(&mu_);
nthreads_++;
new Thread(this);
}
}
void ThreadPool::ReapThreads(std::vector<Thread*>* tlist) {
for (auto* t : *tlist) delete t;
tlist->clear();
}
ThreadPool::~ThreadPool() {
grpc_core::MutexLock lock(&mu_);
shutdown_ = true;
cv_.SignalAll();
while (nthreads_ != 0) {
shutdown_cv_.Wait(&mu_);
}
ReapThreads(&dead_threads_);
}
void ThreadPool::Add(absl::AnyInvocable<void()> callback) {
grpc_core::MutexLock lock(&mu_);
// Add works to the callbacks list
callbacks_.push(std::move(callback));
// Increase pool size or notify as needed
if (threads_waiting_ == 0) {
// Kick off a new thread
nthreads_++;
new Thread(this);
} else {
cv_.Signal();
}
// Also use this chance to harvest dead threads
if (!dead_threads_.empty()) {
ReapThreads(&dead_threads_);
}
}
} // namespace posix_engine
} // namespace grpc_event_engine

@ -32,10 +32,6 @@ namespace experimental {
template <typename T>
class Promise {
public:
Promise() = default;
// Initialize a default value that will be returned if WaitWithTimeout times
// out
explicit Promise(T&& val) : val_(val) {}
// The getter will wait until the setter has been called, and will return the
// value passed during Set.
T& Get() { return WaitWithTimeout(absl::Hours(1)); }
@ -75,4 +71,4 @@ class Promise {
} // namespace experimental
} // namespace grpc_event_engine
#endif // GRPC_CORE_LIB_EVENT_ENGINE_PROMISE_H
#endif // GRPC_CORE_LIB_EVENT_ENGINE_PROMISE_H

@ -1,55 +0,0 @@
// Copyright 2022 gRPC authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_SOCKET_NOTIFIER_H
#define GRPC_CORE_LIB_EVENT_ENGINE_SOCKET_NOTIFIER_H
#include <grpc/support/port_platform.h>
#include "absl/status/status.h"
#include <grpc/event_engine/event_engine.h>
namespace grpc_event_engine {
namespace experimental {
// Generically wraps a socket/fd, and manages the registration of callbacks and
// triggering of notifications on it.
class SocketNotifier {
public:
virtual ~SocketNotifier() = default;
// Schedule on_read to be invoked when the underlying socket
// becomes readable.
// If the socket is already readable, the callback will be executed as soon as
// possible.
virtual void NotifyOnRead(EventEngine::Closure* on_read) = 0;
// Schedule on_write to be invoked when the underlying socket
// becomes writable.
// If the socket is already writable, the callback will be executed as soon as
// possible.
virtual void NotifyOnWrite(EventEngine::Closure* on_write) = 0;
// Set a readable event on the underlying socket.
virtual void SetReadable() = 0;
// Set a writable event on the underlying socket.
virtual void SetWritable() = 0;
// Shutdown a SocketNotifier. After this operation, NotifyXXX and SetXXX
// operations cannot be performed.
virtual void MaybeShutdown(absl::Status why) = 0;
// Returns true if the SocketNotifier has been shutdown.
virtual bool IsShutdown() = 0;
};
} // namespace experimental
} // namespace grpc_event_engine
#endif // GRPC_CORE_LIB_EVENT_ENGINE_SOCKET_NOTIFIER_H

@ -1,49 +0,0 @@
// Copyright 2022 gRPC authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include <grpc/support/port_platform.h>
#include "src/core/lib/event_engine/utils.h"
#include <stdint.h>
#include <algorithm>
#include <chrono>
#include "absl/strings/str_cat.h"
#include <grpc/event_engine/event_engine.h>
#include "src/core/lib/gprpp/time.h"
namespace grpc_event_engine {
namespace experimental {
std::string HandleToString(EventEngine::TaskHandle handle) {
return absl::StrCat("{", handle.keys[0], ",", handle.keys[1], "}");
}
grpc_core::Timestamp ToTimestamp(grpc_core::Timestamp now,
EventEngine::Duration delta) {
return now +
std::max(grpc_core::Duration::Milliseconds(1),
grpc_core::Duration::NanosecondsRoundUp(delta.count())) +
grpc_core::Duration::Milliseconds(1);
}
size_t Milliseconds(EventEngine::Duration d) {
return std::chrono::duration_cast<std::chrono::milliseconds>(d).count();
}
} // namespace experimental
} // namespace grpc_event_engine

@ -1,40 +0,0 @@
// Copyright 2022 gRPC authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_UTILS_H
#define GRPC_CORE_LIB_EVENT_ENGINE_UTILS_H
#include <grpc/support/port_platform.h>
#include <stddef.h>
#include <string>
#include <grpc/event_engine/event_engine.h>
#include "src/core/lib/gprpp/time.h"
namespace grpc_event_engine {
namespace experimental {
std::string HandleToString(EventEngine::TaskHandle handle);
grpc_core::Timestamp ToTimestamp(grpc_core::Timestamp now,
EventEngine::Duration delta);
size_t Milliseconds(EventEngine::Duration d);
} // namespace experimental
} // namespace grpc_event_engine
#endif // GRPC_CORE_LIB_EVENT_ENGINE_UTILS_H

@ -1,148 +0,0 @@
// Copyright 2022 gRPC authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include <grpc/support/port_platform.h>
#ifdef GPR_WINDOWS
#include <chrono>
#include "absl/strings/str_format.h"
#include <grpc/support/alloc.h>
#include <grpc/support/log_windows.h>
#include "src/core/lib/event_engine/trace.h"
#include "src/core/lib/event_engine/utils.h"
#include "src/core/lib/event_engine/windows/iocp.h"
#include "src/core/lib/event_engine/windows/win_socket.h"
namespace grpc_event_engine {
namespace experimental {
IOCP::IOCP(Executor* executor) noexcept
: executor_(executor),
iocp_handle_(CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL,
(ULONG_PTR)NULL, 0)) {
GPR_ASSERT(iocp_handle_);
WSASocketFlagsInit();
}
// Shutdown must be called prior to deletion
IOCP::~IOCP() {}
WinSocket* IOCP::Watch(SOCKET socket) {
WinSocket* wrapped_socket = new WinSocket(socket, executor_);
HANDLE ret =
CreateIoCompletionPort(reinterpret_cast<HANDLE>(socket), iocp_handle_,
reinterpret_cast<uintptr_t>(wrapped_socket), 0);
if (!ret) {
char* utf8_message = gpr_format_message(WSAGetLastError());
gpr_log(GPR_ERROR, "Unable to add socket to iocp: %s", utf8_message);
gpr_free(utf8_message);
__debugbreak();
abort();
}
GPR_ASSERT(ret == iocp_handle_);
return wrapped_socket;
}
void IOCP::Shutdown() {
while (outstanding_kicks_.load() > 0) {
Work(std::chrono::hours(42));
}
GPR_ASSERT(CloseHandle(iocp_handle_));
}
Poller::WorkResult IOCP::Work(EventEngine::Duration timeout) {
static const absl::Status kDeadlineExceeded = absl::DeadlineExceededError(
absl::StrFormat("IOCP::%p: Received no completions", this));
static const absl::Status kKicked =
absl::AbortedError(absl::StrFormat("IOCP::%p: Awoken from a kick", this));
DWORD bytes = 0;
ULONG_PTR completion_key;
LPOVERLAPPED overlapped;
if (GRPC_TRACE_FLAG_ENABLED(grpc_event_engine_trace)) {
gpr_log(GPR_DEBUG, "IOCP::%p doing work", this);
}
BOOL success = GetQueuedCompletionStatus(
iocp_handle_, &bytes, &completion_key, &overlapped,
static_cast<DWORD>(Milliseconds(timeout)));
if (success == 0 && overlapped == NULL) {
if (GRPC_TRACE_FLAG_ENABLED(grpc_event_engine_trace)) {
gpr_log(GPR_DEBUG, "IOCP::%p deadline exceeded", this);
}
return Poller::DeadlineExceeded{};
}
GPR_ASSERT(completion_key && overlapped);
if (overlapped == &kick_overlap_) {
if (GRPC_TRACE_FLAG_ENABLED(grpc_event_engine_trace)) {
gpr_log(GPR_DEBUG, "IOCP::%p kicked", this);
}
outstanding_kicks_.fetch_sub(1);
if (completion_key == (ULONG_PTR)&kick_token_) {
return Poller::Kicked{};
}
gpr_log(GPR_ERROR, "Unknown custom completion key: %p", completion_key);
abort();
}
if (GRPC_TRACE_FLAG_ENABLED(grpc_event_engine_trace)) {
gpr_log(GPR_DEBUG, "IOCP::%p got event on OVERLAPPED::%p", this,
overlapped);
}
WinSocket* socket = reinterpret_cast<WinSocket*>(completion_key);
WinSocket::OpState* info = socket->GetOpInfoForOverlapped(overlapped);
GPR_ASSERT(info != nullptr);
if (socket->IsShutdown()) {
info->SetError(WSAESHUTDOWN);
} else {
info->GetOverlappedResult();
}
if (info->closure() != nullptr) return Events{info->closure()};
// No callback registered. Set ready and return an empty set
info->SetReady();
return Events{};
}
void IOCP::Kick() {
outstanding_kicks_.fetch_add(1);
GPR_ASSERT(PostQueuedCompletionStatus(
iocp_handle_, 0, reinterpret_cast<ULONG_PTR>(&kick_token_),
&kick_overlap_));
}
DWORD IOCP::GetDefaultSocketFlags() {
static DWORD wsa_socket_flags = WSASocketFlagsInit();
return wsa_socket_flags;
}
DWORD IOCP::WSASocketFlagsInit() {
DWORD wsa_socket_flags = WSA_FLAG_OVERLAPPED;
/* WSA_FLAG_NO_HANDLE_INHERIT may be not supported on the older Windows
versions, see
https://msdn.microsoft.com/en-us/library/windows/desktop/ms742212(v=vs.85).aspx
for details. */
SOCKET sock = WSASocket(AF_INET6, SOCK_STREAM, IPPROTO_TCP, NULL, 0,
wsa_socket_flags | WSA_FLAG_NO_HANDLE_INHERIT);
if (sock != INVALID_SOCKET) {
/* Windows 7, Windows 2008 R2 with SP1 or later */
wsa_socket_flags |= WSA_FLAG_NO_HANDLE_INHERIT;
closesocket(sock);
}
return wsa_socket_flags;
}
} // namespace experimental
} // namespace grpc_event_engine
#endif // GPR_WINDOWS

@ -1,68 +0,0 @@
// Copyright 2022 The gRPC Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_WINDOWS_IOCP_H
#define GRPC_CORE_LIB_EVENT_ENGINE_WINDOWS_IOCP_H
#include <grpc/support/port_platform.h>
#ifdef GPR_WINDOWS
#include "absl/status/status.h"
#include <grpc/event_engine/event_engine.h>
#include "src/core/lib/event_engine/executor/executor.h"
#include "src/core/lib/event_engine/poller.h"
#include "src/core/lib/event_engine/windows/win_socket.h"
namespace grpc_event_engine {
namespace experimental {
class IOCP final : public Poller {
public:
explicit IOCP(Executor* executor) noexcept;
~IOCP();
// Not copyable
IOCP(const IOCP&) = delete;
IOCP& operator=(const IOCP&) = delete;
// Not moveable
IOCP(IOCP&& other) = delete;
IOCP& operator=(IOCP&& other) = delete;
// interface methods
void Shutdown();
WorkResult Work(EventEngine::Duration timeout) override;
void Kick() override;
WinSocket* Watch(SOCKET socket);
// Return the set of default flags
static DWORD GetDefaultSocketFlags();
private:
// Initialize default flags via checking platform support
static DWORD WSASocketFlagsInit();
Executor* executor_;
HANDLE iocp_handle_;
OVERLAPPED kick_overlap_;
ULONG kick_token_;
std::atomic<int> outstanding_kicks_{0};
};
} // namespace experimental
} // namespace grpc_event_engine
#endif
#endif // GRPC_CORE_LIB_EVENT_ENGINE_WINDOWS_IOCP_H

@ -1,200 +0,0 @@
// Copyright 2022 gRPC authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include <grpc/support/port_platform.h>
#ifdef GPR_WINDOWS
#include <grpc/support/alloc.h>
#include <grpc/support/log_windows.h>
#include "src/core/lib/event_engine/executor/executor.h"
#include "src/core/lib/event_engine/trace.h"
#include "src/core/lib/event_engine/windows/win_socket.h"
#include "src/core/lib/gprpp/sync.h"
#include "src/core/lib/iomgr/error.h"
#if defined(__MSYS__) && defined(GPR_ARCH_64)
/* Nasty workaround for nasty bug when using the 64 bits msys compiler
in conjunction with Microsoft Windows headers. */
#define GRPC_FIONBIO _IOW('f', 126, uint32_t)
#else
#define GRPC_FIONBIO FIONBIO
#endif
namespace grpc_event_engine {
namespace experimental {
WinSocket::WinSocket(SOCKET socket, Executor* executor) noexcept
: socket_(socket),
executor_(executor),
read_info_(OpState(this)),
write_info_(OpState(this)) {}
WinSocket::~WinSocket() { GPR_ASSERT(is_shutdown_); }
SOCKET WinSocket::socket() { return socket_; }
void WinSocket::MaybeShutdown(absl::Status why) {
grpc_core::MutexLock lock(&mu_);
// if already shutdown, return early. Otherwise, set the shutdown flag.
if (is_shutdown_) {
if (GRPC_TRACE_FLAG_ENABLED(grpc_event_engine_trace)) {
gpr_log(GPR_DEBUG, "WinSocket::%p already shutting down", this);
}
return;
}
is_shutdown_ = true;
if (GRPC_TRACE_FLAG_ENABLED(grpc_event_engine_trace)) {
gpr_log(GPR_DEBUG, "WinSocket::%p shutting down now. Reason: %s", this,
why.ToString().c_str());
}
// Grab the function pointer for DisconnectEx for that specific socket.
// It may change depending on the interface.
GUID guid = WSAID_DISCONNECTEX;
LPFN_DISCONNECTEX DisconnectEx;
DWORD ioctl_num_bytes;
int status = WSAIoctl(socket_, SIO_GET_EXTENSION_FUNCTION_POINTER, &guid,
sizeof(guid), &DisconnectEx, sizeof(DisconnectEx),
&ioctl_num_bytes, NULL, NULL);
if (status == 0) {
DisconnectEx(socket_, NULL, 0, 0);
} else {
char* utf8_message = gpr_format_message(WSAGetLastError());
gpr_log(GPR_INFO, "Unable to retrieve DisconnectEx pointer : %s",
utf8_message);
gpr_free(utf8_message);
}
closesocket(socket_);
}
void WinSocket::NotifyOnReady(OpState& info, EventEngine::Closure* closure) {
grpc_core::MutexLock lock(&mu_);
if (IsShutdown()) {
info.SetError(WSAESHUTDOWN);
executor_->Run(closure);
return;
};
if (absl::exchange(info.has_pending_iocp_, false)) {
executor_->Run(closure);
} else {
info.closure_ = closure;
}
}
void WinSocket::NotifyOnRead(EventEngine::Closure* on_read) {
NotifyOnReady(read_info_, on_read);
}
void WinSocket::NotifyOnWrite(EventEngine::Closure* on_write) {
NotifyOnReady(write_info_, on_write);
}
WinSocket::OpState::OpState(WinSocket* win_socket) noexcept
: win_socket_(win_socket), closure_(nullptr) {}
void WinSocket::OpState::SetReady() {
grpc_core::MutexLock lock(&win_socket_->mu_);
GPR_ASSERT(!has_pending_iocp_);
if (closure_) {
win_socket_->executor_->Run(closure_);
} else {
has_pending_iocp_ = true;
}
}
void WinSocket::OpState::SetError(int wsa_error) {
bytes_transferred_ = 0;
wsa_error_ = wsa_error;
}
void WinSocket::OpState::GetOverlappedResult() {
DWORD flags = 0;
DWORD bytes;
BOOL success = WSAGetOverlappedResult(win_socket_->socket(), &overlapped_,
&bytes, FALSE, &flags);
bytes_transferred_ = bytes;
wsa_error_ = success ? 0 : WSAGetLastError();
}
void WinSocket::SetReadable() { read_info_.SetReady(); }
void WinSocket::SetWritable() { write_info_.SetReady(); }
bool WinSocket::IsShutdown() { return is_shutdown_; }
WinSocket::OpState* WinSocket::GetOpInfoForOverlapped(OVERLAPPED* overlapped) {
if (GRPC_TRACE_FLAG_ENABLED(grpc_event_engine_trace)) {
gpr_log(GPR_DEBUG,
"WinSocket::%p looking for matching OVERLAPPED::%p. "
"read(%p) write(%p)",
this, overlapped, &read_info_.overlapped_,
&write_info_.overlapped_);
}
if (overlapped == &read_info_.overlapped_) return &read_info_;
if (overlapped == &write_info_.overlapped_) return &write_info_;
return nullptr;
}
namespace {
grpc_error_handle grpc_tcp_set_non_block(SOCKET sock) {
int status;
uint32_t param = 1;
DWORD ret;
status = WSAIoctl(sock, GRPC_FIONBIO, &param, sizeof(param), NULL, 0, &ret,
NULL, NULL);
return status == 0
? GRPC_ERROR_NONE
: GRPC_WSA_ERROR(WSAGetLastError(), "WSAIoctl(GRPC_FIONBIO)");
}
static grpc_error_handle set_dualstack(SOCKET sock) {
int status;
DWORD param = 0;
status = setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, (const char*)&param,
sizeof(param));
return status == 0
? GRPC_ERROR_NONE
: GRPC_WSA_ERROR(WSAGetLastError(), "setsockopt(IPV6_V6ONLY)");
}
static grpc_error_handle enable_socket_low_latency(SOCKET sock) {
int status;
BOOL param = TRUE;
status = ::setsockopt(sock, IPPROTO_TCP, TCP_NODELAY,
reinterpret_cast<char*>(&param), sizeof(param));
if (status == SOCKET_ERROR) {
status = WSAGetLastError();
}
return status == 0 ? GRPC_ERROR_NONE
: GRPC_WSA_ERROR(status, "setsockopt(TCP_NODELAY)");
}
} // namespace
absl::Status PrepareSocket(SOCKET sock) {
absl::Status err;
err = grpc_tcp_set_non_block(sock);
if (!GRPC_ERROR_IS_NONE(err)) return err;
err = enable_socket_low_latency(sock);
if (!GRPC_ERROR_IS_NONE(err)) return err;
err = set_dualstack(sock);
if (!GRPC_ERROR_IS_NONE(err)) return err;
return GRPC_ERROR_NONE;
}
} // namespace experimental
} // namespace grpc_event_engine
#endif // GPR_WINDOWS

@ -1,112 +0,0 @@
// Copyright 2022 gRPC authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_WINDOWS_WIN_SOCKET_H
#define GRPC_CORE_LIB_EVENT_ENGINE_WINDOWS_WIN_SOCKET_H
#include <grpc/support/port_platform.h>
#ifdef GPR_WINDOWS
#include "absl/base/thread_annotations.h"
#include "absl/functional/any_invocable.h"
#include <grpc/event_engine/event_engine.h>
#include "src/core/lib/event_engine/executor/executor.h"
#include "src/core/lib/event_engine/socket_notifier.h"
#include "src/core/lib/gprpp/sync.h"
namespace grpc_event_engine {
namespace experimental {
class WinSocket final : public SocketNotifier {
public:
// State related to a Read or Write socket operation
class OpState {
public:
explicit OpState(WinSocket* win_socket) noexcept;
// Signal a result has returned
// If a callback is already primed for notification, it will be executed via
// the WinSocket's Executor. Otherwise, a "pending iocp" flag will
// be set.
void SetReady();
// Set error results for a completed op
void SetError(int wsa_error);
// Retrieve results of overlapped operation (via Winsock API)
void GetOverlappedResult();
// OVERLAPPED, needed for Winsock API calls
OVERLAPPED* overlapped() { return &overlapped_; }
// Data from the previous operation, set via GetOverlappedResult
DWORD bytes_transferred() const { return bytes_transferred_; }
// Previous error if set.
int wsa_error() const { return wsa_error_; }
EventEngine::Closure* closure() { return closure_; }
private:
friend class WinSocket;
OVERLAPPED overlapped_;
WinSocket* win_socket_ = nullptr;
EventEngine::Closure* closure_ = nullptr;
bool has_pending_iocp_ = false;
DWORD bytes_transferred_;
int wsa_error_;
};
WinSocket(SOCKET socket, Executor* executor) noexcept;
~WinSocket();
// Calling NotifyOnRead means either of two things:
// - The IOCP already completed in the background, and we need to call
// the callback now.
// - The IOCP hasn't completed yet, and we're queuing it for later.
void NotifyOnRead(EventEngine::Closure* on_read) override;
void NotifyOnWrite(EventEngine::Closure* on_write) override;
void SetReadable() override;
void SetWritable() override;
// Schedule a shutdown of the socket operations. Will call the pending
// operations to abort them. We need to do that this way because of the
// various callsites of that function, which happens to be in various
// mutex hold states, and that'd be unsafe to call them directly.
void MaybeShutdown(absl::Status why) override;
bool IsShutdown() override;
// Return the appropriate OpState for a given OVERLAPPED
// Returns nullptr if the overlapped does not match either read or write ops.
OpState* GetOpInfoForOverlapped(OVERLAPPED* overlapped);
// Getters for the operation state data.
OpState* read_info() { return &read_info_; }
OpState* write_info() { return &write_info_; }
// Accessor method for underlying socket
SOCKET socket();
private:
void NotifyOnReady(OpState& info, EventEngine::Closure* callback);
SOCKET socket_;
grpc_core::Mutex mu_;
bool is_shutdown_ ABSL_GUARDED_BY(mu_) = false;
Executor* executor_;
OpState read_info_ ABSL_GUARDED_BY(mu_);
OpState write_info_ ABSL_GUARDED_BY(mu_);
};
// Attempt to configure default socket settings
absl::Status PrepareSocket(SOCKET sock);
} // namespace experimental
} // namespace grpc_event_engine
#endif
#endif // GRPC_CORE_LIB_EVENT_ENGINE_WINDOWS_WIN_SOCKET_H

@ -1,159 +0,0 @@
// Copyright 2022 The gRPC Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include <grpc/support/port_platform.h>
#ifdef GPR_WINDOWS
#include <memory>
#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "absl/strings/string_view.h"
#include <grpc/event_engine/endpoint_config.h>
#include <grpc/event_engine/event_engine.h>
#include <grpc/event_engine/memory_allocator.h>
#include <grpc/event_engine/slice_buffer.h>
#include "src/core/lib/event_engine/executor/threaded_executor.h"
#include "src/core/lib/event_engine/handle_containers.h"
#include "src/core/lib/event_engine/posix_engine/timer_manager.h"
#include "src/core/lib/event_engine/trace.h"
#include "src/core/lib/event_engine/utils.h"
#include "src/core/lib/event_engine/windows/iocp.h"
#include "src/core/lib/event_engine/windows/windows_engine.h"
#include "src/core/lib/gprpp/sync.h"
#include "src/core/lib/gprpp/time.h"
namespace grpc_event_engine {
namespace experimental {
// TODO(hork): The iomgr timer and execution engine can be reused. It should
// be separated out from the posix_engine and instantiated as components. It is
// effectively copied below.
struct WindowsEventEngine::Closure final : public EventEngine::Closure {
absl::AnyInvocable<void()> cb;
posix_engine::Timer timer;
WindowsEventEngine* engine;
EventEngine::TaskHandle handle;
void Run() override {
GRPC_EVENT_ENGINE_TRACE("WindowsEventEngine:%p executing callback:%s",
engine, HandleToString(handle).c_str());
{
grpc_core::MutexLock lock(&engine->mu_);
engine->known_handles_.erase(handle);
}
cb();
delete this;
}
};
WindowsEventEngine::WindowsEventEngine() : iocp_(&executor_) {
WSADATA wsaData;
int status = WSAStartup(MAKEWORD(2, 0), &wsaData);
GPR_ASSERT(status == 0);
}
WindowsEventEngine::~WindowsEventEngine() {
grpc_core::MutexLock lock(&mu_);
if (GRPC_TRACE_FLAG_ENABLED(grpc_event_engine_trace)) {
for (auto handle : known_handles_) {
gpr_log(GPR_ERROR,
"WindowsEventEngine:%p uncleared TaskHandle at shutdown:%s", this,
HandleToString(handle).c_str());
}
}
GPR_ASSERT(GPR_LIKELY(known_handles_.empty()));
GPR_ASSERT(WSACleanup() == 0);
}
bool WindowsEventEngine::Cancel(EventEngine::TaskHandle handle) {
grpc_core::MutexLock lock(&mu_);
if (!known_handles_.contains(handle)) return false;
auto* cd = reinterpret_cast<Closure*>(handle.keys[0]);
bool r = timer_manager_.TimerCancel(&cd->timer);
known_handles_.erase(handle);
if (r) delete cd;
return r;
}
EventEngine::TaskHandle WindowsEventEngine::RunAfter(
Duration when, absl::AnyInvocable<void()> closure) {
return RunAfterInternal(when, std::move(closure));
}
EventEngine::TaskHandle WindowsEventEngine::RunAfter(
Duration when, EventEngine::Closure* closure) {
return RunAfterInternal(when, [closure]() { closure->Run(); });
}
void WindowsEventEngine::Run(absl::AnyInvocable<void()> closure) {
executor_.Run(std::move(closure));
}
void WindowsEventEngine::Run(EventEngine::Closure* closure) {
executor_.Run(closure);
}
EventEngine::TaskHandle WindowsEventEngine::RunAfterInternal(
Duration when, absl::AnyInvocable<void()> cb) {
auto when_ts = ToTimestamp(timer_manager_.Now(), when);
auto* cd = new Closure;
cd->cb = std::move(cb);
cd->engine = this;
EventEngine::TaskHandle handle{reinterpret_cast<intptr_t>(cd),
aba_token_.fetch_add(1)};
grpc_core::MutexLock lock(&mu_);
known_handles_.insert(handle);
cd->handle = handle;
GRPC_EVENT_ENGINE_TRACE("WindowsEventEngine:%p scheduling callback:%s", this,
HandleToString(handle).c_str());
timer_manager_.TimerInit(&cd->timer, when_ts, cd);
return handle;
}
std::unique_ptr<EventEngine::DNSResolver> WindowsEventEngine::GetDNSResolver(
EventEngine::DNSResolver::ResolverOptions const& /*options*/) {
GPR_ASSERT(false && "unimplemented");
}
bool WindowsEventEngine::IsWorkerThread() {
GPR_ASSERT(false && "unimplemented");
}
bool WindowsEventEngine::CancelConnect(EventEngine::ConnectionHandle handle) {
GPR_ASSERT(false && "unimplemented");
}
EventEngine::ConnectionHandle WindowsEventEngine::Connect(
OnConnectCallback on_connect, const ResolvedAddress& addr,
const EndpointConfig& args, MemoryAllocator memory_allocator,
Duration deadline) {
GPR_ASSERT(false && "unimplemented");
}
absl::StatusOr<std::unique_ptr<EventEngine::Listener>>
WindowsEventEngine::CreateListener(
Listener::AcceptCallback on_accept,
absl::AnyInvocable<void(absl::Status)> on_shutdown,
const EndpointConfig& config,
std::unique_ptr<MemoryAllocatorFactory> memory_allocator_factory) {
GPR_ASSERT(false && "unimplemented");
}
} // namespace experimental
} // namespace grpc_event_engine
#endif // GPR_WINDOWS

@ -1,120 +0,0 @@
// Copyright 2022 The gRPC Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_WINDOWS_WINDOWS_ENGINE_H
#define GRPC_CORE_LIB_EVENT_ENGINE_WINDOWS_WINDOWS_ENGINE_H
#include <grpc/support/port_platform.h>
#ifdef GPR_WINDOWS
#include <memory>
#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "absl/strings/string_view.h"
#include <grpc/event_engine/endpoint_config.h>
#include <grpc/event_engine/event_engine.h>
#include <grpc/event_engine/memory_allocator.h>
#include <grpc/event_engine/slice_buffer.h>
#include "src/core/lib/event_engine/executor/threaded_executor.h"
#include "src/core/lib/event_engine/handle_containers.h"
#include "src/core/lib/event_engine/posix_engine/timer_manager.h"
#include "src/core/lib/event_engine/windows/iocp.h"
#include "src/core/lib/gprpp/sync.h"
#include "src/core/lib/gprpp/time.h"
namespace grpc_event_engine {
namespace experimental {
class WindowsEventEngine : public EventEngine {
public:
class WindowsEndpoint : public EventEngine::Endpoint {
public:
~WindowsEndpoint() override;
void Read(absl::AnyInvocable<void(absl::Status)> on_read,
SliceBuffer* buffer, const ReadArgs* args) override;
void Write(absl::AnyInvocable<void(absl::Status)> on_writable,
SliceBuffer* data, const WriteArgs* args) override;
const ResolvedAddress& GetPeerAddress() const override;
const ResolvedAddress& GetLocalAddress() const override;
};
class WindowsListener : public EventEngine::Listener {
public:
~WindowsListener() override;
absl::StatusOr<int> Bind(const ResolvedAddress& addr) override;
absl::Status Start() override;
};
class WindowsDNSResolver : public EventEngine::DNSResolver {
public:
~WindowsDNSResolver() override;
LookupTaskHandle LookupHostname(LookupHostnameCallback on_resolve,
absl::string_view name,
absl::string_view default_port,
Duration timeout) override;
LookupTaskHandle LookupSRV(LookupSRVCallback on_resolve,
absl::string_view name,
Duration timeout) override;
LookupTaskHandle LookupTXT(LookupTXTCallback on_resolve,
absl::string_view name,
Duration timeout) override;
bool CancelLookup(LookupTaskHandle handle) override;
};
WindowsEventEngine();
~WindowsEventEngine() override;
absl::StatusOr<std::unique_ptr<Listener>> CreateListener(
Listener::AcceptCallback on_accept,
absl::AnyInvocable<void(absl::Status)> on_shutdown,
const EndpointConfig& config,
std::unique_ptr<MemoryAllocatorFactory> memory_allocator_factory)
override;
ConnectionHandle Connect(OnConnectCallback on_connect,
const ResolvedAddress& addr,
const EndpointConfig& args,
MemoryAllocator memory_allocator,
Duration timeout) override;
bool CancelConnect(ConnectionHandle handle) override;
bool IsWorkerThread() override;
std::unique_ptr<DNSResolver> GetDNSResolver(
const DNSResolver::ResolverOptions& options) override;
void Run(Closure* closure) override;
void Run(absl::AnyInvocable<void()> closure) override;
TaskHandle RunAfter(Duration when, Closure* closure) override;
TaskHandle RunAfter(Duration when,
absl::AnyInvocable<void()> closure) override;
bool Cancel(TaskHandle handle) override;
private:
struct Closure;
EventEngine::TaskHandle RunAfterInternal(Duration when,
absl::AnyInvocable<void()> cb);
grpc_core::Mutex mu_;
TaskHandleSet known_handles_ ABSL_GUARDED_BY(mu_);
std::atomic<intptr_t> aba_token_{0};
posix_engine::TimerManager timer_manager_;
ThreadedExecutor executor_{2};
IOCP iocp_;
};
} // namespace experimental
} // namespace grpc_event_engine
#endif
#endif // GRPC_CORE_LIB_EVENT_ENGINE_WINDOWS_WINDOWS_ENGINE_H

@ -448,21 +448,16 @@ CORE_SOURCE_FILES = [
'src/core/lib/event_engine/channel_args_endpoint_config.cc',
'src/core/lib/event_engine/default_event_engine_factory.cc',
'src/core/lib/event_engine/event_engine.cc',
'src/core/lib/event_engine/executor/threaded_executor.cc',
'src/core/lib/event_engine/iomgr_engine/iomgr_engine.cc',
'src/core/lib/event_engine/iomgr_engine/thread_pool.cc',
'src/core/lib/event_engine/iomgr_engine/timer.cc',
'src/core/lib/event_engine/iomgr_engine/timer_heap.cc',
'src/core/lib/event_engine/iomgr_engine/timer_manager.cc',
'src/core/lib/event_engine/memory_allocator.cc',
'src/core/lib/event_engine/posix_engine/posix_engine.cc',
'src/core/lib/event_engine/posix_engine/timer.cc',
'src/core/lib/event_engine/posix_engine/timer_heap.cc',
'src/core/lib/event_engine/posix_engine/timer_manager.cc',
'src/core/lib/event_engine/resolved_address.cc',
'src/core/lib/event_engine/slice.cc',
'src/core/lib/event_engine/slice_buffer.cc',
'src/core/lib/event_engine/thread_pool.cc',
'src/core/lib/event_engine/trace.cc',
'src/core/lib/event_engine/utils.cc',
'src/core/lib/event_engine/windows/iocp.cc',
'src/core/lib/event_engine/windows/win_socket.cc',
'src/core/lib/event_engine/windows/windows_engine.cc',
'src/core/lib/gpr/alloc.cc',
'src/core/lib/gpr/atm.cc',
'src/core/lib/gpr/cpu_iphone.cc',

@ -17,7 +17,7 @@ load("//bazel:grpc_build_system.bzl", "grpc_cc_test", "grpc_package")
licenses(["notice"])
grpc_package(
name = "test/core/event_engine/posix",
name = "test/core/event_engine/iomgr_event_engine",
visibility = "public",
) # Useful for third party devs to test their io manager implementation.
@ -30,7 +30,7 @@ grpc_cc_test(
uses_polling = False,
deps = [
"//:bitset",
"//:posix_event_engine_timer",
"//:iomgr_ee_timer",
],
)
@ -42,7 +42,7 @@ grpc_cc_test(
uses_event_engine = False,
uses_polling = False,
deps = [
"//:posix_event_engine_timer",
"//:iomgr_ee_timer",
],
)
@ -57,10 +57,10 @@ grpc_cc_test(
uses_event_engine = True,
uses_polling = True,
deps = [
"//:posix_event_engine",
"//:posix_event_engine_closure",
"//:posix_event_engine_event_poller",
"//:posix_event_engine_poller_posix_default",
"//:iomgr_ee_closure",
"//:iomgr_ee_event_poller",
"//:iomgr_ee_poller_posix_default",
"//:iomgr_event_engine",
"//test/core/util:grpc_test_util",
],
)
@ -73,10 +73,10 @@ grpc_cc_test(
uses_event_engine = True,
uses_polling = False,
deps = [
"//:posix_event_engine",
"//:posix_event_engine_closure",
"//:posix_event_engine_event_poller",
"//:posix_event_engine_lockfree_event",
"//:iomgr_ee_closure",
"//:iomgr_ee_event_poller",
"//:iomgr_ee_lockfree_event",
"//:iomgr_event_engine",
"//test/core/util:grpc_test_util",
],
)
@ -92,8 +92,8 @@ grpc_cc_test(
uses_event_engine = False,
uses_polling = True,
deps = [
"//:posix_event_engine_wakeup_fd_posix_eventfd",
"//:posix_event_engine_wakeup_fd_posix_pipe",
"//:iomgr_ee_wakeup_fd_posix_eventfd",
"//:iomgr_ee_wakeup_fd_posix_pipe",
"//test/core/util:grpc_test_util",
],
)

@ -42,16 +42,16 @@
#include <grpc/support/sync.h>
#include <grpc/support/time.h>
#include "src/core/lib/event_engine/posix_engine/event_poller.h"
#include "src/core/lib/event_engine/posix_engine/event_poller_posix_default.h"
#include "src/core/lib/event_engine/posix_engine/posix_engine.h"
#include "src/core/lib/event_engine/posix_engine/posix_engine_closure.h"
#include "src/core/lib/event_engine/iomgr_engine/event_poller.h"
#include "src/core/lib/event_engine/iomgr_engine/event_poller_posix_default.h"
#include "src/core/lib/event_engine/iomgr_engine/iomgr_engine.h"
#include "src/core/lib/event_engine/iomgr_engine/iomgr_engine_closure.h"
#include "src/core/lib/gprpp/global_config.h"
#include "test/core/util/port.h"
GPR_GLOBAL_CONFIG_DECLARE_STRING(grpc_poll_strategy);
using ::grpc_event_engine::posix_engine::EventPoller;
using ::grpc_event_engine::iomgr_engine::EventPoller;
static gpr_mu g_mu;
static EventPoller* g_event_poller = nullptr;
@ -67,7 +67,7 @@ static EventPoller* g_event_poller = nullptr;
#define CLIENT_TOTAL_WRITE_CNT 3
namespace grpc_event_engine {
namespace posix_engine {
namespace iomgr_engine {
namespace {
@ -374,10 +374,10 @@ std::string TestScenarioName(
class EventPollerTest : public ::testing::TestWithParam<std::string> {
void SetUp() override {
engine_ =
absl::make_unique<grpc_event_engine::experimental::PosixEventEngine>();
absl::make_unique<grpc_event_engine::experimental::IomgrEventEngine>();
EXPECT_NE(engine_, nullptr);
scheduler_ =
absl::make_unique<grpc_event_engine::posix_engine::TestScheduler>(
absl::make_unique<grpc_event_engine::iomgr_engine::TestScheduler>(
engine_.get());
EXPECT_NE(scheduler_, nullptr);
GPR_GLOBAL_CONFIG_SET(grpc_poll_strategy, GetParam().c_str());
@ -390,8 +390,8 @@ class EventPollerTest : public ::testing::TestWithParam<std::string> {
}
private:
std::unique_ptr<grpc_event_engine::experimental::PosixEventEngine> engine_;
std::unique_ptr<grpc_event_engine::posix_engine::TestScheduler> scheduler_;
std::unique_ptr<grpc_event_engine::experimental::IomgrEventEngine> engine_;
std::unique_ptr<grpc_event_engine::iomgr_engine::TestScheduler> scheduler_;
};
// Test grpc_fd. Start an upload server and client, upload a stream of bytes
@ -519,7 +519,7 @@ INSTANTIATE_TEST_SUITE_P(EventPoller, EventPollerTest,
&TestScenarioName);
} // namespace
} // namespace posix_engine
} // namespace iomgr_engine
} // namespace grpc_event_engine
int main(int argc, char** argv) {

@ -21,12 +21,12 @@
#include <gtest/gtest.h>
#include "src/core/lib/event_engine/event_engine_factory.h"
#include "src/core/lib/event_engine/posix_engine/event_poller.h"
#include "src/core/lib/event_engine/posix_engine/lockfree_event.h"
#include "src/core/lib/event_engine/posix_engine/posix_engine_closure.h"
#include "src/core/lib/event_engine/iomgr_engine/event_poller.h"
#include "src/core/lib/event_engine/iomgr_engine/iomgr_engine_closure.h"
#include "src/core/lib/event_engine/iomgr_engine/lockfree_event.h"
#include "src/core/lib/gprpp/sync.h"
using ::grpc_event_engine::posix_engine::Scheduler;
using ::grpc_event_engine::iomgr_engine::Scheduler;
namespace {
class TestScheduler : public Scheduler {
@ -47,7 +47,7 @@ TestScheduler* g_scheduler;
} // namespace
namespace grpc_event_engine {
namespace posix_engine {
namespace iomgr_engine {
TEST(LockFreeEventTest, BasicTest) {
LockfreeEvent event(g_scheduler);
@ -140,7 +140,7 @@ TEST(LockFreeEventTest, MultiThreadedTest) {
event.DestroyEvent();
}
} // namespace posix_engine
} // namespace iomgr_engine
} // namespace grpc_event_engine
int main(int argc, char** argv) {

@ -16,7 +16,7 @@
*
*/
#include "src/core/lib/event_engine/posix_engine/timer_heap.h"
#include "src/core/lib/event_engine/iomgr_engine/timer_heap.h"
#include <stdlib.h>
#include <string.h>
@ -24,7 +24,7 @@
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include "src/core/lib/event_engine/posix_engine/timer.h"
#include "src/core/lib/event_engine/iomgr_engine/timer.h"
#include "src/core/lib/gpr/useful.h"
#include "src/core/lib/gprpp/bitset.h"
@ -32,7 +32,7 @@ using testing::Contains;
using testing::Not;
namespace grpc_event_engine {
namespace posix_engine {
namespace iomgr_engine {
namespace {
int64_t RandomDeadline(void) { return rand(); }
@ -193,7 +193,7 @@ TEST(TimerHeapTest, RandomMutations) {
}
} // namespace
} // namespace posix_engine
} // namespace iomgr_engine
} // namespace grpc_event_engine
int main(int argc, char** argv) {

@ -26,7 +26,7 @@
#include <grpc/grpc.h>
#include "src/core/lib/event_engine/posix_engine/timer.h"
#include "src/core/lib/event_engine/iomgr_engine/timer.h"
#include "src/core/lib/gprpp/time.h"
using testing::Mock;
@ -34,7 +34,7 @@ using testing::Return;
using testing::StrictMock;
namespace grpc_event_engine {
namespace posix_engine {
namespace iomgr_engine {
namespace {
const int64_t kHoursIn25Days = 25 * 24;
@ -238,7 +238,7 @@ TEST(TimerListTest, LongRunningServiceCleanup) {
EXPECT_TRUE(timer_list.TimerCancel(&timers[3]));
}
} // namespace posix_engine
} // namespace iomgr_engine
} // namespace grpc_event_engine
int main(int argc, char** argv) {

@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
#include "src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h"
#include "src/core/lib/event_engine/iomgr_engine/wakeup_fd_posix.h"
#include <stdlib.h>
#include <string.h>
@ -22,11 +22,11 @@
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include "src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h"
#include "src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h"
#include "src/core/lib/event_engine/iomgr_engine/wakeup_fd_eventfd.h"
#include "src/core/lib/event_engine/iomgr_engine/wakeup_fd_pipe.h"
namespace grpc_event_engine {
namespace posix_engine {
namespace iomgr_engine {
TEST(WakeupFdPosixTest, PipeWakeupFdTest) {
if (!PipeWakeupFd::IsSupported()) {
@ -52,7 +52,7 @@ TEST(WakeupFdPosixTest, EventFdWakeupFdTest) {
EXPECT_TRUE((*eventfd_wakeup_fd)->ConsumeWakeup().ok());
}
} // namespace posix_engine
} // namespace iomgr_engine
} // namespace grpc_event_engine
int main(int argc, char** argv) {

@ -75,28 +75,10 @@ grpc_cc_library(
# -- EventEngine implementations --
grpc_cc_test(
name = "posix_event_engine_test",
srcs = ["posix_event_engine_test.cc"],
name = "iomgr_event_engine_test",
srcs = ["iomgr_event_engine_test.cc"],
uses_polling = False,
deps = [
"//:posix_event_engine",
"//test/core/event_engine/test_suite:timer",
],
)
grpc_cc_test(
name = "windows_event_engine_test",
srcs = ["windows_event_engine_test.cc"],
tags = [
"bazel_only",
"no_linux",
"no_mac",
],
uses_polling = False,
deps = [
"//:windows_event_engine",
"//test/core/event_engine/test_suite:timer",
],
deps = ["//test/core/event_engine/test_suite:timer"],
)
grpc_cc_test(

@ -13,7 +13,7 @@
// limitations under the License.
#include <grpc/grpc.h>
#include "src/core/lib/event_engine/posix_engine/posix_engine.h"
#include "src/core/lib/event_engine/iomgr_engine/iomgr_engine.h"
#include "test/core/event_engine/test_suite/event_engine_test.h"
#include "test/core/util/test_config.h"
@ -23,7 +23,7 @@ int main(int argc, char** argv) {
SetEventEngineFactories(
[]() {
return absl::make_unique<
grpc_event_engine::experimental::PosixEventEngine>();
grpc_event_engine::experimental::IomgrEventEngine>();
},
nullptr);
return RUN_ALL_TESTS();

@ -1,37 +0,0 @@
// Copyright 2022 The gRPC Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include <grpc/grpc.h>
#include "src/core/lib/event_engine/windows/windows_engine.h"
#include "test/core/event_engine/test_suite/event_engine_test.h"
#include "test/core/util/test_config.h"
#ifdef GPR_WINDOWS
int main(int argc, char** argv) {
testing::InitGoogleTest(&argc, argv);
grpc::testing::TestEnvironment env(&argc, argv);
auto factory = []() {
return absl::make_unique<
grpc_event_engine::experimental::WindowsEventEngine>();
};
SetEventEngineFactories(factory, factory);
return RUN_ALL_TESTS();
}
#else // not GPR_WINDOWS
int main(int /* argc */, char** /* argv */) { return 0; }
#endif // GPR_WINDOWS

@ -1,81 +0,0 @@
# Copyright 2022 gRPC authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
load("//bazel:grpc_build_system.bzl", "grpc_cc_library", "grpc_cc_test")
licenses(["notice"])
grpc_cc_test(
name = "iocp_test",
timeout = "short",
srcs = ["iocp_test.cc"],
external_deps = [
"gtest",
"absl/types:variant",
],
language = "C++",
tags = [
"no_linux",
"no_mac",
"no_test_ios",
],
uses_event_engine = False,
uses_polling = False,
deps = [
"create_sockpair",
"//:common_event_engine_closures",
"//:event_engine_utils",
"//:gpr_platform",
"//:windows_iocp",
"//test/core/util:grpc_test_util",
],
)
grpc_cc_test(
name = "win_socket_test",
timeout = "short",
srcs = ["win_socket_test.cc"],
external_deps = ["gtest"],
language = "C++",
tags = [
"no_linux",
"no_mac",
"no_test_ios",
],
uses_event_engine = False,
uses_polling = False,
deps = [
"create_sockpair",
"//:common_event_engine_closures",
"//:gpr_platform",
"//:windows_event_engine",
"//test/core/util:grpc_test_util",
],
)
grpc_cc_library(
name = "create_sockpair",
srcs = ["create_sockpair.cc"],
hdrs = ["create_sockpair.h"],
external_deps = ["absl/status"],
language = "C++",
tags = [
"no_linux",
"no_mac",
],
deps = [
"//:gpr_platform",
"//:grpc_base",
],
)

@ -1,80 +0,0 @@
// Copyright 2022 gRPC authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include <grpc/support/port_platform.h>
#ifdef GPR_WINDOWS
#include <winsock2.h>
#include <ws2tcpip.h>
#include "absl/status/status.h"
#include "src/core/lib/event_engine/windows/win_socket.h"
#include "src/core/lib/iomgr/error.h"
#include "test/core/event_engine/windows/create_sockpair.h"
namespace grpc_event_engine {
namespace experimental {
void CreateSockpair(SOCKET sockpair[2], DWORD flags) {
SOCKET svr_sock = INVALID_SOCKET;
SOCKET lst_sock = INVALID_SOCKET;
SOCKET cli_sock = INVALID_SOCKET;
SOCKADDR_IN addr;
int addr_len = sizeof(addr);
lst_sock = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, flags);
GPR_ASSERT(lst_sock != INVALID_SOCKET);
memset(&addr, 0, sizeof(addr));
addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
addr.sin_family = AF_INET;
GPR_ASSERT(bind(lst_sock, (sockaddr*)&addr, sizeof(addr)) != SOCKET_ERROR);
GPR_ASSERT(listen(lst_sock, SOMAXCONN) != SOCKET_ERROR);
GPR_ASSERT(getsockname(lst_sock, (sockaddr*)&addr, &addr_len) !=
SOCKET_ERROR);
cli_sock = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, flags);
GPR_ASSERT(cli_sock != INVALID_SOCKET);
GPR_ASSERT(WSAConnect(cli_sock, (sockaddr*)&addr, addr_len, NULL, NULL, NULL,
NULL) == 0);
svr_sock = accept(lst_sock, (sockaddr*)&addr, &addr_len);
GPR_ASSERT(svr_sock != INVALID_SOCKET);
closesocket(lst_sock);
// TODO(hork): see if we can migrate this to IPv6, or break up the socket prep
// stages.
// Historical note: This method creates an ipv4 sockpair, which cannot
// be made dual stack. This was silently preventing TCP_NODELAY from being
// enabled, but not causing an unrecoverable error. So this is left as a
// logged status. WSAEINVAL is expected.
auto status = PrepareSocket(cli_sock);
// if (!status.ok()) {
// gpr_log(GPR_DEBUG, "Error preparing client socket: %s",
// status.ToString().c_str());
// }
status = PrepareSocket(svr_sock);
// if (!status.ok()) {
// gpr_log(GPR_DEBUG, "Error preparing server socket: %s",
// status.ToString().c_str());
// }
sockpair[0] = svr_sock;
sockpair[1] = cli_sock;
}
} // namespace experimental
} // namespace grpc_event_engine
#endif // GPR_WINDOWS

@ -1,31 +0,0 @@
// Copyright 2022 gRPC authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef GRPC_TEST_CORE_EVENT_ENGINE_WINDOWS_CREATE_SOCKPAIR_H
#define GRPC_TEST_CORE_EVENT_ENGINE_WINDOWS_CREATE_SOCKPAIR_H
#include <grpc/support/port_platform.h>
#ifdef GPR_WINDOWS
#include <winsock2.h>
namespace grpc_event_engine {
namespace experimental {
void CreateSockpair(SOCKET sockpair[2], DWORD flags);
} // namespace experimental
} // namespace grpc_event_engine
#endif // GPR_WINDOWS
#endif // GRPC_TEST_CORE_EVENT_ENGINE_WINDOWS_CREATE_SOCKPAIR_H

@ -1,359 +0,0 @@
// Copyright 2022 gRPC authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include <grpc/support/port_platform.h>
#ifdef GPR_WINDOWS
#include <thread>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include "absl/status/status.h"
#include "absl/time/time.h"
#include "absl/types/variant.h"
#include <grpc/grpc.h>
#include <grpc/support/log_windows.h>
#include "src/core/lib/event_engine/common_closures.h"
#include "src/core/lib/event_engine/executor/threaded_executor.h"
#include "src/core/lib/event_engine/poller.h"
#include "src/core/lib/event_engine/promise.h"
#include "src/core/lib/event_engine/windows/iocp.h"
#include "src/core/lib/event_engine/windows/win_socket.h"
#include "src/core/lib/iomgr/error.h"
#include "test/core/event_engine/windows/create_sockpair.h"
namespace {
using ::grpc_event_engine::experimental::AnyInvocableClosure;
using ::grpc_event_engine::experimental::CreateSockpair;
using ::grpc_event_engine::experimental::EventEngine;
using ::grpc_event_engine::experimental::IOCP;
using ::grpc_event_engine::experimental::Poller;
using ::grpc_event_engine::experimental::Promise;
using ::grpc_event_engine::experimental::SelfDeletingClosure;
using ::grpc_event_engine::experimental::ThreadedExecutor;
using ::grpc_event_engine::experimental::WinSocket;
} // namespace
class IOCPTest : public testing::Test {};
TEST_F(IOCPTest, ClientReceivesNotificationOfServerSend) {
ThreadedExecutor executor{2};
IOCP iocp(&executor);
SOCKET sockpair[2];
CreateSockpair(sockpair, iocp.GetDefaultSocketFlags());
WinSocket* wrapped_client_socket =
static_cast<WinSocket*>(iocp.Watch(sockpair[0]));
WinSocket* wrapped_server_socket =
static_cast<WinSocket*>(iocp.Watch(sockpair[1]));
Promise<bool> read_called{false};
Promise<bool> write_called{false};
DWORD flags = 0;
AnyInvocableClosure* on_read;
AnyInvocableClosure* on_write;
{
// When the client gets some data, ensure it matches what we expect.
WSABUF read_wsabuf;
read_wsabuf.len = 2048;
char read_char_buffer[2048];
read_wsabuf.buf = read_char_buffer;
DWORD bytes_rcvd;
memset(wrapped_client_socket->read_info()->overlapped(), 0,
sizeof(OVERLAPPED));
int status =
WSARecv(wrapped_client_socket->socket(), &read_wsabuf, 1, &bytes_rcvd,
&flags, wrapped_client_socket->read_info()->overlapped(), NULL);
// Expecting error 997, WSA_IO_PENDING
EXPECT_EQ(status, -1);
int last_error = WSAGetLastError();
ASSERT_EQ(last_error, WSA_IO_PENDING);
on_read = new AnyInvocableClosure([wrapped_client_socket, &read_called,
&read_wsabuf, &bytes_rcvd]() {
gpr_log(GPR_DEBUG, "Notified on read");
EXPECT_GE(wrapped_client_socket->read_info()->bytes_transferred(), 10);
EXPECT_STREQ(read_wsabuf.buf, "hello!");
read_called.Set(true);
});
wrapped_client_socket->NotifyOnRead(on_read);
}
{
// Have the server send a message to the client
WSABUF write_wsabuf;
char write_char_buffer[2048] = "hello!";
write_wsabuf.len = 2048;
write_wsabuf.buf = write_char_buffer;
DWORD bytes_sent;
memset(wrapped_server_socket->write_info()->overlapped(), 0,
sizeof(OVERLAPPED));
int status =
WSASend(wrapped_server_socket->socket(), &write_wsabuf, 1, &bytes_sent,
0, wrapped_server_socket->write_info()->overlapped(), NULL);
EXPECT_EQ(status, 0);
if (status != 0) {
int error_num = WSAGetLastError();
char* utf8_message = gpr_format_message(error_num);
gpr_log(GPR_INFO, "Error sending data: (%d) %s", error_num, utf8_message);
gpr_free(utf8_message);
}
on_write = new AnyInvocableClosure([&write_called] {
gpr_log(GPR_DEBUG, "Notified on write");
write_called.Set(true);
});
wrapped_server_socket->NotifyOnWrite(on_write);
}
// Doing work for WSASend
auto work_result = iocp.Work(std::chrono::seconds(10));
ASSERT_TRUE(absl::holds_alternative<Poller::Events>(work_result));
Poller::Events closures = absl::get<Poller::Events>(work_result);
ASSERT_EQ(closures.size(), 1);
executor.Run(closures[0]);
// Doing work for WSARecv
work_result = iocp.Work(std::chrono::seconds(10));
ASSERT_TRUE(absl::holds_alternative<Poller::Events>(work_result));
closures = absl::get<Poller::Events>(work_result);
ASSERT_EQ(closures.size(), 1);
executor.Run(closures[0]);
// wait for the callbacks to run
ASSERT_TRUE(read_called.WaitWithTimeout(absl::Seconds(10)));
ASSERT_TRUE(write_called.WaitWithTimeout(absl::Seconds(10)));
delete on_read;
delete on_write;
wrapped_client_socket->MaybeShutdown(absl::OkStatus());
wrapped_server_socket->MaybeShutdown(absl::OkStatus());
delete wrapped_client_socket;
delete wrapped_server_socket;
}
TEST_F(IOCPTest, IocpWorkTimeoutDueToNoNotificationRegistered) {
ThreadedExecutor executor{2};
IOCP iocp(&executor);
SOCKET sockpair[2];
CreateSockpair(sockpair, iocp.GetDefaultSocketFlags());
WinSocket* wrapped_client_socket =
static_cast<WinSocket*>(iocp.Watch(sockpair[0]));
Promise<bool> read_called{false};
DWORD flags = 0;
AnyInvocableClosure* on_read;
{
// Set the client to receive asynchronously
// Prepare a notification callback, but don't register it yet.
WSABUF read_wsabuf;
read_wsabuf.len = 2048;
char read_char_buffer[2048];
read_wsabuf.buf = read_char_buffer;
DWORD bytes_rcvd;
memset(wrapped_client_socket->read_info()->overlapped(), 0,
sizeof(OVERLAPPED));
int status =
WSARecv(wrapped_client_socket->socket(), &read_wsabuf, 1, &bytes_rcvd,
&flags, wrapped_client_socket->read_info()->overlapped(), NULL);
// Expecting error 997, WSA_IO_PENDING
EXPECT_EQ(status, -1);
int last_error = WSAGetLastError();
ASSERT_EQ(last_error, WSA_IO_PENDING);
on_read = new AnyInvocableClosure([wrapped_client_socket, &read_called,
&read_wsabuf, &bytes_rcvd]() {
gpr_log(GPR_DEBUG, "Notified on read");
EXPECT_GE(wrapped_client_socket->read_info()->bytes_transferred(), 10);
EXPECT_STREQ(read_wsabuf.buf, "hello!");
read_called.Set(true);
});
}
{
// Have the server send a message to the client. No need to track via IOCP
WSABUF write_wsabuf;
char write_char_buffer[2048] = "hello!";
write_wsabuf.len = 2048;
write_wsabuf.buf = write_char_buffer;
DWORD bytes_sent;
OVERLAPPED write_overlapped;
memset(&write_overlapped, 0, sizeof(OVERLAPPED));
int status = WSASend(sockpair[1], &write_wsabuf, 1, &bytes_sent, 0,
&write_overlapped, NULL);
EXPECT_EQ(status, 0);
}
// IOCP::Work without any notification callbacks should return no Events.
auto work_result = iocp.Work(std::chrono::seconds(2));
ASSERT_TRUE(absl::holds_alternative<Poller::Events>(work_result));
Poller::Events closures = absl::get<Poller::Events>(work_result);
ASSERT_EQ(closures.size(), 0);
// register the closure, which should trigger it immediately.
wrapped_client_socket->NotifyOnRead(on_read);
// wait for the callbacks to run
ASSERT_TRUE(read_called.WaitWithTimeout(absl::Seconds(10)));
delete on_read;
wrapped_client_socket->MaybeShutdown(absl::OkStatus());
delete wrapped_client_socket;
}
TEST_F(IOCPTest, KickWorks) {
ThreadedExecutor executor{2};
IOCP iocp(&executor);
Promise<bool> kicked{false};
executor.Run([&iocp, &kicked] {
Poller::WorkResult result = iocp.Work(std::chrono::seconds(30));
ASSERT_TRUE(absl::holds_alternative<Poller::Kicked>(result));
kicked.Set(true);
});
executor.Run([&iocp] {
// give the worker thread a chance to start
absl::SleepFor(absl::Milliseconds(42));
iocp.Kick();
});
// wait for the callbacks to run
ASSERT_TRUE(kicked.WaitWithTimeout(absl::Seconds(10)));
}
TEST_F(IOCPTest, KickThenShutdownCasusesNextWorkerToBeKicked) {
// TODO(hork): evaluate if a kick count is going to be useful.
// This documents the existing poller's behavior of maintaining a kick count,
// but it's unclear if it's going to be needed.
ThreadedExecutor executor{2};
IOCP iocp(&executor);
// kick twice
iocp.Kick();
iocp.Kick();
// Assert the next two WorkResults are kicks
auto result = iocp.Work(std::chrono::milliseconds(1));
ASSERT_TRUE(absl::holds_alternative<Poller::Kicked>(result));
result = iocp.Work(std::chrono::milliseconds(1));
ASSERT_TRUE(absl::holds_alternative<Poller::Kicked>(result));
// followed by a DeadlineExceeded
result = iocp.Work(std::chrono::milliseconds(1));
ASSERT_TRUE(absl::holds_alternative<Poller::DeadlineExceeded>(result));
}
TEST_F(IOCPTest, CrashOnWatchingAClosedSocket) {
ThreadedExecutor executor{2};
IOCP iocp(&executor);
SOCKET sockpair[2];
CreateSockpair(sockpair, iocp.GetDefaultSocketFlags());
closesocket(sockpair[0]);
ASSERT_DEATH(
{
WinSocket* wrapped_client_socket =
static_cast<WinSocket*>(iocp.Watch(sockpair[0]));
},
"");
}
TEST_F(IOCPTest, StressTestThousandsOfSockets) {
// Start 100 threads, each with their own IOCP
// On each thread, create 50 socket pairs (100 sockets) and have them exchange
// a message before shutting down.
int thread_count = 100;
int sockets_per_thread = 50;
std::atomic<int> read_count{0};
std::atomic<int> write_count{0};
std::vector<std::thread> threads;
threads.reserve(thread_count);
for (int thread_n = 0; thread_n < thread_count; thread_n++) {
threads.emplace_back([thread_n, sockets_per_thread, &read_count,
&write_count] {
ThreadedExecutor executor{2};
IOCP iocp(&executor);
// Start a looping worker thread with a moderate timeout
std::thread iocp_worker([&iocp, &executor] {
Poller::WorkResult result;
do {
result = iocp.Work(std::chrono::seconds(1));
if (absl::holds_alternative<Poller::Events>(result)) {
for (auto& event : absl::get<Poller::Events>(result)) {
executor.Run(event);
}
}
} while (!absl::holds_alternative<Poller::DeadlineExceeded>(result));
});
for (int i = 0; i < sockets_per_thread; i++) {
SOCKET sockpair[2];
CreateSockpair(sockpair, iocp.GetDefaultSocketFlags());
WinSocket* wrapped_client_socket =
static_cast<WinSocket*>(iocp.Watch(sockpair[0]));
WinSocket* wrapped_server_socket =
static_cast<WinSocket*>(iocp.Watch(sockpair[1]));
wrapped_client_socket->NotifyOnRead(
SelfDeletingClosure::Create([&read_count, wrapped_client_socket] {
read_count.fetch_add(1);
wrapped_client_socket->MaybeShutdown(absl::OkStatus());
}));
wrapped_server_socket->NotifyOnWrite(
SelfDeletingClosure::Create([&write_count, wrapped_server_socket] {
write_count.fetch_add(1);
wrapped_server_socket->MaybeShutdown(absl::OkStatus());
}));
{
// Set the client to receive
WSABUF read_wsabuf;
read_wsabuf.len = 20;
char read_char_buffer[20];
read_wsabuf.buf = read_char_buffer;
DWORD bytes_rcvd;
DWORD flags = 0;
memset(wrapped_client_socket->read_info()->overlapped(), 0,
sizeof(OVERLAPPED));
int status = WSARecv(
wrapped_client_socket->socket(), &read_wsabuf, 1, &bytes_rcvd,
&flags, wrapped_client_socket->read_info()->overlapped(), NULL);
// Expecting error 997, WSA_IO_PENDING
EXPECT_EQ(status, -1);
int last_error = WSAGetLastError();
ASSERT_EQ(last_error, WSA_IO_PENDING);
}
{
// Have the server send a message to the client.
WSABUF write_wsabuf;
char write_char_buffer[20] = "hello!";
write_wsabuf.len = 20;
write_wsabuf.buf = write_char_buffer;
DWORD bytes_sent;
memset(wrapped_server_socket->write_info()->overlapped(), 0,
sizeof(OVERLAPPED));
int status = WSASend(
wrapped_server_socket->socket(), &write_wsabuf, 1, &bytes_sent, 0,
wrapped_server_socket->write_info()->overlapped(), NULL);
EXPECT_EQ(status, 0);
}
}
iocp_worker.join();
});
}
for (auto& t : threads) {
t.join();
}
absl::Time deadline = absl::Now() + absl::Seconds(30);
while (read_count.load() != thread_count * sockets_per_thread ||
write_count.load() != thread_count * sockets_per_thread) {
absl::SleepFor(absl::Milliseconds(50));
if (deadline < absl::Now()) {
FAIL() << "Deadline exceeded with " << read_count.load() << " reads and "
<< write_count.load() << " writes";
}
}
ASSERT_EQ(read_count.load(), thread_count * sockets_per_thread);
ASSERT_EQ(write_count.load(), thread_count * sockets_per_thread);
}
int main(int argc, char** argv) {
::testing::InitGoogleTest(&argc, argv);
grpc_init();
int status = RUN_ALL_TESTS();
grpc_shutdown();
return status;
}
#else // not GPR_WINDOWS
int main(int /* argc */, char** /* argv */) { return 0; }
#endif

@ -1,102 +0,0 @@
// Copyright 2022 gRPC authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include <grpc/support/port_platform.h>
#ifdef GPR_WINDOWS
#include <gtest/gtest.h>
#include "absl/status/status.h"
#include "absl/time/time.h"
#include <grpc/grpc.h>
#include <grpc/support/log_windows.h>
#include "src/core/lib/event_engine/common_closures.h"
#include "src/core/lib/event_engine/executor/threaded_executor.h"
#include "src/core/lib/event_engine/windows/iocp.h"
#include "src/core/lib/event_engine/windows/win_socket.h"
#include "src/core/lib/iomgr/error.h"
#include "test/core/event_engine/windows/create_sockpair.h"
namespace {
using ::grpc_event_engine::experimental::AnyInvocableClosure;
using ::grpc_event_engine::experimental::CreateSockpair;
using ::grpc_event_engine::experimental::IOCP;
using ::grpc_event_engine::experimental::ThreadedExecutor;
using ::grpc_event_engine::experimental::WinSocket;
} // namespace
class WinSocketTest : public testing::Test {};
TEST_F(WinSocketTest, ManualReadEventTriggeredWithoutIO) {
ThreadedExecutor executor{2};
SOCKET sockpair[2];
CreateSockpair(sockpair, IOCP::GetDefaultSocketFlags());
WinSocket wrapped_client_socket(sockpair[0], &executor);
WinSocket wrapped_server_socket(sockpair[1], &executor);
bool read_called = false;
AnyInvocableClosure on_read([&read_called]() { read_called = true; });
wrapped_client_socket.NotifyOnRead(&on_read);
AnyInvocableClosure on_write([] { FAIL() << "No Write expected"; });
wrapped_client_socket.NotifyOnWrite(&on_write);
ASSERT_FALSE(read_called);
wrapped_client_socket.SetReadable();
absl::Time deadline = absl::Now() + absl::Seconds(10);
while (!read_called) {
absl::SleepFor(absl::Milliseconds(42));
if (deadline < absl::Now()) {
FAIL() << "Deadline exceeded";
}
}
ASSERT_TRUE(read_called);
wrapped_client_socket.MaybeShutdown(absl::CancelledError("done"));
wrapped_server_socket.MaybeShutdown(absl::CancelledError("done"));
}
TEST_F(WinSocketTest, NotificationCalledImmediatelyOnShutdownWinSocket) {
ThreadedExecutor executor{2};
SOCKET sockpair[2];
CreateSockpair(sockpair, IOCP::GetDefaultSocketFlags());
WinSocket wrapped_client_socket(sockpair[0], &executor);
wrapped_client_socket.MaybeShutdown(absl::CancelledError("testing"));
bool read_called = false;
AnyInvocableClosure closure([&wrapped_client_socket, &read_called] {
ASSERT_EQ(wrapped_client_socket.read_info()->bytes_transferred(), 0);
ASSERT_EQ(wrapped_client_socket.read_info()->wsa_error(), WSAESHUTDOWN);
read_called = true;
});
wrapped_client_socket.NotifyOnRead(&closure);
absl::Time deadline = absl::Now() + absl::Seconds(3);
while (!read_called) {
absl::SleepFor(absl::Milliseconds(42));
if (deadline < absl::Now()) {
FAIL() << "Deadline exceeded";
}
}
ASSERT_TRUE(read_called);
closesocket(sockpair[1]);
}
int main(int argc, char** argv) {
::testing::InitGoogleTest(&argc, argv);
grpc_init();
int status = RUN_ALL_TESTS();
grpc_shutdown();
return status;
}
#else // not GPR_WINDOWS
int main(int /* argc */, char** /* argv */) { return 0; }
#endif

@ -279,21 +279,6 @@ grpc_cc_test(
],
)
grpc_cc_test(
name = "pollset_windows_starvation_test",
srcs = ["pollset_windows_starvation_test.cc"],
language = "C++",
tags = [
"no_linux",
"no_mac",
],
deps = [
"//:gpr",
"//:grpc",
"//test/core/util:grpc_test_util",
],
)
grpc_cc_test(
name = "tcp_server_posix_test",
srcs = ["tcp_server_posix_test.cc"],

@ -1953,37 +1953,24 @@ src/core/lib/event_engine/default_event_engine_factory.cc \
src/core/lib/event_engine/default_event_engine_factory.h \
src/core/lib/event_engine/event_engine.cc \
src/core/lib/event_engine/event_engine_factory.h \
src/core/lib/event_engine/executor/executor.h \
src/core/lib/event_engine/executor/threaded_executor.cc \
src/core/lib/event_engine/executor/threaded_executor.h \
src/core/lib/event_engine/handle_containers.h \
src/core/lib/event_engine/iomgr_engine/iomgr_engine.cc \
src/core/lib/event_engine/iomgr_engine/iomgr_engine.h \
src/core/lib/event_engine/iomgr_engine/thread_pool.cc \
src/core/lib/event_engine/iomgr_engine/thread_pool.h \
src/core/lib/event_engine/iomgr_engine/timer.cc \
src/core/lib/event_engine/iomgr_engine/timer.h \
src/core/lib/event_engine/iomgr_engine/timer_heap.cc \
src/core/lib/event_engine/iomgr_engine/timer_heap.h \
src/core/lib/event_engine/iomgr_engine/timer_manager.cc \
src/core/lib/event_engine/iomgr_engine/timer_manager.h \
src/core/lib/event_engine/memory_allocator.cc \
src/core/lib/event_engine/poller.h \
src/core/lib/event_engine/posix_engine/posix_engine.cc \
src/core/lib/event_engine/posix_engine/posix_engine.h \
src/core/lib/event_engine/posix_engine/timer.cc \
src/core/lib/event_engine/posix_engine/timer.h \
src/core/lib/event_engine/posix_engine/timer_heap.cc \
src/core/lib/event_engine/posix_engine/timer_heap.h \
src/core/lib/event_engine/posix_engine/timer_manager.cc \
src/core/lib/event_engine/posix_engine/timer_manager.h \
src/core/lib/event_engine/promise.h \
src/core/lib/event_engine/resolved_address.cc \
src/core/lib/event_engine/slice.cc \
src/core/lib/event_engine/slice_buffer.cc \
src/core/lib/event_engine/socket_notifier.h \
src/core/lib/event_engine/thread_pool.cc \
src/core/lib/event_engine/thread_pool.h \
src/core/lib/event_engine/trace.cc \
src/core/lib/event_engine/trace.h \
src/core/lib/event_engine/utils.cc \
src/core/lib/event_engine/utils.h \
src/core/lib/event_engine/windows/iocp.cc \
src/core/lib/event_engine/windows/iocp.h \
src/core/lib/event_engine/windows/win_socket.cc \
src/core/lib/event_engine/windows/win_socket.h \
src/core/lib/event_engine/windows/windows_engine.cc \
src/core/lib/event_engine/windows/windows_engine.h \
src/core/lib/gpr/alloc.cc \
src/core/lib/gpr/alloc.h \
src/core/lib/gpr/atm.cc \

@ -1743,37 +1743,24 @@ src/core/lib/event_engine/default_event_engine_factory.cc \
src/core/lib/event_engine/default_event_engine_factory.h \
src/core/lib/event_engine/event_engine.cc \
src/core/lib/event_engine/event_engine_factory.h \
src/core/lib/event_engine/executor/executor.h \
src/core/lib/event_engine/executor/threaded_executor.cc \
src/core/lib/event_engine/executor/threaded_executor.h \
src/core/lib/event_engine/handle_containers.h \
src/core/lib/event_engine/iomgr_engine/iomgr_engine.cc \
src/core/lib/event_engine/iomgr_engine/iomgr_engine.h \
src/core/lib/event_engine/iomgr_engine/thread_pool.cc \
src/core/lib/event_engine/iomgr_engine/thread_pool.h \
src/core/lib/event_engine/iomgr_engine/timer.cc \
src/core/lib/event_engine/iomgr_engine/timer.h \
src/core/lib/event_engine/iomgr_engine/timer_heap.cc \
src/core/lib/event_engine/iomgr_engine/timer_heap.h \
src/core/lib/event_engine/iomgr_engine/timer_manager.cc \
src/core/lib/event_engine/iomgr_engine/timer_manager.h \
src/core/lib/event_engine/memory_allocator.cc \
src/core/lib/event_engine/poller.h \
src/core/lib/event_engine/posix_engine/posix_engine.cc \
src/core/lib/event_engine/posix_engine/posix_engine.h \
src/core/lib/event_engine/posix_engine/timer.cc \
src/core/lib/event_engine/posix_engine/timer.h \
src/core/lib/event_engine/posix_engine/timer_heap.cc \
src/core/lib/event_engine/posix_engine/timer_heap.h \
src/core/lib/event_engine/posix_engine/timer_manager.cc \
src/core/lib/event_engine/posix_engine/timer_manager.h \
src/core/lib/event_engine/promise.h \
src/core/lib/event_engine/resolved_address.cc \
src/core/lib/event_engine/slice.cc \
src/core/lib/event_engine/slice_buffer.cc \
src/core/lib/event_engine/socket_notifier.h \
src/core/lib/event_engine/thread_pool.cc \
src/core/lib/event_engine/thread_pool.h \
src/core/lib/event_engine/trace.cc \
src/core/lib/event_engine/trace.h \
src/core/lib/event_engine/utils.cc \
src/core/lib/event_engine/utils.h \
src/core/lib/event_engine/windows/iocp.cc \
src/core/lib/event_engine/windows/iocp.h \
src/core/lib/event_engine/windows/win_socket.cc \
src/core/lib/event_engine/windows/win_socket.h \
src/core/lib/event_engine/windows/windows_engine.cc \
src/core/lib/event_engine/windows/windows_engine.h \
src/core/lib/gpr/README.md \
src/core/lib/gpr/alloc.cc \
src/core/lib/gpr/alloc.h \

@ -325,28 +325,6 @@
],
"uses_polling": true
},
{
"args": [],
"benchmark": false,
"ci_platforms": [
"linux",
"posix",
"windows"
],
"cpu_cost": 1.0,
"exclude_configs": [],
"exclude_iomgrs": [],
"flaky": false,
"gtest": false,
"language": "c",
"name": "pollset_windows_starvation_test",
"platforms": [
"linux",
"posix",
"windows"
],
"uses_polling": true
},
{
"args": [],
"benchmark": false,
@ -4098,6 +4076,7 @@
"benchmark": false,
"ci_platforms": [
"linux",
"mac",
"posix",
"windows"
],
@ -4107,9 +4086,10 @@
"flaky": false,
"gtest": true,
"language": "c++",
"name": "iocp_test",
"name": "iomgr_event_engine_test",
"platforms": [
"linux",
"mac",
"posix",
"windows"
],
@ -5161,30 +5141,6 @@
],
"uses_polling": true
},
{
"args": [],
"benchmark": false,
"ci_platforms": [
"linux",
"mac",
"posix",
"windows"
],
"cpu_cost": 1.0,
"exclude_configs": [],
"exclude_iomgrs": [],
"flaky": false,
"gtest": true,
"language": "c++",
"name": "posix_event_engine_test",
"platforms": [
"linux",
"mac",
"posix",
"windows"
],
"uses_polling": false
},
{
"args": [],
"benchmark": false,
@ -6808,7 +6764,7 @@
"flaky": false,
"gtest": true,
"language": "c++",
"name": "test_core_event_engine_posix_timer_heap_test",
"name": "test_core_event_engine_iomgr_event_engine_timer_heap_test",
"platforms": [
"linux",
"mac",
@ -6832,7 +6788,7 @@
"flaky": false,
"gtest": true,
"language": "c++",
"name": "test_core_event_engine_posix_timer_list_test",
"name": "test_core_event_engine_iomgr_event_engine_timer_list_test",
"platforms": [
"linux",
"mac",
@ -7677,28 +7633,6 @@
],
"uses_polling": true
},
{
"args": [],
"benchmark": false,
"ci_platforms": [
"linux",
"posix",
"windows"
],
"cpu_cost": 1.0,
"exclude_configs": [],
"exclude_iomgrs": [],
"flaky": false,
"gtest": true,
"language": "c++",
"name": "win_socket_test",
"platforms": [
"linux",
"posix",
"windows"
],
"uses_polling": false
},
{
"args": [],
"benchmark": false,

Loading…
Cancel
Save