Go to the documentation of this file.
17 #ifndef GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CLIENT_CHANNEL_H
18 #define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CLIENT_CHANNEL_H
31 #include "absl/base/thread_annotations.h"
32 #include "absl/status/status.h"
33 #include "absl/strings/string_view.h"
34 #include "absl/types/optional.h"
89 #define GRPC_ARG_SERVER_URI "grpc.server_uri"
92 #define GRPC_ARG_CLIENT_CHANNEL "grpc.internal.client_channel"
95 #define GRPC_ARG_SERVICE_CONFIG_OBJ "grpc.internal.service_config_obj"
105 #define MAX_PENDING_BATCHES 6
142 this, on_complete,
true);
147 return static_cast<int>(external_watchers_.size());
167 bool is_transparent_retry);
171 class ResolverResultHandler;
172 class SubchannelWrapper;
173 class ClientChannelControlHelper;
174 class ConnectivityWatcherAdder;
175 class ConnectivityWatcherRemover;
256 std::unique_ptr<LoadBalancingPolicy::SubchannelPicker> picker)
315 absl::
Status resolver_transient_failure_error_
339 bool previous_resolution_contained_addresses_
411 bool is_transparent_retry);
414 void Orphan()
override;
430 return subchannel_call_;
434 class LbQueuedCallCanceller;
436 class BackendMetricAccessor;
441 static void FailPendingBatchInCallCombiner(
void*
arg,
444 typedef bool (*YieldCallCombinerPredicate)(
454 return closures.
size() > 0;
459 void PendingBatchesFail(
461 YieldCallCombinerPredicate yield_call_combiner_predicate);
462 static void ResumePendingBatchInCallCombiner(
void*
arg,
465 void PendingBatchesResume();
474 void CreateSubchannelCall();
478 void MaybeRemoveCallFromLbQueuedCallsLocked()
481 void MaybeAddCallToLbQueuedCallsLocked()
501 gpr_cycle_counter lb_call_start_time_ = gpr_get_cycle_counter();
522 lb_subchannel_call_tracker_;
568 call_dispatch_controller_(call_dispatch_controller) {
574 return &call_dispatch_controller_;
589 : call_dispatch_controller_(call_dispatch_controller) {}
592 if (call_dispatch_controller_ !=
nullptr) {
593 return call_dispatch_controller_->ShouldRetry();
599 if (call_dispatch_controller_ !=
nullptr && !commit_called_) {
600 call_dispatch_controller_->Commit();
601 commit_called_ =
true;
607 bool commit_called_ =
false;
612 self->~ClientChannelServiceConfigCallData();
620 #endif // GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CLIENT_CHANNEL_H
static ClientChannel * GetFromChannel(Channel *channel)
#define MAX_PENDING_BATCHES
std::string default_authority_
static void Destroy(void *ptr)
void RemoveResolverQueuedCall(ResolverQueuedCall *to_remove, grpc_polling_entity *pollent) ABSL_EXCLUSIVE_LOCKS_REQUIRED(resolution_mu_)
grpc_closure * watcher_timer_init_
static void RemoveWatcherFromExternalWatchersMap(ClientChannel *chand, grpc_closure *on_complete, bool cancel)
std::string uri_to_resolve_
const grpc_channel_args * channel_args_
int NumExternalConnectivityWatchers() const
std::shared_ptr< WorkSerializer > work_serializer_
void AddConnectivityWatcher(grpc_connectivity_state initial_state, OrphanablePtr< AsyncConnectivityStateWatcherInterface > watcher)
ClientChannelFactory * client_channel_factory_
std::atomic< bool > done_
static grpc_error_handle Init(grpc_channel_element *elem, grpc_channel_element_args *args)
struct grpc_pollset_set grpc_pollset_set
void AddWatcherLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_ -> work_serializer_)
void OnResolverErrorLocked(absl::Status status) ABSL_EXCLUSIVE_LOCKS_REQUIRED(*work_serializer_)
void RemoveWatcherLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(*chand_ -> work_serializer_)
ResolverQueuedCall * next
std::vector< std::unique_ptr< ParsedConfig > > ParsedConfigVector
RefCountedPtr< ConnectedSubchannel > connected_subchannel_
void Notify(grpc_connectivity_state state, const absl::Status &) override
bool PickSubchannelLocked(grpc_error_handle *error) ABSL_EXCLUSIVE_LOCKS_REQUIRED(&ClientChannel voi AsyncPickDone)(grpc_error_handle error)
OrphanablePtr< LoadBalancingPolicy > CreateLbPolicyLocked(const grpc_channel_args &args) ABSL_EXCLUSIVE_LOCKS_REQUIRED(*work_serializer_)
OrphanablePtr< ClientChannel::LoadBalancedCall > lb_call_
void AddResolverQueuedCall(ResolverQueuedCall *call, grpc_polling_entity *pollent) ABSL_EXCLUSIVE_LOCKS_REQUIRED(resolution_mu_)
RefCountedPtr< ServiceConfig > default_service_config_
const size_t service_config_parser_index_
ConfigSelector::CallDispatchController * call_dispatch_controller()
grpc_connectivity_state CheckConnectivityState(bool try_to_connect)
void * Alloc(size_t size) override
void UpdateStateAndPickerLocked(grpc_connectivity_state state, const absl::Status &status, const char *reason, std::unique_ptr< LoadBalancingPolicy::SubchannelPicker > picker) ABSL_EXCLUSIVE_LOCKS_REQUIRED(*work_serializer_)
void AddLbQueuedCall(LbQueuedCall *call, grpc_polling_entity *pollent) ABSL_EXCLUSIVE_LOCKS_REQUIRED(data_plane_mu_)
grpc_closure * on_complete_
wrapped_grpc_channel * channel
grpc_connectivity_state * state_
CallDispatchControllerWrapper call_dispatch_controller_
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
Mutex external_watchers_mu_
#define ABSL_EXCLUSIVE_LOCKS_REQUIRED(...)
static bool NoYieldCallCombiner(const CallCombinerClosureList &)
Results returned by the resolver.
channelz::ChannelNode * channelz_node_
OrphanablePtr< LoadBalancedCall > CreateLoadBalancedCall(const grpc_call_element_args &args, grpc_polling_entity *pollent, grpc_closure *on_call_destruction_complete, ConfigSelector::CallDispatchController *call_dispatch_controller, bool is_transparent_retry)
void UpdateServiceConfigInControlPlaneLocked(RefCountedPtr< ServiceConfig > service_config, RefCountedPtr< ConfigSelector > config_selector, std::string lb_policy_name) ABSL_EXCLUSIVE_LOCKS_REQUIRED(*work_serializer_)
ExternalConnectivityWatcher(ClientChannel *chand, grpc_polling_entity pollent, grpc_connectivity_state *state, grpc_closure *on_complete, grpc_closure *watcher_timer_init)
~ExternalConnectivityWatcher() override
grpc_byte_buffer * recv_message_
ConfigSelector::CallDispatchController * call_dispatch_controller_
CallCombiner * call_combiner_
void TryToConnectLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(*work_serializer_)
grpc_transport_stream_op_batch * batch
grpc_polling_entity pollent_
void UpdateServiceConfigInDataPlaneLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(*work_serializer_)
void CreateResolverLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(*work_serializer_)
static void StartTransportOp(grpc_channel_element *elem, grpc_transport_op *op)
static void Destroy(grpc_channel_element *elem)
static void GetChannelInfo(grpc_channel_element *elem, const grpc_channel_info *info)
LbCallState(LoadBalancedCall *lb_call)
std::map< UniqueTypeName, absl::string_view > CallAttributes
grpc_metadata_array recv_trailing_metadata_
ClientChannel(grpc_channel_element_args *args, grpc_error_handle *error)
void RemoveLbQueuedCall(LbQueuedCall *to_remove, grpc_polling_entity *pollent) ABSL_EXCLUSIVE_LOCKS_REQUIRED(data_plane_mu_)
void AddExternalConnectivityWatcher(grpc_polling_entity pollent, grpc_connectivity_state *state, grpc_closure *on_complete, grpc_closure *watcher_timer_init)
grpc_closure * original_recv_initial_metadata_ready_
std::unique_ptr< SubchannelPicker > picker_
const bool deadline_checking_enabled_
grpc_closure recv_initial_metadata_ready_
@ GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA
Holds a pointer to ServiceConfigCallData associated with this call.
void DestroyResolverAndLbPolicyLocked() ABSL_EXCLUSIVE_LOCKS_REQUIRED(*work_serializer_)
RefCountedPtr< ServiceConfig > service_config_
void StartTransportOpLocked(grpc_transport_op *op) ABSL_EXCLUSIVE_LOCKS_REQUIRED(*work_serializer_)
grpc_call_context_element * call_context_
std::unique_ptr< T, Deleter > OrphanablePtr
BackendMetricData backend_metric_data_
ResolverQueuedCall *resolver_queued_calls_ ABSL_GUARDED_BY(resolution_mu_)
ClientChannelServiceConfigCallData(RefCountedPtr< ServiceConfig > service_config, const ServiceConfigParser::ParsedConfigVector *method_configs, ServiceConfigCallData::CallAttributes call_attributes, ConfigSelector::CallDispatchController *call_dispatch_controller, grpc_call_context_element *call_context)
grpc_closure recv_trailing_metadata_ready_
GRPC_CUSTOM_UTIL_STATUS Status
static bool YieldCallCombinerIfPendingBatchesFound(const CallCombinerClosureList &closures)
void RemoveConnectivityWatcher(AsyncConnectivityStateWatcherInterface *watcher)
void channelz(grpc_end2end_test_config config)
OrphanablePtr< Resolver > resolver_
PendingBatch pending_batches_[MAX_PENDING_BATCHES]
void CreateOrUpdateLbPolicyLocked(RefCountedPtr< LoadBalancingPolicy::Config > lb_policy_config, const absl::optional< std::string > &health_check_service_name, Resolver::Result result) ABSL_EXCLUSIVE_LOCKS_REQUIRED(*work_serializer_)
static const grpc_channel_filter kFilterVtable
void CancelExternalConnectivityWatcher(grpc_closure *on_complete)
grpc_connectivity_state initial_state_
grpc_pollset_set * interested_parties_
LoadBalancedCall * lb_call_
void OnResolverResultChangedLocked(Resolver::Result result) ABSL_EXCLUSIVE_LOCKS_REQUIRED(*work_serializer_)
std::vector< std::pair< std::string, std::string > > Metadata
grpc_closure * original_recv_message_ready_
RefCountedPtr< GrpcLb > lb_policy_
LoadBalancedCall * lb_call
grpc_closure recv_message_ready_
grpc_error_handle DoPingLocked(grpc_transport_op *op) ABSL_EXCLUSIVE_LOCKS_REQUIRED(*work_serializer_)
grpc_metadata_array recv_initial_metadata_
grpc_channel_stack * owning_stack_
RefCountedPtr< SubchannelCall > subchannel_call() const
static bool YieldCallCombiner(const CallCombinerClosureList &)
grpc_polling_entity pollent_
grpc_call_stack * owning_call_
grpc_closure * original_recv_trailing_metadata_ready_
bool ShouldRetry() override
CallDispatchControllerWrapper(ConfigSelector::CallDispatchController *call_dispatch_controller)
grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:58:47