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;
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: call_combiner.h:49
Definition: subchannel.h:72
void Ping(grpc_closure *on_initiate, grpc_closure *on_ack)
Definition: subchannel.cc:109
channelz::SubchannelNode * channelz_subchannel() const
Definition: subchannel.h:86
void StartWatch(grpc_pollset_set *interested_parties, OrphanablePtr< ConnectivityStateWatcherInterface > watcher)
Definition: subchannel.cc:98
~ConnectedSubchannel()
Definition: subchannel.cc:93
ConnectedSubchannel(grpc_channel_stack *channel_stack, const grpc_channel_args *args, RefCountedPtr< channelz::SubchannelNode > channelz_subchannel)
Definition: subchannel.cc:85
size_t GetInitialCallSizeEstimate(size_t parent_data_size) const
Definition: subchannel.cc:119
const grpc_channel_args * args() const
Definition: subchannel.h:85
grpc_channel_stack * channel_stack() const
Definition: subchannel.h:84
Definition: connectivity_state.h:46
Definition: debug_location.h:31
Definition: orphanable.h:77
Definition: ref_counted.h:248
Definition: ref_counted_ptr.h:35
Definition: subchannel.h:179
virtual void OnConnectivityStateChange(grpc_connectivity_state new_state, RefCountedPtr< ConnectedSubchannel > connected_subchannel)=0
virtual ~ConnectivityStateWatcherInterface()=default
virtual grpc_pollset_set * interested_parties()=0
Definition: subchannel.h:101
grpc_call_stack * GetCallStack()
Definition: subchannel.cc:191
void SetAfterCallStackDestroy(grpc_closure *closure)
Definition: subchannel.cc:195
void Unref()
Definition: subchannel.cc:212
static RefCountedPtr< SubchannelCall > Create(Args args, grpc_error **error)
Definition: subchannel.cc:137
void * GetParentData()
Definition: subchannel.cc:185
void StartTransportStreamOpBatch(grpc_transport_stream_op_batch *batch)
Definition: subchannel.cc:175
RefCountedPtr< SubchannelCall > Ref() GRPC_MUST_USE_RESULT
Definition: subchannel.cc:201
static void Destroy(void *arg, grpc_error *error)
Definition: subchannel.cc:221
Definition: subchannel.h:176
const grpc_channel_args * channel_args() const
Definition: subchannel.h:222
Definition: subchannel_pool_interface.h:35
Definition: client_channel_channelz.h:37
grpc_transport_stream_op_batch batch
Definition: client_channel.cc:471
int64_t grpc_millis
Definition: exec_ctx.h:35
intptr_t gpr_atm
Definition: atm_gcc_atomic.h:30
grpc_connectivity_state
Connectivity state of a channel.
Definition: connectivity_state.h:27
@ GRPC_CHANNEL_IDLE
channel is idle
Definition: connectivity_state.h:29
Round Robin Policy.
Definition: backend_metric.cc:24
std::unique_ptr< T, DefaultDeleteChar > UniquePtr
Definition: memory.h:45
std::unique_ptr< T, Deleter > OrphanablePtr
Definition: orphanable.h:68
struct grpc_pollset_set grpc_pollset_set
Definition: pollset_set.h:31
A single argument...
Definition: grpc_types.h:103
Definition: channel_stack.h:185
An array of arguments that can be passed around.
Definition: grpc_types.h:132
Definition: channel_stack.h:175
A closure over a grpc_iomgr_cb_func.
Definition: closure.h:56
Definition: subchannel.h:103
grpc_millis deadline
Definition: subchannel.h:108
grpc_slice path
Definition: subchannel.h:106
grpc_polling_entity * pollent
Definition: subchannel.h:105
RefCountedPtr< ConnectedSubchannel > connected_subchannel
Definition: subchannel.h:104
Arena * arena
Definition: subchannel.h:109
gpr_cycle_counter start_time
Definition: subchannel.h:107
grpc_call_context_element * context
Definition: subchannel.h:110
size_t parent_data_size
Definition: subchannel.h:112
CallCombiner * call_combiner
Definition: subchannel.h:111
Definition: error_internal.h:39
Definition: polling_entity.h:37
Definition: resolve_address.h:44
A grpc_slice s, if initialized, represents the byte range s.bytes[0..s.length-1].
Definition: slice.h:60
Definition: transport.h:163
#define GRPC_SUBCHANNEL_REF_MUTATE_EXTRA_ARGS
Definition: subchannel.h:53
#define GRPC_SUBCHANNEL_REF_EXTRA_ARGS
Definition: subchannel.h:50