diff --git a/BUILD b/BUILD index 5aab7c1a805..791418f1aaf 100644 --- a/BUILD +++ b/BUILD @@ -1709,13 +1709,8 @@ grpc_cc_library( ) grpc_cc_library( - name = "event_engine_base", - srcs = [ - "src/core/lib/event_engine/event_engine.cc", - ], - hdrs = GRPC_PUBLIC_EVENT_ENGINE_HDRS + GRPC_PUBLIC_HDRS + [ - "src/core/lib/event_engine/event_engine_factory.h", - ], + name = "event_engine_base_hdrs", + hdrs = GRPC_PUBLIC_EVENT_ENGINE_HDRS + GRPC_PUBLIC_HDRS, external_deps = [ "absl/status", "absl/status:statusor", @@ -1723,26 +1718,16 @@ grpc_cc_library( ], deps = [ "gpr_base", - "gpr_platform", - "grpc_codegen", ], ) grpc_cc_library( - name = "uri_parser", - srcs = [ - "src/core/lib/uri/uri_parser.cc", - ], + name = "default_event_engine_factory_hdrs", hdrs = [ - "src/core/lib/uri/uri_parser.h", - ], - external_deps = [ - "absl/status:statusor", - "absl/strings", - "absl/strings:str_format", + "src/core/lib/event_engine/event_engine_factory.h", ], - visibility = ["@grpc:alt_grpc_base_legacy"], deps = [ + "event_engine_base_hdrs", "gpr_base", ], ) @@ -1750,16 +1735,46 @@ grpc_cc_library( grpc_cc_library( name = "default_event_engine_factory", srcs = [ - "src/core/lib/event_engine/event_engine_factory.cc", + "src/core/lib/event_engine/default_event_engine_factory.cc", ], - hdrs = [], external_deps = [ # TODO(hork): uv, in a subsequent PR ], deps = [ - "event_engine_base", + "default_event_engine_factory_hdrs", + "gpr_base", + ], +) + +grpc_cc_library( + name = "event_engine_base", + srcs = [ + "src/core/lib/event_engine/event_engine.cc", + ], + deps = [ + "default_event_engine_factory", + "default_event_engine_factory_hdrs", + "event_engine_base_hdrs", + "gpr_base", + ], +) + +grpc_cc_library( + name = "uri_parser", + srcs = [ + "src/core/lib/uri/uri_parser.cc", + ], + hdrs = [ + "src/core/lib/uri/uri_parser.h", + ], + external_deps = [ + "absl/status:statusor", + "absl/strings", + "absl/strings:str_format", + ], + visibility = ["@grpc:alt_grpc_base_legacy"], + deps = [ "gpr_base", - "gpr_platform", ], ) diff --git a/CMakeLists.txt b/CMakeLists.txt index 78662880e6d..45abed1d607 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1968,8 +1968,8 @@ add_library(grpc src/core/lib/debug/stats_data.cc src/core/lib/debug/trace.cc 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/event_engine_factory.cc src/core/lib/event_engine/memory_allocator.cc src/core/lib/event_engine/sockaddr.cc src/core/lib/http/format_request.cc @@ -2619,8 +2619,8 @@ add_library(grpc_unsecure src/core/lib/debug/stats_data.cc src/core/lib/debug/trace.cc 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/event_engine_factory.cc src/core/lib/event_engine/memory_allocator.cc src/core/lib/event_engine/sockaddr.cc src/core/lib/http/format_request.cc diff --git a/Makefile b/Makefile index 32cf373ccbb..d458f340df3 100644 --- a/Makefile +++ b/Makefile @@ -1447,8 +1447,8 @@ LIBGRPC_SRC = \ src/core/lib/debug/stats_data.cc \ src/core/lib/debug/trace.cc \ 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/event_engine_factory.cc \ src/core/lib/event_engine/memory_allocator.cc \ src/core/lib/event_engine/sockaddr.cc \ src/core/lib/http/format_request.cc \ @@ -1945,8 +1945,8 @@ LIBGRPC_UNSECURE_SRC = \ src/core/lib/debug/stats_data.cc \ src/core/lib/debug/trace.cc \ 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/event_engine_factory.cc \ src/core/lib/event_engine/memory_allocator.cc \ src/core/lib/event_engine/sockaddr.cc \ src/core/lib/http/format_request.cc \ diff --git a/build_autogenerated.yaml b/build_autogenerated.yaml index 0ea5e9b57bb..0fc85b86dfd 100644 --- a/build_autogenerated.yaml +++ b/build_autogenerated.yaml @@ -1480,8 +1480,8 @@ libs: - src/core/lib/debug/stats_data.cc - src/core/lib/debug/trace.cc - 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/event_engine_factory.cc - src/core/lib/event_engine/memory_allocator.cc - src/core/lib/event_engine/sockaddr.cc - src/core/lib/http/format_request.cc @@ -2301,8 +2301,8 @@ libs: - src/core/lib/debug/stats_data.cc - src/core/lib/debug/trace.cc - 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/event_engine_factory.cc - src/core/lib/event_engine/memory_allocator.cc - src/core/lib/event_engine/sockaddr.cc - src/core/lib/http/format_request.cc diff --git a/config.m4 b/config.m4 index e81bc6f1d99..fcdeb81cdc4 100644 --- a/config.m4 +++ b/config.m4 @@ -465,8 +465,8 @@ if test "$PHP_GRPC" != "no"; then src/core/lib/debug/stats_data.cc \ src/core/lib/debug/trace.cc \ 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/event_engine_factory.cc \ src/core/lib/event_engine/memory_allocator.cc \ src/core/lib/event_engine/sockaddr.cc \ src/core/lib/gpr/alloc.cc \ diff --git a/config.w32 b/config.w32 index 06ebab9fdad..8185fa9e77a 100644 --- a/config.w32 +++ b/config.w32 @@ -431,8 +431,8 @@ if (PHP_GRPC != "no") { "src\\core\\lib\\debug\\stats_data.cc " + "src\\core\\lib\\debug\\trace.cc " + "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\\event_engine_factory.cc " + "src\\core\\lib\\event_engine\\memory_allocator.cc " + "src\\core\\lib\\event_engine\\sockaddr.cc " + "src\\core\\lib\\gpr\\alloc.cc " + diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec index 9f09899e662..542e06befd0 100644 --- a/gRPC-Core.podspec +++ b/gRPC-Core.podspec @@ -1022,8 +1022,8 @@ Pod::Spec.new do |s| 'src/core/lib/debug/trace.h', 'src/core/lib/event_engine/channel_args_endpoint_config.cc', 'src/core/lib/event_engine/channel_args_endpoint_config.h', + 'src/core/lib/event_engine/default_event_engine_factory.cc', 'src/core/lib/event_engine/event_engine.cc', - 'src/core/lib/event_engine/event_engine_factory.cc', 'src/core/lib/event_engine/event_engine_factory.h', 'src/core/lib/event_engine/memory_allocator.cc', 'src/core/lib/event_engine/sockaddr.cc', diff --git a/grpc.gemspec b/grpc.gemspec index a598f385d37..b6a79715d6c 100644 --- a/grpc.gemspec +++ b/grpc.gemspec @@ -941,8 +941,8 @@ Gem::Specification.new do |s| s.files += %w( src/core/lib/debug/trace.h ) s.files += %w( src/core/lib/event_engine/channel_args_endpoint_config.cc ) s.files += %w( src/core/lib/event_engine/channel_args_endpoint_config.h ) + s.files += %w( src/core/lib/event_engine/default_event_engine_factory.cc ) s.files += %w( src/core/lib/event_engine/event_engine.cc ) - s.files += %w( src/core/lib/event_engine/event_engine_factory.cc ) s.files += %w( src/core/lib/event_engine/event_engine_factory.h ) s.files += %w( src/core/lib/event_engine/memory_allocator.cc ) s.files += %w( src/core/lib/event_engine/sockaddr.cc ) diff --git a/grpc.gyp b/grpc.gyp index a42f538c225..2d66c95a61b 100644 --- a/grpc.gyp +++ b/grpc.gyp @@ -895,8 +895,8 @@ 'src/core/lib/debug/stats_data.cc', 'src/core/lib/debug/trace.cc', '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/event_engine_factory.cc', 'src/core/lib/event_engine/memory_allocator.cc', 'src/core/lib/event_engine/sockaddr.cc', 'src/core/lib/http/format_request.cc', @@ -1365,8 +1365,8 @@ 'src/core/lib/debug/stats_data.cc', 'src/core/lib/debug/trace.cc', '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/event_engine_factory.cc', 'src/core/lib/event_engine/memory_allocator.cc', 'src/core/lib/event_engine/sockaddr.cc', 'src/core/lib/http/format_request.cc', diff --git a/include/grpc/event_engine/event_engine.h b/include/grpc/event_engine/event_engine.h index c1825d42e2e..63c92bf8720 100644 --- a/include/grpc/event_engine/event_engine.h +++ b/include/grpc/event_engine/event_engine.h @@ -378,7 +378,7 @@ class EventEngine { virtual bool Cancel(TaskHandle handle) = 0; }; -/// Replace gRPC's default EventEngine factory +/// Replace gRPC's default EventEngine factory. /// /// Applications may call \a SetDefaultEventEngineFactory at any time to replace /// the default factory used within gRPC. EventEngines will be created when @@ -390,7 +390,7 @@ class EventEngine { void SetDefaultEventEngineFactory( const std::function()>* factory); -/// Create an EventEngine using the default factory +/// Create an EventEngine using the default factory. std::unique_ptr CreateEventEngine(); } // namespace experimental diff --git a/package.xml b/package.xml index 01029f90c96..1242c9783c7 100644 --- a/package.xml +++ b/package.xml @@ -921,8 +921,8 @@ + - diff --git a/src/core/lib/event_engine/default_event_engine_factory.cc b/src/core/lib/event_engine/default_event_engine_factory.cc new file mode 100644 index 00000000000..f84a1283082 --- /dev/null +++ b/src/core/lib/event_engine/default_event_engine_factory.cc @@ -0,0 +1,27 @@ +// 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 + +#include "src/core/lib/event_engine/event_engine_factory.h" + +namespace grpc_event_engine { +namespace experimental { + +std::unique_ptr DefaultEventEngineFactory() { + // TODO(hork): call LibuvEventEngineFactory + return nullptr; +} + +} // namespace experimental +} // namespace grpc_event_engine diff --git a/src/core/lib/event_engine/event_engine.cc b/src/core/lib/event_engine/event_engine.cc index 447544c7b43..b0488da74df 100644 --- a/src/core/lib/event_engine/event_engine.cc +++ b/src/core/lib/event_engine/event_engine.cc @@ -17,6 +17,9 @@ #include #include +#include "src/core/lib/event_engine/event_engine_factory.h" +#include "src/core/lib/gprpp/sync.h" + namespace grpc_event_engine { namespace experimental { @@ -33,5 +36,30 @@ const struct sockaddr* EventEngine::ResolvedAddress::address() const { socklen_t EventEngine::ResolvedAddress::size() const { return size_; } +namespace { +const std::function()>* g_event_engine_factory = + nullptr; +grpc_core::Mutex* g_mu = new grpc_core::Mutex(); +} // namespace + +void SetDefaultEventEngineFactory( + const std::function()>* factory) { + grpc_core::MutexLock lock(g_mu); + g_event_engine_factory = factory; +} + +std::unique_ptr CreateEventEngine() { + grpc_core::MutexLock lock(g_mu); + if (g_event_engine_factory != nullptr) { + return (*g_event_engine_factory)(); + } + return DefaultEventEngineFactory(); +} + +EventEngine* GetDefaultEventEngine() { + static EventEngine* default_event_engine = CreateEventEngine().release(); + return default_event_engine; +} + } // namespace experimental } // namespace grpc_event_engine diff --git a/src/core/lib/event_engine/event_engine_factory.cc b/src/core/lib/event_engine/event_engine_factory.cc deleted file mode 100644 index c70c8871be8..00000000000 --- a/src/core/lib/event_engine/event_engine_factory.cc +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2021 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 - -#include - -#include "src/core/lib/gprpp/sync.h" - -namespace grpc_event_engine { -namespace experimental { - -namespace { -const std::function()>* g_event_engine_factory = - nullptr; -grpc_core::Mutex* g_mu = new grpc_core::Mutex(); -} // namespace - -EventEngine* GetDefaultEventEngine() { - static EventEngine* default_event_engine = CreateEventEngine().release(); - return default_event_engine; -} - -void SetDefaultEventEngineFactory( - const std::function()>* factory) { - grpc_core::MutexLock lock(g_mu); - g_event_engine_factory = factory; -} - -std::unique_ptr CreateEventEngine() { - grpc_core::MutexLock lock(g_mu); - if (g_event_engine_factory == nullptr) { - // TODO(hork): call LibuvEventEngineFactory - abort(); - } - return (*g_event_engine_factory)(); -} - -} // namespace experimental -} // namespace grpc_event_engine diff --git a/src/core/lib/event_engine/event_engine_factory.h b/src/core/lib/event_engine/event_engine_factory.h index 92e25e0252a..11a96924bc3 100644 --- a/src/core/lib/event_engine/event_engine_factory.h +++ b/src/core/lib/event_engine/event_engine_factory.h @@ -27,6 +27,9 @@ namespace experimental { /// Strongly consider whether you could use \a CreateEventEngine instead. EventEngine* GetDefaultEventEngine(); +/// Create an EventEngine using the default factory provided at link time. +std::unique_ptr DefaultEventEngineFactory(); + } // namespace experimental } // namespace grpc_event_engine diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py index 02810f04f64..637f5ff4dd3 100644 --- a/src/python/grpcio/grpc_core_dependencies.py +++ b/src/python/grpcio/grpc_core_dependencies.py @@ -440,8 +440,8 @@ CORE_SOURCE_FILES = [ 'src/core/lib/debug/stats_data.cc', 'src/core/lib/debug/trace.cc', '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/event_engine_factory.cc', 'src/core/lib/event_engine/memory_allocator.cc', 'src/core/lib/event_engine/sockaddr.cc', 'src/core/lib/gpr/alloc.cc', diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal index aaf86c0389a..083713f7622 100644 --- a/tools/doxygen/Doxyfile.c++.internal +++ b/tools/doxygen/Doxyfile.c++.internal @@ -1920,8 +1920,8 @@ src/core/lib/debug/trace.cc \ src/core/lib/debug/trace.h \ src/core/lib/event_engine/channel_args_endpoint_config.cc \ src/core/lib/event_engine/channel_args_endpoint_config.h \ +src/core/lib/event_engine/default_event_engine_factory.cc \ src/core/lib/event_engine/event_engine.cc \ -src/core/lib/event_engine/event_engine_factory.cc \ src/core/lib/event_engine/event_engine_factory.h \ src/core/lib/event_engine/memory_allocator.cc \ src/core/lib/event_engine/sockaddr.cc \ diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal index f8d6247ea7c..041ba1576ad 100644 --- a/tools/doxygen/Doxyfile.core.internal +++ b/tools/doxygen/Doxyfile.core.internal @@ -1716,8 +1716,8 @@ src/core/lib/debug/trace.cc \ src/core/lib/debug/trace.h \ src/core/lib/event_engine/channel_args_endpoint_config.cc \ src/core/lib/event_engine/channel_args_endpoint_config.h \ +src/core/lib/event_engine/default_event_engine_factory.cc \ src/core/lib/event_engine/event_engine.cc \ -src/core/lib/event_engine/event_engine_factory.cc \ src/core/lib/event_engine/event_engine_factory.h \ src/core/lib/event_engine/memory_allocator.cc \ src/core/lib/event_engine/sockaddr.cc \