subchannel.h
Go to the documentation of this file.
1 //
2 // Copyright 2015 gRPC authors.
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 // http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16 
17 #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SUBCHANNEL_H
18 #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SUBCHANNEL_H
19 
21 
22 #include <stddef.h>
23 
24 #include <deque>
25 #include <map>
26 #include <string>
27 
28 #include "absl/base/thread_annotations.h"
29 #include "absl/status/status.h"
30 #include "absl/types/optional.h"
31 
35 
62 
63 namespace grpc_core {
64 
65 class SubchannelCall;
66 
67 class ConnectedSubchannel : public RefCounted<ConnectedSubchannel> {
68  public:
72  ~ConnectedSubchannel() override;
73 
74  void StartWatch(grpc_pollset_set* interested_parties,
76 
77  void Ping(grpc_closure* on_initiate, grpc_closure* on_ack);
78 
80  const grpc_channel_args* args() const { return args_; }
82  return channelz_subchannel_.get();
83  }
84 
85  size_t GetInitialCallSizeEstimate() const;
86 
87  private:
90  // ref counted pointer to the channelz node in this connected subchannel's
91  // owning subchannel.
93 };
94 
95 // Implements the interface of RefCounted<>.
97  public:
98  struct Args {
102  gpr_cycle_counter start_time;
107  };
110 
111  // Continues processing a transport stream op batch.
113 
114  // Returns the call stack of the subchannel call.
116 
117  // Sets the 'then_schedule_closure' argument for call stack destruction.
118  // Must be called once per call.
120 
121  // Interface of RefCounted<>.
124  const char* reason) GRPC_MUST_USE_RESULT;
125  // When refcount drops to 0, destroys itself and the associated call stack,
126  // but does NOT free the memory because it's in the call arena.
127  void Unref();
128  void Unref(const DebugLocation& location, const char* reason);
129 
130  private:
131  // Allow RefCountedPtr<> to access IncrementRefCount().
132  template <typename T>
133  friend class RefCountedPtr;
134 
136 
137  // If channelz is enabled, intercepts recv_trailing so that we may check the
138  // status and associate it to a subchannel.
141 
143 
144  // Interface of RefCounted<>.
145  void IncrementRefCount();
146  void IncrementRefCount(const DebugLocation& location, const char* reason);
147 
148  static void Destroy(void* arg, grpc_error_handle error);
149 
152  // State needed to support channelz interception of recv trailing metadata.
157 };
158 
159 // A subchannel that knows how to connect to exactly one target address. It
160 // provides a target for load balancing.
161 //
162 // Note that this is the "real" subchannel implementation, whose API is
163 // different from the SubchannelInterface that is exposed to LB policy
164 // implementations. The client channel provides an adaptor class
165 // (SubchannelWrapper) that "converts" between the two.
167  public:
169  : public RefCounted<ConnectivityStateWatcherInterface> {
170  public:
174  };
175 
176  ~ConnectivityStateWatcherInterface() override = default;
177 
178  // Will be invoked whenever the subchannel's connectivity state
179  // changes. There will be only one invocation of this method on a
180  // given watcher instance at any given time.
181  // Implementations should call PopConnectivityStateChange to get the next
182  // connectivity state change.
183  virtual void OnConnectivityStateChange() = 0;
184 
185  virtual grpc_pollset_set* interested_parties() = 0;
186 
187  // Enqueues connectivity state change notifications.
188  // When the state changes to READY, connected_subchannel will
189  // contain a ref to the connected subchannel. When it changes from
190  // READY to some other state, the implementation must release its
191  // ref to the connected subchannel.
192  // TODO(yashkt): This is currently needed to send the state updates in the
193  // right order when asynchronously notifying. This will no longer be
194  // necessary when we have access to EventManager.
195  void PushConnectivityStateChange(ConnectivityStateChange state_change);
196 
197  // Dequeues connectivity state change notifications.
198  ConnectivityStateChange PopConnectivityStateChange();
199 
200  private:
201  Mutex mu_; // protects the queue
202  // Keeps track of the updates that the watcher instance must be notified of.
203  // TODO(yashkt): This is currently needed to send the state updates in the
204  // right order when asynchronously notifying. This will no longer be
205  // necessary when we have access to EventManager.
206  std::deque<ConnectivityStateChange> connectivity_state_queue_
208  };
209 
210  // A base class for producers of subchannel-specific data.
211  // Implementations will typically add their own methods as needed.
212  class DataProducerInterface : public DualRefCounted<DataProducerInterface> {
213  public:
214  // A unique identifier for this implementation.
215  // Only one producer may be registered under a given type name on a
216  // given subchannel at any given time.
217  // Note that we use the pointer address instead of the string
218  // contents for uniqueness; all instances for a given implementation
219  // are expected to return the same string *instance*, not just the
220  // same string contents.
221  virtual UniqueTypeName type() const = 0;
222  };
223 
224  // Creates a subchannel.
227  const grpc_resolved_address& address, const grpc_channel_args* args);
228 
229  // The ctor and dtor are not intended to use directly.
231  const grpc_channel_args* args);
232  ~Subchannel() override;
233 
234  // Throttles keepalive time to \a new_keepalive_time iff \a new_keepalive_time
235  // is larger than the subchannel's current keepalive time. The updated value
236  // will have an affect when the subchannel creates a new ConnectedSubchannel.
237  void ThrottleKeepaliveTime(int new_keepalive_time) ABSL_LOCKS_EXCLUDED(mu_);
238 
239  grpc_pollset_set* pollset_set() const { return pollset_set_; }
240 
241  const grpc_channel_args* channel_args() const { return args_; }
242 
243  channelz::SubchannelNode* channelz_node();
244 
245  // Starts watching the subchannel's connectivity state.
246  // The first callback to the watcher will be delivered ~immediately.
247  // Subsequent callbacks will be delivered as the subchannel's state
248  // changes.
249  // The watcher will be destroyed either when the subchannel is
250  // destroyed or when CancelConnectivityStateWatch() is called.
251  void WatchConnectivityState(
252  const absl::optional<std::string>& health_check_service_name,
255 
256  // Cancels a connectivity state watch.
257  // If the watcher has already been destroyed, this is a no-op.
258  void CancelConnectivityStateWatch(
259  const absl::optional<std::string>& health_check_service_name,
261 
264  MutexLock lock(&mu_);
265  return connected_subchannel_;
266  }
267 
268  // Attempt to connect to the backend. Has no effect if already connected.
269  void RequestConnection() ABSL_LOCKS_EXCLUDED(mu_);
270 
271  // Resets the connection backoff of the subchannel.
272  void ResetBackoff() ABSL_LOCKS_EXCLUDED(mu_);
273 
274  // Tears down any existing connection, and arranges for destruction
275  void Orphan() override ABSL_LOCKS_EXCLUDED(mu_);
276 
277  // Access to data producer map.
278  // We do not hold refs to the data producer; the implementation is
279  // expected to register itself upon construction and remove itself
280  // upon destruction.
281  void AddDataProducer(DataProducerInterface* data_producer)
283  void RemoveDataProducer(DataProducerInterface* data_producer)
285  DataProducerInterface* GetDataProducer(UniqueTypeName type)
287 
288  private:
289  // A linked list of ConnectivityStateWatcherInterfaces that are monitoring
290  // the subchannel's state.
292  public:
294 
295  void AddWatcherLocked(
297  void RemoveWatcherLocked(ConnectivityStateWatcherInterface* watcher);
298 
299  // Notifies all watchers in the list about a change to state.
300  void NotifyLocked(grpc_connectivity_state state,
301  const absl::Status& status);
302 
303  void Clear() { watchers_.clear(); }
304 
305  bool empty() const { return watchers_.empty(); }
306 
307  private:
308  // TODO(roth): Once we can use C++-14 heterogeneous lookups, this can
309  // be a set instead of a map.
313  };
314 
315  // A map that tracks ConnectivityStateWatcherInterfaces using a particular
316  // health check service name.
317  //
318  // There is one entry in the map for each health check service name.
319  // Entries exist only as long as there are watchers using the
320  // corresponding service name.
321  //
322  // A health check client is maintained only while the subchannel is in
323  // state READY.
325  public:
326  void AddWatcherLocked(
328  const std::string& health_check_service_name,
330  void RemoveWatcherLocked(const std::string& health_check_service_name,
332 
333  // Notifies the watcher when the subchannel's state changes.
334  void NotifyLocked(grpc_connectivity_state state, const absl::Status& status)
336 
337  grpc_connectivity_state CheckConnectivityStateLocked(
338  Subchannel* subchannel, const std::string& health_check_service_name)
340 
342 
343  private:
345 
346  std::map<std::string, OrphanablePtr<HealthWatcher>> map_;
347  };
348 
351 
352  // Sets the subchannel's connectivity state to \a state.
353  void SetConnectivityStateLocked(grpc_connectivity_state state,
354  const absl::Status& status)
356 
357  // Methods for connection.
358  void OnRetryTimer() ABSL_LOCKS_EXCLUDED(mu_);
359  void OnRetryTimerLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
360  void StartConnectingLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
361  static void OnConnectingFinished(void* arg, grpc_error_handle error)
363  void OnConnectingFinishedLocked(grpc_error_handle error)
365  bool PublishTransportLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
366 
367  // The subchannel pool this subchannel is in.
369  // Subchannel key that identifies this subchannel in the subchannel pool.
371  // Actual address to connect to. May be different than the address in
372  // key_ if overridden by proxy mapper.
373  grpc_resolved_address address_for_connect_;
374  // Channel args.
376  // pollset_set tracking who's interested in a connection being setup.
377  grpc_pollset_set* pollset_set_;
378  // Channelz tracking.
380  // Minimum connection timeout.
381  Duration min_connect_timeout_;
382 
383  // Connection state.
385  SubchannelConnector::Result connecting_result_;
386  grpc_closure on_connecting_finished_;
387 
388  // Protects the other members.
390 
392 
393  // Connectivity state tracking.
394  // Note that the connectivity state implies the state of the
395  // Subchannel object:
396  // - IDLE: no retry timer pending, can start a connection attempt at any time
397  // - CONNECTING: connection attempt in progress
398  // - READY: connection attempt succeeded, connected_subchannel_ created
399  // - TRANSIENT_FAILURE: connection attempt failed, retry timer pending
402  // The list of watchers without a health check service name.
404  // The map of watchers with health check service names.
405  HealthWatcherMap health_watcher_map_ ABSL_GUARDED_BY(mu_);
406 
407  // Active connection, or null.
409 
410  // Backoff state.
411  BackOff backoff_ ABSL_GUARDED_BY(mu_);
412  Timestamp next_attempt_time_ ABSL_GUARDED_BY(mu_);
413  grpc_event_engine::experimental::EventEngine::TaskHandle retry_timer_handle_
415 
416  // Keepalive time period (-1 for unset)
417  int keepalive_time_ ABSL_GUARDED_BY(mu_) = -1;
418 
419  // Data producer map.
420  std::map<UniqueTypeName, DataProducerInterface*> data_producer_map_
422 };
423 
424 } // namespace grpc_core
425 
426 #endif // GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_SUBCHANNEL_H
slice.h
grpc_core::Subchannel::ConnectivityStateWatcherList::~ConnectivityStateWatcherList
~ConnectivityStateWatcherList()
Definition: subchannel.h:293
connector.h
grpc_core::CallCombiner
Definition: call_combiner.h:50
channelz_node_
RefCountedPtr< channelz::SubchannelNode > channelz_node_
Definition: health_check_client.cc:154
grpc_core::Subchannel::ConnectivityStateWatcherInterface::ConnectivityStateChange::status
absl::Status status
Definition: subchannel.h:173
orphanable.h
grpc_core::ConnectivityStateWatcherInterface
Definition: src/core/lib/transport/connectivity_state.h:49
grpc_core::Subchannel::ConnectivityStateWatcherList::Clear
void Clear()
Definition: subchannel.h:303
metadata_batch.h
backoff.h
grpc_core::ConnectedSubchannel
Definition: subchannel.h:67
const
#define const
Definition: bloaty/third_party/zlib/zconf.h:230
grpc_core::DebugLocation
Definition: debug_location.h:31
grpc_core::SubchannelCall::deadline_
Timestamp deadline_
Definition: subchannel.h:156
grpc_channel_stack
Definition: channel_stack.h:202
channel_fwd.h
connectivity_state.h
grpc_core::SubchannelCall::connected_subchannel_
RefCountedPtr< ConnectedSubchannel > connected_subchannel_
Definition: subchannel.h:150
client_channel_channelz.h
polling_entity.h
grpc_core::SubchannelCall::StartTransportStreamOpBatch
void StartTransportStreamOpBatch(grpc_transport_stream_op_batch *batch)
Definition: subchannel.cc:178
false
#define false
Definition: setup_once.h:323
grpc_core::ConnectedSubchannel::args
const grpc_channel_args * args() const
Definition: subchannel.h:80
grpc_core
Definition: call_metric_recorder.h:31
event_engine.h
grpc_core::Slice
Definition: src/core/lib/slice/slice.h:282
grpc_core::SubchannelConnector
Definition: connector.h:39
grpc_core::MutexLock
Definition: src/core/lib/gprpp/sync.h:88
grpc_core::SubchannelCall::IncrementRefCount
void IncrementRefCount()
Definition: subchannel.cc:293
grpc_pollset_set
struct grpc_pollset_set grpc_pollset_set
Definition: iomgr_fwd.h:23
grpc_core::DualRefCounted
Definition: dual_ref_counted.h:48
grpc_core::Timestamp
Definition: src/core/lib/gprpp/time.h:62
grpc_core::Subchannel::ConnectedSubchannelStateWatcher
Definition: subchannel.cc:306
subchannel
RingHashSubchannelData * subchannel
Definition: ring_hash.cc:285
testing::internal::string
::std::string string
Definition: bloaty/third_party/protobuf/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:881
error
grpc_error_handle error
Definition: retry_filter.cc:499
grpc_core::ConnectedSubchannel::args_
grpc_channel_args * args_
Definition: subchannel.h:89
arena.h
grpc_resolved_address
Definition: resolved_address.h:34
grpc_core::Subchannel::ConnectivityStateWatcherList::watchers_
std::map< ConnectivityStateWatcherInterface *, RefCountedPtr< ConnectivityStateWatcherInterface > > watchers_
Definition: subchannel.h:312
closure.h
subchannel_pool_interface.h
grpc_core::SubchannelCall::MaybeInterceptRecvTrailingMetadata
void MaybeInterceptRecvTrailingMetadata(grpc_transport_stream_op_batch *batch)
Definition: subchannel.cc:237
ABSL_GUARDED_BY
#define ABSL_GUARDED_BY(x)
Definition: abseil-cpp/absl/base/thread_annotations.h:62
status
absl::Status status
Definition: rls.cc:251
args_
grpc_channel_args * args_
Definition: grpclb.cc:513
grpc_core::Subchannel::HealthWatcherMap::ShutdownLocked
void NotifyLocked(grpc_connectivity_state state, const absl::Status &status) ABSL_EXCLUSIVE_LOCKS_REQUIRED(&Subchannel grpc_connectivity_state CheckConnectivityStateLocked(Subchannel *subchannel, const std::string &health_check_service_name) ABSL_EXCLUSIVE_LOCKS_REQUIRED(&Subchannel voi ShutdownLocked)()
Definition: subchannel.h:341
resolved_address.h
grpc_core::SubchannelCall::recv_trailing_metadata_
grpc_metadata_batch * recv_trailing_metadata_
Definition: subchannel.h:155
grpc_core::SubchannelCall::Ref
RefCountedPtr< SubchannelCall > Ref() GRPC_MUST_USE_RESULT
Definition: subchannel.cc:198
map
zval * map
Definition: php/ext/google/protobuf/encode_decode.c:480
grpc_core::Arena
Definition: src/core/lib/resource_quota/arena.h:45
grpc_channel_args
Definition: grpc_types.h:132
T
#define T(upbtypeconst, upbtype, ctype, default_value)
mu_
Mutex mu_
Definition: oob_backend_metric.cc:115
grpc_connectivity_state
grpc_connectivity_state
Definition: include/grpc/impl/codegen/connectivity_state.h:30
grpc_core::SubchannelCall::Args::arena
Arena * arena
Definition: subchannel.h:104
grpc_core::SubchannelCall::GetCallStack
grpc_call_stack * GetCallStack()
Definition: subchannel.cc:188
grpc_types.h
context.h
grpc_core::Subchannel::HealthWatcherMap::map_
std::map< std::string, OrphanablePtr< HealthWatcher > > map_
Definition: subchannel.h:344
connector_
RefCountedPtr< grpc_security_connector > connector_
Definition: security_handshaker.cc:113
asyncio_get_stats.args
args
Definition: asyncio_get_stats.py:40
grpc_core::Subchannel::channel_args
const grpc_channel_args * channel_args() const
Definition: subchannel.h:241
grpc_core::RefCountedPtr
Definition: ref_counted_ptr.h:35
re2::Result
TestInstance::Result Result
Definition: bloaty/third_party/re2/re2/testing/tester.cc:96
grpc_core::Subchannel::ConnectivityStateWatcherList::empty
bool empty() const
Definition: subchannel.h:305
grpc_core::SubchannelCall::Args::call_combiner
CallCombiner * call_combiner
Definition: subchannel.h:106
grpc_core::SubchannelCall::Args
Definition: subchannel.h:98
grpc_core::SubchannelCall::RecvTrailingMetadataReady
static void RecvTrailingMetadataReady(void *arg, grpc_error_handle error)
Definition: subchannel.cc:274
grpc_call_stack
Definition: channel_stack.h:233
watchers_
std::map< SubchannelInterface::ConnectivityStateWatcherInterface *, WatcherWrapper * > watchers_
Definition: outlier_detection.cc:226
ABSL_EXCLUSIVE_LOCKS_REQUIRED
#define ABSL_EXCLUSIVE_LOCKS_REQUIRED(...)
Definition: abseil-cpp/absl/base/thread_annotations.h:145
grpc_core::SubchannelCall::recv_trailing_metadata_ready_
grpc_closure recv_trailing_metadata_ready_
Definition: subchannel.h:153
grpc_core::Subchannel::pollset_set
grpc_pollset_set * pollset_set() const
Definition: subchannel.h:239
grpc_core::Subchannel::DataProducerInterface
Definition: subchannel.h:212
connectivity_state.h
grpc_core::SubchannelCall::after_call_stack_destroy_
grpc_closure * after_call_stack_destroy_
Definition: subchannel.h:151
grpc_core::SubchannelCall::Create
static RefCountedPtr< SubchannelCall > Create(Args args, grpc_error_handle *error)
Definition: subchannel.cc:142
call_combiner.h
grpc_core::SubchannelCall::SetAfterCallStackDestroy
void SetAfterCallStackDestroy(grpc_closure *closure)
Definition: subchannel.cc:192
grpc_core::ConnectedSubchannel::StartWatch
void StartWatch(grpc_pollset_set *interested_parties, OrphanablePtr< ConnectivityStateWatcherInterface > watcher)
Definition: subchannel.cc:112
absl::optional< std::string >
GRPC_CHANNEL_IDLE
@ GRPC_CHANNEL_IDLE
Definition: include/grpc/impl/codegen/connectivity_state.h:32
arg
Definition: cmdline.cc:40
time.h
grpc_core::SubchannelCall::Args::deadline
Timestamp deadline
Definition: subchannel.h:103
status_
absl::Status status_
Definition: outlier_detection.cc:404
grpc_core::Subchannel::connected_subchannel
RefCountedPtr< ConnectedSubchannel > connected_subchannel() ABSL_LOCKS_EXCLUDED(mu_)
Definition: subchannel.h:262
error.h
key_
RlsLb::RequestKey key_
Definition: rls.cc:659
grpc_core::SubchannelCall::Args::pollent
grpc_polling_entity * pollent
Definition: subchannel.h:100
grpc_polling_entity
Definition: polling_entity.h:38
batch
grpc_transport_stream_op_batch * batch
Definition: retry_filter.cc:243
grpc_core::Subchannel::ConnectivityStateWatcherInterface::ConnectivityStateChange
Definition: subchannel.h:171
grpc_core::RefCounted
Definition: ref_counted.h:280
grpc_core::BackOff
Definition: backoff.h:32
grpc_core::ConnectedSubchannel::ConnectedSubchannel
ConnectedSubchannel(grpc_channel_stack *channel_stack, const grpc_channel_args *args, RefCountedPtr< channelz::SubchannelNode > channelz_subchannel)
Definition: subchannel.cc:96
grpc_core::ConnectedSubchannel::channelz_subchannel
channelz::SubchannelNode * channelz_subchannel() const
Definition: subchannel.h:81
grpc_core::SubchannelKey
Definition: subchannel_pool_interface.h:40
grpc_core::ConnectedSubchannel::Ping
void Ping(grpc_closure *on_initiate, grpc_closure *on_ack)
Definition: subchannel.cc:123
grpc_core::Subchannel::ConnectivityStateWatcherInterface::ConnectivityStateChange::state
grpc_connectivity_state state
Definition: subchannel.h:172
grpc_core::Mutex
Definition: src/core/lib/gprpp/sync.h:61
grpc_core::ConnectedSubchannel::~ConnectedSubchannel
~ConnectedSubchannel() override
Definition: subchannel.cc:107
shutdown_
bool shutdown_
Definition: pick_first.cc:173
grpc_core::Subchannel
Definition: subchannel.h:166
debug_location.h
key
const char * key
Definition: hpack_parser_table.cc:164
grpc_core::UniqueTypeName
Definition: unique_type_name.h:56
GRPC_MUST_USE_RESULT
#define GRPC_MUST_USE_RESULT
Definition: impl/codegen/port_platform.h:584
grpc_core::ConnectedSubchannel::channel_stack
grpc_channel_stack * channel_stack() const
Definition: subchannel.h:79
grpc_core::SubchannelCall::original_recv_trailing_metadata_
grpc_closure * original_recv_trailing_metadata_
Definition: subchannel.h:154
grpc_core::SubchannelPoolInterface
Definition: subchannel_pool_interface.h:76
grpc_core::SubchannelCall::Args::connected_subchannel
RefCountedPtr< ConnectedSubchannel > connected_subchannel
Definition: subchannel.h:99
grpc_core::ConnectedSubchannel::channelz_subchannel_
RefCountedPtr< channelz::SubchannelNode > channelz_subchannel_
Definition: subchannel.h:92
google::protobuf.internal.python_message.Clear
Clear
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/python_message.py:1430
ref_counted.h
ABSL_LOCKS_EXCLUDED
#define ABSL_LOCKS_EXCLUDED(...)
Definition: abseil-cpp/absl/base/thread_annotations.h:163
grpc_core::SubchannelCall::Args::start_time
gpr_cycle_counter start_time
Definition: subchannel.h:102
grpc_core::Subchannel::ConnectivityStateWatcherInterface
Definition: subchannel.h:168
grpc_core::channelz::SubchannelNode
Definition: client_channel_channelz.h:44
absl::Status
Definition: third_party/abseil-cpp/absl/status/status.h:424
grpc_core::Subchannel::mu_
Mutex mu_
Definition: subchannel.h:389
grpc_core::OrphanablePtr
std::unique_ptr< T, Deleter > OrphanablePtr
Definition: orphanable.h:64
std
Definition: grpcpp/impl/codegen/async_unary_call.h:407
grpc_core::WeakRefCountedPtr
Definition: ref_counted_ptr.h:185
framework.rpc.grpc_channelz.Subchannel
Subchannel
Definition: grpc_channelz.py:38
grpc_event_engine
Definition: endpoint_config.h:24
grpc_call_context_element
Definition: core/lib/channel/context.h:51
grpc::protobuf::util::Status
GRPC_CUSTOM_UTIL_STATUS Status
Definition: include/grpcpp/impl/codegen/config_protobuf.h:93
grpc_core::Subchannel::ConnectivityStateWatcherList
Definition: subchannel.h:291
grpc_core::SubchannelCall::Unref
void Unref()
Definition: subchannel.cc:209
grpc_core::Subchannel::HealthWatcherMap
Definition: subchannel.h:324
state
Definition: bloaty/third_party/zlib/contrib/blast/blast.c:41
channelz
void channelz(grpc_end2end_test_config config)
Definition: test/core/end2end/tests/channelz.cc:318
closure
Definition: proxy.cc:59
unique_type_name.h
grpc_core::ConnectedSubchannel::channel_stack_
grpc_channel_stack * channel_stack_
Definition: subchannel.h:88
ref_counted_ptr.h
grpc_core::Subchannel::AsyncWatcherNotifierLocked
Definition: subchannel.cc:357
state_
grpc_connectivity_state state_
Definition: channel_connectivity.cc:213
transport.h
watcher
ClusterWatcher * watcher
Definition: cds.cc:148
dual_ref_counted.h
grpc_core::SubchannelCall
Definition: subchannel.h:96
absl
Definition: abseil-cpp/absl/algorithm/algorithm.h:31
grpc_core::Subchannel::HealthWatcherMap::HealthWatcher
Definition: subchannel.cc:409
grpc_core::ConnectedSubchannel::GetInitialCallSizeEstimate
size_t GetInitialCallSizeEstimate() const
Definition: subchannel.cc:133
asyncio_get_stats.type
type
Definition: asyncio_get_stats.py:37
iomgr_fwd.h
setup.template
template
Definition: setup.py:47
grpc_core::SubchannelCall::Destroy
static void Destroy(void *arg, grpc_error_handle error)
Definition: subchannel.cc:218
grpc_error
Definition: error_internal.h:42
grpc_core::Duration
Definition: src/core/lib/gprpp/time.h:122
grpc_core::SubchannelCall::Args::context
grpc_call_context_element * context
Definition: subchannel.h:105
grpc_metadata_batch
Definition: metadata_batch.h:1259
grpc_transport_stream_op_batch
Definition: transport.h:284
grpc_closure
Definition: closure.h:56
grpc_core::Subchannel::ConnectivityStateWatcherInterface::mu_
Mutex mu_
Definition: subchannel.h:201
grpc_core::SubchannelCall::Args::path
Slice path
Definition: subchannel.h:101
sync.h
time_precise.h
port_platform.h


grpc
Author(s):
autogenerated on Fri May 16 2025 03:00:23