19 #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SUBCHANNEL_H 20 #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SUBCHANNEL_H 41 #define GRPC_ARG_SUBCHANNEL_ADDRESS "grpc.subchannel_address" 45 #define GRPC_SUBCHANNEL_REF(p, r) (p)->Ref(__FILE__, __LINE__, (r)) 46 #define GRPC_SUBCHANNEL_REF_FROM_WEAK_REF(p, r) (p)->RefFromWeakRef() 47 #define GRPC_SUBCHANNEL_UNREF(p, r) (p)->Unref(__FILE__, __LINE__, (r)) 48 #define GRPC_SUBCHANNEL_WEAK_REF(p, r) (p)->WeakRef(__FILE__, __LINE__, (r)) 49 #define GRPC_SUBCHANNEL_WEAK_UNREF(p, r) (p)->WeakUnref(__FILE__, __LINE__, (r)) 50 #define GRPC_SUBCHANNEL_REF_EXTRA_ARGS \ 51 const char *file, int line, const char *reason 52 #define GRPC_SUBCHANNEL_REF_REASON reason 53 #define GRPC_SUBCHANNEL_REF_MUTATE_EXTRA_ARGS \ 54 , GRPC_SUBCHANNEL_REF_EXTRA_ARGS, const char* purpose 55 #define GRPC_SUBCHANNEL_REF_MUTATE_PURPOSE(x) , file, line, reason, x 57 #define GRPC_SUBCHANNEL_REF(p, r) (p)->Ref() 58 #define GRPC_SUBCHANNEL_REF_FROM_WEAK_REF(p, r) (p)->RefFromWeakRef() 59 #define GRPC_SUBCHANNEL_UNREF(p, r) (p)->Unref() 60 #define GRPC_SUBCHANNEL_WEAK_REF(p, r) (p)->WeakRef() 61 #define GRPC_SUBCHANNEL_WEAK_UNREF(p, r) (p)->WeakUnref() 62 #define GRPC_SUBCHANNEL_REF_EXTRA_ARGS 63 #define GRPC_SUBCHANNEL_REF_REASON "" 64 #define GRPC_SUBCHANNEL_REF_MUTATE_EXTRA_ARGS 65 #define GRPC_SUBCHANNEL_REF_MUTATE_PURPOSE(x) 87 return channelz_subchannel_.get();
144 template <typename T>
151 void MaybeInterceptRecvTrailingMetadata(
154 static
void RecvTrailingMetadataReady(
void* arg,
grpc_error* error);
157 void IncrementRefCount();
158 void IncrementRefCount(const
DebugLocation& location, const
char* reason);
164 grpc_closure* original_recv_trailing_metadata_ =
nullptr;
191 virtual void OnConnectivityStateChange(
220 const char* GetTargetAddress();
232 const char* health_check_service_name,
243 void WatchConnectivityState(
250 void CancelConnectivityStateWatch(
const char* health_check_service_name,
254 void AttemptToConnect();
268 static const char* GetUriFromSubchannelAddressArg(
278 class ConnectivityStateWatcherList {
280 ~ConnectivityStateWatcherList() { Clear(); }
282 void AddWatcherLocked(
283 OrphanablePtr<ConnectivityStateWatcherInterface> watcher);
284 void RemoveWatcherLocked(ConnectivityStateWatcherInterface* watcher);
289 void Clear() { watchers_.clear(); }
291 bool empty()
const {
return watchers_.empty(); }
296 std::map<ConnectivityStateWatcherInterface*,
297 OrphanablePtr<ConnectivityStateWatcherInterface>>
310 class HealthWatcherMap {
312 void AddWatcherLocked(
315 OrphanablePtr<ConnectivityStateWatcherInterface> watcher);
316 void RemoveWatcherLocked(
const char* health_check_service_name,
317 ConnectivityStateWatcherInterface* watcher);
323 Subchannel* subchannel,
const char* health_check_service_name);
325 void ShutdownLocked();
330 std::map<const char*, OrphanablePtr<HealthWatcher>, StringLess> map_;
333 class ConnectedSubchannelStateWatcher;
339 void MaybeStartConnectingLocked();
340 static void OnRetryAlarm(
void* arg,
grpc_error* error);
341 void ContinueConnectingLocked();
342 static void OnConnectingFinished(
void* arg,
grpc_error* error);
343 bool PublishTransportLocked();
350 RefCountedPtr<SubchannelPoolInterface> subchannel_pool_;
368 OrphanablePtr<SubchannelConnector> connector_;
370 SubchannelConnector::Result connecting_result_;
373 RefCountedPtr<ConnectedSubchannel> connected_subchannel_;
374 bool connecting_ =
false;
375 bool disconnected_ =
false;
380 ConnectivityStateWatcherList watcher_list_;
382 HealthWatcherMap health_watcher_map_;
388 bool backoff_begun_ =
false;
393 bool have_retry_alarm_ =
false;
395 bool retry_immediately_ =
false;
398 RefCountedPtr<channelz::SubchannelNode> channelz_node_;
Definition: channel_stack.h:175
int64_t grpc_millis
Definition: exec_ctx.h:35
void Ping(grpc_closure *on_initiate, grpc_closure *on_ack)
Definition: subchannel.cc:109
RefCountedPtr< SubchannelCall > Ref() GRPC_MUST_USE_RESULT
Definition: subchannel.cc:201
grpc_transport_stream_op_batch batch
Definition: client_channel.cc:471
Definition: connectivity_state.h:45
An array of arguments that can be passed around.
Definition: grpc_types.h:132
#define GRPC_SUBCHANNEL_REF_EXTRA_ARGS
Definition: subchannel.h:50
const grpc_channel_args * args() const
Definition: subchannel.h:85
static RefCountedPtr< SubchannelCall > Create(Args args, grpc_error **error)
Definition: subchannel.cc:137
Definition: resolve_address.h:44
Definition: debug_location.h:31
Definition: call_combiner.h:49
A grpc_slice s, if initialized, represents the byte range s.bytes[0..s.length-1]. ...
Definition: slice.h:60
Definition: error_internal.h:39
grpc_connectivity_state
Connectivity state of a channel.
Definition: connectivity_state.h:27
~ConnectedSubchannel()
Definition: subchannel.cc:93
A single argument...
Definition: grpc_types.h:103
const grpc_channel_args * channel_args() const
Definition: subchannel.h:222
std::unique_ptr< T, Deleter > OrphanablePtr
Definition: orphanable.h:68
grpc_slice path
Definition: subchannel.h:106
void Unref()
Definition: subchannel.cc:212
Definition: subchannel.h:72
Arena * arena
Definition: subchannel.h:109
RefCountedPtr< ConnectedSubchannel > connected_subchannel
Definition: subchannel.h:104
Definition: subchannel_pool_interface.h:35
Definition: orphanable.h:77
Definition: polling_entity.h:37
Round Robin Policy.
Definition: backend_metric.cc:24
void * GetParentData()
Definition: subchannel.cc:185
size_t GetInitialCallSizeEstimate(size_t parent_data_size) const
Definition: subchannel.cc:119
grpc_call_context_element * context
Definition: subchannel.h:110
Definition: transport.h:163
Definition: subchannel.h:178
Definition: ref_counted_ptr.h:35
grpc_millis deadline
Definition: subchannel.h:108
Definition: client_channel_channelz.h:37
Definition: subchannel.h:101
intptr_t gpr_atm
Definition: atm_gcc_atomic.h:30
Definition: subchannel.h:103
CallCombiner * call_combiner
Definition: subchannel.h:111
struct grpc_pollset_set grpc_pollset_set
Definition: pollset_set.h:31
std::unique_ptr< T, DefaultDeleteChar > UniquePtr
Definition: memory.h:45
void StartWatch(grpc_pollset_set *interested_parties, OrphanablePtr< ConnectivityStateWatcherInterface > watcher)
Definition: subchannel.cc:98
A closure over a grpc_iomgr_cb_func.
Definition: closure.h:56
Definition: channel_stack.h:185
channelz::SubchannelNode * channelz_subchannel() const
Definition: subchannel.h:86
ConnectedSubchannel(grpc_channel_stack *channel_stack, const grpc_channel_args *args, RefCountedPtr< channelz::SubchannelNode > channelz_subchannel)
Definition: subchannel.cc:85
channel is idle
Definition: connectivity_state.h:29
Definition: ref_counted.h:248
void StartTransportStreamOpBatch(grpc_transport_stream_op_batch *batch)
Definition: subchannel.cc:175
grpc_call_stack * GetCallStack()
Definition: subchannel.cc:191
grpc_channel_stack * channel_stack() const
Definition: subchannel.h:84
grpc_polling_entity * pollent
Definition: subchannel.h:105
#define GRPC_SUBCHANNEL_REF_MUTATE_EXTRA_ARGS
Definition: subchannel.h:53
size_t parent_data_size
Definition: subchannel.h:112
gpr_cycle_counter start_time
Definition: subchannel.h:107
static void Destroy(void *arg, grpc_error *error)
Definition: subchannel.cc:221
Definition: subchannel.h:176
void SetAfterCallStackDestroy(grpc_closure *closure)
Definition: subchannel.cc:195