Go to the documentation of this file.
14 #ifndef GRPC_EVENT_ENGINE_EVENT_ENGINE_H
15 #define GRPC_EVENT_ENGINE_EVENT_ENGINE_H
26 #include <initializer_list>
29 #include "absl/functional/any_invocable.h"
30 #include "absl/status/status.h"
31 #include "absl/status/statusor.h"
36 namespace experimental {
106 class EventEngine :
public std::enable_shared_from_this<EventEngine>,
113 using Duration = std::chrono::duration<int64_t, std::nano>;
130 virtual void Run() = 0;
161 const struct sockaddr*
address()
const;
162 socklen_t
size()
const;
205 int64_t read_hint_bytes_ = 1;
255 std::initializer_list<WriteEvent> requested_events,
258 on_event_(
std::move(on_event)) {
259 for (
auto event : requested_events) {
260 requested_events_mask_.set(
static_cast<int>(event));
265 return requested_metrics_;
269 return requested_events_mask_.test(
static_cast<int>(event));
273 return requested_events_mask_;
279 absl::Span<const size_t> requested_metrics_;
298 auto sink = std::move(metrics_sink_);
299 metrics_sink_.reset();
306 metrics_sink_ = std::move(sink);
314 return google_specific_;
318 google_specific_ = pointer;
332 std::optional<WriteEventSink> metrics_sink_;
333 void* google_specific_ =
nullptr;
334 int64_t max_frame_size_ = 1024 * 1024;
369 virtual std::optional<absl::string_view>
GetMetricName(
size_t key) = 0;
372 virtual std::optional<size_t>
GetMetricKey(absl::string_view name) = 0;
382 absl::AnyInvocable<void(absl::StatusOr<std::unique_ptr<Endpoint>>)>;
420 std::unique_ptr<MemoryAllocatorFactory> memory_allocator_factory) = 0;
472 absl::AnyInvocable<void(absl::StatusOr<std::vector<ResolvedAddress>>)>;
475 absl::AnyInvocable<void(absl::StatusOr<std::vector<SRVRecord>>)>;
478 absl::AnyInvocable<void(absl::StatusOr<std::vector<std::string>>)>;
493 absl::string_view name,
494 absl::string_view default_port) = 0;
500 absl::string_view name) = 0;
506 absl::string_view name) = 0;
527 virtual absl::StatusOr<std::unique_ptr<DNSResolver>>
GetDNSResolver(
552 virtual void Run(absl::AnyInvocable<
void()> closure) = 0;
580 absl::AnyInvocable<
void()> closure) = 0;
603 absl::AnyInvocable<std::shared_ptr<EventEngine>()> factory);
669 template <
typename Sink>
674 template <
typename Sink>
682 #endif // GRPC_EVENT_ENGINE_EVENT_ENGINE_H
virtual std::optional< absl::string_view > GetMetricName(size_t key)=0
Returns the name of the write metric with the given key.
absl::AnyInvocable< void(absl::StatusOr< std::unique_ptr< Endpoint > >)> OnConnectCallback
Called when a new connection is established.
Definition: event_engine.h:382
WriteEvent
Definition: write_event.h:23
virtual ~EventEngine()=default
At time of destruction, the EventEngine must have no active responsibilities.
std::ostream & operator<<(std::ostream &out, const EventEngine::TaskHandle &handle)
void ShutdownDefaultEventEngine()
Resets gRPC to use one of the default internal EventEngines for all new GetDefaultEventEngine request...
An output WriteMetric consists of a key and a value.
Definition: event_engine.h:239
A handle to a cancellable connection attempt.
Definition: event_engine.h:143
std::bitset< static_cast< int >(WriteEvent::kCount)> WriteEventSet
Definition: event_engine.h:247
std::optional< WriteEventSink > TakeMetricsSink()
Definition: event_engine.h:297
std::shared_ptr< EventEngine > GetDefaultEventEngine()
Returns the default EventEngine instance.
size_t key
Definition: event_engine.h:240
static constexpr socklen_t MAX_SIZE_BYTES
Definition: event_engine.h:156
virtual std::vector< size_t > AllWriteMetrics()=0
Returns the list of write metrics that the endpoint supports.
virtual TaskHandle RunAfter(Duration when, Closure *closure)=0
Synonymous with scheduling an alarm to run after duration when.
WriteEventCallback TakeEventCallback()
Definition: event_engine.h:276
absl::AnyInvocable< void(std::unique_ptr< Endpoint >, MemoryAllocator memory_allocator)> AcceptCallback
Called when the listener has accepted a new client connection.
Definition: event_engine.h:390
The EventEngine Interface.
Definition: event_engine.h:106
virtual ~Endpoint()=default
Shuts down all connections and invokes all pending read or write callbacks with an error status.
ReadArgs & operator=(const ReadArgs &)=delete
virtual bool IsWorkerThread()=0
virtual ~DNSResolver()=default
virtual void LookupHostname(LookupHostnameCallback on_resolve, absl::string_view name, absl::string_view default_port)=0
Asynchronously resolve an address.
virtual std::optional< size_t > GetMetricKey(absl::string_view name)=0
Returns the key of the write metric with the given name.
void AbslStringify(Sink &out, const EventEngine::ConnectionHandle &handle)
Definition: event_engine.h:670
void set_metrics_sink(WriteEventSink sink)
Definition: event_engine.h:305
Definition: event_engine.h:252
absl::AnyInvocable< void(absl::StatusOr< std::vector< SRVRecord > >)> LookupSRVCallback
Called with a collection of SRV records.
Definition: event_engine.h:475
absl::AnyInvocable< void(WriteEvent, absl::Time, std::vector< WriteMetric >) const > WriteEventCallback
Definition: event_engine.h:244
int port
Definition: event_engine.h:465
virtual bool Write(absl::AnyInvocable< void(absl::Status)> on_writable, SliceBuffer *data, WriteArgs args)=0
Writes data out on the connection.
virtual absl::StatusOr< int > Bind(const ResolvedAddress &addr)=0
Bind an address/port to this Listener.
std::string host
Definition: event_engine.h:464
intptr_t keys[2]
Definition: event_engine.h:144
bool has_metrics_sink() const
Definition: event_engine.h:303
void EventEngineFactoryReset()
[DEPRECATED] Reset gRPC's EventEngine factory to the built-in default.
absl::AnyInvocable< void(absl::StatusOr< std::vector< ResolvedAddress > >)> LookupHostnameCallback
Called with the collection of sockaddrs that were resolved from a given target address.
Definition: event_engine.h:472
A struct representing optional arguments that may be provided to an EventEngine Endpoint Write API ca...
Definition: event_engine.h:288
absl::Span< const size_t > requested_metrics() const
Definition: event_engine.h:264
virtual bool CancelConnect(ConnectionHandle handle)=0
Request cancellation of a connection attempt.
void SetDeprecatedAndDiscouragedGoogleSpecificPointer(void *pointer)
Definition: event_engine.h:317
void set_max_frame_size(int64_t max_frame_size)
Definition: event_engine.h:327
bool operator!=(const EventEngine::TaskHandle &lhs, const EventEngine::TaskHandle &rhs)
int64_t value
Definition: event_engine.h:241
WriteArgs & operator=(const WriteArgs &)=delete
Optional configuration for DNSResolvers.
Definition: event_engine.h:457
DNS SRV record type.
Definition: event_engine.h:463
virtual void LookupTXT(LookupTXTCallback on_resolve, absl::string_view name)=0
Asynchronously perform a TXT record lookup.
Collection of parameters used to configure client and server endpoints.
Definition: endpoint_config.h:31
Thin wrapper around a platform-specific sockaddr type.
Definition: event_engine.h:154
Listens for incoming connection requests from gRPC clients and initiates request processing once conn...
Definition: event_engine.h:386
A Wrapper around grpc_slice_buffer pointer.
Definition: slice_buffer.h:50
std::string FormatHandleString(uint64_t key1, uint64_t key2)
A custom closure type for EventEngine task execution.
Definition: event_engine.h:121
ResolvedAddress()=default
const struct sockaddr * address() const
virtual absl::Status Start()=0
Closure & operator=(const Closure &)=delete
virtual ~Closure()=default
virtual void Run(Closure *closure)=0
Asynchronously executes a task as soon as possible.
WriteEventSet requested_events_mask() const
Definition: event_engine.h:272
std::string dns_server
If empty, default DNS servers will be used.
Definition: event_engine.h:460
int weight
Definition: event_engine.h:467
void SetEventEngineFactory(absl::AnyInvocable< std::shared_ptr< EventEngine >()> factory)
[DEPRECATED] Replace gRPC's default EventEngine factory.
virtual const ResolvedAddress & GetPeerAddress() const =0
Returns an address in the format described in DNSResolver.
Provides asynchronous resolution.
Definition: event_engine.h:454
void * GetDeprecatedAndDiscouragedGoogleSpecificPointer()
Definition: event_engine.h:313
virtual bool Read(absl::AnyInvocable< void(absl::Status)> on_read, SliceBuffer *buffer, ReadArgs args)=0
Reads data from the Endpoint.
Definition: extensible.h:25
Represents a scheduled task.
Definition: event_engine.h:136
virtual bool Cancel(TaskHandle handle)=0
Request cancellation of a task.
void SetDefaultEventEngine(std::shared_ptr< EventEngine > engine)
Set the default EventEngine instance, which will be used throughout gRPC.
std::shared_ptr< EventEngine > CreateEventEngine()
Create a new EventEngine instance.
A struct representing optional arguments that may be provided to an EventEngine Endpoint Read API cal...
Definition: event_engine.h:186
int priority
Definition: event_engine.h:466
virtual absl::StatusOr< std::unique_ptr< DNSResolver > > GetDNSResolver(const DNSResolver::ResolverOptions &options)=0
Creates and returns an instance of a DNSResolver, optionally configured by the options struct.
void set_read_hint_bytes(int64_t read_hint_bytes)
Definition: event_engine.h:199
WriteEventSink(absl::Span< const size_t > requested_metrics, std::initializer_list< WriteEvent > requested_events, WriteEventCallback on_event)
Definition: event_engine.h:254
Definition: async_unary_call.h:406
static const GRPC_DLL TaskHandle kInvalid
Definition: event_engine.h:138
Definition: endpoint_config.h:24
int64_t max_frame_size() const
Definition: event_engine.h:325
absl::AnyInvocable< void(absl::StatusOr< std::vector< std::string > >)> LookupTXTCallback
Called with the result of a TXT record lookup.
Definition: event_engine.h:478
bool requested_event(WriteEvent event) const
Definition: event_engine.h:268
static const GRPC_DLL ConnectionHandle kInvalid
Definition: event_engine.h:145
int64_t read_hint_bytes() const
Definition: event_engine.h:202
One end of a connection between a gRPC client and server.
Definition: event_engine.h:177
Definition: memory_allocator.h:33
virtual ConnectionHandle Connect(OnConnectCallback on_connect, const ResolvedAddress &addr, const EndpointConfig &args, MemoryAllocator memory_allocator, Duration timeout)=0
Creates a client network connection to a remote network listener.
intptr_t keys[2]
Definition: event_engine.h:137
virtual ~Listener()=default
::absl::Status Status
Definition: config_protobuf.h:107
virtual void LookupSRV(LookupSRVCallback on_resolve, absl::string_view name)=0
Asynchronously perform an SRV record lookup.
virtual 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)=0
Factory method to create a network listener / server.
std::chrono::duration< int64_t, std::nano > Duration
A duration between two events.
Definition: event_engine.h:113
virtual const ResolvedAddress & GetLocalAddress() const =0
bool operator==(const EventEngine::TaskHandle &lhs, const EventEngine::TaskHandle &rhs)