GRPC C++  1.80.0
event_engine.h
Go to the documentation of this file.
1 // Copyright 2021 The gRPC Authors
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 #ifndef GRPC_EVENT_ENGINE_EVENT_ENGINE_H
15 #define GRPC_EVENT_ENGINE_EVENT_ENGINE_H
16 
21 #include <grpc/event_engine/port.h>
23 #include <grpc/grpc.h>
25 
26 #include <bitset>
27 #include <cstddef>
28 #include <initializer_list>
29 #include <memory>
30 #include <optional>
31 #include <utility>
32 #include <vector>
33 
34 #include "absl/functional/any_invocable.h"
35 #include "absl/status/status.h"
36 #include "absl/status/statusor.h"
37 #include "absl/types/span.h"
38 
39 // TODO(vigneshbabu): Define the Endpoint::Write metrics collection system
40 // TODO(hork): remove all references to the factory methods.
41 namespace grpc_event_engine {
42 namespace experimental {
43 
112 class EventEngine : public std::enable_shared_from_this<EventEngine>,
113  public Extensible {
114  public:
119  using Duration = std::chrono::duration<int64_t, std::nano>;
126 
127  class Closure {
128  public:
129  Closure() = default;
130  // Closure's are an interface, and thus non-copyable.
131  Closure(const Closure&) = delete;
132  Closure& operator=(const Closure&) = delete;
133  // Polymorphic type => virtual destructor
134  virtual ~Closure() = default;
135  // Run the contained code.
136  virtual void Run() = 0;
137  };
142  struct TaskHandle {
143  intptr_t keys[2];
145  };
150  intptr_t keys[2];
152  };
161  public:
162  static constexpr socklen_t MAX_SIZE_BYTES = GRPC_MAX_SOCKADDR_SIZE;
163 
164  ResolvedAddress(const sockaddr* address, socklen_t size);
165  ResolvedAddress() = default;
166  ResolvedAddress(const ResolvedAddress&) = default;
167  const struct sockaddr* address() const;
168  socklen_t size() const;
169 
170  private:
171  char address_[MAX_SIZE_BYTES] = {};
172  socklen_t size_ = 0;
173  };
174 
183  class Endpoint : public Extensible {
184  public:
187  virtual ~Endpoint() = default;
192  class ReadArgs final {
193  public:
194  ReadArgs() = default;
195  ReadArgs(const ReadArgs&) = default;
196  ReadArgs& operator=(const ReadArgs&) = default;
197  ReadArgs(ReadArgs&&) = default;
198  ReadArgs& operator=(ReadArgs&&) = default;
199 
200  // A suggestion to the endpoint implementation to read at-least the
201  // specified number of bytes over the network connection before marking
202  // the endpoint read operation as complete. gRPC may use this argument
203  // to minimize the number of endpoint read API calls over the lifetime
204  // of a connection.
206  read_hint_bytes_ = read_hint_bytes;
207  }
208  int64_t read_hint_bytes() const { return read_hint_bytes_; }
209 
210  private:
211  int64_t read_hint_bytes_ = 1;
212  };
236  virtual bool Read(absl::AnyInvocable<void(absl::Status)> on_read,
237  SliceBuffer* buffer, ReadArgs args) = 0;
245  struct WriteMetric {
246  size_t key;
247  int64_t value;
248  };
249  // It is the responsibility of the caller of WriteEventCallback to make sure
250  // that the corresponding endpoint is still valid. HINT: Do NOT offload
251  // callbacks onto the EventEngine or other threads.
252  using WriteEventCallback = absl::AnyInvocable<void(
253  WriteEvent, absl::Time, std::vector<WriteMetric>) const>;
254  // A bitmask of the events that the caller is interested in.
255  // Each bit corresponds to an entry in WriteEvent.
256  using WriteEventSet = std::bitset<static_cast<int>(WriteEvent::kCount)>;
257 
258  // A set of metrics that the caller is interested in.
259  class MetricsSet {
260  public:
261  virtual ~MetricsSet() = default;
262 
263  virtual bool IsSet(size_t key) const = 0;
264  };
265 
266  // A sink to receive write events.
267  // The requested metrics are the keys of the metrics that the caller is
268  // interested in. The on_event callback will be called on each event
269  // requested.
270  class WriteEventSink final {
271  public:
272  WriteEventSink(std::shared_ptr<MetricsSet> requested_metrics,
273  std::initializer_list<WriteEvent> requested_events,
274  WriteEventCallback on_event)
275  : requested_metrics_(std::move(requested_metrics)),
276  on_event_(std::move(on_event)) {
277  for (auto event : requested_events) {
278  requested_events_mask_.set(static_cast<int>(event));
279  }
280  }
281 
282  const std::shared_ptr<MetricsSet>& requested_metrics() const {
283  return requested_metrics_;
284  }
285 
286  bool requested_event(WriteEvent event) const {
287  return requested_events_mask_.test(static_cast<int>(event));
288  }
289 
291  return requested_events_mask_;
292  }
293 
296  WriteEventCallback TakeEventCallback() { return std::move(on_event_); }
297 
298  private:
299  std::shared_ptr<MetricsSet> requested_metrics_;
300  WriteEventSet requested_events_mask_;
301  // The callback to be called on each event.
302  WriteEventCallback on_event_;
303  };
308  class WriteArgs final {
309  public:
310  WriteArgs() = default;
311 
312  ~WriteArgs();
313 
314  WriteArgs(const WriteArgs&) = delete;
315  WriteArgs& operator=(const WriteArgs&) = delete;
316 
317  WriteArgs(WriteArgs&& other) noexcept
318  : metrics_sink_(std::move(other.metrics_sink_)),
319  google_specific_(other.google_specific_),
320  max_frame_size_(other.max_frame_size_) {
321  other.google_specific_ = nullptr;
322  }
323 
324  WriteArgs& operator=(WriteArgs&& other) noexcept {
325  if (this != &other) {
326  metrics_sink_ = std::move(other.metrics_sink_);
327  google_specific_ = other.google_specific_;
328  other.google_specific_ = nullptr; // Nullify source
329  max_frame_size_ = other.max_frame_size_;
330  }
331  return *this;
332  }
333 
334  // A sink to receive write events.
335  std::optional<WriteEventSink> TakeMetricsSink() {
336  auto sink = std::move(metrics_sink_);
337  metrics_sink_.reset();
338  return sink;
339  }
340 
341  bool has_metrics_sink() const { return metrics_sink_.has_value(); }
342 
344  metrics_sink_ = std::move(sink);
345  }
346 
347  // Represents private information that may be passed by gRPC for
348  // select endpoints expected to be used only within google.
349  // TODO(ctiller): Remove this method once all callers are migrated to
350  // metrics sink.
352  return google_specific_;
353  }
354 
356  return std::exchange(google_specific_, nullptr);
357  }
358 
360  google_specific_ = pointer;
361  }
362 
363  // A suggestion to the endpoint implementation to group data to be written
364  // into frames of the specified max_frame_size. gRPC may use this
365  // argument to dynamically control the max sizes of frames sent to a
366  // receiver in response to high receiver memory pressure.
367  int64_t max_frame_size() const { return max_frame_size_; }
368 
370  max_frame_size_ = max_frame_size;
371  }
372 
373  private:
374  std::optional<WriteEventSink> metrics_sink_;
375  void* google_specific_ = nullptr;
376  int64_t max_frame_size_ = 1024 * 1024;
377  };
378 
380  public:
381  virtual ~TelemetryInfo() = default;
382 
387  virtual std::vector<size_t> AllWriteMetrics() const = 0;
390  virtual std::optional<absl::string_view> GetMetricName(
391  size_t key) const = 0;
394  virtual std::optional<size_t> GetMetricKey(
395  absl::string_view name) const = 0;
397  virtual std::shared_ptr<MetricsSet> GetMetricsSet(
398  absl::Span<const size_t> keys) const = 0;
400  virtual std::shared_ptr<MetricsSet> GetFullMetricsSet() const = 0;
401  };
402 
423  virtual bool Write(absl::AnyInvocable<void(absl::Status)> on_writable,
424  SliceBuffer* data, WriteArgs args) = 0;
427  virtual const ResolvedAddress& GetPeerAddress() const = 0;
428  virtual const ResolvedAddress& GetLocalAddress() const = 0;
429 
430  virtual std::shared_ptr<TelemetryInfo> GetTelemetryInfo() const = 0;
431  };
432 
439  using OnConnectCallback =
440  absl::AnyInvocable<void(absl::StatusOr<std::unique_ptr<Endpoint>>)>;
441 
444  class Listener : public Extensible {
445  public:
447  using AcceptCallback = absl::AnyInvocable<void(
448  std::unique_ptr<Endpoint>, MemoryAllocator memory_allocator)>;
449  virtual ~Listener() = default;
455  virtual absl::StatusOr<int> Bind(const ResolvedAddress& addr) = 0;
456  virtual absl::Status Start() = 0;
457  };
458 
474  virtual absl::StatusOr<std::unique_ptr<Listener>> CreateListener(
475  Listener::AcceptCallback on_accept,
476  absl::AnyInvocable<void(absl::Status)> on_shutdown,
477  const EndpointConfig& config,
478  std::unique_ptr<MemoryAllocatorFactory> memory_allocator_factory) = 0;
490  virtual ConnectionHandle Connect(OnConnectCallback on_connect,
491  const ResolvedAddress& addr,
492  const EndpointConfig& args,
493  MemoryAllocator memory_allocator,
494  Duration timeout) = 0;
495 
504  virtual bool CancelConnect(ConnectionHandle handle) = 0;
512  class DNSResolver : public Extensible {
513  public:
518  std::string dns_server;
519  };
521  struct SRVRecord {
522  std::string host;
523  int port = 0;
524  int priority = 0;
525  int weight = 0;
526  };
529  using LookupHostnameCallback =
530  absl::AnyInvocable<void(absl::StatusOr<std::vector<ResolvedAddress>>)>;
532  using LookupSRVCallback =
533  absl::AnyInvocable<void(absl::StatusOr<std::vector<SRVRecord>>)>;
535  using LookupTXTCallback =
536  absl::AnyInvocable<void(absl::StatusOr<std::vector<std::string>>)>;
537 
538  virtual ~DNSResolver() = default;
539 
550  virtual void LookupHostname(LookupHostnameCallback on_resolve,
551  absl::string_view name,
552  absl::string_view default_port) = 0;
557  virtual void LookupSRV(LookupSRVCallback on_resolve,
558  absl::string_view name) = 0;
563  virtual void LookupTXT(LookupTXTCallback on_resolve,
564  absl::string_view name) = 0;
565  };
566 
574  virtual ~EventEngine() = default;
575 
576  // TODO(nnoble): consider whether we can remove this method before we
577  // de-experimentalize this API.
578  virtual bool IsWorkerThread() = 0;
579 
585  virtual absl::StatusOr<std::unique_ptr<DNSResolver>> GetDNSResolver(
586  const DNSResolver::ResolverOptions& options) = 0;
587 
597  virtual void Run(Closure* closure) = 0;
610  virtual void Run(absl::AnyInvocable<void()> closure) = 0;
622  virtual TaskHandle RunAfter(Duration when, Closure* closure) = 0;
637  virtual TaskHandle RunAfter(Duration when,
638  absl::AnyInvocable<void()> closure) = 0;
647  virtual bool Cancel(TaskHandle handle) = 0;
648 };
649 
659 // TODO(hork): delete once all known users have migrated away
661  absl::AnyInvocable<std::shared_ptr<EventEngine>()> factory);
662 
669 //
670 // TODO(hork): delete once all known users have migrated away
672 
674 std::shared_ptr<EventEngine> CreateEventEngine();
675 
685 void SetDefaultEventEngine(std::shared_ptr<EventEngine> engine);
686 
695 std::shared_ptr<EventEngine> GetDefaultEventEngine();
696 
709 
710 bool operator==(const EventEngine::TaskHandle& lhs,
711  const EventEngine::TaskHandle& rhs);
712 bool operator!=(const EventEngine::TaskHandle& lhs,
713  const EventEngine::TaskHandle& rhs);
714 std::ostream& operator<<(std::ostream& out,
715  const EventEngine::TaskHandle& handle);
717  const EventEngine::ConnectionHandle& rhs);
719  const EventEngine::ConnectionHandle& rhs);
720 std::ostream& operator<<(std::ostream& out,
721  const EventEngine::ConnectionHandle& handle);
722 
723 namespace detail {
724 std::string FormatHandleString(uint64_t key1, uint64_t key2);
725 }
726 
727 template <typename Sink>
728 void AbslStringify(Sink& out, const EventEngine::ConnectionHandle& handle) {
729  out.Append(detail::FormatHandleString(handle.keys[0], handle.keys[1]));
730 }
731 
732 template <typename Sink>
733 void AbslStringify(Sink& out, const EventEngine::TaskHandle& handle) {
734  out.Append(detail::FormatHandleString(handle.keys[0], handle.keys[1]));
735 }
736 
740 
741 } // namespace experimental
742 } // namespace grpc_event_engine
743 
744 #endif // GRPC_EVENT_ENGINE_EVENT_ENGINE_H
grpc_event_engine::experimental::EventEngine::OnConnectCallback
absl::AnyInvocable< void(absl::StatusOr< std::unique_ptr< Endpoint > >)> OnConnectCallback
Called when a new connection is established.
Definition: event_engine.h:440
grpc_event_engine::experimental::internal::WriteEvent
WriteEvent
Definition: write_event.h:23
grpc_event_engine::experimental::EventEngine::~EventEngine
virtual ~EventEngine()=default
At time of destruction, the EventEngine must have no active responsibilities.
grpc_event_engine::experimental::operator<<
std::ostream & operator<<(std::ostream &out, const EventEngine::TaskHandle &handle)
grpc_event_engine::experimental::EventEngine::ResolvedAddress::size
socklen_t size() const
grpc_event_engine::experimental::ShutdownDefaultEventEngine
void ShutdownDefaultEventEngine()
Resets gRPC to use one of the default internal EventEngines for all new GetDefaultEventEngine request...
grpc_event_engine::experimental::EventEngine::Endpoint::TelemetryInfo::GetMetricKey
virtual std::optional< size_t > GetMetricKey(absl::string_view name) const =0
Returns the key of the write metric with the given name.
grpc_event_engine::experimental::EventEngine::Endpoint::WriteMetric
An output WriteMetric consists of a key and a value.
Definition: event_engine.h:245
grpc_event_engine::experimental::EventEngine::ConnectionHandle
A handle to a cancellable connection attempt.
Definition: event_engine.h:149
port.h
grpc_event_engine::experimental::EventEngine::Endpoint::WriteEventSet
std::bitset< static_cast< int >(WriteEvent::kCount)> WriteEventSet
Definition: event_engine.h:256
grpc_event_engine::experimental::EventEngine::Endpoint::WriteArgs::TakeMetricsSink
std::optional< WriteEventSink > TakeMetricsSink()
Definition: event_engine.h:335
grpc_event_engine::experimental::EventEngine::Endpoint::ReadArgs::ReadArgs
ReadArgs()=default
grpc_event_engine::experimental::GetDefaultEventEngine
std::shared_ptr< EventEngine > GetDefaultEventEngine()
Returns the default EventEngine instance.
grpc_event_engine::experimental::EventEngine::Endpoint::WriteArgs::WriteArgs
WriteArgs()=default
grpc_event_engine::experimental::EventEngine::Endpoint::WriteMetric::key
size_t key
Definition: event_engine.h:246
GRPC_MAX_SOCKADDR_SIZE
#define GRPC_MAX_SOCKADDR_SIZE
Definition: port_platform.h:897
grpc_event_engine::experimental::EventEngine::ResolvedAddress::MAX_SIZE_BYTES
static constexpr socklen_t MAX_SIZE_BYTES
Definition: event_engine.h:162
extensible.h
grpc_event_engine::experimental::EventEngine::Endpoint::WriteArgs::~WriteArgs
~WriteArgs()
grpc_event_engine::experimental::EventEngine::Endpoint::WriteEventSink::requested_metrics
const std::shared_ptr< MetricsSet > & requested_metrics() const
Definition: event_engine.h:282
grpc_event_engine::experimental::EventEngine::RunAfter
virtual TaskHandle RunAfter(Duration when, Closure *closure)=0
Synonymous with scheduling an alarm to run after duration when.
grpc_event_engine::experimental::EventEngine::Endpoint::WriteEventSink::TakeEventCallback
WriteEventCallback TakeEventCallback()
Takes the callback.
Definition: event_engine.h:296
grpc_event_engine::experimental::EventEngine::Listener::AcceptCallback
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:448
grpc_event_engine::experimental::EventEngine
The EventEngine Interface.
Definition: event_engine.h:112
grpc_event_engine::experimental::EventEngine::Endpoint::~Endpoint
virtual ~Endpoint()=default
Shuts down all connections and invokes all pending read or write callbacks with an error status.
grpc_event_engine::experimental::EventEngine::IsWorkerThread
virtual bool IsWorkerThread()=0
grpc_event_engine::experimental::EventEngine::DNSResolver::~DNSResolver
virtual ~DNSResolver()=default
grpc_event_engine::experimental::EventEngine::DNSResolver::LookupHostname
virtual void LookupHostname(LookupHostnameCallback on_resolve, absl::string_view name, absl::string_view default_port)=0
Asynchronously resolve an address.
grpc_event_engine::experimental::AbslStringify
void AbslStringify(Sink &out, const EventEngine::ConnectionHandle &handle)
Definition: event_engine.h:728
grpc_event_engine::experimental::EventEngine::Endpoint::WriteArgs::set_metrics_sink
void set_metrics_sink(WriteEventSink sink)
Definition: event_engine.h:343
grpc_event_engine::experimental::EventEngine::Endpoint::WriteEventSink
Definition: event_engine.h:270
grpc_event_engine::experimental::EventEngine::DNSResolver::LookupSRVCallback
absl::AnyInvocable< void(absl::StatusOr< std::vector< SRVRecord > >)> LookupSRVCallback
Called with a collection of SRV records.
Definition: event_engine.h:533
grpc_event_engine::experimental::EventEngine::Endpoint::WriteEventCallback
absl::AnyInvocable< void(WriteEvent, absl::Time, std::vector< WriteMetric >) const > WriteEventCallback
Definition: event_engine.h:253
grpc_event_engine::experimental::EventEngine::Endpoint::WriteArgs::TakeDeprecatedAndDiscouragedGoogleSpecificPointer
void * TakeDeprecatedAndDiscouragedGoogleSpecificPointer()
Definition: event_engine.h:355
grpc_event_engine::experimental::EventEngine::DNSResolver::SRVRecord::port
int port
Definition: event_engine.h:523
grpc_event_engine::experimental::EventEngine::Endpoint::Write
virtual bool Write(absl::AnyInvocable< void(absl::Status)> on_writable, SliceBuffer *data, WriteArgs args)=0
Writes data out on the connection.
grpc_event_engine::experimental::EventEngine::Listener::Bind
virtual absl::StatusOr< int > Bind(const ResolvedAddress &addr)=0
Bind an address/port to this Listener.
grpc_event_engine::experimental::EventEngine::Endpoint::MetricsSet::IsSet
virtual bool IsSet(size_t key) const =0
grpc_event_engine::experimental::EventEngine::Endpoint::MetricsSet
Definition: event_engine.h:259
grpc_event_engine::experimental::grpc_event_engine_arg_vtable
const grpc_arg_pointer_vtable * grpc_event_engine_arg_vtable(void)
Fetch a vtable for a grpc_channel_arg that points to a grpc_event_engine.
grpc_event_engine::experimental::EventEngine::DNSResolver::SRVRecord::host
std::string host
Definition: event_engine.h:522
grpc_event_engine::experimental::EventEngine::ConnectionHandle::keys
intptr_t keys[2]
Definition: event_engine.h:150
grpc_event_engine::experimental::EventEngine::Endpoint::WriteArgs::has_metrics_sink
bool has_metrics_sink() const
Definition: event_engine.h:341
grpc_event_engine::experimental::EventEngineFactoryReset
void EventEngineFactoryReset()
[DEPRECATED] Reset gRPC's EventEngine factory to the built-in default.
grpc_event_engine::experimental::EventEngine::DNSResolver::LookupHostnameCallback
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:530
grpc_event_engine::experimental::EventEngine::Endpoint::WriteArgs
A struct representing optional arguments that may be provided to an EventEngine Endpoint Write API ca...
Definition: event_engine.h:308
grpc_arg_pointer_vtable
Definition: grpc_types.h:83
grpc_event_engine::experimental::EventEngine::CancelConnect
virtual bool CancelConnect(ConnectionHandle handle)=0
Request cancellation of a connection attempt.
grpc_event_engine::experimental::EventEngine::Endpoint::WriteArgs::SetDeprecatedAndDiscouragedGoogleSpecificPointer
void SetDeprecatedAndDiscouragedGoogleSpecificPointer(void *pointer)
Definition: event_engine.h:359
grpc_event_engine::experimental::EventEngine::Endpoint::TelemetryInfo::GetMetricsSet
virtual std::shared_ptr< MetricsSet > GetMetricsSet(absl::Span< const size_t > keys) const =0
Returns a MetricsSet with all the keys from keys set.
grpc_event_engine::experimental::EventEngine::Endpoint::WriteArgs::set_max_frame_size
void set_max_frame_size(int64_t max_frame_size)
Definition: event_engine.h:369
grpc_event_engine::experimental::operator!=
bool operator!=(const EventEngine::TaskHandle &lhs, const EventEngine::TaskHandle &rhs)
grpc_event_engine::experimental::EventEngine::Endpoint::WriteMetric::value
int64_t value
Definition: event_engine.h:247
grpc_event_engine::experimental::EventEngine::Endpoint::WriteArgs::operator=
WriteArgs & operator=(const WriteArgs &)=delete
grpc_event_engine::experimental::EventEngine::DNSResolver::ResolverOptions
Optional configuration for DNSResolvers.
Definition: event_engine.h:515
grpc_event_engine::experimental::EventEngine::Endpoint::WriteArgs::WriteArgs
WriteArgs(WriteArgs &&other) noexcept
Definition: event_engine.h:317
grpc_event_engine::experimental::EventEngine::Endpoint::GetTelemetryInfo
virtual std::shared_ptr< TelemetryInfo > GetTelemetryInfo() const =0
grpc_event_engine::experimental::EventEngine::DNSResolver::SRVRecord
DNS SRV record type.
Definition: event_engine.h:521
grpc_event_engine::experimental::EventEngine::DNSResolver::LookupTXT
virtual void LookupTXT(LookupTXTCallback on_resolve, absl::string_view name)=0
Asynchronously perform a TXT record lookup.
grpc_event_engine::experimental::EndpointConfig
Collection of parameters used to configure client and server endpoints.
Definition: endpoint_config.h:31
grpc_event_engine::experimental::EventEngine::ResolvedAddress
Thin wrapper around a platform-specific sockaddr type.
Definition: event_engine.h:160
grpc_event_engine::experimental::EventEngine::Listener
Listens for incoming connection requests from gRPC clients and initiates request processing once conn...
Definition: event_engine.h:444
grpc_event_engine::experimental::SliceBuffer
A Wrapper around grpc_slice_buffer pointer.
Definition: slice_buffer.h:50
grpc_event_engine::experimental::detail::FormatHandleString
std::string FormatHandleString(uint64_t key1, uint64_t key2)
grpc_event_engine::experimental::EventEngine::Closure
A custom closure type for EventEngine task execution.
Definition: event_engine.h:127
grpc.h
grpc_event_engine::experimental::EventEngine::Closure::Closure
Closure()=default
grpc_event_engine::experimental::EventEngine::Endpoint::TelemetryInfo
Definition: event_engine.h:379
grpc_event_engine::experimental::EventEngine::ResolvedAddress::ResolvedAddress
ResolvedAddress()=default
grpc_event_engine::experimental::EventEngine::Endpoint::WriteEventSink::WriteEventSink
WriteEventSink(std::shared_ptr< MetricsSet > requested_metrics, std::initializer_list< WriteEvent > requested_events, WriteEventCallback on_event)
Definition: event_engine.h:272
grpc_event_engine::experimental::EventEngine::ResolvedAddress::address
const struct sockaddr * address() const
grpc_event_engine::experimental::EventEngine::Listener::Start
virtual absl::Status Start()=0
grpc_event_engine::experimental::EventEngine::Closure::operator=
Closure & operator=(const Closure &)=delete
grpc_event_engine::experimental::EventEngine::Closure::~Closure
virtual ~Closure()=default
grpc_event_engine::experimental::EventEngine::Run
virtual void Run(Closure *closure)=0
Asynchronously executes a task as soon as possible.
slice_buffer.h
grpc_event_engine::experimental::EventEngine::Endpoint::WriteEventSink::requested_events_mask
WriteEventSet requested_events_mask() const
Definition: event_engine.h:290
grpc_event_engine::experimental::EventEngine::DNSResolver::ResolverOptions::dns_server
std::string dns_server
If empty, default DNS servers will be used.
Definition: event_engine.h:518
grpc_event_engine::experimental::EventEngine::DNSResolver::SRVRecord::weight
int weight
Definition: event_engine.h:525
grpc_event_engine::experimental::SetEventEngineFactory
void SetEventEngineFactory(absl::AnyInvocable< std::shared_ptr< EventEngine >()> factory)
[DEPRECATED] Replace gRPC's default EventEngine factory.
grpc_event_engine::experimental::EventEngine::Endpoint::GetPeerAddress
virtual const ResolvedAddress & GetPeerAddress() const =0
Returns an address in the format described in DNSResolver.
grpc_event_engine::experimental::EventEngine::Endpoint::TelemetryInfo::~TelemetryInfo
virtual ~TelemetryInfo()=default
grpc_event_engine::experimental::EventEngine::Closure::Run
virtual void Run()=0
grpc_event_engine::experimental::EventEngine::DNSResolver
Provides asynchronous resolution.
Definition: event_engine.h:512
grpc_event_engine::experimental::EventEngine::Endpoint::WriteArgs::GetDeprecatedAndDiscouragedGoogleSpecificPointer
void * GetDeprecatedAndDiscouragedGoogleSpecificPointer()
Definition: event_engine.h:351
grpc_event_engine::experimental::EventEngine::Endpoint::Read
virtual bool Read(absl::AnyInvocable< void(absl::Status)> on_read, SliceBuffer *buffer, ReadArgs args)=0
Reads data from the Endpoint.
grpc_event_engine::experimental::Extensible
Definition: extensible.h:25
grpc_event_engine::experimental::EventEngine::TaskHandle
Represents a scheduled task.
Definition: event_engine.h:142
grpc_event_engine::experimental::EventEngine::Cancel
virtual bool Cancel(TaskHandle handle)=0
Request cancellation of a task.
grpc_event_engine::experimental::SetDefaultEventEngine
void SetDefaultEventEngine(std::shared_ptr< EventEngine > engine)
Set the default EventEngine instance, which will be used throughout gRPC.
grpc_event_engine::experimental::CreateEventEngine
std::shared_ptr< EventEngine > CreateEventEngine()
Create a new EventEngine instance.
grpc_event_engine::experimental::EventEngine::Endpoint::ReadArgs
A struct representing optional arguments that may be provided to an EventEngine Endpoint Read API cal...
Definition: event_engine.h:192
grpc_event_engine::experimental::EventEngine::Endpoint::WriteArgs::operator=
WriteArgs & operator=(WriteArgs &&other) noexcept
Definition: event_engine.h:324
grpc_event_engine::experimental::EventEngine::DNSResolver::SRVRecord::priority
int priority
Definition: event_engine.h:524
write_event.h
grpc_event_engine::experimental::EventEngine::GetDNSResolver
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.
grpc_event_engine::experimental::EventEngine::Endpoint::ReadArgs::set_read_hint_bytes
void set_read_hint_bytes(int64_t read_hint_bytes)
Definition: event_engine.h:205
std
Definition: async_unary_call.h:410
grpc_event_engine::experimental::EventEngine::TaskHandle::kInvalid
static const GRPC_DLL TaskHandle kInvalid
Definition: event_engine.h:144
grpc_event_engine
Definition: endpoint_config.h:24
grpc_event_engine::experimental::EventEngine::Endpoint::WriteArgs::max_frame_size
int64_t max_frame_size() const
Definition: event_engine.h:367
grpc_event_engine::experimental::EventEngine::DNSResolver::LookupTXTCallback
absl::AnyInvocable< void(absl::StatusOr< std::vector< std::string > >)> LookupTXTCallback
Called with the result of a TXT record lookup.
Definition: event_engine.h:536
grpc_event_engine::experimental::EventEngine::Endpoint::WriteEventSink::requested_event
bool requested_event(WriteEvent event) const
Definition: event_engine.h:286
grpc_event_engine::experimental::EventEngine::ConnectionHandle::kInvalid
static const GRPC_DLL ConnectionHandle kInvalid
Definition: event_engine.h:151
grpc_event_engine::experimental::EventEngine::Endpoint::ReadArgs::read_hint_bytes
int64_t read_hint_bytes() const
Definition: event_engine.h:208
grpc_event_engine::experimental::EventEngine::Endpoint
One end of a connection between a gRPC client and server.
Definition: event_engine.h:183
grpc_event_engine::experimental::EventEngine::Endpoint::TelemetryInfo::GetFullMetricsSet
virtual std::shared_ptr< MetricsSet > GetFullMetricsSet() const =0
Returns a MetricsSet with all supported keys set.
grpc_event_engine::experimental::MemoryAllocator
Definition: memory_allocator.h:33
grpc_event_engine::experimental::EventEngine::Endpoint::MetricsSet::~MetricsSet
virtual ~MetricsSet()=default
grpc_event_engine::experimental::EventEngine::Connect
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.
memory_allocator.h
GRPC_DLL
#define GRPC_DLL
Definition: port_platform.h:130
grpc_event_engine::experimental::EventEngine::Endpoint::TelemetryInfo::GetMetricName
virtual std::optional< absl::string_view > GetMetricName(size_t key) const =0
Returns the name of the write metric with the given key.
grpc_event_engine::experimental::EventEngine::TaskHandle::keys
intptr_t keys[2]
Definition: event_engine.h:143
grpc_event_engine::experimental::EventEngine::Endpoint::TelemetryInfo::AllWriteMetrics
virtual std::vector< size_t > AllWriteMetrics() const =0
Returns the list of write metrics that the endpoint supports.
endpoint_config.h
grpc_event_engine::experimental::EventEngine::Listener::~Listener
virtual ~Listener()=default
grpc::protobuf::util::Status
::absl::Status Status
Definition: config_protobuf.h:107
grpc_event_engine::experimental::EventEngine::DNSResolver::LookupSRV
virtual void LookupSRV(LookupSRVCallback on_resolve, absl::string_view name)=0
Asynchronously perform an SRV record lookup.
grpc_event_engine::experimental::EventEngine::CreateListener
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.
grpc_event_engine::experimental::EventEngine::Duration
std::chrono::duration< int64_t, std::nano > Duration
A duration between two events.
Definition: event_engine.h:119
grpc_event_engine::experimental::EventEngine::Endpoint::GetLocalAddress
virtual const ResolvedAddress & GetLocalAddress() const =0
grpc_event_engine::experimental::operator==
bool operator==(const EventEngine::TaskHandle &lhs, const EventEngine::TaskHandle &rhs)
grpc_event_engine::experimental::EventEngine::Endpoint::ReadArgs::operator=
ReadArgs & operator=(const ReadArgs &)=default
port_platform.h