19 #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SUBCHANNEL_H
20 #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SUBCHANNEL_H
43 #define GRPC_ARG_SUBCHANNEL_ADDRESS "grpc.subchannel_address"
64 return channelz_subchannel_.get();
114 template <typename T>
121 void MaybeInterceptRecvTrailingMetadata(
127 void IncrementRefCount();
128 void IncrementRefCount(const
DebugLocation& location, const
char* reason);
136 grpc_closure* original_recv_trailing_metadata_ =
nullptr;
151 :
public RefCounted<ConnectivityStateWatcherInterface> {
189 std::deque<ConnectivityStateChange> connectivity_state_queue_
190 ABSL_GUARDED_BY(&mu_);
206 void ThrottleKeepaliveTime(
int new_keepalive_time) ABSL_LOCKS_EXCLUDED(mu_);
210 const char* GetTargetAddress();
222 const absl::optional<std::string>& health_check_service_name,
224 ABSL_LOCKS_EXCLUDED(mu_);
234 void WatchConnectivityState(
236 const absl::optional<std::string>& health_check_service_name,
238 ABSL_LOCKS_EXCLUDED(mu_);
242 void CancelConnectivityStateWatch(
243 const absl::optional<std::string>& health_check_service_name,
247 void AttemptToConnect() ABSL_LOCKS_EXCLUDED(mu_);
254 void ResetBackoff() ABSL_LOCKS_EXCLUDED(mu_);
257 void Orphan() override ABSL_LOCKS_EXCLUDED(mu_);
264 static const
char* GetUriFromSubchannelAddressArg(
274 class ConnectivityStateWatcherList {
276 ~ConnectivityStateWatcherList() { Clear(); }
278 void AddWatcherLocked(
279 RefCountedPtr<ConnectivityStateWatcherInterface>
watcher);
280 void RemoveWatcherLocked(ConnectivityStateWatcherInterface*
watcher);
284 const absl::Status& status);
286 void Clear() { watchers_.clear(); }
288 bool empty()
const {
return watchers_.empty(); }
293 std::map<ConnectivityStateWatcherInterface*,
294 RefCountedPtr<ConnectivityStateWatcherInterface>>
307 class HealthWatcherMap {
309 void AddWatcherLocked(
312 const std::string& health_check_service_name,
313 RefCountedPtr<ConnectivityStateWatcherInterface>
watcher);
314 void RemoveWatcherLocked(
const std::string& health_check_service_name,
315 ConnectivityStateWatcherInterface*
watcher);
319 ABSL_EXCLUSIVE_LOCKS_REQUIRED(&Subchannel::mu_);
322 Subchannel*
subchannel,
const std::string& health_check_service_name)
323 ABSL_EXCLUSIVE_LOCKS_REQUIRED(&Subchannel::mu_);
325 void ShutdownLocked();
330 std::map<std::string, OrphanablePtr<HealthWatcher>> map_;
333 class ConnectedSubchannelStateWatcher;
335 class AsyncWatcherNotifierLocked;
339 const absl::Status& status)
340 ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
343 void MaybeStartConnectingLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
345 ABSL_LOCKS_EXCLUDED(mu_);
346 void ContinueConnectingLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
348 ABSL_LOCKS_EXCLUDED(mu_);
349 bool PublishTransportLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
355 const SubchannelKey key_;
365 SubchannelConnector::Result connecting_result_;
372 RefCountedPtr<ConnectedSubchannel> connected_subchannel_ ABSL_GUARDED_BY(mu_);
373 bool connecting_ ABSL_GUARDED_BY(mu_) = false;
374 bool disconnected_ ABSL_GUARDED_BY(mu_) = false;
378 absl::Status status_ ABSL_GUARDED_BY(mu_);
380 ConnectivityStateWatcherList watcher_list_ ABSL_GUARDED_BY(mu_);
382 HealthWatcherMap health_watcher_map_ ABSL_GUARDED_BY(mu_);
385 BackOff backoff_ ABSL_GUARDED_BY(mu_);
386 grpc_millis next_attempt_deadline_ ABSL_GUARDED_BY(mu_);
387 grpc_millis min_connect_timeout_ms_ ABSL_GUARDED_BY(mu_);
388 bool backoff_begun_ ABSL_GUARDED_BY(mu_) = false;
393 bool have_retry_alarm_ ABSL_GUARDED_BY(mu_) = false;
395 bool retry_immediately_ ABSL_GUARDED_BY(mu_) = false;
397 int keepalive_time_ ABSL_GUARDED_BY(mu_) = -1;
ClusterWatcher * watcher
Definition: cds.cc:112
Definition: call_combiner.h:50
Definition: subchannel.h:49
size_t GetInitialCallSizeEstimate() const
Definition: subchannel.cc:124
void Ping(grpc_closure *on_initiate, grpc_closure *on_ack)
Definition: subchannel.cc:114
channelz::SubchannelNode * channelz_subchannel() const
Definition: subchannel.h:63
void StartWatch(grpc_pollset_set *interested_parties, OrphanablePtr< ConnectivityStateWatcherInterface > watcher)
Definition: subchannel.cc:103
ConnectedSubchannel(grpc_channel_stack *channel_stack, const grpc_channel_args *args, RefCountedPtr< channelz::SubchannelNode > channelz_subchannel)
Definition: subchannel.cc:87
~ConnectedSubchannel() override
Definition: subchannel.cc:98
const grpc_channel_args * args() const
Definition: subchannel.h:62
grpc_channel_stack * channel_stack() const
Definition: subchannel.h:61
Definition: connectivity_state.h:51
Definition: debug_location.h:31
Definition: dual_ref_counted.h:52
Definition: ref_counted.h:282
Definition: ref_counted_ptr.h:35
Definition: subchannel.h:151
virtual void OnConnectivityStateChange()=0
~ConnectivityStateWatcherInterface() override=default
virtual grpc_pollset_set * interested_parties()=0
Definition: subchannel.h:78
grpc_call_stack * GetCallStack()
Definition: subchannel.cc:179
void SetAfterCallStackDestroy(grpc_closure *closure)
Definition: subchannel.cc:183
void Unref()
Definition: subchannel.cc:200
static RefCountedPtr< SubchannelCall > Create(Args args, grpc_error_handle *error)
Definition: subchannel.cc:133
friend class RefCountedPtr
Definition: subchannel.h:115
void StartTransportStreamOpBatch(grpc_transport_stream_op_batch *batch)
Definition: subchannel.cc:169
RefCountedPtr< SubchannelCall > Ref() GRPC_MUST_USE_RESULT
Definition: subchannel.cc:189
Definition: subchannel.h:148
const grpc_channel_args * channel_args() const
Definition: subchannel.h:212
Definition: subchannel_pool_interface.h:36
Definition: client_channel_channelz.h:34
int64_t grpc_millis
Definition: exec_ctx.h:37
grpc_connectivity_state
Connectivity state of a channel.
Definition: connectivity_state.h:27
@ GRPC_CHANNEL_IDLE
channel is idle
Definition: connectivity_state.h:29
grpc_error_handle error
Definition: lame_client.cc:54
Round Robin Policy.
Definition: backend_metric.cc:26
std::unique_ptr< T, Deleter > OrphanablePtr
Definition: orphanable.h:67
struct grpc_pollset_set grpc_pollset_set
Definition: pollset_set.h:31
grpc_transport_stream_op_batch * batch
Definition: retry_filter.cc:208
RefCountedPtr< SubchannelInterface > subchannel
Definition: ring_hash.cc:213
grpc_closure closure
Definition: server.cc:460
A single argument...
Definition: grpc_types.h:103
Definition: channel_stack.h:192
An array of arguments that can be passed around.
Definition: grpc_types.h:132
Definition: channel_stack.h:182
A closure over a grpc_iomgr_cb_func.
Definition: closure.h:56
Definition: subchannel.h:153
absl::Status status
Definition: subchannel.h:155
grpc_connectivity_state state
Definition: subchannel.h:154
RefCountedPtr< ConnectedSubchannel > connected_subchannel
Definition: subchannel.h:156
Definition: subchannel.h:80
grpc_millis deadline
Definition: subchannel.h:85
grpc_slice path
Definition: subchannel.h:83
grpc_polling_entity * pollent
Definition: subchannel.h:82
RefCountedPtr< ConnectedSubchannel > connected_subchannel
Definition: subchannel.h:81
Arena * arena
Definition: subchannel.h:86
gpr_cycle_counter start_time
Definition: subchannel.h:84
grpc_call_context_element * context
Definition: subchannel.h:87
CallCombiner * call_combiner
Definition: subchannel.h:88
Definition: error_internal.h:41
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