17 #ifndef GRPC_CORE_EXT_XDS_XDS_CLIENT_H
18 #define GRPC_CORE_EXT_XDS_XDS_CLIENT_H
25 #include "absl/strings/string_view.h"
26 #include "absl/types/optional.h"
100 return *certificate_provider_store_;
127 std::unique_ptr<ListenerWatcherInterface>
watcher);
129 ListenerWatcherInterface*
watcher,
130 bool delay_unsubscription =
false);
140 absl::string_view route_config_name,
141 std::unique_ptr<RouteConfigWatcherInterface>
watcher);
143 RouteConfigWatcherInterface*
watcher,
144 bool delay_unsubscription =
false);
154 std::unique_ptr<ClusterWatcherInterface>
watcher);
156 ClusterWatcherInterface*
watcher,
157 bool delay_unsubscription =
false);
167 std::unique_ptr<EndpointWatcherInterface>
watcher);
169 EndpointWatcherInterface*
watcher,
170 bool delay_unsubscription =
false);
174 absl::string_view lrs_server, absl::string_view
cluster_name,
184 absl::string_view lrs_server, absl::string_view
cluster_name,
220 template <
typename T>
228 ~ChannelState()
override;
233 XdsClient* xds_client()
const {
return xds_client_.get(); }
234 AdsCallState* ads_calld()
const;
235 LrsCallState* lrs_calld()
const;
237 void MaybeStartLrsCall();
240 bool HasAdsCall()
const;
241 bool HasActiveAdsCall()
const;
243 void StartConnectivityWatchLocked();
244 void CancelConnectivityWatchLocked();
246 void SubscribeLocked(
const std::string& type_url,
const std::string& name)
247 ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
248 void UnsubscribeLocked(
const std::string& type_url,
const std::string& name,
249 bool delay_unsubscription)
250 ABSL_EXCLUSIVE_LOCKS_REQUIRED(&XdsClient::mu_);
256 WeakRefCountedPtr<XdsClient> xds_client_;
258 const XdsBootstrap::XdsServer& server_;
262 bool shutting_down_ =
false;
263 StateWatcher* watcher_ =
nullptr;
266 OrphanablePtr<RetryableCall<AdsCallState>> ads_calld_;
267 OrphanablePtr<RetryableCall<LrsCallState>> lrs_calld_;
270 struct ListenerState {
271 std::map<ListenerWatcherInterface*,
272 std::unique_ptr<ListenerWatcherInterface>>
275 absl::optional<XdsApi::LdsUpdate>
update;
276 XdsApi::ResourceMetadata meta;
279 struct RouteConfigState {
280 std::map<RouteConfigWatcherInterface*,
281 std::unique_ptr<RouteConfigWatcherInterface>>
284 absl::optional<XdsApi::RdsUpdate>
update;
285 XdsApi::ResourceMetadata meta;
288 struct ClusterState {
289 std::map<ClusterWatcherInterface*, std::unique_ptr<ClusterWatcherInterface>>
292 absl::optional<XdsApi::CdsUpdate>
update;
293 XdsApi::ResourceMetadata meta;
296 struct EndpointState {
297 std::map<EndpointWatcherInterface*,
298 std::unique_ptr<EndpointWatcherInterface>>
301 absl::optional<XdsApi::EdsUpdate>
update;
302 XdsApi::ResourceMetadata meta;
305 struct LoadReportState {
321 ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
324 bool send_all_clusters,
const std::set<std::string>& clusters)
325 ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
327 void UpdateResourceMetadataWithFailedParseResultLocked(
329 ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
331 std::unique_ptr<XdsBootstrap> bootstrap_;
344 std::map<std::string , ListenerState> listener_map_
345 ABSL_GUARDED_BY(mu_);
347 std::map<std::string , RouteConfigState>
348 route_config_map_ ABSL_GUARDED_BY(mu_);
350 std::map<std::string , ClusterState> cluster_map_
351 ABSL_GUARDED_BY(mu_);
353 std::map<std::string , EndpointState> endpoint_map_
354 ABSL_GUARDED_BY(mu_);
358 std::pair<std::string , std::string >,
360 load_report_map_ ABSL_GUARDED_BY(mu_);
363 std::map<std::string , std::string > resource_version_map_
364 ABSL_GUARDED_BY(mu_);
366 bool shutting_down_ ABSL_GUARDED_BY(mu_) =
false;
absl::optional< XdsApi::CdsUpdate > update
Definition: cds.cc:114
ClusterWatcher * watcher
Definition: cds.cc:112
Definition: certificate_provider_store.h:38
Definition: dual_ref_counted.h:52
static ExecCtx * Get()
Gets pointer to current exec_ctx.
Definition: exec_ctx.h:222
grpc_millis Now()
Returns the stored current time relative to start if valid, otherwise refreshes the stored time,...
Definition: exec_ctx.cc:176
Definition: orphanable.h:76
Definition: ref_counted_ptr.h:35
Definition: ref_counted_ptr.h:186
std::map< std::pair< std::string, std::string >, ClusterLoadReport > ClusterLoadReportMap
Definition: xds_api.h:550
Definition: xds_bootstrap.h:50
Definition: xds_client.h:65
virtual void OnClusterChanged(XdsApi::CdsUpdate cluster_data)=0
virtual void OnError(grpc_error_handle error)=0
virtual ~ClusterWatcherInterface()=default
virtual void OnResourceDoesNotExist()=0
Definition: xds_client.h:74
virtual void OnError(grpc_error_handle error)=0
virtual ~EndpointWatcherInterface()=default
virtual void OnResourceDoesNotExist()=0
virtual void OnEndpointChanged(XdsApi::EdsUpdate update)=0
Definition: xds_client.h:47
virtual ~ListenerWatcherInterface()=default
virtual void OnListenerChanged(XdsApi::LdsUpdate listener)=0
virtual void OnError(grpc_error_handle error)=0
virtual void OnResourceDoesNotExist()=0
Definition: xds_client.h:56
virtual ~RouteConfigWatcherInterface()=default
virtual void OnResourceDoesNotExist()=0
virtual void OnError(grpc_error_handle error)=0
virtual void OnRouteConfigChanged(XdsApi::RdsUpdate route_config)=0
Definition: xds_client.h:44
void WatchRouteConfigData(absl::string_view route_config_name, std::unique_ptr< RouteConfigWatcherInterface > watcher)
Definition: xds_client.cc:1907
void Orphan() override
Definition: xds_client.cc:1843
RefCountedPtr< XdsClusterLocalityStats > AddClusterLocalityStats(absl::string_view lrs_server, absl::string_view cluster_name, absl::string_view eds_service_name, RefCountedPtr< XdsLocalityName > locality)
Definition: xds_client.cc:2078
RefCountedPtr< XdsClusterDropStats > AddClusterDropStats(absl::string_view lrs_server, absl::string_view cluster_name, absl::string_view eds_service_name)
Definition: xds_client.cc:2024
void CancelClusterDataWatch(absl::string_view cluster_name, ClusterWatcherInterface *watcher, bool delay_unsubscription=false)
Definition: xds_client.cc:1968
void CancelEndpointDataWatch(absl::string_view eds_service_name, EndpointWatcherInterface *watcher, bool delay_unsubscription=false)
Definition: xds_client.cc:2006
void WatchEndpointData(absl::string_view eds_service_name, std::unique_ptr< EndpointWatcherInterface > watcher)
Definition: xds_client.cc:1986
static RefCountedPtr< XdsClient > GetFromChannelArgs(const grpc_channel_args &args)
Definition: xds_client.cc:2494
void AddChannelzLinkage(channelz::ChannelNode *parent_channelz_node)
Definition: xds_client.cc:1823
void RemoveChannelzLinkage(channelz::ChannelNode *parent_channelz_node)
Definition: xds_client.cc:1833
std::string DumpClientConfigBinary()
Definition: xds_client.cc:2293
void CancelListenerDataWatch(absl::string_view listener_name, ListenerWatcherInterface *watcher, bool delay_unsubscription=false)
Definition: xds_client.cc:1889
~XdsClient() override
Definition: xds_client.cc:1815
void WatchListenerData(absl::string_view listener_name, std::unique_ptr< ListenerWatcherInterface > watcher)
Definition: xds_client.cc:1869
grpc_arg MakeChannelArg() const
Definition: xds_client.cc:2488
grpc_pollset_set * interested_parties() const
Definition: xds_client.h:103
XdsClient(std::unique_ptr< XdsBootstrap > bootstrap, const grpc_channel_args *args)
Definition: xds_client.cc:1795
static RefCountedPtr< XdsClient > GetOrCreate(const grpc_channel_args *args, grpc_error_handle *error)
Definition: xds_client.cc:2396
const XdsBootstrap & bootstrap() const
Definition: xds_client.h:93
void ResetBackoff()
Definition: xds_client.cc:2139
void WatchClusterData(absl::string_view cluster_name, std::unique_ptr< ClusterWatcherInterface > watcher)
Definition: xds_client.cc:1948
void RemoveClusterDropStats(absl::string_view, absl::string_view cluster_name, absl::string_view eds_service_name, XdsClusterDropStats *cluster_drop_stats)
Definition: xds_client.cc:2058
CertificateProviderStore & certificate_provider_store()
Definition: xds_client.h:99
void RemoveClusterLocalityStats(absl::string_view, absl::string_view cluster_name, absl::string_view eds_service_name, const RefCountedPtr< XdsLocalityName > &locality, XdsClusterLocalityStats *cluster_locality_stats)
Definition: xds_client.cc:2115
void CancelRouteConfigDataWatch(absl::string_view route_config_name, RouteConfigWatcherInterface *watcher, bool delay_unsubscription=false)
Definition: xds_client.cc:1929
Definition: xds_client_stats.h:102
Definition: xds_client_stats.h:156
Definition: channelz.h:174
int64_t grpc_millis
Definition: exec_ctx.h:37
grpc_error_handle error
Definition: lame_client.cc:54
void UnsetGlobalXdsClientForTest()
Definition: xds_client.cc:2449
void SetXdsChannelArgsForTest(grpc_channel_args *args)
Definition: xds_client.cc:2444
void SetXdsFallbackBootstrapConfig(const char *config)
Definition: xds_client.cc:2454
Round Robin Policy.
Definition: backend_metric.cc:26
TraceFlag grpc_xds_client_refcount_trace(false, "xds_client_refcount")
Definition: xds_client.h:42
TraceFlag grpc_xds_client_trace(false, "xds_client")
Definition: xds_client.h:41
std::unique_ptr< T, Deleter > OrphanablePtr
Definition: orphanable.h:67
struct grpc_pollset_set grpc_pollset_set
Definition: pollset_set.h:31
RefCountedPtr< LoadBalancingPolicy::Config > config
Definition: priority.cc:60
A single argument...
Definition: grpc_types.h:103
An array of arguments that can be passed around.
Definition: grpc_types.h:132
Definition: channel.h:105
Definition: xds_api.h:619
Definition: xds_api.h:395
Definition: xds_api.h:451
Definition: xds_api.h:238
Definition: xds_api.h:149
Definition: xds_bootstrap.h:61
Definition: xds_client.h:306
XdsClusterLocalityStats::Snapshot deleted_locality_stats
Definition: xds_client.h:308
XdsClusterLocalityStats * locality_stats
Definition: xds_client.h:307
Definition: xds_client_stats.h:107
Definition: xds_client_stats.h:174
Definition: xds_client_stats.h:46
Definition: error_internal.h:41
std::string eds_service_name
Definition: xds_cluster_resolver.cc:74
std::string cluster_name
Definition: xds_cluster_resolver.cc:66