Go to the documentation of this file.
17 #ifndef GRPC_CORE_LIB_SURFACE_SERVER_H
18 #define GRPC_CORE_LIB_SURFACE_SERVER_H
33 #include "absl/base/thread_annotations.h"
34 #include "absl/memory/memory.h"
35 #include "absl/status/statusor.h"
36 #include "absl/synchronization/notification.h"
37 #include "absl/types/optional.h"
82 struct RegisteredMethod;
116 const std::vector<grpc_pollset*>*
pollsets) = 0;
173 std::
function<RegisteredCallAllocation()> allocator);
208 RegisteredMethod* server_registered_method =
nullptr;
215 class RequestMatcherInterface;
216 class RealRequestMatcher;
217 class AllocatingRequestMatcherBase;
218 class AllocatingRequestMatcherBatch;
219 class AllocatingRequestMatcherRegistered;
244 class ConnectivityWatcher;
247 const void* transport_server_data);
290 bool MaybeActivate();
294 void Publish(
size_t cq_idx, RequestedCall* rc);
298 void FailCallCreation();
306 static void StartTransportStreamOpBatch(
311 static void RecvInitialMetadataBatchComplete(
void*
arg,
334 RequestMatcherInterface* matcher_ =
nullptr;
368 :
tag(tag_arg),
cq(cq_arg) {}
412 if (
shutdown_refs_.fetch_sub(2, std::memory_order_acq_rel) == 2) {
416 if (requests_complete_ !=
nullptr) {
417 GPR_ASSERT(!requests_complete_->HasBeenNotified());
418 requests_complete_->Notify();
426 if (
shutdown_refs_.fetch_sub(1, std::memory_order_acq_rel) == 1) {
431 requests_complete_ = absl::make_unique<absl::Notification>();
432 return requests_complete_.get();
450 std::vector<grpc_completion_queue*>
cqs_;
483 std::unique_ptr<absl::Notification> requests_complete_
522 virtual void StartWatch(
std::string listening_address,
523 std::unique_ptr<WatcherInterface>
watcher) = 0;
virtual void UpdateConnectionManager(grpc_core::RefCountedPtr< ConnectionManager > manager)=0
grpc_error_handle SetupTransport(grpc_transport *transport, grpc_pollset *accepting_pollset, const grpc_channel_args *args, const RefCountedPtr< channelz::SocketNode > &socket_node)
CallCombiner * call_combiner_
static void ListenerDestroyDone(void *arg, grpc_error_handle error)
absl::optional< std::list< ChannelData * >::iterator > list_position_
void SendGoaways() ABSL_LOCKS_EXCLUDED(mu_global_
grpc_closure kill_zombie_closure_
std::atomic< int > shutdown_refs_
grpc_error_handle recv_initial_metadata_error_
Listener(OrphanablePtr< ListenerInterface > l)
const grpc_channel_args * channel_args() const
std::unique_ptr< RequestMatcherInterface > unregistered_request_matcher_
def completion(terminal_metadata, code, message)
grpc_completion_queue * cq
absl::Notification * ShutdownUnrefOnShutdownCall() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_global_) GRPC_MUST_USE_RESULT
ShutdownTag(void *tag_arg, grpc_completion_queue *cq_arg)
struct grpc_pollset_set grpc_pollset_set
std::vector< grpc_pollset * > pollsets_
grpc_closure recv_initial_metadata_ready_
virtual void Start(Server *server, const std::vector< grpc_pollset * > *pollsets)=0
RefCountedPtr< Channel > channel_
std::list< Listener > listeners_
void CancelAllCalls() ABSL_LOCKS_EXCLUDED(mu_global_)
RegisteredMethod * RegisterMethod(const char *method, const char *host, grpc_server_register_method_payload_handling payload_handling, uint32_t flags)
void InitTransport(RefCountedPtr< Server > server, RefCountedPtr< Channel > channel, size_t cq_idx, grpc_transport *transport, intptr_t channelz_socket_uuid)
bool starting_ ABSL_GUARDED_BY(mu_global_)
void SetBatchMethodAllocator(grpc_completion_queue *cq, std::function< BatchCallAllocation()> allocator)
virtual void StopServing()=0
grpc_call_error RequestCall(grpc_call **call, grpc_call_details *details, grpc_metadata_array *request_metadata, grpc_completion_queue *cq_bound_to_call, grpc_completion_queue *cq_for_notification, void *tag)
const typedef MCPhysReg * iterator
static grpc_call_error ValidateServerRequest(grpc_completion_queue *cq_for_notification, void *tag, grpc_byte_buffer **optional_payload, RegisteredMethod *rm)
grpc_server_register_method_payload_handling
grpc_closure * original_recv_initial_metadata_ready_
RefCountedPtr< channelz::ServerNode > channelz_node_
std::unique_ptr< grpc_server_config_fetcher > config_fetcher_
bool HasOpenConnections() ABSL_LOCKS_EXCLUDED(mu_global_)
bool ShutdownReady() const
intptr_t channelz_socket_uuid_
static void DoneShutdownEvent(void *server, grpc_cq_completion *)
virtual channelz::ListenSocketNode * channelz_listen_socket_node() const =0
grpc_closure destroy_done
OrphanablePtr< ListenerInterface > listener
grpc_error_handle recv_trailing_metadata_error_
std::vector< grpc_completion_queue * > cqs_
static void DestroyChannelElement(grpc_channel_element *elem)
ChannelRegisteredMethod * GetRegisteredMethod(const grpc_slice &host, const grpc_slice &path)
const std::vector< grpc_pollset * > & pollsets() const
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
static const grpc_channel_filter kServerTopFilter
Channel * channel() const
void SetRegisteredMethodAllocator(grpc_completion_queue *cq, void *method_tag, std::function< RegisteredCallAllocation()> allocator)
TraceFlag grpc_server_channel_trace(false, "server_channel")
grpc_closure recv_trailing_metadata_ready_
static void * tag(intptr_t t)
virtual ~WatcherInterface()=default
std::list< ChannelData * > channels_
grpc_metadata_array * initial_metadata
#define ABSL_EXCLUSIVE_LOCKS_REQUIRED(...)
struct grpc_call grpc_call
grpc_completion_queue * cq
grpc_server_config_fetcher * config_fetcher() const
void AddListener(OrphanablePtr< ListenerInterface > listener)
~ListenerInterface() override=default
grpc_call_details * details
grpc_closure recv_initial_metadata_batch_complete_
virtual absl::StatusOr< grpc_channel_args * > UpdateChannelArgsForConnection(grpc_channel_args *args, grpc_endpoint *tcp)=0
void Start() ABSL_LOCKS_EXCLUDED(mu_global_)
gpr_timespec last_shutdown_message_time_
grpc_transport_stream_op_batch * batch
void ShutdownAndNotify(grpc_completion_queue *cq, void *tag) ABSL_LOCKS_EXCLUDED(mu_global_
static bool rm(upb_table *t, lookupkey_t key, upb_value *val, upb_tabkey *removed, uint32_t hash, eqlfunc_t *eql)
absl::optional< Slice > host_
bool seen_recv_trailing_metadata_ready_
void Destroy() ABSL_EXCLUSIVE_LOCKS_REQUIRED(server_ -> mu_global_)
RefCountedPtr< Server > server() const
static void AcceptStream(void *arg, grpc_transport *, const void *transport_server_data)
static grpc_slice details
grpc_call_error QueueRequestedCall(size_t cq_idx, RequestedCall *rc)
PyObject * SetState(CMessage *self, PyObject *state)
static void FinishDestroy(void *arg, grpc_error_handle error)
std::unique_ptr< std::vector< ChannelRegisteredMethod > > registered_methods_
void RegisterCompletionQueue(grpc_completion_queue *cq)
RefCountedPtr< Server > server_
size_t listeners_destroyed_
#define ABSL_LOCKS_EXCLUDED(...)
grpc_call_error ValidateServerRequestAndCq(size_t *cq_idx, grpc_completion_queue *cq_for_notification, void *tag, grpc_byte_buffer **optional_payload, RegisteredMethod *rm)
const grpc_channel_args *const channel_args_
std::unique_ptr< T, Deleter > OrphanablePtr
grpc_byte_buffer ** optional_payload
grpc_call_error RequestRegisteredCall(RegisteredMethod *rm, grpc_call **call, gpr_timespec *deadline, grpc_metadata_array *request_metadata, grpc_byte_buffer **optional_payload, grpc_completion_queue *cq_bound_to_call, grpc_completion_queue *cq_for_notification, void *tag_new)
bool ShutdownCalled() const
grpc_completion_queue *const cq
grpc_closure finish_destroy_channel_closure_
RefCountedPtr< Server > server_
void FailCall(size_t cq_idx, RequestedCall *rc, grpc_error_handle error)
static void DoneRequestEvent(void *req, grpc_cq_completion *completion)
void channelz(grpc_end2end_test_config config)
std::vector< std::unique_ptr< RegisteredMethod > > registered_methods_
void ShutdownUnrefOnRequest() ABSL_LOCKS_EXCLUDED(mu_global_)
grpc_connectivity_state state_
virtual void SetOnDestroyDone(grpc_closure *on_destroy_done)=0
void MaybeFinishShutdown() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_global_) ABSL_LOCKS_EXCLUDED(mu_call_)
static constexpr Timestamp InfFuture()
uint32_t registered_method_max_probes_
grpc_metadata_array * initial_metadata
grpc_cq_completion completion
void Orphan() ABSL_LOCKS_EXCLUDED(mu_global_) override
static grpc_error_handle InitChannelElement(grpc_channel_element *elem, grpc_channel_element_args *args)
void KillPendingWorkLocked(grpc_error_handle error) ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_call_)
absl::optional< Slice > path_
channelz::ServerNode * channelz_node() const
bool ShutdownRefOnRequest()
grpc_metadata_array recv_initial_metadata_
static grpc_completion_queue * cq
void set_config_fetcher(std::unique_ptr< grpc_server_config_fetcher > config_fetcher)
grpc_closure * original_recv_trailing_metadata_ready_
std::vector< RefCountedPtr< Channel > > GetChannelsLocked() const
grpc
Author(s):
autogenerated on Fri May 16 2025 03:00:11