32 #ifndef GRPCXX_IMPL_CODEGEN_COMPLETION_QUEUE_H
33 #define GRPCXX_IMPL_CODEGEN_COMPLETION_QUEUE_H
50 template <
class W,
class R>
51 class ClientReaderWriter;
57 template <
class W,
class R>
73 template <
class ServiceType,
class RequestType,
class ResponseType>
75 template <
class ServiceType,
class RequestType,
class ResponseType>
77 template <
class ServiceType,
class RequestType,
class ResponseType>
79 template <
class ServiceType,
class RequestType,
class ResponseType>
82 template <
class Streamer,
bool WriteNeeded>
84 template <
class InputMessage,
class OutputMessage>
133 template <
typename T,
typename F>
135 CompletionQueueTLSCache cache = CompletionQueueTLSCache(
this);
137 if (cache.Flush(tag, ok)) {
154 template <
typename T>
157 return AsyncNextInternal(tag, ok, deadline_tp.
raw_time());
167 bool Next(
void** tag,
bool* ok) {
168 return (AsyncNextInternal(tag, ok,
198 InitialAvalanching();
205 friend class ::grpc::ClientReader;
207 friend class ::grpc::ClientWriter;
208 template <
class W,
class R>
209 friend class ::grpc::ClientReaderWriter;
211 friend class ::grpc::ServerReader;
213 friend class ::grpc::ServerWriter;
214 template <
class W,
class R>
215 friend class ::grpc::internal::ServerReaderWriterBody;
216 template <
class ServiceType,
class RequestType,
class ResponseType>
217 friend class ::grpc::internal::RpcMethodHandler;
218 template <
class ServiceType,
class RequestType,
class ResponseType>
219 friend class ::grpc::internal::ClientStreamingHandler;
220 template <
class ServiceType,
class RequestType,
class ResponseType>
221 friend class ::grpc::internal::ServerStreamingHandler;
222 template <
class Streamer,
bool WriteNeeded>
223 friend class ::grpc::internal::TemplatedBidiStreamingHandler;
224 friend class ::grpc::internal::UnknownMethodHandler;
225 friend class ::grpc::Server;
226 friend class ::grpc::ServerContext;
227 friend class ::grpc::ServerInterface;
228 template <
class InputMessage,
class OutputMessage>
229 friend class ::grpc::internal::BlockingUnaryCallImpl;
235 class CompletionQueueTLSCache {
238 ~CompletionQueueTLSCache();
239 bool Flush(
void** tag,
bool* ok);
254 cq_, tag, deadline,
nullptr);
260 return ev.success != 0;
271 void TryPluck(internal::CompletionQueueTag* tag) {
274 cq_, tag, deadline,
nullptr);
287 void TryPluck(internal::CompletionQueueTag* tag,
gpr_timespec deadline) {
289 cq_, tag, deadline,
nullptr);
305 void InitialAvalanching() {
308 void RegisterAvalanching() {
310 static_cast<gpr_atm>(1));
312 void CompleteAvalanching();
335 polling_type_(polling_type) {}
340 #endif // GRPCXX_IMPL_CODEGEN_COMPLETION_QUEUE_H
A wrapper class of an application provided server streaming handler.
Definition: byte_buffer.h:43
virtual const grpc_completion_queue_factory * grpc_completion_queue_factory_lookup(const grpc_completion_queue_attributes *attributes)=0
A wrapper class of an application provided bidi-streaming handler.
Definition: completion_queue.h:83
virtual gpr_timespec gpr_inf_future(gpr_clock_type type)=0
Definition: completion_queue.h:58
An interface allowing implementors to process and filter event tags.
Definition: completion_queue_tag.h:26
#define GPR_CODEGEN_ASSERT(x)
Codegen specific version of GPR_ASSERT.
Definition: core_codegen_interface.h:135
Got a new event; tag will be filled in with its associated value; ok indicating its success...
Definition: completion_queue.h:115
virtual bool FinalizeResult(void **tag, bool *status)=0
Called prior to returning from Next(), return value is the status of the operation (return status is ...
No event before timeout.
Definition: grpc_types.h:415
Handle unknown method by returning UNIMPLEMENTED error.
Definition: method_handler_impl.h:246
int success
If the grpc_completion_type is GRPC_OP_COMPLETE, this field indicates whether the operation was succe...
Definition: grpc_types.h:431
#define GRPC_CQ_CURRENT_VERSION
Definition: grpc_types.h:624
The completion queue has been shutdown.
Definition: completion_queue.h:114
Events are popped out by calling grpc_completion_queue_next() API ONLY.
Definition: grpc_types.h:618
gpr_timespec raw_time()
Definition: time.h:43
bool IsFrequentlyPolled()
Definition: completion_queue.h:323
virtual void grpc_completion_queue_destroy(grpc_completion_queue *cq)=0
Classes that require gRPC to be initialized should inherit from this class.
Definition: grpc_library.h:37
If you are trying to use CompletionQueue::AsyncNext with a time class that isn't either gpr_timespec ...
Definition: time.h:40
Definition: grpc_types.h:625
grpc_completion_queue * cq()
Returns a raw pointer to the underlying grpc_completion_queue instance.
Definition: completion_queue.h:189
A ClientContext allows the person implementing a service client to:
Definition: client_context.h:162
Synchronous (blocking) server-side API for doing client-streaming RPCs, where the incoming message st...
Definition: completion_queue.h:53
bool Next(void **tag, bool *ok)
Read from the queue, blocking until an event is available or the queue is shutting down...
Definition: completion_queue.h:167
Descriptor of an RPC method.
Definition: rpc_method.h:29
NextStatus DoThenAsyncNext(F &&f, void **tag, bool *ok, const T &deadline)
EXPERIMENTAL First executes F, then reads from the queue, blocking up to deadline (or the queue's shu...
Definition: completion_queue.h:134
grpc_cq_polling_type
Completion queues internally MAY maintain a set of file descriptors in a structure called 'pollset'...
Definition: grpc_types.h:598
CompletionQueue(const grpc_completion_queue_attributes &attributes)
Private constructor of CompletionQueue only visible to friend classes.
Definition: completion_queue.h:193
Shutting down.
Definition: grpc_types.h:413
#define gpr_atm_rel_store(p, value)
Definition: atm_gcc_atomic.h:52
NextStatus AsyncNext(void **tag, bool *ok, const T &deadline)
Read from the queue, blocking up to deadline (or the queue's shutdown).
Definition: completion_queue.h:155
~CompletionQueue()
Destructor. Destroys the owned wrapped completion queue / instance.
Definition: completion_queue.h:108
Represents a gRPC server.
Definition: server.h:52
void Shutdown()
Request the shutdown of the queue.
virtual grpc_completion_queue * grpc_completion_queue_create(const grpc_completion_queue_factory *factory, const grpc_completion_queue_attributes *attributes, void *reserved)=0
A wrapper class of an application provided client streaming handler.
Definition: completion_queue.h:76
#define gpr_atm_no_barrier_fetch_add(p, delta)
Definition: atm_gcc_atomic.h:57
Codegen interface for grpc::Channel.
Definition: channel_interface.h:55
A wrapper class of an application provided rpc method handler.
Definition: byte_buffer.h:41
CoreCodegenInterface * g_core_codegen_interface
Definition: call.h:46
NextStatus
Tri-state return for AsyncNext: SHUTDOWN, GOT_EVENT, TIMEOUT.
Definition: completion_queue.h:113
The completion queue will have an associated pollset and there is no restriction on the type of file ...
Definition: grpc_types.h:601
intptr_t gpr_atm
Definition: atm_gcc_atomic.h:30
Similar to GRPC_CQ_DEFAULT_POLLING except that the completion queues will not contain any 'listening ...
Definition: grpc_types.h:606
CompletionQueue()
Default constructor.
Definition: completion_queue.h:98
A ServerContext allows the person implementing a service handler to:
Definition: server_context.h:96
Definition: server_interface.h:47
Realtime clock.
Definition: gpr_types.h:36
Synchronous (blocking) server-side API for doing for doing a server-streaming RPCs, where the outgoing message stream coming from the server has messages of type W.
Definition: completion_queue.h:55
A thin wrapper around grpc_completion_queue (see src/core/lib/surface/completion_queue.h).
Definition: completion_queue.h:94
Definition: channel_interface.h:43
Interface between the codegen library and the minimal subset of core features required by the generat...
Definition: core_codegen_interface.h:41
Analogous to struct timespec.
Definition: gpr_types.h:47
A specific type of completion queue used by the processing of notifications by servers.
Definition: completion_queue.h:321
Definition: completion_queue.h:80
struct grpc_completion_queue grpc_completion_queue
Completion Queues enable notification of the completion of asynchronous actions.
Definition: grpc_types.h:57
virtual gpr_timespec gpr_time_0(gpr_clock_type type)=0
A builder class for the creation and startup of grpc::Server instances.
Definition: server_builder.h:53
deadline was reached.
Definition: completion_queue.h:117
virtual grpc_event grpc_completion_queue_pluck(grpc_completion_queue *cq, void *tag, gpr_timespec deadline, void *reserved)=0
Channels represent a connection to an endpoint. Created by CreateChannel.
Definition: channel.h:34