[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:
AJ Heller 2023-01-25 17:31:34 -08:00 committed by GitHub
parent 79f057e9d0
commit d14020d4e2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 64 additions and 16 deletions

5
CMakeLists.txt generated
View File

@ -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

2
Makefile generated
View File

@ -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 \

View File

@ -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

1
config.m4 generated
View File

@ -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 \

1
config.w32 generated
View File

@ -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 " +

1
gRPC-Core.podspec generated
View File

@ -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',

1
grpc.gemspec generated
View File

@ -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 )

3
grpc.gyp generated
View File

@ -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',

View File

@ -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.
///

1
package.xml generated
View File

@ -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" />

View File

@ -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",

View File

@ -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

View File

@ -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,

View File

@ -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;

View File

@ -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;

View File

@ -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',

View File

@ -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 \

View File

@ -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 \