[EventEngine] Add invalid handle types to the public API (#32202)
* [EventEngine] Add invalid handle types to the public API * Automated change: Fix sanity tests * add definition for static constexpr members * sanitize Co-authored-by: drfloob <drfloob@users.noreply.github.com>
This commit is contained in:
parent
79f057e9d0
commit
d14020d4e2
|
|
@ -2167,6 +2167,7 @@ add_library(grpc
|
|||
src/core/lib/event_engine/channel_args_endpoint_config.cc
|
||||
src/core/lib/event_engine/default_event_engine.cc
|
||||
src/core/lib/event_engine/default_event_engine_factory.cc
|
||||
src/core/lib/event_engine/event_engine.cc
|
||||
src/core/lib/event_engine/forkable.cc
|
||||
src/core/lib/event_engine/memory_allocator.cc
|
||||
src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc
|
||||
|
|
@ -2844,6 +2845,7 @@ add_library(grpc_unsecure
|
|||
src/core/lib/event_engine/channel_args_endpoint_config.cc
|
||||
src/core/lib/event_engine/default_event_engine.cc
|
||||
src/core/lib/event_engine/default_event_engine_factory.cc
|
||||
src/core/lib/event_engine/event_engine.cc
|
||||
src/core/lib/event_engine/forkable.cc
|
||||
src/core/lib/event_engine/memory_allocator.cc
|
||||
src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc
|
||||
|
|
@ -4336,6 +4338,7 @@ add_library(grpc_authorization_provider
|
|||
src/core/lib/event_engine/channel_args_endpoint_config.cc
|
||||
src/core/lib/event_engine/default_event_engine.cc
|
||||
src/core/lib/event_engine/default_event_engine_factory.cc
|
||||
src/core/lib/event_engine/event_engine.cc
|
||||
src/core/lib/event_engine/forkable.cc
|
||||
src/core/lib/event_engine/memory_allocator.cc
|
||||
src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc
|
||||
|
|
@ -11403,6 +11406,7 @@ add_executable(frame_test
|
|||
src/core/lib/event_engine/channel_args_endpoint_config.cc
|
||||
src/core/lib/event_engine/default_event_engine.cc
|
||||
src/core/lib/event_engine/default_event_engine_factory.cc
|
||||
src/core/lib/event_engine/event_engine.cc
|
||||
src/core/lib/event_engine/forkable.cc
|
||||
src/core/lib/event_engine/memory_allocator.cc
|
||||
src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc
|
||||
|
|
@ -20131,6 +20135,7 @@ endif()
|
|||
if(gRPC_BUILD_TESTS)
|
||||
|
||||
add_executable(test_core_event_engine_slice_buffer_test
|
||||
src/core/lib/event_engine/event_engine.cc
|
||||
src/core/lib/event_engine/resolved_address.cc
|
||||
src/core/lib/event_engine/slice.cc
|
||||
src/core/lib/event_engine/slice_buffer.cc
|
||||
|
|
|
|||
|
|
@ -1424,6 +1424,7 @@ LIBGRPC_SRC = \
|
|||
src/core/lib/event_engine/channel_args_endpoint_config.cc \
|
||||
src/core/lib/event_engine/default_event_engine.cc \
|
||||
src/core/lib/event_engine/default_event_engine_factory.cc \
|
||||
src/core/lib/event_engine/event_engine.cc \
|
||||
src/core/lib/event_engine/forkable.cc \
|
||||
src/core/lib/event_engine/memory_allocator.cc \
|
||||
src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc \
|
||||
|
|
@ -1960,6 +1961,7 @@ LIBGRPC_UNSECURE_SRC = \
|
|||
src/core/lib/event_engine/channel_args_endpoint_config.cc \
|
||||
src/core/lib/event_engine/default_event_engine.cc \
|
||||
src/core/lib/event_engine/default_event_engine_factory.cc \
|
||||
src/core/lib/event_engine/event_engine.cc \
|
||||
src/core/lib/event_engine/forkable.cc \
|
||||
src/core/lib/event_engine/memory_allocator.cc \
|
||||
src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc \
|
||||
|
|
|
|||
|
|
@ -1559,6 +1559,7 @@ libs:
|
|||
- src/core/lib/event_engine/channel_args_endpoint_config.cc
|
||||
- src/core/lib/event_engine/default_event_engine.cc
|
||||
- src/core/lib/event_engine/default_event_engine_factory.cc
|
||||
- src/core/lib/event_engine/event_engine.cc
|
||||
- src/core/lib/event_engine/forkable.cc
|
||||
- src/core/lib/event_engine/memory_allocator.cc
|
||||
- src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc
|
||||
|
|
@ -2503,6 +2504,7 @@ libs:
|
|||
- src/core/lib/event_engine/channel_args_endpoint_config.cc
|
||||
- src/core/lib/event_engine/default_event_engine.cc
|
||||
- src/core/lib/event_engine/default_event_engine_factory.cc
|
||||
- src/core/lib/event_engine/event_engine.cc
|
||||
- src/core/lib/event_engine/forkable.cc
|
||||
- src/core/lib/event_engine/memory_allocator.cc
|
||||
- src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc
|
||||
|
|
@ -3831,6 +3833,7 @@ libs:
|
|||
- src/core/lib/event_engine/channel_args_endpoint_config.cc
|
||||
- src/core/lib/event_engine/default_event_engine.cc
|
||||
- src/core/lib/event_engine/default_event_engine_factory.cc
|
||||
- src/core/lib/event_engine/event_engine.cc
|
||||
- src/core/lib/event_engine/forkable.cc
|
||||
- src/core/lib/event_engine/memory_allocator.cc
|
||||
- src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc
|
||||
|
|
@ -7610,6 +7613,7 @@ targets:
|
|||
- src/core/lib/event_engine/channel_args_endpoint_config.cc
|
||||
- src/core/lib/event_engine/default_event_engine.cc
|
||||
- src/core/lib/event_engine/default_event_engine_factory.cc
|
||||
- src/core/lib/event_engine/event_engine.cc
|
||||
- src/core/lib/event_engine/forkable.cc
|
||||
- src/core/lib/event_engine/memory_allocator.cc
|
||||
- src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc
|
||||
|
|
@ -11567,6 +11571,7 @@ targets:
|
|||
- src/core/lib/slice/slice_refcount.h
|
||||
- src/core/lib/slice/slice_string_helpers.h
|
||||
src:
|
||||
- src/core/lib/event_engine/event_engine.cc
|
||||
- src/core/lib/event_engine/resolved_address.cc
|
||||
- src/core/lib/event_engine/slice.cc
|
||||
- src/core/lib/event_engine/slice_buffer.cc
|
||||
|
|
|
|||
|
|
@ -506,6 +506,7 @@ if test "$PHP_GRPC" != "no"; then
|
|||
src/core/lib/event_engine/channel_args_endpoint_config.cc \
|
||||
src/core/lib/event_engine/default_event_engine.cc \
|
||||
src/core/lib/event_engine/default_event_engine_factory.cc \
|
||||
src/core/lib/event_engine/event_engine.cc \
|
||||
src/core/lib/event_engine/forkable.cc \
|
||||
src/core/lib/event_engine/memory_allocator.cc \
|
||||
src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc \
|
||||
|
|
|
|||
|
|
@ -472,6 +472,7 @@ if (PHP_GRPC != "no") {
|
|||
"src\\core\\lib\\event_engine\\channel_args_endpoint_config.cc " +
|
||||
"src\\core\\lib\\event_engine\\default_event_engine.cc " +
|
||||
"src\\core\\lib\\event_engine\\default_event_engine_factory.cc " +
|
||||
"src\\core\\lib\\event_engine\\event_engine.cc " +
|
||||
"src\\core\\lib\\event_engine\\forkable.cc " +
|
||||
"src\\core\\lib\\event_engine\\memory_allocator.cc " +
|
||||
"src\\core\\lib\\event_engine\\posix_engine\\ev_epoll1_linux.cc " +
|
||||
|
|
|
|||
|
|
@ -1128,6 +1128,7 @@ Pod::Spec.new do |s|
|
|||
'src/core/lib/event_engine/default_event_engine.h',
|
||||
'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/executor/executor.h',
|
||||
'src/core/lib/event_engine/forkable.cc',
|
||||
'src/core/lib/event_engine/forkable.h',
|
||||
|
|
|
|||
|
|
@ -1039,6 +1039,7 @@ Gem::Specification.new do |s|
|
|||
s.files += %w( src/core/lib/event_engine/default_event_engine.h )
|
||||
s.files += %w( src/core/lib/event_engine/default_event_engine_factory.cc )
|
||||
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/executor/executor.h )
|
||||
s.files += %w( src/core/lib/event_engine/forkable.cc )
|
||||
s.files += %w( src/core/lib/event_engine/forkable.h )
|
||||
|
|
|
|||
|
|
@ -837,6 +837,7 @@
|
|||
'src/core/lib/event_engine/channel_args_endpoint_config.cc',
|
||||
'src/core/lib/event_engine/default_event_engine.cc',
|
||||
'src/core/lib/event_engine/default_event_engine_factory.cc',
|
||||
'src/core/lib/event_engine/event_engine.cc',
|
||||
'src/core/lib/event_engine/forkable.cc',
|
||||
'src/core/lib/event_engine/memory_allocator.cc',
|
||||
'src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc',
|
||||
|
|
@ -1315,6 +1316,7 @@
|
|||
'src/core/lib/event_engine/channel_args_endpoint_config.cc',
|
||||
'src/core/lib/event_engine/default_event_engine.cc',
|
||||
'src/core/lib/event_engine/default_event_engine_factory.cc',
|
||||
'src/core/lib/event_engine/event_engine.cc',
|
||||
'src/core/lib/event_engine/forkable.cc',
|
||||
'src/core/lib/event_engine/memory_allocator.cc',
|
||||
'src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc',
|
||||
|
|
@ -1818,6 +1820,7 @@
|
|||
'src/core/lib/event_engine/channel_args_endpoint_config.cc',
|
||||
'src/core/lib/event_engine/default_event_engine.cc',
|
||||
'src/core/lib/event_engine/default_event_engine_factory.cc',
|
||||
'src/core/lib/event_engine/event_engine.cc',
|
||||
'src/core/lib/event_engine/forkable.cc',
|
||||
'src/core/lib/event_engine/memory_allocator.cc',
|
||||
'src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc',
|
||||
|
|
|
|||
|
|
@ -85,6 +85,7 @@ class EventEngine : public std::enable_shared_from_this<EventEngine> {
|
|||
/// caller - the EventEngine will never delete a Closure, and upon
|
||||
/// cancellation, the EventEngine will simply forget the Closure exists. The
|
||||
/// caller is responsible for all necessary cleanup.
|
||||
|
||||
class Closure {
|
||||
public:
|
||||
Closure() = default;
|
||||
|
|
@ -103,12 +104,14 @@ class EventEngine : public std::enable_shared_from_this<EventEngine> {
|
|||
struct TaskHandle {
|
||||
intptr_t keys[2];
|
||||
};
|
||||
static constexpr TaskHandle kInvalidTaskHandle{-1, -1};
|
||||
/// A handle to a cancellable connection attempt.
|
||||
///
|
||||
/// Returned by \a Connect, and can be passed to \a CancelConnect.
|
||||
struct ConnectionHandle {
|
||||
intptr_t keys[2];
|
||||
};
|
||||
static constexpr ConnectionHandle kInvalidConnectionHandle{-1, -1};
|
||||
/// Thin wrapper around a platform-specific sockaddr type. A sockaddr struct
|
||||
/// exists on all platforms that gRPC supports.
|
||||
///
|
||||
|
|
|
|||
|
|
@ -1021,6 +1021,7 @@
|
|||
<file baseinstalldir="/" name="src/core/lib/event_engine/default_event_engine.h" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/lib/event_engine/default_event_engine_factory.cc" role="src" />
|
||||
<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/executor/executor.h" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/lib/event_engine/forkable.cc" role="src" />
|
||||
<file baseinstalldir="/" name="src/core/lib/event_engine/forkable.h" role="src" />
|
||||
|
|
|
|||
|
|
@ -54,6 +54,7 @@ grpc_cc_library(
|
|||
grpc_cc_library(
|
||||
name = "event_engine_common",
|
||||
srcs = [
|
||||
"lib/event_engine/event_engine.cc",
|
||||
"lib/event_engine/resolved_address.cc",
|
||||
"lib/event_engine/slice.cc",
|
||||
"lib/event_engine/slice_buffer.cc",
|
||||
|
|
|
|||
|
|
@ -0,0 +1,25 @@
|
|||
// Copyright 2023 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>
|
||||
|
||||
#include <grpc/event_engine/event_engine.h>
|
||||
|
||||
namespace grpc_event_engine {
|
||||
namespace experimental {
|
||||
|
||||
constexpr EventEngine::TaskHandle EventEngine::kInvalidTaskHandle;
|
||||
constexpr EventEngine::ConnectionHandle EventEngine::kInvalidConnectionHandle;
|
||||
|
||||
} // namespace experimental
|
||||
} // namespace grpc_event_engine
|
||||
|
|
@ -232,7 +232,7 @@ EventEngine::ConnectionHandle PosixEventEngine::ConnectInternal(
|
|||
ep = absl::FailedPreconditionError(absl::StrCat(
|
||||
"connect failed: ", "invalid addr: ",
|
||||
addr_uri.value()))]() mutable { on_connect(std::move(ep)); });
|
||||
return {0, 0};
|
||||
return EventEngine::kInvalidConnectionHandle;
|
||||
}
|
||||
|
||||
std::string name = absl::StrCat("tcp-client:", addr_uri.value());
|
||||
|
|
@ -253,7 +253,7 @@ EventEngine::ConnectionHandle PosixEventEngine::ConnectInternal(
|
|||
std::move(allocator), options)]() mutable {
|
||||
on_connect(std::move(ep));
|
||||
});
|
||||
return {0, 0};
|
||||
return EventEngine::kInvalidConnectionHandle;
|
||||
}
|
||||
if (saved_errno != EWOULDBLOCK && saved_errno != EINPROGRESS) {
|
||||
// Connection already failed. Return 0 to discourage any cancellation
|
||||
|
|
@ -265,7 +265,7 @@ EventEngine::ConnectionHandle PosixEventEngine::ConnectInternal(
|
|||
" error: ", std::strerror(saved_errno)))]() mutable {
|
||||
on_connect(std::move(ep));
|
||||
});
|
||||
return {0, 0};
|
||||
return EventEngine::kInvalidConnectionHandle;
|
||||
}
|
||||
AsyncConnect* ac = new AsyncConnect(
|
||||
std::move(on_connect), shared_from_this(), executor_.get(), handle,
|
||||
|
|
@ -554,7 +554,7 @@ EventEngine::ConnectionHandle PosixEventEngine::Connect(
|
|||
if (!socket.ok()) {
|
||||
Run([on_connect = std::move(on_connect),
|
||||
status = socket.status()]() mutable { on_connect(status); });
|
||||
return {0, 0};
|
||||
return EventEngine::kInvalidConnectionHandle;
|
||||
}
|
||||
return ConnectInternal((*socket).sock, std::move(on_connect),
|
||||
(*socket).mapped_target_addr,
|
||||
|
|
|
|||
|
|
@ -216,7 +216,7 @@ EventEngine::ConnectionHandle WindowsEventEngine::Connect(
|
|||
Run([on_connect = std::move(on_connect), status = uri.status()]() mutable {
|
||||
on_connect(status);
|
||||
});
|
||||
return invalid_connection_handle;
|
||||
return EventEngine::kInvalidConnectionHandle;
|
||||
}
|
||||
GRPC_EVENT_ENGINE_TRACE("EventEngine::%p connecting to %s", this,
|
||||
uri->c_str());
|
||||
|
|
@ -233,14 +233,14 @@ EventEngine::ConnectionHandle WindowsEventEngine::Connect(
|
|||
status = GRPC_WSA_ERROR(WSAGetLastError(), "WSASocket")]() mutable {
|
||||
on_connect(status);
|
||||
});
|
||||
return invalid_connection_handle;
|
||||
return EventEngine::kInvalidConnectionHandle;
|
||||
}
|
||||
status = PrepareSocket(sock);
|
||||
if (!status.ok()) {
|
||||
Run([on_connect = std::move(on_connect), status]() mutable {
|
||||
on_connect(status);
|
||||
});
|
||||
return invalid_connection_handle;
|
||||
return EventEngine::kInvalidConnectionHandle;
|
||||
}
|
||||
// Grab the function pointer for ConnectEx for that specific socket It may
|
||||
// change depending on the interface.
|
||||
|
|
@ -257,7 +257,7 @@ EventEngine::ConnectionHandle WindowsEventEngine::Connect(
|
|||
"WSAIoctl(SIO_GET_EXTENSION_FUNCTION_POINTER)")]() mutable {
|
||||
on_connect(status);
|
||||
});
|
||||
return invalid_connection_handle;
|
||||
return EventEngine::kInvalidConnectionHandle;
|
||||
}
|
||||
// bind the local address
|
||||
auto local_address = ResolvedAddressMakeWild6(0);
|
||||
|
|
@ -267,7 +267,7 @@ EventEngine::ConnectionHandle WindowsEventEngine::Connect(
|
|||
status = GRPC_WSA_ERROR(WSAGetLastError(), "bind")]() mutable {
|
||||
on_connect(status);
|
||||
});
|
||||
return invalid_connection_handle;
|
||||
return EventEngine::kInvalidConnectionHandle;
|
||||
}
|
||||
// Connect
|
||||
auto watched_socket = iocp_.Watch(sock);
|
||||
|
|
@ -285,7 +285,7 @@ EventEngine::ConnectionHandle WindowsEventEngine::Connect(
|
|||
on_connect(status);
|
||||
});
|
||||
watched_socket->MaybeShutdown(status);
|
||||
return invalid_connection_handle;
|
||||
return EventEngine::kInvalidConnectionHandle;
|
||||
}
|
||||
}
|
||||
GPR_ASSERT(watched_socket != nullptr);
|
||||
|
|
@ -321,8 +321,8 @@ EventEngine::ConnectionHandle WindowsEventEngine::Connect(
|
|||
}
|
||||
|
||||
bool WindowsEventEngine::CancelConnect(EventEngine::ConnectionHandle handle) {
|
||||
if (TaskHandleComparator<ConnectionHandle>::Eq()(handle,
|
||||
invalid_connection_handle)) {
|
||||
if (TaskHandleComparator<ConnectionHandle>::Eq()(
|
||||
handle, EventEngine::kInvalidConnectionHandle)) {
|
||||
GRPC_EVENT_ENGINE_TRACE("%s",
|
||||
"Attempted to cancel an invalid connection handle");
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -45,10 +45,6 @@ namespace experimental {
|
|||
class WindowsEventEngine : public EventEngine,
|
||||
public grpc_core::KeepsGrpcInitialized {
|
||||
public:
|
||||
constexpr static TaskHandle invalid_handle{-1, -1};
|
||||
constexpr static EventEngine::ConnectionHandle invalid_connection_handle{-1,
|
||||
-1};
|
||||
|
||||
class WindowsListener : public EventEngine::Listener {
|
||||
public:
|
||||
~WindowsListener() override;
|
||||
|
|
|
|||
|
|
@ -481,6 +481,7 @@ CORE_SOURCE_FILES = [
|
|||
'src/core/lib/event_engine/channel_args_endpoint_config.cc',
|
||||
'src/core/lib/event_engine/default_event_engine.cc',
|
||||
'src/core/lib/event_engine/default_event_engine_factory.cc',
|
||||
'src/core/lib/event_engine/event_engine.cc',
|
||||
'src/core/lib/event_engine/forkable.cc',
|
||||
'src/core/lib/event_engine/memory_allocator.cc',
|
||||
'src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc',
|
||||
|
|
|
|||
|
|
@ -2033,6 +2033,7 @@ src/core/lib/event_engine/default_event_engine.cc \
|
|||
src/core/lib/event_engine/default_event_engine.h \
|
||||
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/executor/executor.h \
|
||||
src/core/lib/event_engine/forkable.cc \
|
||||
src/core/lib/event_engine/forkable.h \
|
||||
|
|
|
|||
|
|
@ -1812,6 +1812,7 @@ src/core/lib/event_engine/default_event_engine.cc \
|
|||
src/core/lib/event_engine/default_event_engine.h \
|
||||
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/executor/executor.h \
|
||||
src/core/lib/event_engine/forkable.cc \
|
||||
src/core/lib/event_engine/forkable.h \
|
||||
|
|
|
|||
Loading…
Reference in New Issue