diff --git a/envoy/upstream/cluster_manager.h b/envoy/upstream/cluster_manager.h index bbdcaf27116d3..fbb50d1736055 100644 --- a/envoy/upstream/cluster_manager.h +++ b/envoy/upstream/cluster_manager.h @@ -378,7 +378,10 @@ class ClusterManager { * * @return the stat names. */ - virtual const ClusterStatNames& clusterStatNames() const PURE; + virtual const ClusterTrafficStatNames& clusterStatNames() const PURE; + virtual const ClusterConfigUpdateStatNames& clusterConfigUpdateStatNames() const PURE; + virtual const ClusterLbStatNames& clusterLbStatNames() const PURE; + virtual const ClusterEndpointStatNames& clusterEndpointStatNames() const PURE; virtual const ClusterLoadReportStatNames& clusterLoadReportStatNames() const PURE; virtual const ClusterCircuitBreakersStatNames& clusterCircuitBreakersStatNames() const PURE; virtual const ClusterRequestResponseSizeStatNames& diff --git a/envoy/upstream/upstream.h b/envoy/upstream/upstream.h index 2633fc60f7071..3bd9877df33c4 100644 --- a/envoy/upstream/upstream.h +++ b/envoy/upstream/upstream.h @@ -565,12 +565,36 @@ class PrioritySet { }; /** - * All cluster stats. @see stats_macros.h + * All cluster config update related stats. + * See https://github.com/envoyproxy/envoy/issues/23575 for details. Stats from ClusterInfo::stats() + * will be split into subgroups "config-update", "lb", "endpoint" and "the rest"(which are mainly + * upstream related), roughly based on their semantics. */ -#define ALL_CLUSTER_STATS(COUNTER, GAUGE, HISTOGRAM, TEXT_READOUT, STATNAME) \ +#define ALL_CLUSTER_CONFIG_UPDATE_STATS(COUNTER, GAUGE, HISTOGRAM, TEXT_READOUT, STATNAME) \ COUNTER(assignment_stale) \ COUNTER(assignment_timeout_received) \ - COUNTER(bind_errors) \ + COUNTER(update_attempt) \ + COUNTER(update_empty) \ + COUNTER(update_failure) \ + COUNTER(update_no_rebuild) \ + COUNTER(update_success) \ + GAUGE(version, NeverImport) + +/** + * All cluster endpoints related stats. + */ +#define ALL_CLUSTER_ENDPOINT_STATS(COUNTER, GAUGE, HISTOGRAM, TEXT_READOUT, STATNAME) \ + GAUGE(max_host_weight, NeverImport) \ + COUNTER(membership_change) \ + GAUGE(membership_degraded, NeverImport) \ + GAUGE(membership_excluded, NeverImport) \ + GAUGE(membership_healthy, NeverImport) \ + GAUGE(membership_total, NeverImport) + +/** + * All cluster loadbalancing related stats. + */ +#define ALL_CLUSTER_LB_STATS(COUNTER, GAUGE, HISTOGRAM, TEXT_READOUT, STATNAME) \ COUNTER(lb_healthy_panic) \ COUNTER(lb_local_cluster_not_ok) \ COUNTER(lb_recalculate_zone_structures) \ @@ -585,14 +609,15 @@ class PrioritySet { COUNTER(lb_zone_routing_all_directly) \ COUNTER(lb_zone_routing_cross_zone) \ COUNTER(lb_zone_routing_sampled) \ - COUNTER(membership_change) \ + GAUGE(lb_subsets_active, Accumulate) + +/** + * All cluster stats. @see stats_macros.h + */ +#define ALL_CLUSTER_TRAFFIC_STATS(COUNTER, GAUGE, HISTOGRAM, TEXT_READOUT, STATNAME) \ + COUNTER(bind_errors) \ COUNTER(original_dst_host_invalid) \ COUNTER(retry_or_shadow_abandoned) \ - COUNTER(update_attempt) \ - COUNTER(update_empty) \ - COUNTER(update_failure) \ - COUNTER(update_no_rebuild) \ - COUNTER(update_success) \ COUNTER(upstream_cx_close_notify) \ COUNTER(upstream_cx_connect_attempts_exceeded) \ COUNTER(upstream_cx_connect_fail) \ @@ -644,18 +669,11 @@ class PrioritySet { COUNTER(upstream_rq_total) \ COUNTER(upstream_rq_tx_reset) \ COUNTER(upstream_http3_broken) \ - GAUGE(lb_subsets_active, Accumulate) \ - GAUGE(max_host_weight, NeverImport) \ - GAUGE(membership_degraded, NeverImport) \ - GAUGE(membership_excluded, NeverImport) \ - GAUGE(membership_healthy, NeverImport) \ - GAUGE(membership_total, NeverImport) \ GAUGE(upstream_cx_active, Accumulate) \ GAUGE(upstream_cx_rx_bytes_buffered, Accumulate) \ GAUGE(upstream_cx_tx_bytes_buffered, Accumulate) \ GAUGE(upstream_rq_active, Accumulate) \ GAUGE(upstream_rq_pending_active, Accumulate) \ - GAUGE(version, NeverImport) \ HISTOGRAM(upstream_cx_connect_ms, Milliseconds) \ HISTOGRAM(upstream_cx_length_ms, Milliseconds) @@ -708,10 +726,29 @@ class PrioritySet { HISTOGRAM(upstream_rq_timeout_budget_per_try_percent_used, Unspecified) /** - * Struct definition for all cluster stats. @see stats_macros.h + * Struct definition for cluster config update stats. @see stats_macros.h + */ +MAKE_STAT_NAMES_STRUCT(ClusterConfigUpdateStatNames, ALL_CLUSTER_CONFIG_UPDATE_STATS); +MAKE_STATS_STRUCT(ClusterConfigUpdateStats, ClusterConfigUpdateStatNames, + ALL_CLUSTER_CONFIG_UPDATE_STATS); + +/** + * Struct definition for cluster endpoint related stats. @see stats_macros.h + */ +MAKE_STAT_NAMES_STRUCT(ClusterEndpointStatNames, ALL_CLUSTER_ENDPOINT_STATS); +MAKE_STATS_STRUCT(ClusterEndpointStats, ClusterEndpointStatNames, ALL_CLUSTER_ENDPOINT_STATS); + +/** + * Struct definition for cluster load balancing stats. @see stats_macros.h */ -MAKE_STAT_NAMES_STRUCT(ClusterStatNames, ALL_CLUSTER_STATS); -MAKE_STATS_STRUCT(ClusterStats, ClusterStatNames, ALL_CLUSTER_STATS); +MAKE_STAT_NAMES_STRUCT(ClusterLbStatNames, ALL_CLUSTER_LB_STATS); +MAKE_STATS_STRUCT(ClusterLbStats, ClusterLbStatNames, ALL_CLUSTER_LB_STATS); + +/** + * Struct definition for all cluster traffic stats. @see stats_macros.h + */ +MAKE_STAT_NAMES_STRUCT(ClusterTrafficStatNames, ALL_CLUSTER_TRAFFIC_STATS); +MAKE_STATS_STRUCT(ClusterTrafficStats, ClusterTrafficStatNames, ALL_CLUSTER_TRAFFIC_STATS); MAKE_STAT_NAMES_STRUCT(ClusterLoadReportStatNames, ALL_CLUSTER_LOAD_REPORT_STATS); MAKE_STATS_STRUCT(ClusterLoadReportStats, ClusterLoadReportStatNames, @@ -992,9 +1029,24 @@ class ClusterInfo : public Http::FilterChainFactory { virtual TransportSocketMatcher& transportSocketMatcher() const PURE; /** - * @return ClusterStats& strongly named stats for this cluster. + * @return ClusterConfigUpdateStats& config update stats for this cluster. + */ + virtual ClusterConfigUpdateStats& configUpdateStats() const PURE; + + /** + * @return ClusterLbStats& load-balancer-related stats for this cluster. + */ + virtual ClusterLbStats& lbStats() const PURE; + + /** + * @return ClusterEndpointStats& endpoint related stats for this cluster. + */ + virtual ClusterEndpointStats& endpointStats() const PURE; + + /** + * @return ClusterTrafficStats& all traffic related stats for this cluster. */ - virtual ClusterStats& stats() const PURE; + virtual ClusterTrafficStats& trafficStats() const PURE; /** * @return the stats scope that contains all cluster stats. This can be used to produce dynamic @@ -1003,7 +1055,7 @@ class ClusterInfo : public Http::FilterChainFactory { virtual Stats::Scope& statsScope() const PURE; /** - * @return ClusterLoadReportStats& strongly named load report stats for this cluster. + * @return ClusterLoadReportStats& load report stats for this cluster. */ virtual ClusterLoadReportStats& loadReportStats() const PURE; diff --git a/source/common/conn_pool/conn_pool_base.cc b/source/common/conn_pool/conn_pool_base.cc index 78d26a13f91f9..31ee3f3aff524 100644 --- a/source/common/conn_pool/conn_pool_base.cc +++ b/source/common/conn_pool/conn_pool_base.cc @@ -135,7 +135,7 @@ ConnPoolImplBase::tryCreateNewConnection(float global_preconnect_ratio) { const bool can_create_connection = host_->canCreateConnection(priority_); if (!can_create_connection) { - host_->cluster().stats().upstream_cx_overflow_.inc(); + host_->cluster().trafficStats().upstream_cx_overflow_.inc(); } // If we are at the connection circuit-breaker limit due to other upstreams having // too many open connections, and this upstream has no connections, always create one, to @@ -168,14 +168,14 @@ void ConnPoolImplBase::attachStreamToClient(Envoy::ConnectionPool::ActiveClient& ASSERT(client.readyForStream()); if (client.state() == Envoy::ConnectionPool::ActiveClient::State::ReadyForEarlyData) { - host_->cluster().stats().upstream_rq_0rtt_.inc(); + host_->cluster().trafficStats().upstream_rq_0rtt_.inc(); } if (enforceMaxRequests() && !host_->cluster().resourceManager(priority_).requests().canCreate()) { ENVOY_LOG(debug, "max streams overflow"); onPoolFailure(client.real_host_description_, absl::string_view(), ConnectionPool::PoolFailureReason::Overflow, context); - host_->cluster().stats().upstream_rq_pending_overflow_.inc(); + host_->cluster().trafficStats().upstream_rq_pending_overflow_.inc(); return; } ENVOY_CONN_LOG(debug, "creating stream", client); @@ -185,7 +185,7 @@ void ConnPoolImplBase::attachStreamToClient(Envoy::ConnectionPool::ActiveClient& client.remaining_streams_--; if (client.remaining_streams_ == 0) { ENVOY_CONN_LOG(debug, "maximum streams per connection, start draining", client); - host_->cluster().stats().upstream_cx_max_requests_.inc(); + host_->cluster().trafficStats().upstream_cx_max_requests_.inc(); transitionActiveClientState(client, Envoy::ConnectionPool::ActiveClient::State::Draining); } else if (capacity == 1) { // As soon as the new stream is created, the client will be maxed out. @@ -202,8 +202,8 @@ void ConnPoolImplBase::attachStreamToClient(Envoy::ConnectionPool::ActiveClient& num_active_streams_++; host_->stats().rq_total_.inc(); host_->stats().rq_active_.inc(); - host_->cluster().stats().upstream_rq_total_.inc(); - host_->cluster().stats().upstream_rq_active_.inc(); + host_->cluster().trafficStats().upstream_rq_total_.inc(); + host_->cluster().trafficStats().upstream_rq_active_.inc(); host_->cluster().resourceManager(priority_).requests().inc(); onPoolReady(client, context); @@ -216,7 +216,7 @@ void ConnPoolImplBase::onStreamClosed(Envoy::ConnectionPool::ActiveClient& clien state_.decrActiveStreams(1); num_active_streams_--; host_->stats().rq_active_.dec(); - host_->cluster().stats().upstream_rq_active_.dec(); + host_->cluster().trafficStats().upstream_rq_active_.dec(); host_->cluster().resourceManager(priority_).requests().dec(); // We don't update the capacity for HTTP/3 as the stream count should only // increase when a MAX_STREAMS frame is received. @@ -282,7 +282,7 @@ ConnectionPool::Cancellable* ConnPoolImplBase::newStreamImpl(AttachContext& cont ENVOY_LOG(debug, "max pending streams overflow"); onPoolFailure(nullptr, absl::string_view(), ConnectionPool::PoolFailureReason::Overflow, context); - host_->cluster().stats().upstream_rq_pending_overflow_.inc(); + host_->cluster().trafficStats().upstream_rq_pending_overflow_.inc(); return nullptr; } @@ -490,7 +490,7 @@ void ConnPoolImplBase::onConnectionEvent(ActiveClient& client, absl::string_view if (!client.hasHandshakeCompleted()) { client.has_handshake_completed_ = true; - host_->cluster().stats().upstream_cx_connect_fail_.inc(); + host_->cluster().trafficStats().upstream_cx_connect_fail_.inc(); host_->stats().cx_connect_fail_.inc(); onConnectFailed(client); @@ -595,7 +595,7 @@ void ConnPoolImplBase::onConnectionEvent(ActiveClient& client, absl::string_view client.currentUnusedCapacity()); // No need to update connecting capacity and connect_timer_ as the client is still connecting. ASSERT(client.state() == ActiveClient::State::Connecting); - host()->cluster().stats().upstream_cx_connect_with_0_rtt_.inc(); + host()->cluster().trafficStats().upstream_cx_connect_with_0_rtt_.inc(); transitionActiveClientState(client, (client.currentUnusedCapacity() > 0 ? ActiveClient::State::ReadyForEarlyData : ActiveClient::State::Busy)); @@ -606,13 +606,13 @@ void ConnPoolImplBase::onConnectionEvent(ActiveClient& client, absl::string_view PendingStream::PendingStream(ConnPoolImplBase& parent, bool can_send_early_data) : parent_(parent), can_send_early_data_(can_send_early_data) { - parent_.host()->cluster().stats().upstream_rq_pending_total_.inc(); - parent_.host()->cluster().stats().upstream_rq_pending_active_.inc(); + parent_.host()->cluster().trafficStats().upstream_rq_pending_total_.inc(); + parent_.host()->cluster().trafficStats().upstream_rq_pending_active_.inc(); parent_.host()->cluster().resourceManager(parent_.priority()).pendingRequests().inc(); } PendingStream::~PendingStream() { - parent_.host()->cluster().stats().upstream_rq_pending_active_.dec(); + parent_.host()->cluster().trafficStats().upstream_rq_pending_active_.dec(); parent_.host()->cluster().resourceManager(parent_.priority()).pendingRequests().dec(); } @@ -630,7 +630,7 @@ void ConnPoolImplBase::purgePendingStreams( while (!pending_streams_to_purge_.empty()) { PendingStreamPtr stream = pending_streams_to_purge_.front()->removeFromList(pending_streams_to_purge_); - host_->cluster().stats().upstream_rq_pending_failure_eject_.inc(); + host_->cluster().trafficStats().upstream_rq_pending_failure_eject_.inc(); onPoolFailure(host_description, failure_reason, reason, stream->context()); } } @@ -683,7 +683,7 @@ void ConnPoolImplBase::onPendingStreamCancel(PendingStream& stream, } } - host_->cluster().stats().upstream_rq_cancelled_.inc(); + host_->cluster().trafficStats().upstream_rq_cancelled_.inc(); checkForIdleAndCloseIdleConnsIfDraining(); } @@ -757,14 +757,16 @@ ActiveClient::ActiveClient(ConnPoolImplBase& parent, uint32_t lifetime_stream_li concurrent_stream_limit_(translateZeroToUnlimited(concurrent_stream_limit)), connect_timer_(parent_.dispatcher().createTimer([this]() { onConnectTimeout(); })) { conn_connect_ms_ = std::make_unique( - parent_.host()->cluster().stats().upstream_cx_connect_ms_, parent_.dispatcher().timeSource()); + parent_.host()->cluster().trafficStats().upstream_cx_connect_ms_, + parent_.dispatcher().timeSource()); conn_length_ = std::make_unique( - parent_.host()->cluster().stats().upstream_cx_length_ms_, parent_.dispatcher().timeSource()); + parent_.host()->cluster().trafficStats().upstream_cx_length_ms_, + parent_.dispatcher().timeSource()); connect_timer_->enableTimer(parent_.host()->cluster().connectTimeout()); parent_.host()->stats().cx_total_.inc(); parent_.host()->stats().cx_active_.inc(); - parent_.host()->cluster().stats().upstream_cx_total_.inc(); - parent_.host()->cluster().stats().upstream_cx_active_.inc(); + parent_.host()->cluster().trafficStats().upstream_cx_total_.inc(); + parent_.host()->cluster().trafficStats().upstream_cx_active_.inc(); parent_.host()->cluster().resourceManager(parent_.priority()).connections().inc(); } @@ -776,7 +778,7 @@ void ActiveClient::releaseResourcesBase() { conn_length_->complete(); - parent_.host()->cluster().stats().upstream_cx_active_.dec(); + parent_.host()->cluster().trafficStats().upstream_cx_active_.dec(); parent_.host()->stats().cx_active_.dec(); parent_.host()->cluster().resourceManager(parent_.priority()).connections().dec(); } @@ -784,7 +786,7 @@ void ActiveClient::releaseResourcesBase() { void ActiveClient::onConnectTimeout() { ENVOY_CONN_LOG(debug, "connect timeout", *this); - parent_.host()->cluster().stats().upstream_cx_connect_timeout_.inc(); + parent_.host()->cluster().trafficStats().upstream_cx_connect_timeout_.inc(); timed_out_ = true; close(); } @@ -809,7 +811,7 @@ void ActiveClient::onConnectionDurationTimeout() { } ENVOY_CONN_LOG(debug, "max connection duration reached, start draining", *this); - parent_.host()->cluster().stats().upstream_cx_max_duration_reached_.inc(); + parent_.host()->cluster().trafficStats().upstream_cx_max_duration_reached_.inc(); parent_.transitionActiveClientState(*this, Envoy::ConnectionPool::ActiveClient::State::Draining); // Close out the draining client if we no longer have active streams. diff --git a/source/common/http/codec_client.cc b/source/common/http/codec_client.cc index e7e8008ef1d71..19c11106187bf 100644 --- a/source/common/http/codec_client.cc +++ b/source/common/http/codec_client.cc @@ -171,7 +171,7 @@ void CodecClient::onData(Buffer::Instance& data) { if (!isPrematureResponseError(status) || (!active_requests_.empty() || getPrematureResponseHttpCode(status) != Code::RequestTimeout)) { - host_->cluster().stats().upstream_cx_protocol_error_.inc(); + host_->cluster().trafficStats().upstream_cx_protocol_error_.inc(); protocol_error_ = true; } close(); diff --git a/source/common/http/codec_client.h b/source/common/http/codec_client.h index c53fbf5c347b0..6dee7081f4ac9 100644 --- a/source/common/http/codec_client.h +++ b/source/common/http/codec_client.h @@ -164,7 +164,7 @@ class CodecClient : protected Logger::Loggable, } void onIdleTimeout() { - host_->cluster().stats().upstream_cx_idle_timeout_.inc(); + host_->cluster().trafficStats().upstream_cx_idle_timeout_.inc(); close(); } diff --git a/source/common/http/conn_pool_base.cc b/source/common/http/conn_pool_base.cc index 284e479a8632f..0ed8e5ef1c2f7 100644 --- a/source/common/http/conn_pool_base.cc +++ b/source/common/http/conn_pool_base.cc @@ -99,7 +99,7 @@ static const uint64_t DEFAULT_MAX_STREAMS = (1 << 29); void MultiplexedActiveClientBase::onGoAway(Http::GoAwayErrorCode) { ENVOY_CONN_LOG(debug, "remote goaway", *codec_client_); - parent_.host()->cluster().stats().upstream_cx_close_notify_.inc(); + parent_.host()->cluster().trafficStats().upstream_cx_close_notify_.inc(); if (state() != ActiveClient::State::Draining) { if (codec_client_->numActiveRequests() == 0) { codec_client_->close(); @@ -160,16 +160,16 @@ void MultiplexedActiveClientBase::onStreamReset(Http::StreamResetReason reason) switch (reason) { case StreamResetReason::ConnectionTermination: case StreamResetReason::ConnectionFailure: - parent_.host()->cluster().stats().upstream_rq_pending_failure_eject_.inc(); + parent_.host()->cluster().trafficStats().upstream_rq_pending_failure_eject_.inc(); closed_with_active_rq_ = true; break; case StreamResetReason::LocalReset: case StreamResetReason::ProtocolError: case StreamResetReason::OverloadManager: - parent_.host()->cluster().stats().upstream_rq_tx_reset_.inc(); + parent_.host()->cluster().trafficStats().upstream_rq_tx_reset_.inc(); break; case StreamResetReason::RemoteReset: - parent_.host()->cluster().stats().upstream_rq_rx_reset_.inc(); + parent_.host()->cluster().trafficStats().upstream_rq_rx_reset_.inc(); break; case StreamResetReason::LocalRefusedStreamReset: case StreamResetReason::RemoteRefusedStreamReset: diff --git a/source/common/http/conn_pool_base.h b/source/common/http/conn_pool_base.h index 44451ab60643a..33e2faabf1df1 100644 --- a/source/common/http/conn_pool_base.h +++ b/source/common/http/conn_pool_base.h @@ -129,11 +129,11 @@ class ActiveClient : public Envoy::ConnectionPool::ActiveClient { codec_client_ = parent.createCodecClient(data); codec_client_->addConnectionCallbacks(*this); codec_client_->setConnectionStats( - {parent_.host()->cluster().stats().upstream_cx_rx_bytes_total_, - parent_.host()->cluster().stats().upstream_cx_rx_bytes_buffered_, - parent_.host()->cluster().stats().upstream_cx_tx_bytes_total_, - parent_.host()->cluster().stats().upstream_cx_tx_bytes_buffered_, - &parent_.host()->cluster().stats().bind_errors_, nullptr}); + {parent_.host()->cluster().trafficStats().upstream_cx_rx_bytes_total_, + parent_.host()->cluster().trafficStats().upstream_cx_rx_bytes_buffered_, + parent_.host()->cluster().trafficStats().upstream_cx_tx_bytes_total_, + parent_.host()->cluster().trafficStats().upstream_cx_tx_bytes_buffered_, + &parent_.host()->cluster().trafficStats().bind_errors_, nullptr}); } absl::optional protocol() const override { return codec_client_->protocol(); } diff --git a/source/common/http/conn_pool_grid.cc b/source/common/http/conn_pool_grid.cc index 6c45e48eca39d..15db9536b94fb 100644 --- a/source/common/http/conn_pool_grid.cc +++ b/source/common/http/conn_pool_grid.cc @@ -382,7 +382,7 @@ HttpServerPropertiesCache::Http3StatusTracker& ConnectivityGrid::getHttp3StatusT bool ConnectivityGrid::isHttp3Broken() const { return getHttp3StatusTracker().isHttp3Broken(); } void ConnectivityGrid::markHttp3Broken() { - host_->cluster().stats().upstream_http3_broken_.inc(); + host_->cluster().trafficStats().upstream_http3_broken_.inc(); getHttp3StatusTracker().markHttp3Broken(); } diff --git a/source/common/http/http1/conn_pool.cc b/source/common/http/http1/conn_pool.cc index ab7165f5d3412..77cf7ebcdd54b 100644 --- a/source/common/http/http1/conn_pool.cc +++ b/source/common/http/http1/conn_pool.cc @@ -42,7 +42,7 @@ void ActiveClient::StreamWrapper::decodeHeaders(ResponseHeaderMapPtr&& headers, close_connection_ = HeaderUtility::shouldCloseConnection(parent_.codec_client_->protocol(), *headers); if (close_connection_) { - parent_.parent().host()->cluster().stats().upstream_cx_close_notify_.inc(); + parent_.parent().host()->cluster().trafficStats().upstream_cx_close_notify_.inc(); } ResponseDecoderWrapper::decodeHeaders(std::move(headers), end_stream); } @@ -76,7 +76,7 @@ ActiveClient::ActiveClient(HttpConnPoolImplBase& parent, : Envoy::Http::ActiveClient(parent, parent.host()->cluster().maxRequestsPerConnection(), /* effective_concurrent_stream_limit */ 1, /* configured_concurrent_stream_limit */ 1, data) { - parent.host()->cluster().stats().upstream_cx_http1_total_.inc(); + parent.host()->cluster().trafficStats().upstream_cx_http1_total_.inc(); } ActiveClient::~ActiveClient() { ASSERT(!stream_wrapper_.get()); } diff --git a/source/common/http/http2/conn_pool.cc b/source/common/http/http2/conn_pool.cc index 8879d75282b6b..67761b3889e23 100644 --- a/source/common/http/http2/conn_pool.cc +++ b/source/common/http/http2/conn_pool.cc @@ -45,7 +45,7 @@ ActiveClient::ActiveClient(HttpConnPoolImplBase& parent, : MultiplexedActiveClientBase( parent, calculateInitialStreamsLimit(parent.cache(), parent.origin(), parent.host()), parent.host()->cluster().http2Options().max_concurrent_streams().value(), - parent.host()->cluster().stats().upstream_cx_http2_total_, data) {} + parent.host()->cluster().trafficStats().upstream_cx_http2_total_, data) {} ConnectionPool::InstancePtr allocateConnPool(Event::Dispatcher& dispatcher, Random::RandomGenerator& random_generator, diff --git a/source/common/http/http3/conn_pool.cc b/source/common/http/http3/conn_pool.cc index 25d3cc5bc56b3..061f71b364871 100644 --- a/source/common/http/http3/conn_pool.cc +++ b/source/common/http/http3/conn_pool.cc @@ -39,9 +39,9 @@ std::string sni(const Network::TransportSocketOptionsConstSharedPtr& options, ActiveClient::ActiveClient(Envoy::Http::HttpConnPoolImplBase& parent, Upstream::Host::CreateConnectionData& data) - : MultiplexedActiveClientBase(parent, getMaxStreams(parent.host()->cluster()), - getMaxStreams(parent.host()->cluster()), - parent.host()->cluster().stats().upstream_cx_http3_total_, data), + : MultiplexedActiveClientBase( + parent, getMaxStreams(parent.host()->cluster()), getMaxStreams(parent.host()->cluster()), + parent.host()->cluster().trafficStats().upstream_cx_http3_total_, data), async_connect_callback_(parent_.dispatcher().createSchedulableCallback([this]() { if (state() != Envoy::ConnectionPool::ActiveClient::State::Connecting) { return; diff --git a/source/common/router/retry_state_impl.cc b/source/common/router/retry_state_impl.cc index 419e398909cf2..f4d3a868c749d 100644 --- a/source/common/router/retry_state_impl.cc +++ b/source/common/router/retry_state_impl.cc @@ -185,13 +185,13 @@ void RetryStateImpl::enableBackoffTimer() { // be reused. ratelimited_backoff_strategy_.reset(); - cluster_.stats().upstream_rq_retry_backoff_ratelimited_.inc(); + cluster_.trafficStats().upstream_rq_retry_backoff_ratelimited_.inc(); } else { // Otherwise we use a fully jittered exponential backoff algorithm. retry_timer_->enableTimer(std::chrono::milliseconds(backoff_strategy_->nextBackOffMs())); - cluster_.stats().upstream_rq_retry_backoff_exponential_.inc(); + cluster_.trafficStats().upstream_rq_retry_backoff_exponential_.inc(); } } @@ -277,7 +277,7 @@ RetryStatus RetryStateImpl::shouldRetry(RetryDecision would_retry, DoRetryCallba // retry this particular request, we can infer that we did a retry earlier // and it was successful. if ((backoff_callback_ || next_loop_callback_) && would_retry == RetryDecision::NoRetry) { - cluster_.stats().upstream_rq_retry_success_.inc(); + cluster_.trafficStats().upstream_rq_retry_success_.inc(); if (vcluster_) { vcluster_->stats().upstream_rq_retry_success_.inc(); } @@ -295,7 +295,7 @@ RetryStatus RetryStateImpl::shouldRetry(RetryDecision would_retry, DoRetryCallba // The request has exhausted the number of retries allotted to it by the retry policy configured // (or the x-envoy-max-retries header). if (retries_remaining_ == 0) { - cluster_.stats().upstream_rq_retry_limit_exceeded_.inc(); + cluster_.trafficStats().upstream_rq_retry_limit_exceeded_.inc(); if (vcluster_) { vcluster_->stats().upstream_rq_retry_limit_exceeded_.inc(); } @@ -308,7 +308,7 @@ RetryStatus RetryStateImpl::shouldRetry(RetryDecision would_retry, DoRetryCallba retries_remaining_--; if (!cluster_.resourceManager(priority_).retries().canCreate()) { - cluster_.stats().upstream_rq_retry_overflow_.inc(); + cluster_.trafficStats().upstream_rq_retry_overflow_.inc(); if (vcluster_) { vcluster_->stats().upstream_rq_retry_overflow_.inc(); } @@ -324,7 +324,7 @@ RetryStatus RetryStateImpl::shouldRetry(RetryDecision would_retry, DoRetryCallba ASSERT(!backoff_callback_ && !next_loop_callback_); cluster_.resourceManager(priority_).retries().inc(); - cluster_.stats().upstream_rq_retry_.inc(); + cluster_.trafficStats().upstream_rq_retry_.inc(); if (vcluster_) { vcluster_->stats().upstream_rq_retry_.inc(); } diff --git a/source/common/router/router.cc b/source/common/router/router.cc index acd45f3147e1a..40a377c7e6d84 100644 --- a/source/common/router/router.cc +++ b/source/common/router/router.cc @@ -509,7 +509,7 @@ Http::FilterHeadersStatus Filter::decodeHeaders(Http::RequestHeaderMap& headers, modify_headers(headers); }, absl::nullopt, StreamInfo::ResponseCodeDetails::get().MaintenanceMode); - cluster_->stats().upstream_rq_maintenance_mode_.inc(); + cluster_->trafficStats().upstream_rq_maintenance_mode_.inc(); return Http::FilterHeadersStatus::StopIteration; } @@ -754,7 +754,7 @@ Http::FilterDataStatus Filter::decodeData(Buffer::Instance& data, bool end_strea "The request payload has at least {} bytes data which exceeds buffer limit {}. Give " "up on the retry/shadow.", getLength(callbacks_->decodingBuffer()) + data.length(), retry_shadow_buffer_limit_); - cluster_->stats().retry_or_shadow_abandoned_.inc(); + cluster_->trafficStats().retry_or_shadow_abandoned_.inc(); retry_state_.reset(); buffering = false; active_shadow_policies_.clear(); @@ -956,7 +956,7 @@ void Filter::onResponseTimeout() { if (Runtime::runtimeFeatureEnabled( "envoy.reloadable_features.do_not_await_headers_on_upstream_timeout_to_emit_stats") || upstream_request->awaitingHeaders()) { - cluster_->stats().upstream_rq_timeout_.inc(); + cluster_->trafficStats().upstream_rq_timeout_.inc(); if (request_vcluster_) { request_vcluster_->stats().upstream_rq_timeout_.inc(); } @@ -1030,12 +1030,13 @@ void Filter::onSoftPerTryTimeout(UpstreamRequest& upstream_request) { } void Filter::onPerTryIdleTimeout(UpstreamRequest& upstream_request) { - onPerTryTimeoutCommon(upstream_request, cluster_->stats().upstream_rq_per_try_idle_timeout_, + onPerTryTimeoutCommon(upstream_request, + cluster_->trafficStats().upstream_rq_per_try_idle_timeout_, StreamInfo::ResponseCodeDetails::get().UpstreamPerTryIdleTimeout); } void Filter::onPerTryTimeout(UpstreamRequest& upstream_request) { - onPerTryTimeoutCommon(upstream_request, cluster_->stats().upstream_rq_per_try_timeout_, + onPerTryTimeoutCommon(upstream_request, cluster_->trafficStats().upstream_rq_per_try_timeout_, StreamInfo::ResponseCodeDetails::get().UpstreamPerTryTimeout); } @@ -1624,7 +1625,7 @@ bool Filter::setupRedirect(const Http::ResponseHeaderMap& headers) { convertRequestHeadersForInternalRedirect(*downstream_headers_, *location, status_code) && callbacks_->recreateStream(&headers)) { ENVOY_STREAM_LOG(debug, "Internal redirect succeeded", *callbacks_); - cluster_->stats().upstream_internal_redirect_succeeded_total_.inc(); + cluster_->trafficStats().upstream_internal_redirect_succeeded_total_.inc(); return true; } // convertRequestHeadersForInternalRedirect logs failure reasons but log @@ -1637,7 +1638,7 @@ bool Filter::setupRedirect(const Http::ResponseHeaderMap& headers) { ENVOY_STREAM_LOG(trace, "Internal redirect failed: missing location header", *callbacks_); } - cluster_->stats().upstream_internal_redirect_failed_total_.inc(); + cluster_->trafficStats().upstream_internal_redirect_failed_total_.inc(); return false; } diff --git a/source/common/router/upstream_codec_filter.cc b/source/common/router/upstream_codec_filter.cc index 07e43f4998512..33994cbdce26d 100644 --- a/source/common/router/upstream_codec_filter.cc +++ b/source/common/router/upstream_codec_filter.cc @@ -28,12 +28,12 @@ namespace Envoy { namespace Router { void UpstreamCodecFilter::onBelowWriteBufferLowWatermark() { - callbacks_->clusterInfo()->stats().upstream_flow_control_resumed_reading_total_.inc(); + callbacks_->clusterInfo()->trafficStats().upstream_flow_control_resumed_reading_total_.inc(); callbacks_->upstreamCallbacks()->upstream()->readDisable(false); } void UpstreamCodecFilter::onAboveWriteBufferHighWatermark() { - callbacks_->clusterInfo()->stats().upstream_flow_control_paused_reading_total_.inc(); + callbacks_->clusterInfo()->trafficStats().upstream_flow_control_paused_reading_total_.inc(); callbacks_->upstreamCallbacks()->upstream()->readDisable(true); } diff --git a/source/common/router/upstream_request.cc b/source/common/router/upstream_request.cc index 5407c2ce1d281..cb592138041c6 100644 --- a/source/common/router/upstream_request.cc +++ b/source/common/router/upstream_request.cc @@ -197,7 +197,7 @@ void UpstreamRequest::cleanUp() { while (downstream_data_disabled_ != 0) { parent_.callbacks()->onDecoderFilterBelowWriteBufferLowWatermark(); - parent_.cluster()->stats().upstream_flow_control_drained_total_.inc(); + parent_.cluster()->trafficStats().upstream_flow_control_drained_total_.inc(); --downstream_data_disabled_; } if (allow_upstream_filters_) { @@ -753,7 +753,7 @@ UpstreamToDownstream& UpstreamRequest::upstreamToDownstream() { } void UpstreamRequest::onStreamMaxDurationReached() { - upstream_host_->cluster().stats().upstream_rq_max_duration_reached_.inc(); + upstream_host_->cluster().trafficStats().upstream_rq_max_duration_reached_.inc(); // The upstream had closed then try to retry along with retry policy. parent_.onStreamMaxDurationReached(*this); @@ -780,7 +780,7 @@ void UpstreamRequest::DownstreamWatermarkManager::onAboveWriteBufferHighWatermar // The downstream connection is overrun. Pause reads from upstream. // If there are multiple calls to readDisable either the codec (H2) or the underlying // Network::Connection (H1) will handle reference counting. - parent_.parent_.cluster()->stats().upstream_flow_control_paused_reading_total_.inc(); + parent_.parent_.cluster()->trafficStats().upstream_flow_control_paused_reading_total_.inc(); parent_.upstream_->readDisable(true); } @@ -789,7 +789,7 @@ void UpstreamRequest::DownstreamWatermarkManager::onBelowWriteBufferLowWatermark // One source of connection blockage has buffer available. Pass this on to the stream, which // will resume reads if this was the last remaining high watermark. - parent_.parent_.cluster()->stats().upstream_flow_control_resumed_reading_total_.inc(); + parent_.parent_.cluster()->trafficStats().upstream_flow_control_resumed_reading_total_.inc(); parent_.upstream_->readDisable(false); } @@ -804,7 +804,7 @@ void UpstreamRequest::disableDataFromDownstreamForFlowControl() { // the per try timeout timer is started only after downstream_end_stream_ // is true. ASSERT(parent_.upstreamRequests().size() == 1 || parent_.downstreamEndStream()); - parent_.cluster()->stats().upstream_flow_control_backed_up_total_.inc(); + parent_.cluster()->trafficStats().upstream_flow_control_backed_up_total_.inc(); parent_.callbacks()->onDecoderFilterAboveWriteBufferHighWatermark(); ++downstream_data_disabled_; } @@ -820,7 +820,7 @@ void UpstreamRequest::enableDataFromDownstreamForFlowControl() { // the per try timeout timer is started only after downstream_end_stream_ // is true. ASSERT(parent_.upstreamRequests().size() == 1 || parent_.downstreamEndStream()); - parent_.cluster()->stats().upstream_flow_control_drained_total_.inc(); + parent_.cluster()->trafficStats().upstream_flow_control_drained_total_.inc(); parent_.callbacks()->onDecoderFilterBelowWriteBufferLowWatermark(); ASSERT(downstream_data_disabled_ != 0); if (downstream_data_disabled_ > 0) { diff --git a/source/common/tcp/conn_pool.cc b/source/common/tcp/conn_pool.cc index 0ece4a46b155f..036315cc02922 100644 --- a/source/common/tcp/conn_pool.cc +++ b/source/common/tcp/conn_pool.cc @@ -25,11 +25,11 @@ ActiveTcpClient::ActiveTcpClient(Envoy::ConnectionPool::ConnPoolImplBase& parent connection_->addConnectionCallbacks(*this); read_filter_handle_ = std::make_shared(*this); connection_->addReadFilter(read_filter_handle_); - connection_->setConnectionStats({host->cluster().stats().upstream_cx_rx_bytes_total_, - host->cluster().stats().upstream_cx_rx_bytes_buffered_, - host->cluster().stats().upstream_cx_tx_bytes_total_, - host->cluster().stats().upstream_cx_tx_bytes_buffered_, - &host->cluster().stats().bind_errors_, nullptr}); + connection_->setConnectionStats({host->cluster().trafficStats().upstream_cx_rx_bytes_total_, + host->cluster().trafficStats().upstream_cx_rx_bytes_buffered_, + host->cluster().trafficStats().upstream_cx_tx_bytes_total_, + host->cluster().trafficStats().upstream_cx_tx_bytes_buffered_, + &host->cluster().trafficStats().bind_errors_, nullptr}); connection_->noDelay(true); connection_->connect(); } diff --git a/source/common/tcp_proxy/tcp_proxy.cc b/source/common/tcp_proxy/tcp_proxy.cc index aed1680c88f11..473270115e969 100644 --- a/source/common/tcp_proxy/tcp_proxy.cc +++ b/source/common/tcp_proxy/tcp_proxy.cc @@ -234,12 +234,12 @@ void Filter::readDisableUpstream(bool disable) { if (disable) { read_callbacks_->upstreamHost() ->cluster() - .stats() + .trafficStats() .upstream_flow_control_paused_reading_total_.inc(); } else { read_callbacks_->upstreamHost() ->cluster() - .stats() + .trafficStats() .upstream_flow_control_resumed_reading_total_.inc(); } } @@ -377,7 +377,7 @@ Network::FilterStatus Filter::establishUpstreamConnection() { // will never be released. if (!cluster->resourceManager(Upstream::ResourcePriority::Default).connections().canCreate()) { getStreamInfo().setResponseFlag(StreamInfo::ResponseFlag::UpstreamOverflow); - cluster->stats().upstream_cx_overflow_.inc(); + cluster->trafficStats().upstream_cx_overflow_.inc(); onInitFailure(UpstreamFailureReason::ResourceLimitExceeded); return Network::FilterStatus::StopIteration; } @@ -385,7 +385,7 @@ Network::FilterStatus Filter::establishUpstreamConnection() { const uint32_t max_connect_attempts = config_->maxConnectAttempts(); if (connect_attempts_ >= max_connect_attempts) { getStreamInfo().setResponseFlag(StreamInfo::ResponseFlag::UpstreamRetryLimitExceeded); - cluster->stats().upstream_cx_connect_attempts_exceeded_.inc(); + cluster->trafficStats().upstream_cx_connect_attempts_exceeded_.inc(); onInitFailure(UpstreamFailureReason::ConnectFailed); return Network::FilterStatus::StopIteration; } @@ -417,7 +417,7 @@ Network::FilterStatus Filter::establishUpstreamConnection() { if (!maybeTunnel(*thread_local_cluster)) { // Either cluster is unknown or there are no healthy hosts. tcpConnPool() increments - // cluster->stats().upstream_cx_none_healthy in the latter case. + // cluster->trafficStats().upstream_cx_none_healthy in the latter case. getStreamInfo().setResponseFlag(StreamInfo::ResponseFlag::NoHealthyUpstream); onInitFailure(UpstreamFailureReason::NoHealthyUpstream); } diff --git a/source/common/upstream/cluster_manager_impl.cc b/source/common/upstream/cluster_manager_impl.cc index 97c7ee2daf5ce..dc4ee5bbdc2c7 100644 --- a/source/common/upstream/cluster_manager_impl.cc +++ b/source/common/upstream/cluster_manager_impl.cc @@ -300,6 +300,9 @@ ClusterManagerImpl::ClusterManagerImpl( time_source_(main_thread_dispatcher.timeSource()), dispatcher_(main_thread_dispatcher), http_context_(http_context), router_context_(router_context), cluster_stat_names_(stats.symbolTable()), + cluster_config_update_stat_names_(stats.symbolTable()), + cluster_lb_stat_names_(stats.symbolTable()), + cluster_endpoint_stat_names_(stats.symbolTable()), cluster_load_report_stat_names_(stats.symbolTable()), cluster_circuit_breakers_stat_names_(stats.symbolTable()), cluster_request_response_size_stat_names_(stats.symbolTable()), @@ -884,14 +887,14 @@ ClusterManagerImpl::loadCluster(const envoy::config::cluster::v3::Cluster& clust if (cluster_reference.info()->lbType() == LoadBalancerType::RingHash) { if (!cluster_reference.info()->lbSubsetInfo().isEnabled()) { cluster_entry_it->second->thread_aware_lb_ = std::make_unique( - cluster_reference.prioritySet(), cluster_reference.info()->stats(), + cluster_reference.prioritySet(), cluster_reference.info()->lbStats(), cluster_reference.info()->statsScope(), runtime_, random_, cluster_reference.info()->lbRingHashConfig(), cluster_reference.info()->lbConfig()); } } else if (cluster_reference.info()->lbType() == LoadBalancerType::Maglev) { if (!cluster_reference.info()->lbSubsetInfo().isEnabled()) { cluster_entry_it->second->thread_aware_lb_ = std::make_unique( - cluster_reference.prioritySet(), cluster_reference.info()->stats(), + cluster_reference.prioritySet(), cluster_reference.info()->lbStats(), cluster_reference.info()->statsScope(), runtime_, random_, cluster_reference.info()->lbMaglevConfig(), cluster_reference.info()->lbConfig()); } @@ -1150,7 +1153,7 @@ Host::CreateConnectionData ClusterManagerImpl::ThreadLocalClusterManagerImpl::Cl } return conn_info; } else { - cluster_info_->stats().upstream_cx_none_healthy_.inc(); + cluster_info_->trafficStats().upstream_cx_none_healthy_.inc(); return {nullptr, nullptr}; } } @@ -1515,7 +1518,7 @@ ClusterManagerImpl::ThreadLocalClusterManagerImpl::ClusterEntry::ClusterEntry( // benefit given the healthy panic, locality, and priority calculations that take place. if (cluster->lbSubsetInfo().isEnabled()) { lb_ = std::make_unique( - cluster->lbType(), priority_set_, parent_.local_priority_set_, cluster->stats(), + cluster->lbType(), priority_set_, parent_.local_priority_set_, cluster->lbStats(), cluster->statsScope(), parent.parent_.runtime_, parent.parent_.random_, cluster->lbSubsetInfo(), cluster->lbRingHashConfig(), cluster->lbMaglevConfig(), cluster->lbRoundRobinConfig(), cluster->lbLeastRequestConfig(), cluster->lbConfig(), @@ -1525,7 +1528,7 @@ ClusterManagerImpl::ThreadLocalClusterManagerImpl::ClusterEntry::ClusterEntry( case LoadBalancerType::LeastRequest: { ASSERT(lb_factory_ == nullptr); lb_ = std::make_unique( - priority_set_, parent_.local_priority_set_, cluster->stats(), parent.parent_.runtime_, + priority_set_, parent_.local_priority_set_, cluster->lbStats(), parent.parent_.runtime_, parent.parent_.random_, cluster->lbConfig(), cluster->lbLeastRequestConfig(), parent.thread_local_dispatcher_.timeSource()); break; @@ -1533,14 +1536,14 @@ ClusterManagerImpl::ThreadLocalClusterManagerImpl::ClusterEntry::ClusterEntry( case LoadBalancerType::Random: { ASSERT(lb_factory_ == nullptr); lb_ = std::make_unique(priority_set_, parent_.local_priority_set_, - cluster->stats(), parent.parent_.runtime_, + cluster->lbStats(), parent.parent_.runtime_, parent.parent_.random_, cluster->lbConfig()); break; } case LoadBalancerType::RoundRobin: { ASSERT(lb_factory_ == nullptr); lb_ = std::make_unique( - priority_set_, parent_.local_priority_set_, cluster->stats(), parent.parent_.runtime_, + priority_set_, parent_.local_priority_set_, cluster->lbStats(), parent.parent_.runtime_, parent.parent_.random_, cluster->lbConfig(), cluster->lbRoundRobinConfig(), parent.thread_local_dispatcher_.timeSource()); break; @@ -1622,7 +1625,7 @@ ClusterManagerImpl::ThreadLocalClusterManagerImpl::ClusterEntry::httpConnPoolImp if (!host) { if (!peek) { ENVOY_LOG(debug, "no healthy host for HTTP connection pool"); - cluster_info_->stats().upstream_cx_none_healthy_.inc(); + cluster_info_->trafficStats().upstream_cx_none_healthy_.inc(); } return nullptr; } @@ -1752,7 +1755,7 @@ ClusterManagerImpl::ThreadLocalClusterManagerImpl::ClusterEntry::tcpConnPoolImpl if (!host) { if (!peek) { ENVOY_LOG(debug, "no healthy host for TCP connection pool"); - cluster_info_->stats().upstream_cx_none_healthy_.inc(); + cluster_info_->trafficStats().upstream_cx_none_healthy_.inc(); } return nullptr; } diff --git a/source/common/upstream/cluster_manager_impl.h b/source/common/upstream/cluster_manager_impl.h index f7800902f3674..e6db6e308c6ce 100644 --- a/source/common/upstream/cluster_manager_impl.h +++ b/source/common/upstream/cluster_manager_impl.h @@ -328,7 +328,14 @@ class ClusterManagerImpl : public ClusterManager, void initializeSecondaryClusters(const envoy::config::bootstrap::v3::Bootstrap& bootstrap) override; - const ClusterStatNames& clusterStatNames() const override { return cluster_stat_names_; } + const ClusterTrafficStatNames& clusterStatNames() const override { return cluster_stat_names_; } + const ClusterConfigUpdateStatNames& clusterConfigUpdateStatNames() const override { + return cluster_config_update_stat_names_; + } + const ClusterLbStatNames& clusterLbStatNames() const override { return cluster_lb_stat_names_; } + const ClusterEndpointStatNames& clusterEndpointStatNames() const override { + return cluster_endpoint_stat_names_; + } const ClusterLoadReportStatNames& clusterLoadReportStatNames() const override { return cluster_load_report_stat_names_; } @@ -781,7 +788,10 @@ class ClusterManagerImpl : public ClusterManager, Event::Dispatcher& dispatcher_; Http::Context& http_context_; Router::Context& router_context_; - ClusterStatNames cluster_stat_names_; + ClusterTrafficStatNames cluster_stat_names_; + ClusterConfigUpdateStatNames cluster_config_update_stat_names_; + ClusterLbStatNames cluster_lb_stat_names_; + ClusterEndpointStatNames cluster_endpoint_stat_names_; ClusterLoadReportStatNames cluster_load_report_stat_names_; ClusterCircuitBreakersStatNames cluster_circuit_breakers_stat_names_; ClusterRequestResponseSizeStatNames cluster_request_response_size_stat_names_; diff --git a/source/common/upstream/conn_pool_map_impl.h b/source/common/upstream/conn_pool_map_impl.h index 1eebd6ec82f4f..e30a73bfd2fe5 100644 --- a/source/common/upstream/conn_pool_map_impl.h +++ b/source/common/upstream/conn_pool_map_impl.h @@ -35,7 +35,7 @@ ConnPoolMap::getPool(const KEY_TYPE& key, const PoolFactory if (!connPoolResource.canCreate()) { // We're full. Try to free up a pool. If we can't, bail out. if (!freeOnePool()) { - host_->cluster().stats().upstream_cx_pool_overflow_.inc(); + host_->cluster().trafficStats().upstream_cx_pool_overflow_.inc(); return absl::nullopt; } diff --git a/source/common/upstream/eds.cc b/source/common/upstream/eds.cc index dda70e1f37364..b8dd5ec5b2276 100644 --- a/source/common/upstream/eds.cc +++ b/source/common/upstream/eds.cc @@ -120,7 +120,7 @@ void EdsClusterImpl::BatchUpdateHelper::batchUpdate(PrioritySet::HostUpdateCb& h } if (!cluster_rebuilt) { - parent_.info_->stats().update_no_rebuild_.inc(); + parent_.info_->configUpdateStats().update_no_rebuild_.inc(); } // If we didn't setup to initialize when our first round of health checking is complete, just @@ -178,7 +178,7 @@ void EdsClusterImpl::onConfigUpdate(const std::vector 0) { // Stat to track how often we receive valid assignment_timeout in response. - info_->stats().assignment_timeout_received_.inc(); + info_->configUpdateStats().assignment_timeout_received_.inc(); assignment_timeout_->enableTimer(std::chrono::milliseconds(stale_after_ms)); } @@ -260,7 +260,7 @@ void EdsClusterImpl::onConfigUpdate(const std::vectorstats().update_empty_.inc(); + info_->configUpdateStats().update_empty_.inc(); onPreInitComplete(); return false; } @@ -286,7 +286,7 @@ void EdsClusterImpl::onAssignmentTimeout() { std::vector resource_refs = {*decoded_resource}; onConfigUpdate(resource_refs, ""); // Stat to track how often we end up with stale assignments. - info_->stats().assignment_stale_.inc(); + info_->configUpdateStats().assignment_stale_.inc(); } void EdsClusterImpl::reloadHealthyHostsHelper(const HostSharedPtr& host) { diff --git a/source/common/upstream/health_checker_base_impl.cc b/source/common/upstream/health_checker_base_impl.cc index da5963e1945d1..2b2a9178932cc 100644 --- a/source/common/upstream/health_checker_base_impl.cc +++ b/source/common/upstream/health_checker_base_impl.cc @@ -105,7 +105,7 @@ std::chrono::milliseconds HealthCheckerImplBase::interval(HealthState state, // If a connection has been established, we choose an interval based on the host's health. Please // refer to the HealthCheck API documentation for more details. uint64_t base_time_ms; - if (cluster_.info()->stats().upstream_cx_total_.used()) { + if (cluster_.info()->trafficStats().upstream_cx_total_.used()) { // When healthy/unhealthy threshold is configured the health transition of a host will be // delayed. In this situation Envoy should use the edge interval settings between health checks. // diff --git a/source/common/upstream/load_balancer_impl.cc b/source/common/upstream/load_balancer_impl.cc index 3cd2987a9e1b3..2ed3728267962 100644 --- a/source/common/upstream/load_balancer_impl.cc +++ b/source/common/upstream/load_balancer_impl.cc @@ -109,7 +109,7 @@ LoadBalancerBase::choosePriority(uint64_t hash, const HealthyLoad& healthy_per_p } LoadBalancerBase::LoadBalancerBase( - const PrioritySet& priority_set, ClusterStats& stats, Runtime::Loader& runtime, + const PrioritySet& priority_set, ClusterLbStats& stats, Runtime::Loader& runtime, Random::RandomGenerator& random, const envoy::config::cluster::v3::Cluster::CommonLbConfig& common_config) : stats_(stats), runtime_(runtime), random_(random), @@ -351,7 +351,7 @@ LoadBalancerBase::chooseHostSet(LoadBalancerContext* context, uint64_t hash) con } ZoneAwareLoadBalancerBase::ZoneAwareLoadBalancerBase( - const PrioritySet& priority_set, const PrioritySet* local_priority_set, ClusterStats& stats, + const PrioritySet& priority_set, const PrioritySet* local_priority_set, ClusterLbStats& stats, Runtime::Loader& runtime, Random::RandomGenerator& random, const envoy::config::cluster::v3::Cluster::CommonLbConfig& common_config) : LoadBalancerBase(priority_set, stats, runtime, random, common_config), @@ -717,7 +717,7 @@ const HostVector& ZoneAwareLoadBalancerBase::hostSourceToHosts(HostsSource hosts } EdfLoadBalancerBase::EdfLoadBalancerBase( - const PrioritySet& priority_set, const PrioritySet* local_priority_set, ClusterStats& stats, + const PrioritySet& priority_set, const PrioritySet* local_priority_set, ClusterLbStats& stats, Runtime::Loader& runtime, Random::RandomGenerator& random, const envoy::config::cluster::v3::Cluster::CommonLbConfig& common_config, const absl::optional slow_start_config, diff --git a/source/common/upstream/load_balancer_impl.h b/source/common/upstream/load_balancer_impl.h index c513ccefaecaf..a8483408ec8eb 100644 --- a/source/common/upstream/load_balancer_impl.h +++ b/source/common/upstream/load_balancer_impl.h @@ -68,7 +68,7 @@ class LoadBalancerBase : public LoadBalancer { */ void recalculateLoadInTotalPanic(); - LoadBalancerBase(const PrioritySet& priority_set, ClusterStats& stats, Runtime::Loader& runtime, + LoadBalancerBase(const PrioritySet& priority_set, ClusterLbStats& stats, Runtime::Loader& runtime, Random::RandomGenerator& random, const envoy::config::cluster::v3::Cluster::CommonLbConfig& common_config); @@ -103,7 +103,7 @@ class LoadBalancerBase : public LoadBalancer { } } - ClusterStats& stats_; + ClusterLbStats& stats_; Runtime::Loader& runtime_; std::deque stashed_random_; Random::RandomGenerator& random_; @@ -199,7 +199,7 @@ class ZoneAwareLoadBalancerBase : public LoadBalancerBase { protected: // Both priority_set and local_priority_set if non-null must have at least one host set. ZoneAwareLoadBalancerBase( - const PrioritySet& priority_set, const PrioritySet* local_priority_set, ClusterStats& stats, + const PrioritySet& priority_set, const PrioritySet* local_priority_set, ClusterLbStats& stats, Runtime::Loader& runtime, Random::RandomGenerator& random, const envoy::config::cluster::v3::Cluster::CommonLbConfig& common_config); @@ -401,7 +401,7 @@ class EdfLoadBalancerBase : public ZoneAwareLoadBalancerBase, Logger::Loggable { public: EdfLoadBalancerBase( - const PrioritySet& priority_set, const PrioritySet* local_priority_set, ClusterStats& stats, + const PrioritySet& priority_set, const PrioritySet* local_priority_set, ClusterLbStats& stats, Runtime::Loader& runtime, Random::RandomGenerator& random, const envoy::config::cluster::v3::Cluster::CommonLbConfig& common_config, const absl::optional slow_start_cofig, @@ -469,7 +469,7 @@ class EdfLoadBalancerBase : public ZoneAwareLoadBalancerBase, class RoundRobinLoadBalancer : public EdfLoadBalancerBase { public: RoundRobinLoadBalancer( - const PrioritySet& priority_set, const PrioritySet* local_priority_set, ClusterStats& stats, + const PrioritySet& priority_set, const PrioritySet* local_priority_set, ClusterLbStats& stats, Runtime::Loader& runtime, Random::RandomGenerator& random, const envoy::config::cluster::v3::Cluster::CommonLbConfig& common_config, const absl::optional @@ -547,7 +547,7 @@ class RoundRobinLoadBalancer : public EdfLoadBalancerBase { class LeastRequestLoadBalancer : public EdfLoadBalancerBase { public: LeastRequestLoadBalancer( - const PrioritySet& priority_set, const PrioritySet* local_priority_set, ClusterStats& stats, + const PrioritySet& priority_set, const PrioritySet* local_priority_set, ClusterLbStats& stats, Runtime::Loader& runtime, Random::RandomGenerator& random, const envoy::config::cluster::v3::Cluster::CommonLbConfig& common_config, const absl::optional @@ -647,7 +647,8 @@ class RandomLoadBalancer : public ZoneAwareLoadBalancerBase, Logger::Loggable { public: RandomLoadBalancer(const PrioritySet& priority_set, const PrioritySet* local_priority_set, - ClusterStats& stats, Runtime::Loader& runtime, Random::RandomGenerator& random, + ClusterLbStats& stats, Runtime::Loader& runtime, + Random::RandomGenerator& random, const envoy::config::cluster::v3::Cluster::CommonLbConfig& common_config) : ZoneAwareLoadBalancerBase(priority_set, local_priority_set, stats, runtime, random, common_config) {} diff --git a/source/common/upstream/maglev_lb.cc b/source/common/upstream/maglev_lb.cc index 7617853725d06..1f33f094a2250 100644 --- a/source/common/upstream/maglev_lb.cc +++ b/source/common/upstream/maglev_lb.cc @@ -93,7 +93,7 @@ uint64_t MaglevTable::permutation(const TableBuildEntry& entry) { } MaglevLoadBalancer::MaglevLoadBalancer( - const PrioritySet& priority_set, ClusterStats& stats, Stats::Scope& scope, + const PrioritySet& priority_set, ClusterLbStats& stats, Stats::Scope& scope, Runtime::Loader& runtime, Random::RandomGenerator& random, const absl::optional& config, const envoy::config::cluster::v3::Cluster::CommonLbConfig& common_config) diff --git a/source/common/upstream/maglev_lb.h b/source/common/upstream/maglev_lb.h index 0d1c6fc5f71e1..3f0d4d5b554e4 100644 --- a/source/common/upstream/maglev_lb.h +++ b/source/common/upstream/maglev_lb.h @@ -72,7 +72,7 @@ class MaglevLoadBalancer : public ThreadAwareLoadBalancerBase, Logger::Loggable { public: MaglevLoadBalancer( - const PrioritySet& priority_set, ClusterStats& stats, Stats::Scope& scope, + const PrioritySet& priority_set, ClusterLbStats& stats, Stats::Scope& scope, Runtime::Loader& runtime, Random::RandomGenerator& random, const absl::optional& config, const envoy::config::cluster::v3::Cluster::CommonLbConfig& common_config); diff --git a/source/common/upstream/ring_hash_lb.cc b/source/common/upstream/ring_hash_lb.cc index f20ebd676bf9a..7548e0d5f1027 100644 --- a/source/common/upstream/ring_hash_lb.cc +++ b/source/common/upstream/ring_hash_lb.cc @@ -17,7 +17,7 @@ namespace Envoy { namespace Upstream { RingHashLoadBalancer::RingHashLoadBalancer( - const PrioritySet& priority_set, ClusterStats& stats, Stats::Scope& scope, + const PrioritySet& priority_set, ClusterLbStats& stats, Stats::Scope& scope, Runtime::Loader& runtime, Random::RandomGenerator& random, const absl::optional& config, const envoy::config::cluster::v3::Cluster::CommonLbConfig& common_config) diff --git a/source/common/upstream/ring_hash_lb.h b/source/common/upstream/ring_hash_lb.h index aa861eb9fb92c..2ad0fe263dae9 100644 --- a/source/common/upstream/ring_hash_lb.h +++ b/source/common/upstream/ring_hash_lb.h @@ -41,7 +41,7 @@ class RingHashLoadBalancer : public ThreadAwareLoadBalancerBase, Logger::Loggable { public: RingHashLoadBalancer( - const PrioritySet& priority_set, ClusterStats& stats, Stats::Scope& scope, + const PrioritySet& priority_set, ClusterLbStats& stats, Stats::Scope& scope, Runtime::Loader& runtime, Random::RandomGenerator& random, const absl::optional& config, const envoy::config::cluster::v3::Cluster::CommonLbConfig& common_config); diff --git a/source/common/upstream/subset_lb.cc b/source/common/upstream/subset_lb.cc index 4474be84c0d75..bd7eaa88024b8 100644 --- a/source/common/upstream/subset_lb.cc +++ b/source/common/upstream/subset_lb.cc @@ -23,7 +23,7 @@ using HostPredicate = std::function; SubsetLoadBalancer::SubsetLoadBalancer( LoadBalancerType lb_type, PrioritySet& priority_set, const PrioritySet* local_priority_set, - ClusterStats& stats, Stats::Scope& scope, Runtime::Loader& runtime, + ClusterLbStats& stats, Stats::Scope& scope, Runtime::Loader& runtime, Random::RandomGenerator& random, const LoadBalancerSubsetInfo& subsets, const absl::optional& lb_ring_hash_config, @@ -466,9 +466,9 @@ void SubsetLoadBalancer::processSubsets(uint32_t priority, const HostVector& all } } - // This stat isn't added to `ClusterStats` because it wouldn't be used for nearly all clusters, - // and is only set during configuration updates, not in the data path, so performance of looking - // up the stat isn't critical. + // This stat isn't added to `ClusterTrafficStats` because it wouldn't be used for nearly all + // clusters, and is only set during configuration updates, not in the data path, so performance of + // looking up the stat isn't critical. if (single_duplicate_stat_ == nullptr) { Stats::StatNameManagedStorage name_storage("lb_subsets_single_host_per_subset_duplicate", scope_.symbolTable()); diff --git a/source/common/upstream/subset_lb.h b/source/common/upstream/subset_lb.h index 091c15718d279..bf02b1ee6440e 100644 --- a/source/common/upstream/subset_lb.h +++ b/source/common/upstream/subset_lb.h @@ -30,7 +30,7 @@ class SubsetLoadBalancer : public LoadBalancer, Logger::Loggable& lb_ring_hash_config, @@ -365,7 +365,7 @@ class SubsetLoadBalancer : public LoadBalancer, Logger::Loggable least_request_config_; const envoy::config::cluster::v3::Cluster::CommonLbConfig common_config_; - ClusterStats& stats_; + ClusterLbStats& stats_; Stats::Scope& scope_; Runtime::Loader& runtime_; Random::RandomGenerator& random_; diff --git a/source/common/upstream/thread_aware_lb_impl.cc b/source/common/upstream/thread_aware_lb_impl.cc index 047ee0051895e..17c83d315bf79 100644 --- a/source/common/upstream/thread_aware_lb_impl.cc +++ b/source/common/upstream/thread_aware_lb_impl.cc @@ -190,7 +190,7 @@ double ThreadAwareLoadBalancerBase::BoundedLoadHashingLoadBalancer::hostOverload // TODO(scheler): This will not work if rq_active cluster stat is disabled, need to detect // and alert the user if that's the case. - const uint32_t overall_active = host.cluster().stats().upstream_rq_active_.value(); + const uint32_t overall_active = host.cluster().trafficStats().upstream_rq_active_.value(); const uint32_t host_active = host.stats().rq_active_.value(); const uint32_t total_slots = ((overall_active + 1) * hash_balance_factor_ + 99) / 100; diff --git a/source/common/upstream/thread_aware_lb_impl.h b/source/common/upstream/thread_aware_lb_impl.h index 81e9d5212d03f..2cd2b78a17cb6 100644 --- a/source/common/upstream/thread_aware_lb_impl.h +++ b/source/common/upstream/thread_aware_lb_impl.h @@ -107,7 +107,7 @@ class ThreadAwareLoadBalancerBase : public LoadBalancerBase, public ThreadAwareL protected: ThreadAwareLoadBalancerBase( - const PrioritySet& priority_set, ClusterStats& stats, Runtime::Loader& runtime, + const PrioritySet& priority_set, ClusterLbStats& stats, Runtime::Loader& runtime, Random::RandomGenerator& random, const envoy::config::cluster::v3::Cluster::CommonLbConfig& common_config) : LoadBalancerBase(priority_set, stats, runtime, random, common_config), @@ -121,7 +121,7 @@ class ThreadAwareLoadBalancerBase : public LoadBalancerBase, public ThreadAwareL using PerPriorityStatePtr = std::unique_ptr; struct LoadBalancerImpl : public LoadBalancer { - LoadBalancerImpl(ClusterStats& stats, Random::RandomGenerator& random) + LoadBalancerImpl(ClusterLbStats& stats, Random::RandomGenerator& random) : stats_(stats), random_(random) {} // Upstream::LoadBalancer @@ -138,7 +138,7 @@ class ThreadAwareLoadBalancerBase : public LoadBalancerBase, public ThreadAwareL return {}; } - ClusterStats& stats_; + ClusterLbStats& stats_; Random::RandomGenerator& random_; std::shared_ptr> per_priority_state_; std::shared_ptr healthy_per_priority_load_; @@ -146,7 +146,7 @@ class ThreadAwareLoadBalancerBase : public LoadBalancerBase, public ThreadAwareL }; struct LoadBalancerFactoryImpl : public LoadBalancerFactory { - LoadBalancerFactoryImpl(ClusterStats& stats, Random::RandomGenerator& random) + LoadBalancerFactoryImpl(ClusterLbStats& stats, Random::RandomGenerator& random) : stats_(stats), random_(random) {} // Upstream::LoadBalancerFactory @@ -154,7 +154,7 @@ class ThreadAwareLoadBalancerBase : public LoadBalancerBase, public ThreadAwareL // Ignore the params for the thread-aware LB. LoadBalancerPtr create(LoadBalancerParams) override { return create(); } - ClusterStats& stats_; + ClusterLbStats& stats_; Random::RandomGenerator& random_; absl::Mutex mutex_; std::shared_ptr> per_priority_state_ ABSL_GUARDED_BY(mutex_); diff --git a/source/common/upstream/upstream_impl.cc b/source/common/upstream/upstream_impl.cc index 6cb3411ad28ea..e1de1c9676d85 100644 --- a/source/common/upstream/upstream_impl.cc +++ b/source/common/upstream/upstream_impl.cc @@ -832,9 +832,9 @@ void MainPrioritySetImpl::updateCrossPriorityHostMap(const HostVector& hosts_add } } -ClusterStats ClusterInfoImpl::generateStats(Stats::Scope& scope, - const ClusterStatNames& stat_names) { - return ClusterStats(stat_names, scope); +ClusterTrafficStats ClusterInfoImpl::generateStats(Stats::Scope& scope, + const ClusterTrafficStatNames& stat_names) { + return {stat_names, scope}; } ClusterRequestResponseSizeStats ClusterInfoImpl::generateRequestResponseSizeStats( @@ -845,13 +845,13 @@ ClusterRequestResponseSizeStats ClusterInfoImpl::generateRequestResponseSizeStat ClusterLoadReportStats ClusterInfoImpl::generateLoadReportStats(Stats::Scope& scope, const ClusterLoadReportStatNames& stat_names) { - return ClusterLoadReportStats(stat_names, scope); + return {stat_names, scope}; } ClusterTimeoutBudgetStats ClusterInfoImpl::generateTimeoutBudgetStats(Stats::Scope& scope, const ClusterTimeoutBudgetStatNames& stat_names) { - return ClusterTimeoutBudgetStats(stat_names, scope); + return {stat_names, scope}; } // Implements the FactoryContext interface required by network filters. @@ -978,6 +978,10 @@ ClusterInfoImpl::ClusterInfoImpl( PROTOBUF_GET_WRAPPED_OR_DEFAULT(config, per_connection_buffer_limit_bytes, 1024 * 1024)), socket_matcher_(std::move(socket_matcher)), stats_scope_(std::move(stats_scope)), stats_(generateStats(*stats_scope_, factory_context.clusterManager().clusterStatNames())), + config_update_stats_(factory_context.clusterManager().clusterConfigUpdateStatNames(), + *stats_scope_), + lb_stats_(factory_context.clusterManager().clusterLbStatNames(), *stats_scope_), + endpoint_stats_(factory_context.clusterManager().clusterEndpointStatNames(), *stats_scope_), load_report_stats_store_(stats_scope_->symbolTable()), load_report_stats_(generateLoadReportStats( load_report_stats_store_, factory_context.clusterManager().clusterLoadReportStatNames())), @@ -1322,7 +1326,7 @@ ClusterImplBase::ClusterImplBase( priority_update_cb_ = priority_set_.addPriorityUpdateCb( [this](uint32_t, const HostVector& hosts_added, const HostVector& hosts_removed) { if (!hosts_added.empty() || !hosts_removed.empty()) { - info_->stats().membership_change_.inc(); + info_->endpointStats().membership_change_.inc(); } uint32_t healthy_hosts = 0; @@ -1335,10 +1339,10 @@ ClusterImplBase::ClusterImplBase( degraded_hosts += host_set->degradedHosts().size(); excluded_hosts += host_set->excludedHosts().size(); } - info_->stats().membership_total_.set(hosts); - info_->stats().membership_healthy_.set(healthy_hosts); - info_->stats().membership_degraded_.set(degraded_hosts); - info_->stats().membership_excluded_.set(excluded_hosts); + info_->endpointStats().membership_total_.set(hosts); + info_->endpointStats().membership_healthy_.set(healthy_hosts); + info_->endpointStats().membership_degraded_.set(degraded_hosts); + info_->endpointStats().membership_excluded_.set(excluded_hosts); }); } @@ -2029,7 +2033,7 @@ bool BaseDynamicClusterImpl::updateDynamicHostList( // At this point we've accounted for all the new hosts as well the hosts that previously // existed in this priority. - info_->stats().max_host_weight_.set(max_host_weight); + info_->endpointStats().max_host_weight_.set(max_host_weight); // Whatever remains in current_priority_hosts should be removed. if (!hosts_added_to_current_priority.empty() || !current_priority_hosts.empty()) { @@ -2054,21 +2058,21 @@ getDnsLookupFamilyFromCluster(const envoy::config::cluster::v3::Cluster& cluster void reportUpstreamCxDestroy(const Upstream::HostDescriptionConstSharedPtr& host, Network::ConnectionEvent event) { - host->cluster().stats().upstream_cx_destroy_.inc(); + host->cluster().trafficStats().upstream_cx_destroy_.inc(); if (event == Network::ConnectionEvent::RemoteClose) { - host->cluster().stats().upstream_cx_destroy_remote_.inc(); + host->cluster().trafficStats().upstream_cx_destroy_remote_.inc(); } else { - host->cluster().stats().upstream_cx_destroy_local_.inc(); + host->cluster().trafficStats().upstream_cx_destroy_local_.inc(); } } void reportUpstreamCxDestroyActiveRequest(const Upstream::HostDescriptionConstSharedPtr& host, Network::ConnectionEvent event) { - host->cluster().stats().upstream_cx_destroy_with_active_rq_.inc(); + host->cluster().trafficStats().upstream_cx_destroy_with_active_rq_.inc(); if (event == Network::ConnectionEvent::RemoteClose) { - host->cluster().stats().upstream_cx_destroy_remote_with_active_rq_.inc(); + host->cluster().trafficStats().upstream_cx_destroy_remote_with_active_rq_.inc(); } else { - host->cluster().stats().upstream_cx_destroy_local_with_active_rq_.inc(); + host->cluster().trafficStats().upstream_cx_destroy_local_with_active_rq_.inc(); } } diff --git a/source/common/upstream/upstream_impl.h b/source/common/upstream/upstream_impl.h index 3807d86961451..e953bbcabc98d 100644 --- a/source/common/upstream/upstream_impl.h +++ b/source/common/upstream/upstream_impl.h @@ -703,8 +703,8 @@ class ClusterInfoImpl : public ClusterInfo, TransportSocketMatcherPtr&& socket_matcher, Stats::ScopeSharedPtr&& stats_scope, bool added_via_api, Server::Configuration::TransportSocketFactoryContext&); - static ClusterStats generateStats(Stats::Scope& scope, - const ClusterStatNames& cluster_stat_names); + static ClusterTrafficStats generateStats(Stats::Scope& scope, + const ClusterTrafficStatNames& cluster_stat_names); static ClusterLoadReportStats generateLoadReportStats(Stats::Scope& scope, const ClusterLoadReportStatNames& stat_names); static ClusterCircuitBreakersStats @@ -791,7 +791,10 @@ class ClusterInfoImpl : public ClusterInfo, const std::string& observabilityName() const override { return observability_name_; } ResourceManager& resourceManager(ResourcePriority priority) const override; TransportSocketMatcher& transportSocketMatcher() const override { return *socket_matcher_; } - ClusterStats& stats() const override { return stats_; } + ClusterTrafficStats& trafficStats() const override { return stats_; } + ClusterConfigUpdateStats& configUpdateStats() const override { return config_update_stats_; } + ClusterLbStats& lbStats() const override { return lb_stats_; } + ClusterEndpointStats& endpointStats() const override { return endpoint_stats_; } Stats::Scope& statsScope() const override { return *stats_scope_; } ClusterRequestResponseSizeStatsOptRef requestResponseSizeStats() const override { @@ -905,7 +908,10 @@ class ClusterInfoImpl : public ClusterInfo, const uint32_t per_connection_buffer_limit_bytes_; TransportSocketMatcherPtr socket_matcher_; Stats::ScopeSharedPtr stats_scope_; - mutable ClusterStats stats_; + mutable ClusterTrafficStats stats_; + mutable ClusterConfigUpdateStats config_update_stats_; + mutable ClusterLbStats lb_stats_; + mutable ClusterEndpointStats endpoint_stats_; Stats::IsolatedStoreImpl load_report_stats_store_; mutable ClusterLoadReportStats load_report_stats_; const std::unique_ptr optional_cluster_stats_; diff --git a/source/extensions/clusters/aggregate/cluster.cc b/source/extensions/clusters/aggregate/cluster.cc index 78caa5e8a164f..bebac8ac11d97 100644 --- a/source/extensions/clusters/aggregate/cluster.cc +++ b/source/extensions/clusters/aggregate/cluster.cc @@ -110,7 +110,7 @@ void AggregateClusterLoadBalancer::refresh(OptRef excluded_cl PriorityContextPtr priority_context = linearizePrioritySet(excluded_cluster); if (!priority_context->priority_set_.hostSetsPerPriority().empty()) { load_balancer_ = std::make_unique( - *priority_context, parent_info_->stats(), runtime_, random_, parent_info_->lbConfig()); + *priority_context, parent_info_->lbStats(), runtime_, random_, parent_info_->lbConfig()); } else { load_balancer_ = nullptr; } diff --git a/source/extensions/clusters/aggregate/cluster.h b/source/extensions/clusters/aggregate/cluster.h index 90a267a606ab3..7d0a215d6e9ec 100644 --- a/source/extensions/clusters/aggregate/cluster.h +++ b/source/extensions/clusters/aggregate/cluster.h @@ -91,10 +91,10 @@ class AggregateClusterLoadBalancer : public Upstream::LoadBalancer, // priority set could be empty, we cannot initialize LoadBalancerBase when priority set is empty. class LoadBalancerImpl : public Upstream::LoadBalancerBase { public: - LoadBalancerImpl(const PriorityContext& priority_context, Upstream::ClusterStats& stats, + LoadBalancerImpl(const PriorityContext& priority_context, Upstream::ClusterLbStats& lb_stats, Runtime::Loader& runtime, Random::RandomGenerator& random, const envoy::config::cluster::v3::Cluster::CommonLbConfig& common_config) - : Upstream::LoadBalancerBase(priority_context.priority_set_, stats, runtime, random, + : Upstream::LoadBalancerBase(priority_context.priority_set_, lb_stats, runtime, random, common_config), priority_context_(priority_context) {} diff --git a/source/extensions/clusters/logical_dns/logical_dns_cluster.cc b/source/extensions/clusters/logical_dns/logical_dns_cluster.cc index ace5cd9e64d23..fe7107fc87539 100644 --- a/source/extensions/clusters/logical_dns/logical_dns_cluster.cc +++ b/source/extensions/clusters/logical_dns/logical_dns_cluster.cc @@ -106,7 +106,7 @@ LogicalDnsCluster::~LogicalDnsCluster() { void LogicalDnsCluster::startResolve() { ENVOY_LOG(debug, "starting async DNS resolution for {}", dns_address_); - info_->stats().update_attempt_.inc(); + info_->configUpdateStats().update_attempt_.inc(); active_dns_query_ = dns_resolver_->resolve( dns_address_, dns_lookup_family_, @@ -121,7 +121,7 @@ void LogicalDnsCluster::startResolve() { // cluster does not update. This ensures that a potentially previously resolved address does // not stabilize back to 0 hosts. if (status == Network::DnsResolver::ResolutionStatus::Success && !response.empty()) { - info_->stats().update_success_.inc(); + info_->configUpdateStats().update_success_.inc(); const auto addrinfo = response.front().addrInfo(); // TODO(mattklein123): Move port handling into the DNS interface. ASSERT(addrinfo.address_ != nullptr); @@ -166,7 +166,7 @@ void LogicalDnsCluster::startResolve() { ENVOY_LOG(debug, "DNS refresh rate reset for {}, refresh rate {} ms", dns_address_, final_refresh_rate.count()); } else { - info_->stats().update_failure_.inc(); + info_->configUpdateStats().update_failure_.inc(); final_refresh_rate = std::chrono::milliseconds(failure_backoff_strategy_->nextBackOffMs()); ENVOY_LOG(debug, "DNS refresh rate reset for {}, (failure) refresh rate {} ms", diff --git a/source/extensions/clusters/original_dst/original_dst_cluster.cc b/source/extensions/clusters/original_dst/original_dst_cluster.cc index 32dc5997747c7..5f9f636df1e81 100644 --- a/source/extensions/clusters/original_dst/original_dst_cluster.cc +++ b/source/extensions/clusters/original_dst/original_dst_cluster.cc @@ -124,7 +124,7 @@ OriginalDstCluster::LoadBalancer::requestOverrideHost(LoadBalancerContext* conte if (request_host == nullptr) { ENVOY_LOG(debug, "original_dst_load_balancer: invalid override header value. {}", request_override_host); - parent_->info()->stats().original_dst_host_invalid_.inc(); + parent_->info()->trafficStats().original_dst_host_invalid_.inc(); return nullptr; } ENVOY_LOG(debug, "Using request override host {}.", request_override_host); diff --git a/source/extensions/clusters/redis/redis_cluster.cc b/source/extensions/clusters/redis/redis_cluster.cc index cb98b84f5c7d2..db0ce184bf064 100644 --- a/source/extensions/clusters/redis/redis_cluster.cc +++ b/source/extensions/clusters/redis/redis_cluster.cc @@ -142,7 +142,7 @@ void RedisCluster::onClusterSlotUpdate(ClusterSlotsSharedPtr&& slots) { })); updateAllHosts(hosts_added, hosts_removed, localityLbEndpoint().priority()); } else { - info_->stats().update_no_rebuild_.inc(); + info_->configUpdateStats().update_no_rebuild_.inc(); } // TODO(hyang): If there is an initialize callback, fire it now. Note that if the @@ -190,9 +190,9 @@ void RedisCluster::DnsDiscoveryResolveTarget::startResolveDns() { ENVOY_LOG(trace, "async DNS resolution complete for {}", dns_address_); if (status == Network::DnsResolver::ResolutionStatus::Failure || response.empty()) { if (status == Network::DnsResolver::ResolutionStatus::Failure) { - parent_.info_->stats().update_failure_.inc(); + parent_.info_->configUpdateStats().update_failure_.inc(); } else { - parent_.info_->stats().update_empty_.inc(); + parent_.info_->configUpdateStats().update_empty_.inc(); } if (!resolve_timer_) { @@ -273,7 +273,7 @@ void RedisCluster::RedisDiscoverySession::registerDiscoveryAddress( } void RedisCluster::RedisDiscoverySession::startResolveRedis() { - parent_.info_->stats().update_attempt_.inc(); + parent_.info_->configUpdateStats().update_attempt_.inc(); // If a resolution is currently in progress, skip it. if (current_request_) { ENVOY_LOG(debug, "redis cluster slot request is already in progress for '{}'", @@ -311,9 +311,9 @@ void RedisCluster::RedisDiscoverySession::startResolveRedis() { void RedisCluster::RedisDiscoverySession::updateDnsStats( Network::DnsResolver::ResolutionStatus status, bool empty_response) { if (status == Network::DnsResolver::ResolutionStatus::Failure) { - parent_.info_->stats().update_failure_.inc(); + parent_.info_->configUpdateStats().update_failure_.inc(); } else if (empty_response) { - parent_.info_->stats().update_empty_.inc(); + parent_.info_->configUpdateStats().update_empty_.inc(); } } @@ -558,7 +558,7 @@ bool RedisCluster::RedisDiscoverySession::validateCluster( void RedisCluster::RedisDiscoverySession::onUnexpectedResponse( const NetworkFilters::Common::Redis::RespValuePtr& value) { ENVOY_LOG(warn, "Unexpected response to cluster slot command: {}", value->toString()); - this->parent_.info_->stats().update_failure_.inc(); + this->parent_.info_->configUpdateStats().update_failure_.inc(); resolve_timer_->enableTimer(parent_.cluster_refresh_rate_); } @@ -569,7 +569,7 @@ void RedisCluster::RedisDiscoverySession::onFailure() { auto client_to_delete = client_map_.find(current_host_address_); client_to_delete->second->client_->close(); } - parent_.info()->stats().update_failure_.inc(); + parent_.info()->configUpdateStats().update_failure_.inc(); resolve_timer_->enableTimer(parent_.cluster_refresh_rate_); } diff --git a/source/extensions/clusters/strict_dns/strict_dns_cluster.cc b/source/extensions/clusters/strict_dns/strict_dns_cluster.cc index ed091974f4de7..5ec87de45af73 100644 --- a/source/extensions/clusters/strict_dns/strict_dns_cluster.cc +++ b/source/extensions/clusters/strict_dns/strict_dns_cluster.cc @@ -105,7 +105,7 @@ StrictDnsClusterImpl::ResolveTarget::~ResolveTarget() { void StrictDnsClusterImpl::ResolveTarget::startResolve() { ENVOY_LOG(trace, "starting async DNS resolution for {}", dns_address_); - parent_.info_->stats().update_attempt_.inc(); + parent_.info_->configUpdateStats().update_attempt_.inc(); active_query_ = parent_.dns_resolver_->resolve( dns_address_, parent_.dns_lookup_family_, @@ -117,7 +117,7 @@ void StrictDnsClusterImpl::ResolveTarget::startResolve() { std::chrono::milliseconds final_refresh_rate = parent_.dns_refresh_rate_ms_; if (status == Network::DnsResolver::ResolutionStatus::Success) { - parent_.info_->stats().update_success_.inc(); + parent_.info_->configUpdateStats().update_success_.inc(); HostVector new_hosts; std::chrono::seconds ttl_refresh_rate = std::chrono::seconds::max(); @@ -164,7 +164,7 @@ void StrictDnsClusterImpl::ResolveTarget::startResolve() { parent_.updateAllHosts(hosts_added, hosts_removed, locality_lb_endpoints_.priority()); } else { - parent_.info_->stats().update_no_rebuild_.inc(); + parent_.info_->configUpdateStats().update_no_rebuild_.inc(); } // reset failure backoff strategy because there was a success. @@ -179,7 +179,7 @@ void StrictDnsClusterImpl::ResolveTarget::startResolve() { ENVOY_LOG(debug, "DNS refresh rate reset for {}, refresh rate {} ms", dns_address_, final_refresh_rate.count()); } else { - parent_.info_->stats().update_failure_.inc(); + parent_.info_->configUpdateStats().update_failure_.inc(); final_refresh_rate = std::chrono::milliseconds(parent_.failure_backoff_strategy_->nextBackOffMs()); diff --git a/source/extensions/filters/http/health_check/health_check.cc b/source/extensions/filters/http/health_check/health_check.cc index 08b3cb8b29c70..8a6bb39fdd43a 100644 --- a/source/extensions/filters/http/health_check/health_check.cc +++ b/source/extensions/filters/http/health_check/health_check.cc @@ -145,8 +145,8 @@ void HealthCheckFilter::onComplete() { break; } - const auto& stats = cluster->info()->stats(); - const uint64_t membership_total = stats.membership_total_.value(); + const auto& endpoint_stats = cluster->info()->endpointStats(); + const uint64_t membership_total = endpoint_stats.membership_total_.value(); if (membership_total == 0) { // If the cluster exists but is empty, consider the service unhealthy unless // the specified minimum percent healthy for the cluster happens to be zero. @@ -160,7 +160,8 @@ void HealthCheckFilter::onComplete() { } // In the general case, consider the service unhealthy if fewer than the // specified percentage of the servers in the cluster are available (healthy + degraded). - if ((100UL * (stats.membership_healthy_.value() + stats.membership_degraded_.value())) < + if ((100UL * (endpoint_stats.membership_healthy_.value() + + endpoint_stats.membership_degraded_.value())) < membership_total * min_healthy_percentage) { final_status = Http::Code::ServiceUnavailable; details = &RcDetails::get().HealthCheckClusterUnhealthy; diff --git a/source/extensions/filters/network/common/redis/client_impl.cc b/source/extensions/filters/network/common/redis/client_impl.cc index bb3add9ab8a9f..c2958cbfbb912 100644 --- a/source/extensions/filters/network/common/redis/client_impl.cc +++ b/source/extensions/filters/network/common/redis/client_impl.cc @@ -77,9 +77,9 @@ ClientImpl::ClientImpl(Upstream::HostConstSharedPtr host, Event::Dispatcher& dis flush_timer_(dispatcher.createTimer([this]() { flushBufferAndResetTimer(); })), time_source_(dispatcher.timeSource()), redis_command_stats_(redis_command_stats), scope_(scope), is_transaction_client_(is_transaction_client) { - host->cluster().stats().upstream_cx_total_.inc(); + host->cluster().trafficStats().upstream_cx_total_.inc(); host->stats().cx_total_.inc(); - host->cluster().stats().upstream_cx_active_.inc(); + host->cluster().trafficStats().upstream_cx_active_.inc(); host->stats().cx_active_.inc(); connect_or_op_timer_->enableTimer(host->cluster().connectTimeout()); } @@ -87,7 +87,7 @@ ClientImpl::ClientImpl(Upstream::HostConstSharedPtr host, Event::Dispatcher& dis ClientImpl::~ClientImpl() { ASSERT(pending_requests_.empty()); ASSERT(connection_->state() == Network::Connection::State::Closed); - host_->cluster().stats().upstream_cx_active_.dec(); + host_->cluster().trafficStats().upstream_cx_active_.dec(); host_->stats().cx_active_.dec(); } @@ -141,10 +141,10 @@ PoolRequest* ClientImpl::makeRequest(const RespValue& request, ClientCallbacks& void ClientImpl::onConnectOrOpTimeout() { putOutlierEvent(Upstream::Outlier::Result::LocalOriginTimeout); if (connected_) { - host_->cluster().stats().upstream_rq_timeout_.inc(); + host_->cluster().trafficStats().upstream_rq_timeout_.inc(); host_->stats().rq_timeout_.inc(); } else { - host_->cluster().stats().upstream_cx_connect_timeout_.inc(); + host_->cluster().trafficStats().upstream_cx_connect_timeout_.inc(); host_->stats().cx_connect_fail_.inc(); } @@ -156,7 +156,7 @@ void ClientImpl::onData(Buffer::Instance& data) { decoder_->decode(data); } catch (ProtocolError&) { putOutlierEvent(Upstream::Outlier::Result::ExtOriginRequestFailed); - host_->cluster().stats().upstream_cx_protocol_error_.inc(); + host_->cluster().trafficStats().upstream_cx_protocol_error_.inc(); host_->stats().rq_error_.inc(); connection_->close(Network::ConnectionCloseType::NoFlush); } @@ -185,7 +185,7 @@ void ClientImpl::onEvent(Network::ConnectionEvent event) { if (!request.canceled_) { request.callbacks_.onFailure(); } else { - host_->cluster().stats().upstream_rq_cancelled_.inc(); + host_->cluster().trafficStats().upstream_rq_cancelled_.inc(); } pending_requests_.pop_front(); } @@ -198,7 +198,7 @@ void ClientImpl::onEvent(Network::ConnectionEvent event) { } if (event == Network::ConnectionEvent::RemoteClose && !connected_) { - host_->cluster().stats().upstream_cx_connect_fail_.inc(); + host_->cluster().trafficStats().upstream_cx_connect_fail_.inc(); host_->stats().cx_connect_fail_.inc(); } } @@ -221,7 +221,7 @@ void ClientImpl::onRespValue(RespValuePtr&& value) { // result in closing the connection. pending_requests_.pop_front(); if (canceled) { - host_->cluster().stats().upstream_rq_cancelled_.inc(); + host_->cluster().trafficStats().upstream_rq_cancelled_.inc(); } else if (config_.enableRedirection() && !is_transaction_client_ && (value->type() == Common::Redis::RespType::Error)) { std::vector err = StringUtil::splitToken(value->asString(), " ", false); @@ -263,14 +263,14 @@ ClientImpl::PendingRequest::PendingRequest(ClientImpl& parent, ClientCallbacks& command_request_timer_ = parent_.redis_command_stats_->createCommandTimer( parent_.scope_, command_, parent_.time_source_); } - parent.host_->cluster().stats().upstream_rq_total_.inc(); + parent.host_->cluster().trafficStats().upstream_rq_total_.inc(); parent.host_->stats().rq_total_.inc(); - parent.host_->cluster().stats().upstream_rq_active_.inc(); + parent.host_->cluster().trafficStats().upstream_rq_active_.inc(); parent.host_->stats().rq_active_.inc(); } ClientImpl::PendingRequest::~PendingRequest() { - parent_.host_->cluster().stats().upstream_rq_active_.dec(); + parent_.host_->cluster().trafficStats().upstream_rq_active_.dec(); parent_.host_->stats().rq_active_.dec(); } diff --git a/source/extensions/filters/network/redis_proxy/conn_pool_impl.cc b/source/extensions/filters/network/redis_proxy/conn_pool_impl.cc index 4619fc2d512f5..4795ab4fec625 100644 --- a/source/extensions/filters/network/redis_proxy/conn_pool_impl.cc +++ b/source/extensions/filters/network/redis_proxy/conn_pool_impl.cc @@ -454,7 +454,7 @@ void InstanceImpl::PendingRequest::onRedirection(Common::Redis::RespValuePtr&& v host_address); auto host = host_; onResponse(std::move(resp_value_)); - host->cluster().stats().upstream_internal_redirect_failed_total_.inc(); + host->cluster().trafficStats().upstream_internal_redirect_failed_total_.inc(); } else { doRedirection(std::move(resp_value_), formatAddress(*result.host_info_.value()->address()->ip()), ask_redirection_); @@ -470,7 +470,7 @@ void InstanceImpl::PendingRequest::onRedirection(Common::Redis::RespValuePtr&& v host_address); auto host = host_; onResponse(std::move(resp_value_)); - host->cluster().stats().upstream_internal_redirect_failed_total_.inc(); + host->cluster().trafficStats().upstream_internal_redirect_failed_total_.inc(); return; } PANIC_DUE_TO_CORRUPT_ENUM; @@ -487,7 +487,7 @@ void InstanceImpl::PendingRequest::onLoadDnsCacheComplete( ENVOY_LOG(debug, "DNS lookup failed"); auto host = host_; onResponse(std::move(resp_value_)); - host->cluster().stats().upstream_internal_redirect_failed_total_.inc(); + host->cluster().trafficStats().upstream_internal_redirect_failed_total_.inc(); } else { doRedirection(std::move(resp_value_), formatAddress(*host_info->address()->ip()), ask_redirection_); @@ -509,16 +509,16 @@ void InstanceImpl::PendingRequest::doRedirection(Common::Redis::RespValuePtr&& v !parent_.makeRequestToHost(host_address, Common::Redis::Utility::AskingRequest::instance(), null_client_callbacks)) { onResponse(std::move(value)); - host->cluster().stats().upstream_internal_redirect_failed_total_.inc(); + host->cluster().trafficStats().upstream_internal_redirect_failed_total_.inc(); } else { request_handler_ = parent_.makeRequestToHost(host_address, getRequest(incoming_request_), *this); if (!request_handler_) { onResponse(std::move(value)); - host->cluster().stats().upstream_internal_redirect_failed_total_.inc(); + host->cluster().trafficStats().upstream_internal_redirect_failed_total_.inc(); } else { parent_.refresh_manager_->onRedirection(parent_.cluster_name_); - host->cluster().stats().upstream_internal_redirect_succeeded_total_.inc(); + host->cluster().trafficStats().upstream_internal_redirect_succeeded_total_.inc(); } } } diff --git a/source/extensions/filters/udp/udp_proxy/udp_proxy_filter.cc b/source/extensions/filters/udp/udp_proxy/udp_proxy_filter.cc index 118d206bc786a..19ab2d997b0a5 100644 --- a/source/extensions/filters/udp/udp_proxy/udp_proxy_filter.cc +++ b/source/extensions/filters/udp/udp_proxy/udp_proxy_filter.cc @@ -128,7 +128,7 @@ UdpProxyFilter::ClusterInfo::createSession(Network::UdpRecvData::LocalPeerAddres .connections() .canCreate()) { ENVOY_LOG(debug, "cannot create new connection."); - cluster_.info()->stats().upstream_cx_overflow_.inc(); + cluster_.info()->trafficStats().upstream_cx_overflow_.inc(); return nullptr; } @@ -139,7 +139,7 @@ UdpProxyFilter::ClusterInfo::createSession(Network::UdpRecvData::LocalPeerAddres auto host = chooseHost(addresses.peer_); if (host == nullptr) { ENVOY_LOG(debug, "cannot find any valid host."); - cluster_.info()->stats().upstream_cx_none_healthy_.inc(); + cluster_.info()->trafficStats().upstream_cx_none_healthy_.inc(); return nullptr; } return createSessionWithHost(std::move(addresses), host); @@ -212,7 +212,7 @@ UdpProxyFilter::PerPacketLoadBalancingClusterInfo::onData(Network::UdpRecvData& auto host = chooseHost(data.addresses_.peer_); if (host == nullptr) { ENVOY_LOG(debug, "cannot find any valid host."); - cluster_.info()->stats().upstream_cx_none_healthy_.inc(); + cluster_.info()->trafficStats().upstream_cx_none_healthy_.inc(); return Network::FilterStatus::StopIteration; } @@ -407,7 +407,7 @@ void UdpProxyFilter::ActiveSession::write(const Buffer::Instance& buffer) { cluster_.cluster_stats_.sess_tx_errors_.inc(); } else { cluster_.cluster_stats_.sess_tx_datagrams_.inc(); - cluster_.cluster_.info()->stats().upstream_cx_tx_bytes_total_.add(buffer_length); + cluster_.cluster_.info()->trafficStats().upstream_cx_tx_bytes_total_.add(buffer_length); } } @@ -420,7 +420,7 @@ void UdpProxyFilter::ActiveSession::processPacket(Network::Address::InstanceCons const uint64_t buffer_length = buffer->length(); cluster_.cluster_stats_.sess_rx_datagrams_.inc(); - cluster_.cluster_.info()->stats().upstream_cx_rx_bytes_total_.add(buffer_length); + cluster_.cluster_.info()->trafficStats().upstream_cx_rx_bytes_total_.add(buffer_length); Network::UdpSendData data{addresses_.local_->ip(), *addresses_.peer_, *buffer}; const Api::IoCallUint64Result rc = cluster_.filter_.read_callbacks_->udpListener().send(data); diff --git a/source/extensions/stat_sinks/common/statsd/statsd.cc b/source/extensions/stat_sinks/common/statsd/statsd.cc index e18c54cd2f856..47eef9a1d22ab 100644 --- a/source/extensions/stat_sinks/common/statsd/statsd.cc +++ b/source/extensions/stat_sinks/common/statsd/statsd.cc @@ -330,7 +330,7 @@ void TcpStatsdSink::TlsSink::write(Buffer::Instance& buffer) { // since if we stay over, the other threads will eventually kill their connections too. // TODO(mattklein123): The use of the stat is somewhat of a hack, and should be replaced with // real flow control callbacks once they are available. - if (parent_.cluster_info_->stats().upstream_cx_tx_bytes_buffered_.value() > + if (parent_.cluster_info_->trafficStats().upstream_cx_tx_bytes_buffered_.value() > MAX_BUFFERED_STATS_BYTES) { if (connection_) { connection_->close(Network::ConnectionCloseType::NoFlush); @@ -354,11 +354,12 @@ void TcpStatsdSink::TlsSink::write(Buffer::Instance& buffer) { connection_ = std::move(info.connection_); connection_->addConnectionCallbacks(*this); - connection_->setConnectionStats({parent_.cluster_info_->stats().upstream_cx_rx_bytes_total_, - parent_.cluster_info_->stats().upstream_cx_rx_bytes_buffered_, - parent_.cluster_info_->stats().upstream_cx_tx_bytes_total_, - parent_.cluster_info_->stats().upstream_cx_tx_bytes_buffered_, - &parent_.cluster_info_->stats().bind_errors_, nullptr}); + connection_->setConnectionStats( + {parent_.cluster_info_->trafficStats().upstream_cx_rx_bytes_total_, + parent_.cluster_info_->trafficStats().upstream_cx_rx_bytes_buffered_, + parent_.cluster_info_->trafficStats().upstream_cx_tx_bytes_total_, + parent_.cluster_info_->trafficStats().upstream_cx_tx_bytes_buffered_, + &parent_.cluster_info_->trafficStats().bind_errors_, nullptr}); connection_->connect(); } diff --git a/source/extensions/stat_sinks/hystrix/hystrix.cc b/source/extensions/stat_sinks/hystrix/hystrix.cc index 2ae45959cdf37..9e65130a84956 100644 --- a/source/extensions/stat_sinks/hystrix/hystrix.cc +++ b/source/extensions/stat_sinks/hystrix/hystrix.cc @@ -90,7 +90,7 @@ uint64_t HystrixSink::getRollingValue(RollingWindow rolling_window) { void HystrixSink::updateRollingWindowMap(const Upstream::ClusterInfo& cluster_info, ClusterStatsCache& cluster_stats_cache) { - Upstream::ClusterStats& cluster_stats = cluster_info.stats(); + Upstream::ClusterTrafficStats& cluster_stats = cluster_info.trafficStats(); Stats::Scope& cluster_stats_scope = cluster_info.statsScope(); // Combining timeouts+retries - retries are counted as separate requests diff --git a/test/common/conn_pool/conn_pool_base_test.cc b/test/common/conn_pool/conn_pool_base_test.cc index 35545830270c5..fb53487b214f5 100644 --- a/test/common/conn_pool/conn_pool_base_test.cc +++ b/test/common/conn_pool/conn_pool_base_test.cc @@ -374,13 +374,13 @@ TEST_F(ConnPoolImplDispatcherBaseTest, MaxConnectionDurationBusy) { // Verify that advancing to just before the connection duration timeout doesn't drain the // connection. advanceTimeAndRun(max_connection_duration_ - 1); - EXPECT_EQ(0, pool_.host()->cluster().stats().upstream_cx_max_duration_reached_.value()); + EXPECT_EQ(0, pool_.host()->cluster().trafficStats().upstream_cx_max_duration_reached_.value()); EXPECT_EQ(ActiveClient::State::Busy, clients_.back()->state()); // Verify that advancing past the connection duration timeout drains the connection, // because there's a busy client. advanceTimeAndRun(2); - EXPECT_EQ(1, pool_.host()->cluster().stats().upstream_cx_max_duration_reached_.value()); + EXPECT_EQ(1, pool_.host()->cluster().trafficStats().upstream_cx_max_duration_reached_.value()); EXPECT_EQ(ActiveClient::State::Draining, clients_.back()->state()); closeStream(); } @@ -395,13 +395,13 @@ TEST_F(ConnPoolImplDispatcherBaseTest, MaxConnectionDurationReady) { // Verify that advancing to just before the connection duration timeout doesn't close the // connection. advanceTimeAndRun(max_connection_duration_ - 1); - EXPECT_EQ(0, pool_.host()->cluster().stats().upstream_cx_max_duration_reached_.value()); + EXPECT_EQ(0, pool_.host()->cluster().trafficStats().upstream_cx_max_duration_reached_.value()); EXPECT_EQ(ActiveClient::State::Ready, clients_.back()->state()); // Verify that advancing past the connection duration timeout closes the connection, // because there's nothing to drain. advanceTimeAndRun(2); - EXPECT_EQ(1, pool_.host()->cluster().stats().upstream_cx_max_duration_reached_.value()); + EXPECT_EQ(1, pool_.host()->cluster().trafficStats().upstream_cx_max_duration_reached_.value()); } TEST_F(ConnPoolImplDispatcherBaseTest, MaxConnectionDurationAlreadyDraining) { @@ -411,7 +411,7 @@ TEST_F(ConnPoolImplDispatcherBaseTest, MaxConnectionDurationAlreadyDraining) { // Verify that advancing past the connection duration timeout does nothing to an active client // that is already draining. advanceTimeAndRun(max_connection_duration_ + 1); - EXPECT_EQ(0, pool_.host()->cluster().stats().upstream_cx_max_duration_reached_.value()); + EXPECT_EQ(0, pool_.host()->cluster().trafficStats().upstream_cx_max_duration_reached_.value()); EXPECT_EQ(ActiveClient::State::Draining, clients_.back()->state()); closeStream(); } @@ -423,7 +423,7 @@ TEST_F(ConnPoolImplDispatcherBaseTest, MaxConnectionDurationAlreadyClosed) { // Verify that advancing past the connection duration timeout does nothing to the active // client that is already closed. advanceTimeAndRun(max_connection_duration_ + 1); - EXPECT_EQ(0, pool_.host()->cluster().stats().upstream_cx_max_duration_reached_.value()); + EXPECT_EQ(0, pool_.host()->cluster().trafficStats().upstream_cx_max_duration_reached_.value()); } TEST_F(ConnPoolImplDispatcherBaseTest, MaxConnectionDurationCallbackWhileClosedBug) { @@ -565,7 +565,7 @@ TEST_F(ConnPoolImplDispatcherBaseTest, ConnectedZeroRttSendsEarlyData) { pool_.onUpstreamReadyForEarlyData(client_ref); CHECK_STATE(1 /*active*/, 0 /*pending*/, concurrent_streams_ - 1 /*connecting capacity*/); - EXPECT_EQ(1, pool_.host()->cluster().stats().upstream_rq_0rtt_.value()); + EXPECT_EQ(1, pool_.host()->cluster().trafficStats().upstream_rq_0rtt_.value()); EXPECT_NE(nullptr, pool_.newStreamImpl(context_, /*can_send_early_data=*/false)); CHECK_STATE(1 /*active*/, 1 /*pending*/, concurrent_streams_ - 1 /*connecting capacity*/); @@ -574,7 +574,7 @@ TEST_F(ConnPoolImplDispatcherBaseTest, ConnectedZeroRttSendsEarlyData) { clients_.back()->onEvent(Network::ConnectionEvent::Connected); CHECK_STATE(2 /*active*/, 0 /*pending*/, 0 /*connecting capacity*/); - EXPECT_EQ(1, pool_.host()->cluster().stats().upstream_rq_0rtt_.value()); + EXPECT_EQ(1, pool_.host()->cluster().trafficStats().upstream_rq_0rtt_.value()); // Clean up. closeStreamAndDrainClient(); @@ -596,12 +596,12 @@ TEST_F(ConnPoolImplDispatcherBaseTest, EarlyDataStreamsReachConcurrentStreamLimi pool_.onUpstreamReadyForEarlyData(client_ref); CHECK_STATE(1 /*active*/, 0 /*pending*/, concurrent_streams_ - 1 /*connecting capacity*/); - EXPECT_EQ(1, pool_.host()->cluster().stats().upstream_rq_0rtt_.value()); + EXPECT_EQ(1, pool_.host()->cluster().trafficStats().upstream_rq_0rtt_.value()); EXPECT_CALL(pool_, onPoolReady); EXPECT_EQ(nullptr, pool_.newStreamImpl(context_, /*can_send_early_data=*/true)); CHECK_STATE(2 /*active*/, 0 /*pending*/, concurrent_streams_ - 2 /*connecting capacity*/); - EXPECT_EQ(2, pool_.host()->cluster().stats().upstream_rq_0rtt_.value()); + EXPECT_EQ(2, pool_.host()->cluster().trafficStats().upstream_rq_0rtt_.value()); EXPECT_EQ(ActiveClient::State::Busy, clients_.back()->state()); // After 1 stream gets closed, the client should transit to ReadyForEarlyData. diff --git a/test/common/router/retry_state_impl_test.cc b/test/common/router/retry_state_impl_test.cc index 65d47c72451b2..6abd42db62059 100644 --- a/test/common/router/retry_state_impl_test.cc +++ b/test/common/router/retry_state_impl_test.cc @@ -157,9 +157,9 @@ class RouterRetryStateImplTest : public testing::Test { EXPECT_EQ(RetryStatus::NoRetryLimitExceeded, state_->shouldRetryHeaders(response_headers, request_headers, header_callback_)); - EXPECT_EQ(1UL, cluster_.stats().upstream_rq_retry_limit_exceeded_.value()); + EXPECT_EQ(1UL, cluster_.trafficStats().upstream_rq_retry_limit_exceeded_.value()); EXPECT_EQ(1UL, virtual_cluster_.stats().upstream_rq_retry_limit_exceeded_.value()); - EXPECT_EQ(1UL, cluster_.stats().upstream_rq_retry_.value()); + EXPECT_EQ(1UL, cluster_.trafficStats().upstream_rq_retry_.value()); EXPECT_EQ(1UL, virtual_cluster_.stats().upstream_rq_retry_.value()); } @@ -217,10 +217,10 @@ TEST_F(RouterRetryStateImplTest, PolicyRefusedStream) { state_->shouldRetryReset(remote_refused_stream_reset_, RetryState::Http3Used::No, reset_callback_)); - EXPECT_EQ(1UL, cluster_.stats().upstream_rq_retry_limit_exceeded_.value()); + EXPECT_EQ(1UL, cluster_.trafficStats().upstream_rq_retry_limit_exceeded_.value()); EXPECT_EQ(1UL, virtual_cluster_.stats().upstream_rq_retry_limit_exceeded_.value()); EXPECT_EQ(1UL, route_stats_context_.stats().upstream_rq_retry_limit_exceeded_.value()); - EXPECT_EQ(1UL, cluster_.stats().upstream_rq_retry_.value()); + EXPECT_EQ(1UL, cluster_.trafficStats().upstream_rq_retry_.value()); EXPECT_EQ(1UL, virtual_cluster_.stats().upstream_rq_retry_.value()); EXPECT_EQ(1UL, route_stats_context_.stats().upstream_rq_retry_.value()); } @@ -253,10 +253,10 @@ TEST_F(RouterRetryStateImplTest, PolicyAltProtocolPostHandshakeFailure) { state_->shouldRetryReset(remote_refused_stream_reset_, RetryState::Http3Used::No, reset_callback_)); - EXPECT_EQ(1UL, cluster_.stats().upstream_rq_retry_limit_exceeded_.value()); + EXPECT_EQ(1UL, cluster_.trafficStats().upstream_rq_retry_limit_exceeded_.value()); EXPECT_EQ(1UL, virtual_cluster_.stats().upstream_rq_retry_limit_exceeded_.value()); EXPECT_EQ(1UL, route_stats_context_.stats().upstream_rq_retry_limit_exceeded_.value()); - EXPECT_EQ(1UL, cluster_.stats().upstream_rq_retry_.value()); + EXPECT_EQ(1UL, cluster_.trafficStats().upstream_rq_retry_.value()); EXPECT_EQ(1UL, virtual_cluster_.stats().upstream_rq_retry_.value()); EXPECT_EQ(1UL, route_stats_context_.stats().upstream_rq_retry_.value()); } @@ -300,10 +300,10 @@ TEST_F(RouterRetryStateImplTest, Policy5xxRemoteReset) { EXPECT_EQ(RetryStatus::NoRetryLimitExceeded, state_->shouldRetryReset(remote_reset_, RetryState::Http3Used::No, reset_callback_)); - EXPECT_EQ(1UL, cluster_.stats().upstream_rq_retry_limit_exceeded_.value()); + EXPECT_EQ(1UL, cluster_.trafficStats().upstream_rq_retry_limit_exceeded_.value()); EXPECT_EQ(1UL, virtual_cluster_.stats().upstream_rq_retry_limit_exceeded_.value()); EXPECT_EQ(1UL, route_stats_context_.stats().upstream_rq_retry_limit_exceeded_.value()); - EXPECT_EQ(1UL, cluster_.stats().upstream_rq_retry_.value()); + EXPECT_EQ(1UL, cluster_.trafficStats().upstream_rq_retry_.value()); EXPECT_EQ(1UL, virtual_cluster_.stats().upstream_rq_retry_.value()); EXPECT_EQ(1UL, route_stats_context_.stats().upstream_rq_retry_limit_exceeded_.value()); } @@ -390,10 +390,10 @@ TEST_F(RouterRetryStateImplTest, PolicyGatewayErrorRemoteReset) { EXPECT_EQ(RetryStatus::NoRetryLimitExceeded, state_->shouldRetryReset(remote_reset_, RetryState::Http3Used::No, reset_callback_)); - EXPECT_EQ(1UL, cluster_.stats().upstream_rq_retry_limit_exceeded_.value()); + EXPECT_EQ(1UL, cluster_.trafficStats().upstream_rq_retry_limit_exceeded_.value()); EXPECT_EQ(1UL, virtual_cluster_.stats().upstream_rq_retry_limit_exceeded_.value()); EXPECT_EQ(1UL, route_stats_context_.stats().upstream_rq_retry_limit_exceeded_.value()); - EXPECT_EQ(1UL, cluster_.stats().upstream_rq_retry_.value()); + EXPECT_EQ(1UL, cluster_.trafficStats().upstream_rq_retry_.value()); EXPECT_EQ(1UL, virtual_cluster_.stats().upstream_rq_retry_.value()); EXPECT_EQ(1UL, route_stats_context_.stats().upstream_rq_retry_limit_exceeded_.value()); } @@ -437,10 +437,10 @@ TEST_F(RouterRetryStateImplTest, Policy5xxRemote200RemoteReset) { EXPECT_EQ(RetryStatus::NoRetryLimitExceeded, state_->shouldRetryReset(remote_reset_, RetryState::Http3Used::No, reset_callback_)); - EXPECT_EQ(1UL, cluster_.stats().upstream_rq_retry_limit_exceeded_.value()); + EXPECT_EQ(1UL, cluster_.trafficStats().upstream_rq_retry_limit_exceeded_.value()); EXPECT_EQ(1UL, virtual_cluster_.stats().upstream_rq_retry_limit_exceeded_.value()); EXPECT_EQ(1UL, route_stats_context_.stats().upstream_rq_retry_limit_exceeded_.value()); - EXPECT_EQ(1UL, cluster_.stats().upstream_rq_retry_.value()); + EXPECT_EQ(1UL, cluster_.trafficStats().upstream_rq_retry_.value()); EXPECT_EQ(1UL, virtual_cluster_.stats().upstream_rq_retry_.value()); EXPECT_EQ(1UL, route_stats_context_.stats().upstream_rq_retry_limit_exceeded_.value()); } @@ -532,7 +532,7 @@ TEST_F(RouterRetryStateImplTest, NoRetryUponTooEarlyStatusCodeWithDownstreamEarl EXPECT_EQ(RetryStatus::No, state_->shouldRetryHeaders(response_headers, request_headers, header_callback_)); - EXPECT_EQ(0UL, cluster_.stats().upstream_rq_retry_.value()); + EXPECT_EQ(0UL, cluster_.trafficStats().upstream_rq_retry_.value()); EXPECT_EQ(0UL, virtual_cluster_.stats().upstream_rq_retry_.value()); EXPECT_EQ(0UL, route_stats_context_.stats().upstream_rq_retry_.value()); } @@ -828,10 +828,10 @@ TEST_F(RouterRetryStateImplTest, PolicyResetRemoteReset) { EXPECT_EQ(RetryStatus::NoRetryLimitExceeded, state_->shouldRetryReset(remote_reset_, RetryState::Http3Used::No, reset_callback_)); - EXPECT_EQ(1UL, cluster_.stats().upstream_rq_retry_limit_exceeded_.value()); + EXPECT_EQ(1UL, cluster_.trafficStats().upstream_rq_retry_limit_exceeded_.value()); EXPECT_EQ(1UL, virtual_cluster_.stats().upstream_rq_retry_limit_exceeded_.value()); EXPECT_EQ(1UL, route_stats_context_.stats().upstream_rq_retry_limit_exceeded_.value()); - EXPECT_EQ(1UL, cluster_.stats().upstream_rq_retry_.value()); + EXPECT_EQ(1UL, cluster_.trafficStats().upstream_rq_retry_.value()); EXPECT_EQ(1UL, virtual_cluster_.stats().upstream_rq_retry_.value()); EXPECT_EQ(1UL, route_stats_context_.stats().upstream_rq_retry_limit_exceeded_.value()); } @@ -915,10 +915,10 @@ TEST_F(RouterRetryStateImplTest, RouteConfigNoRetriesAllowed) { RetryStatus::NoRetryLimitExceeded, state_->shouldRetryReset(connect_failure_, RetryState::Http3Used::Unknown, reset_callback_)); - EXPECT_EQ(1UL, cluster_.stats().upstream_rq_retry_limit_exceeded_.value()); + EXPECT_EQ(1UL, cluster_.trafficStats().upstream_rq_retry_limit_exceeded_.value()); EXPECT_EQ(1UL, virtual_cluster_.stats().upstream_rq_retry_limit_exceeded_.value()); EXPECT_EQ(1UL, route_stats_context_.stats().upstream_rq_retry_limit_exceeded_.value()); - EXPECT_EQ(0UL, cluster_.stats().upstream_rq_retry_.value()); + EXPECT_EQ(0UL, cluster_.trafficStats().upstream_rq_retry_.value()); EXPECT_EQ(0UL, virtual_cluster_.stats().upstream_rq_retry_.value()); EXPECT_EQ(1UL, route_stats_context_.stats().upstream_rq_retry_limit_exceeded_.value()); } @@ -948,7 +948,7 @@ TEST_F(RouterRetryStateImplTest, NoAvailableRetries) { EXPECT_EQ( RetryStatus::NoOverflow, state_->shouldRetryReset(connect_failure_, RetryState::Http3Used::Unknown, reset_callback_)); - EXPECT_EQ(1UL, cluster_.stats().upstream_rq_retry_overflow_.value()); + EXPECT_EQ(1UL, cluster_.trafficStats().upstream_rq_retry_overflow_.value()); EXPECT_EQ(1UL, virtual_cluster_.stats().upstream_rq_retry_overflow_.value()); EXPECT_EQ(1UL, route_stats_context_.stats().upstream_rq_retry_overflow_.value()); } @@ -988,9 +988,9 @@ TEST_F(RouterRetryStateImplTest, MaxRetriesHeader) { RetryStatus::NoRetryLimitExceeded, state_->shouldRetryReset(connect_failure_, RetryState::Http3Used::Unknown, reset_callback_)); - EXPECT_EQ(3UL, cluster_.stats().upstream_rq_retry_.value()); - EXPECT_EQ(0UL, cluster_.stats().upstream_rq_retry_success_.value()); - EXPECT_EQ(1UL, cluster_.stats().upstream_rq_retry_limit_exceeded_.value()); + EXPECT_EQ(3UL, cluster_.trafficStats().upstream_rq_retry_.value()); + EXPECT_EQ(0UL, cluster_.trafficStats().upstream_rq_retry_success_.value()); + EXPECT_EQ(1UL, cluster_.trafficStats().upstream_rq_retry_limit_exceeded_.value()); EXPECT_EQ(3UL, virtual_cluster_.stats().upstream_rq_retry_.value()); EXPECT_EQ(0UL, virtual_cluster_.stats().upstream_rq_retry_success_.value()); EXPECT_EQ(1UL, virtual_cluster_.stats().upstream_rq_retry_limit_exceeded_.value()); @@ -1062,8 +1062,8 @@ TEST_F(RouterRetryStateImplTest, Backoff) { EXPECT_EQ(RetryStatus::No, state_->shouldRetryHeaders(response_headers, request_headers, header_callback_)); - EXPECT_EQ(5UL, cluster_.stats().upstream_rq_retry_.value()); - EXPECT_EQ(1UL, cluster_.stats().upstream_rq_retry_success_.value()); + EXPECT_EQ(5UL, cluster_.trafficStats().upstream_rq_retry_.value()); + EXPECT_EQ(1UL, cluster_.trafficStats().upstream_rq_retry_success_.value()); EXPECT_EQ(5UL, virtual_cluster_.stats().upstream_rq_retry_.value()); EXPECT_EQ(1UL, virtual_cluster_.stats().upstream_rq_retry_success_.value()); EXPECT_EQ(5UL, route_stats_context_.stats().upstream_rq_retry_.value()); @@ -1306,8 +1306,8 @@ TEST_F(RouterRetryStateImplTest, RateLimitedRetryBackoffStrategy) { RetryStatus::NoRetryLimitExceeded, state_->shouldRetryHeaders(response_headers_reset_2, request_headers, header_callback_)); - EXPECT_EQ(2UL, cluster_.stats().upstream_rq_retry_backoff_ratelimited_.value()); - EXPECT_EQ(2UL, cluster_.stats().upstream_rq_retry_backoff_exponential_.value()); + EXPECT_EQ(2UL, cluster_.trafficStats().upstream_rq_retry_backoff_ratelimited_.value()); + EXPECT_EQ(2UL, cluster_.trafficStats().upstream_rq_retry_backoff_exponential_.value()); } TEST_F(RouterRetryStateImplTest, HostSelectionAttempts) { @@ -1343,10 +1343,10 @@ TEST_F(RouterRetryStateImplTest, ZeroMaxRetriesHeader) { RetryStatus::NoRetryLimitExceeded, state_->shouldRetryReset(connect_failure_, RetryState::Http3Used::Unknown, reset_callback_)); - EXPECT_EQ(1UL, cluster_.stats().upstream_rq_retry_limit_exceeded_.value()); + EXPECT_EQ(1UL, cluster_.trafficStats().upstream_rq_retry_limit_exceeded_.value()); EXPECT_EQ(1UL, virtual_cluster_.stats().upstream_rq_retry_limit_exceeded_.value()); EXPECT_EQ(1UL, route_stats_context_.stats().upstream_rq_retry_limit_exceeded_.value()); - EXPECT_EQ(0UL, cluster_.stats().upstream_rq_retry_.value()); + EXPECT_EQ(0UL, cluster_.trafficStats().upstream_rq_retry_.value()); EXPECT_EQ(0UL, virtual_cluster_.stats().upstream_rq_retry_.value()); EXPECT_EQ(0UL, route_stats_context_.stats().upstream_rq_retry_.value()); } @@ -1367,10 +1367,10 @@ TEST_F(RouterRetryStateImplTest, NoPreferredOverLimitExceeded) { EXPECT_EQ(RetryStatus::No, state_->shouldRetryHeaders(good_response_headers, request_headers, header_callback_)); - EXPECT_EQ(0UL, cluster_.stats().upstream_rq_retry_limit_exceeded_.value()); + EXPECT_EQ(0UL, cluster_.trafficStats().upstream_rq_retry_limit_exceeded_.value()); EXPECT_EQ(0UL, virtual_cluster_.stats().upstream_rq_retry_limit_exceeded_.value()); EXPECT_EQ(0UL, route_stats_context_.stats().upstream_rq_retry_limit_exceeded_.value()); - EXPECT_EQ(1UL, cluster_.stats().upstream_rq_retry_.value()); + EXPECT_EQ(1UL, cluster_.trafficStats().upstream_rq_retry_.value()); EXPECT_EQ(1UL, virtual_cluster_.stats().upstream_rq_retry_.value()); EXPECT_EQ(0UL, route_stats_context_.stats().upstream_rq_retry_limit_exceeded_.value()); } diff --git a/test/common/upstream/health_check_fuzz.cc b/test/common/upstream/health_check_fuzz.cc index 06aecdb303566..e845aceb08663 100644 --- a/test/common/upstream/health_check_fuzz.cc +++ b/test/common/upstream/health_check_fuzz.cc @@ -106,7 +106,7 @@ void HttpHealthCheckFuzz::initialize(test::common::upstream::HealthCheckTestCase cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", *time_source)}; if (input.upstream_cx_success()) { - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); } expectSessionCreate(); expectStreamCreate(0); @@ -217,7 +217,7 @@ void TcpHealthCheckFuzz::initialize(test::common::upstream::HealthCheckTestCase cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", *time_source)}; if (input.upstream_cx_success()) { - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); } expectSessionCreate(); expectClientCreate(); @@ -326,7 +326,7 @@ void GrpcHealthCheckFuzz::initialize(test::common::upstream::HealthCheckTestCase cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", *time_source)}; if (input.upstream_cx_success()) { - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); } expectSessionCreate(); ON_CALL(dispatcher_, createClientConnection_(_, _, _, _)) diff --git a/test/common/upstream/health_checker_impl_test.cc b/test/common/upstream/health_checker_impl_test.cc index cccc700549ef8..6ce52aff9a2c2 100644 --- a/test/common/upstream/health_checker_impl_test.cc +++ b/test/common/upstream/health_checker_impl_test.cc @@ -858,7 +858,7 @@ TEST_F(HttpHealthCheckerImplTest, Success) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -881,7 +881,7 @@ TEST_F(HttpHealthCheckerImplTest, Degraded) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -1010,7 +1010,7 @@ TEST_F(HttpHealthCheckerImplTest, SuccessIntervalJitterPercent) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -1041,7 +1041,7 @@ TEST_F(HttpHealthCheckerImplTest, SuccessWithSpurious1xx) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -1069,7 +1069,7 @@ TEST_F(HttpHealthCheckerImplTest, SuccessWithSpuriousMetadata) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -1099,8 +1099,8 @@ TEST_F(HttpHealthCheckerImplTest, SuccessWithMultipleHosts) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime()), makeTestHost(cluster_->info_, "tcp://127.0.0.1:81", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -1136,8 +1136,8 @@ TEST_F(HttpHealthCheckerImplTest, SuccessWithMultipleHostSets) { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; cluster_->prioritySet().getMockHostSet(1)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:81", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -1170,7 +1170,7 @@ TEST_F(HttpHealthCheckerImplTest, SuccessExpectedResponseCheck) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -1193,7 +1193,7 @@ TEST_F(HttpHealthCheckerImplTest, SuccessExpectedResponseStringContainsCheck) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -1217,7 +1217,7 @@ TEST_F(HttpHealthCheckerImplTest, SuccessExpectedResponseHexStringContainsCheck) cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -1240,7 +1240,7 @@ TEST_F(HttpHealthCheckerImplTest, SuccessExpectedResponseCheckBuffer) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -1265,7 +1265,7 @@ TEST_F(HttpHealthCheckerImplTest, SuccessExpectedResponseCheckMaxBuffer) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -1305,7 +1305,7 @@ TEST_F(HttpHealthCheckerImplTest, SuccessExpectedResponseCheckHttp2) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -1330,7 +1330,7 @@ TEST_F(HttpHealthCheckerImplTest, FailExpectedResponseCheck) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -1356,7 +1356,7 @@ TEST_F(HttpHealthCheckerImplTest, FailStatusCheckWithExpectedResponseCheck) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -1381,7 +1381,7 @@ TEST_F(HttpHealthCheckerImplTest, ImmediateFailExpectedResponseCheck) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -1428,7 +1428,7 @@ TEST_F(HttpHealthCheckerImplTest, ZeroRetryInterval) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -1487,7 +1487,7 @@ TEST_F(HttpHealthCheckerImplTest, TlsOptions) { allocHealthChecker(yaml); cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -1505,7 +1505,7 @@ TEST_F(HttpHealthCheckerImplTest, SuccessServiceCheck) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -1541,7 +1541,7 @@ TEST_F(HttpHealthCheckerImplTest, SuccessServicePrefixPatternCheck) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -1577,7 +1577,7 @@ TEST_F(HttpHealthCheckerImplTest, SuccessServiceExactPatternCheck) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -1613,7 +1613,7 @@ TEST_F(HttpHealthCheckerImplTest, SuccessServiceRegexPatternCheck) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -1657,7 +1657,7 @@ TEST_F(HttpHealthCheckerImplTest, SuccessServiceCheckWithCustomHostValueOnTheHos EXPECT_CALL(*this, onHostStatus(_, HealthTransition::Unchanged)); cluster_->prioritySet().getMockHostSet(0)->hosts_ = {test_host}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -1703,7 +1703,7 @@ TEST_F(HttpHealthCheckerImplTest, EXPECT_CALL(*this, onHostStatus(_, HealthTransition::Unchanged)); cluster_->prioritySet().getMockHostSet(0)->hosts_ = {test_host}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -1739,7 +1739,7 @@ TEST_F(HttpHealthCheckerImplTest, SuccessServiceCheckWithCustomHostValue) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -1804,7 +1804,7 @@ TEST_F(HttpHealthCheckerImplTest, SuccessServiceCheckWithAdditionalHeaders) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", metadata, simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -1869,7 +1869,7 @@ TEST_F(HttpHealthCheckerImplTest, SuccessServiceCheckWithoutUserAgent) { std::string current_start_time; cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", metadata, simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -1907,7 +1907,7 @@ TEST_F(HttpHealthCheckerImplTest, ServiceDoesNotMatchFail) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -1938,7 +1938,7 @@ TEST_F(HttpHealthCheckerImplTest, ServicePatternDoesNotMatchFail) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -1969,7 +1969,7 @@ TEST_F(HttpHealthCheckerImplTest, ServiceNotPresentInResponseFail) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -1997,7 +1997,7 @@ TEST_F(HttpHealthCheckerImplTest, ServiceCheckRuntimeOff) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -2024,7 +2024,7 @@ TEST_F(HttpHealthCheckerImplTest, ServiceCheckRuntimeOffWithStringPattern) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -2538,7 +2538,7 @@ TEST_F(HttpHealthCheckerImplTest, HealthCheckIntervals) { EXPECT_CALL(*test_sessions_[0]->interval_timer_, enableTimer(std::chrono::milliseconds(5000), _)); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, disableTimer()); respond(0, "200", false); - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); // Needed after a response is sent. @@ -2877,7 +2877,7 @@ TEST_F(HttpHealthCheckerImplTest, SuccessServiceCheckWithAltPort) { // Prepares a host with its designated health check port. const HostWithHealthCheckMap hosts{{"127.0.0.1:80", makeHealthCheckConfig(8000)}}; appendTestHosts(cluster_, hosts); - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(hosts); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -2910,8 +2910,8 @@ TEST_F(HttpHealthCheckerImplTest, SuccessWithMultipleHostsAndAltPort) { const HostWithHealthCheckMap hosts = {{"127.0.0.1:80", makeHealthCheckConfig(8000)}, {"127.0.0.1:81", makeHealthCheckConfig(8001)}}; appendTestHosts(cluster_, hosts); - cluster_->info_->stats().upstream_cx_total_.inc(); - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(hosts); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -2951,7 +2951,7 @@ TEST_F(HttpHealthCheckerImplTest, SuccessServiceCheckWithAltAddress) { const HostWithHealthCheckMap hosts{ {"127.0.0.1:80", makeHealthCheckConfigAltAddress("127.0.0.2", 8000)}}; appendTestHosts(cluster_, hosts); - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(hosts); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -2985,8 +2985,8 @@ TEST_F(HttpHealthCheckerImplTest, SuccessWithMultipleHostsAndAltAddress) { {"127.0.0.1:80", makeHealthCheckConfigAltAddress("127.0.0.2", 8000)}, {"127.0.0.2:81", makeHealthCheckConfigAltAddress("127.0.0.2", 8000)}}; appendTestHosts(cluster_, hosts); - cluster_->info_->stats().upstream_cx_total_.inc(); - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(hosts); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -3082,7 +3082,7 @@ TEST_F(HttpHealthCheckerImplTest, TransportSocketMatchCriteria) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -3123,7 +3123,7 @@ TEST_F(HttpHealthCheckerImplTest, NoTransportSocketMatchCriteria) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -3140,7 +3140,7 @@ TEST_F(HttpHealthCheckerImplTest, GoAwayErrorProbeInProgress) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -3188,7 +3188,7 @@ TEST_F(HttpHealthCheckerImplTest, GoAwayProbeInProgress) { .WillRepeatedly(Return(false)); cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); @@ -3487,7 +3487,7 @@ TEST_F(HttpHealthCheckerImplTest, ServiceNameMatch) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -3523,7 +3523,7 @@ TEST_F(HttpHealthCheckerImplTest, ServiceNameMismatch) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -3549,7 +3549,7 @@ TEST_F(HttpHealthCheckerImplTest, DefaultMethodGet) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -3578,7 +3578,7 @@ TEST_F(HttpHealthCheckerImplTest, MethodHead) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectStreamCreate(0); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); @@ -4818,7 +4818,7 @@ class GrpcHealthCheckerImplTestBase : public Event::TestUsingSimulatedTime, // performed during test case (but possibly on many hosts). void expectHealthchecks(HealthTransition host_changed_state, size_t num_healthchecks) { for (size_t i = 0; i < num_healthchecks; i++) { - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectHealthcheckStart(i); } @@ -4921,7 +4921,7 @@ class GrpcHealthCheckerImplTestBase : public Event::TestUsingSimulatedTime, void runHealthCheck(std::string expected_host) { - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectHealthcheckStart(0); @@ -5071,7 +5071,7 @@ TEST_F(GrpcHealthCheckerImplTest, SuccessWithAdditionalHeaders) { cluster_->prioritySet().getMockHostSet(0)->hosts_ = { makeTestHost(cluster_->info_, "tcp://127.0.0.1:80", metadata, simTime())}; - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); expectSessionCreate(); expectHealthcheckStart(0); @@ -5543,7 +5543,7 @@ TEST_F(GrpcHealthCheckerImplTest, HealthCheckIntervals) { EXPECT_CALL(*test_sessions_[0]->interval_timer_, enableTimer(std::chrono::milliseconds(5000), _)); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, disableTimer()); respondServiceStatus(0, grpc::health::v1::HealthCheckResponse::SERVING); - cluster_->info_->stats().upstream_cx_total_.inc(); + cluster_->info_->trafficStats().upstream_cx_total_.inc(); EXPECT_CALL(*test_sessions_[0]->timeout_timer_, enableTimer(_, _)); // Needed after a response is sent. diff --git a/test/common/upstream/load_balancer_benchmark.cc b/test/common/upstream/load_balancer_benchmark.cc index 6a855bae9aacc..bf7feac8fe1be 100644 --- a/test/common/upstream/load_balancer_benchmark.cc +++ b/test/common/upstream/load_balancer_benchmark.cc @@ -66,8 +66,8 @@ class BaseTester : public Event::TestUsingSimulatedTime { PrioritySetImpl priority_set_; PrioritySetImpl local_priority_set_; Stats::IsolatedStoreImpl stats_store_; - ClusterStatNames stat_names_{stats_store_.symbolTable()}; - ClusterStats stats_{ClusterInfoImpl::generateStats(stats_store_, stat_names_)}; + ClusterLbStatNames stat_names_{stats_store_.symbolTable()}; + ClusterLbStats stats_{stat_names_, stats_store_}; NiceMock runtime_; Random::RandomGeneratorImpl random_; envoy::config::cluster::v3::Cluster::CommonLbConfig common_config_; diff --git a/test/common/upstream/load_balancer_fuzz_base.h b/test/common/upstream/load_balancer_fuzz_base.h index 727da689047b5..f8a33319e04a3 100644 --- a/test/common/upstream/load_balancer_fuzz_base.h +++ b/test/common/upstream/load_balancer_fuzz_base.h @@ -21,8 +21,7 @@ namespace Upstream { class LoadBalancerFuzzBase { public: LoadBalancerFuzzBase() - : stat_names_(stats_store_.symbolTable()), - stats_(ClusterInfoImpl::generateStats(stats_store_, stat_names_)){}; + : stat_names_(stats_store_.symbolTable()), stats_(stat_names_, stats_store_){}; // Initializes load balancer components shared amongst every load balancer, random_, and // priority_set_ @@ -42,8 +41,8 @@ class LoadBalancerFuzzBase { // These public objects shared amongst all types of load balancers will be used to construct load // balancers in specific load balancer fuzz classes Stats::IsolatedStoreImpl stats_store_; - ClusterStatNames stat_names_; - ClusterStats stats_; + ClusterLbStatNames stat_names_; + ClusterLbStats stats_; NiceMock runtime_; Random::PsuedoRandomGenerator64 random_; NiceMock priority_set_; diff --git a/test/common/upstream/load_balancer_impl_test.cc b/test/common/upstream/load_balancer_impl_test.cc index 9a806c25287aa..b503014a30823 100644 --- a/test/common/upstream/load_balancer_impl_test.cc +++ b/test/common/upstream/load_balancer_impl_test.cc @@ -54,10 +54,11 @@ class EdfLoadBalancerBasePeer { class TestZoneAwareLoadBalancer : public ZoneAwareLoadBalancerBase { public: TestZoneAwareLoadBalancer( - const PrioritySet& priority_set, ClusterStats& stats, Runtime::Loader& runtime, + const PrioritySet& priority_set, ClusterLbStats& lb_stats, Runtime::Loader& runtime, Random::RandomGenerator& random, const envoy::config::cluster::v3::Cluster::CommonLbConfig& common_config) - : ZoneAwareLoadBalancerBase(priority_set, nullptr, stats, runtime, random, common_config) {} + : ZoneAwareLoadBalancerBase(priority_set, nullptr, lb_stats, runtime, random, common_config) { + } void runInvalidLocalitySourceType() { localitySourceType(static_cast(123)); } @@ -76,14 +77,13 @@ class LoadBalancerTestBase : public Event::TestUsingSimulatedTime, MockHostSet& hostSet() { return GetParam() ? host_set_ : failover_host_set_; } LoadBalancerTestBase() - : stat_names_(stats_store_.symbolTable()), - stats_(ClusterInfoImpl::generateStats(stats_store_, stat_names_)) { + : stat_names_(stats_store_.symbolTable()), stats_(stat_names_, stats_store_) { least_request_lb_config_.mutable_choice_count()->set_value(2); } Stats::IsolatedStoreImpl stats_store_; - ClusterStatNames stat_names_; - ClusterStats stats_; + ClusterLbStatNames stat_names_; + ClusterLbStats stats_; NiceMock runtime_; NiceMock random_; NiceMock priority_set_; @@ -97,10 +97,10 @@ class LoadBalancerTestBase : public Event::TestUsingSimulatedTime, class TestLb : public LoadBalancerBase { public: - TestLb(const PrioritySet& priority_set, ClusterStats& stats, Runtime::Loader& runtime, + TestLb(const PrioritySet& priority_set, ClusterLbStats& lb_stats, Runtime::Loader& runtime, Random::RandomGenerator& random, const envoy::config::cluster::v3::Cluster::CommonLbConfig& common_config) - : LoadBalancerBase(priority_set, stats, runtime, random, common_config) {} + : LoadBalancerBase(priority_set, lb_stats, runtime, random, common_config) {} using LoadBalancerBase::chooseHostSet; using LoadBalancerBase::isInPanic; using LoadBalancerBase::percentageDegradedLoad; @@ -581,10 +581,11 @@ TEST_P(LoadBalancerBaseTest, BoundaryConditions) { class TestZoneAwareLb : public ZoneAwareLoadBalancerBase { public: - TestZoneAwareLb(const PrioritySet& priority_set, ClusterStats& stats, Runtime::Loader& runtime, - Random::RandomGenerator& random, + TestZoneAwareLb(const PrioritySet& priority_set, ClusterLbStats& lb_stats, + Runtime::Loader& runtime, Random::RandomGenerator& random, const envoy::config::cluster::v3::Cluster::CommonLbConfig& common_config) - : ZoneAwareLoadBalancerBase(priority_set, nullptr, stats, runtime, random, common_config) {} + : ZoneAwareLoadBalancerBase(priority_set, nullptr, lb_stats, runtime, random, common_config) { + } HostConstSharedPtr chooseHostOnce(LoadBalancerContext*) override { return choose_host_once_host_; diff --git a/test/common/upstream/load_balancer_simulation_test.cc b/test/common/upstream/load_balancer_simulation_test.cc index 679831649fbbe..600cff25d402b 100644 --- a/test/common/upstream/load_balancer_simulation_test.cc +++ b/test/common/upstream/load_balancer_simulation_test.cc @@ -70,15 +70,15 @@ TEST(DISABLED_LeastRequestLoadBalancerWeightTest, Weight) { {}, hosts, {}, absl::nullopt); Stats::IsolatedStoreImpl stats_store; - ClusterStatNames stat_names(stats_store.symbolTable()); - ClusterStats stats{ClusterInfoImpl::generateStats(stats_store, stat_names)}; + ClusterLbStatNames stat_names(stats_store.symbolTable()); + ClusterLbStats lb_stats{stat_names, stats_store}; NiceMock runtime; auto time_source = std::make_unique>(); Random::RandomGeneratorImpl random; envoy::config::cluster::v3::Cluster::LeastRequestLbConfig least_request_lb_config; envoy::config::cluster::v3::Cluster::CommonLbConfig common_config; LeastRequestLoadBalancer lb_{ - priority_set, nullptr, stats, runtime, random, common_config, least_request_lb_config, + priority_set, nullptr, lb_stats, runtime, random, common_config, least_request_lb_config, *time_source}; absl::node_hash_map host_hits; @@ -104,11 +104,10 @@ TEST(DISABLED_LeastRequestLoadBalancerWeightTest, Weight) { /** * This test is for simulation only and should not be run as part of unit tests. */ -class DISABLED_SimulationTest : public testing::Test { +class DISABLED_SimulationTest : public testing::Test { // NOLINT(readability-identifier-naming) public: DISABLED_SimulationTest() - : stat_names_(stats_store_.symbolTable()), - stats_(ClusterInfoImpl::generateStats(stats_store_, stat_names_)) { + : stat_names_(stats_store_.symbolTable()), stats_(stat_names_, stats_store_) { ON_CALL(runtime_.snapshot_, getInteger("upstream.healthy_panic_threshold", 50U)) .WillByDefault(Return(50U)); ON_CALL(runtime_.snapshot_, featureEnabled("upstream.zone_routing.enabled", 100)) @@ -246,8 +245,8 @@ class DISABLED_SimulationTest : public testing::Test { NiceMock time_source_; Random::RandomGeneratorImpl random_; Stats::IsolatedStoreImpl stats_store_; - ClusterStatNames stat_names_; - ClusterStats stats_; + ClusterLbStatNames stat_names_; + ClusterLbStats stats_; envoy::config::cluster::v3::Cluster::CommonLbConfig common_config_; }; diff --git a/test/common/upstream/maglev_lb_test.cc b/test/common/upstream/maglev_lb_test.cc index b9aef9fabfac9..a668aafaf7ab8 100644 --- a/test/common/upstream/maglev_lb_test.cc +++ b/test/common/upstream/maglev_lb_test.cc @@ -45,8 +45,7 @@ class TestLoadBalancerContext : public LoadBalancerContextBase { class MaglevLoadBalancerTest : public Event::TestUsingSimulatedTime, public testing::Test { public: MaglevLoadBalancerTest() - : stat_names_(stats_store_.symbolTable()), - stats_(ClusterInfoImpl::generateStats(stats_store_, stat_names_)) {} + : stat_names_(stats_store_.symbolTable()), stats_(stat_names_, stats_store_) {} void createLb() { lb_ = std::make_unique(priority_set_, stats_, stats_store_, runtime_, @@ -65,8 +64,8 @@ class MaglevLoadBalancerTest : public Event::TestUsingSimulatedTime, public test MockHostSet& host_set_ = *priority_set_.getMockHostSet(0); std::shared_ptr info_{new NiceMock()}; Stats::IsolatedStoreImpl stats_store_; - ClusterStatNames stat_names_; - ClusterStats stats_; + ClusterLbStatNames stat_names_; + ClusterLbStats stats_; absl::optional config_; envoy::config::cluster::v3::Cluster::CommonLbConfig common_config_; NiceMock runtime_; diff --git a/test/common/upstream/ring_hash_lb_test.cc b/test/common/upstream/ring_hash_lb_test.cc index fa76bdf721a4a..84a24104c1a23 100644 --- a/test/common/upstream/ring_hash_lb_test.cc +++ b/test/common/upstream/ring_hash_lb_test.cc @@ -58,8 +58,7 @@ class RingHashLoadBalancerTest : public Event::TestUsingSimulatedTime, public testing::TestWithParam { public: RingHashLoadBalancerTest() - : stat_names_(stats_store_.symbolTable()), - stats_(ClusterInfoImpl::generateStats(stats_store_, stat_names_)) {} + : stat_names_(stats_store_.symbolTable()), stats_(stat_names_, stats_store_) {} void init() { lb_ = std::make_unique(priority_set_, stats_, stats_store_, runtime_, @@ -76,8 +75,8 @@ class RingHashLoadBalancerTest : public Event::TestUsingSimulatedTime, MockHostSet& failover_host_set_ = *priority_set_.getMockHostSet(1); std::shared_ptr info_{new NiceMock()}; Stats::IsolatedStoreImpl stats_store_; - ClusterStatNames stat_names_; - ClusterStats stats_; + ClusterLbStatNames stat_names_; + ClusterLbStats stats_; absl::optional config_; envoy::config::cluster::v3::Cluster::CommonLbConfig common_config_; NiceMock runtime_; diff --git a/test/common/upstream/subset_lb_test.cc b/test/common/upstream/subset_lb_test.cc index 672806b53aba2..6011423dd3324 100644 --- a/test/common/upstream/subset_lb_test.cc +++ b/test/common/upstream/subset_lb_test.cc @@ -170,7 +170,7 @@ class SubsetLoadBalancerTest : public Event::TestUsingSimulatedTime, public: SubsetLoadBalancerTest() : scope_(stats_store_.createScope("testprefix")), stat_names_(stats_store_.symbolTable()), - stats_(ClusterInfoImpl::generateStats(stats_store_, stat_names_)) { + stats_(stat_names_, stats_store_) { least_request_lb_config_.mutable_choice_count()->set_value(2); } @@ -527,8 +527,8 @@ class SubsetLoadBalancerTest : public Event::TestUsingSimulatedTime, NiceMock random_; Stats::IsolatedStoreImpl stats_store_; Stats::ScopeSharedPtr scope_; - ClusterStatNames stat_names_; - ClusterStats stats_; + ClusterLbStatNames stat_names_; + ClusterLbStats stats_; PrioritySetImpl local_priority_set_; HostVectorSharedPtr local_hosts_; HostsPerLocalitySharedPtr local_hosts_per_locality_; diff --git a/test/common/upstream/upstream_impl_test.cc b/test/common/upstream/upstream_impl_test.cc index 837a8e3c136d0..93b9e55e9263a 100644 --- a/test/common/upstream/upstream_impl_test.cc +++ b/test/common/upstream/upstream_impl_test.cc @@ -420,7 +420,7 @@ TEST_F(StrictDnsClusterImplTest, Basic) { EXPECT_EQ(1U, cluster.info()->resourceManager(ResourcePriority::Default).maxConnectionsPerHost()); EXPECT_EQ(990U, cluster.info()->resourceManager(ResourcePriority::High).maxConnectionsPerHost()); - cluster.info()->stats().upstream_rq_total_.inc(); + cluster.info()->trafficStats().upstream_rq_total_.inc(); EXPECT_EQ(1UL, stats_.counter("cluster.name.upstream_rq_total").value()); EXPECT_CALL(runtime_.snapshot_, featureEnabled("upstream.maintenance_mode.name", 0)); @@ -770,7 +770,7 @@ TEST_F(StrictDnsClusterImplTest, LoadAssignmentBasic) { EXPECT_EQ(3U, cluster.info()->maxRequestsPerConnection()); EXPECT_EQ(0U, cluster.info()->http2Options().hpack_table_size().value()); - cluster.info()->stats().upstream_rq_total_.inc(); + cluster.info()->trafficStats().upstream_rq_total_.inc(); EXPECT_EQ(1UL, stats_.counter("cluster.name.upstream_rq_total").value()); EXPECT_CALL(runtime_.snapshot_, featureEnabled("upstream.maintenance_mode.name", 0)); @@ -1859,7 +1859,7 @@ TEST_F(StaticClusterImplTest, AltStatName) { std::move(scope), false); cluster.initialize([] {}); // Increment a stat and verify it is emitted with alt_stat_name - cluster.info()->stats().upstream_rq_total_.inc(); + cluster.info()->trafficStats().upstream_rq_total_.inc(); EXPECT_EQ(1UL, stats_.counter("cluster.staticcluster_stats.upstream_rq_total").value()); } @@ -2018,7 +2018,7 @@ TEST_F(StaticClusterImplTest, OutlierDetector) { cluster.initialize([] {}); EXPECT_EQ(2UL, cluster.prioritySet().hostSetsPerPriority()[0]->healthyHosts().size()); - EXPECT_EQ(2UL, cluster.info()->stats().membership_healthy_.value()); + EXPECT_EQ(2UL, cluster.info()->endpointStats().membership_healthy_.value()); // Set a single host as having failed and fire outlier detector callbacks. This should result // in only a single healthy host. @@ -2028,7 +2028,7 @@ TEST_F(StaticClusterImplTest, OutlierDetector) { Host::HealthFlag::FAILED_OUTLIER_CHECK); detector->runCallbacks(cluster.prioritySet().hostSetsPerPriority()[0]->hosts()[0]); EXPECT_EQ(1UL, cluster.prioritySet().hostSetsPerPriority()[0]->healthyHosts().size()); - EXPECT_EQ(1UL, cluster.info()->stats().membership_healthy_.value()); + EXPECT_EQ(1UL, cluster.info()->endpointStats().membership_healthy_.value()); EXPECT_NE(cluster.prioritySet().hostSetsPerPriority()[0]->healthyHosts()[0], cluster.prioritySet().hostSetsPerPriority()[0]->hosts()[0]); @@ -2037,7 +2037,7 @@ TEST_F(StaticClusterImplTest, OutlierDetector) { Host::HealthFlag::FAILED_OUTLIER_CHECK); detector->runCallbacks(cluster.prioritySet().hostSetsPerPriority()[0]->hosts()[0]); EXPECT_EQ(2UL, cluster.prioritySet().hostSetsPerPriority()[0]->healthyHosts().size()); - EXPECT_EQ(2UL, cluster.info()->stats().membership_healthy_.value()); + EXPECT_EQ(2UL, cluster.info()->endpointStats().membership_healthy_.value()); } TEST_F(StaticClusterImplTest, HealthyStat) { @@ -2082,8 +2082,8 @@ TEST_F(StaticClusterImplTest, HealthyStat) { EXPECT_EQ(2UL, cluster.prioritySet().hostSetsPerPriority()[0]->hosts().size()); EXPECT_EQ(0UL, cluster.prioritySet().hostSetsPerPriority()[0]->healthyHosts().size()); - EXPECT_EQ(0UL, cluster.info()->stats().membership_healthy_.value()); - EXPECT_EQ(0UL, cluster.info()->stats().membership_degraded_.value()); + EXPECT_EQ(0UL, cluster.info()->endpointStats().membership_healthy_.value()); + EXPECT_EQ(0UL, cluster.info()->endpointStats().membership_degraded_.value()); cluster.prioritySet().hostSetsPerPriority()[0]->hosts()[0]->healthFlagClear( Host::HealthFlag::FAILED_ACTIVE_HC); @@ -2099,46 +2099,46 @@ TEST_F(StaticClusterImplTest, HealthyStat) { Host::HealthFlag::FAILED_OUTLIER_CHECK); outlier_detector->runCallbacks(cluster.prioritySet().hostSetsPerPriority()[0]->hosts()[0]); EXPECT_EQ(1UL, cluster.prioritySet().hostSetsPerPriority()[0]->healthyHosts().size()); - EXPECT_EQ(1UL, cluster.info()->stats().membership_healthy_.value()); - EXPECT_EQ(0UL, cluster.info()->stats().membership_degraded_.value()); + EXPECT_EQ(1UL, cluster.info()->endpointStats().membership_healthy_.value()); + EXPECT_EQ(0UL, cluster.info()->endpointStats().membership_degraded_.value()); cluster.prioritySet().hostSetsPerPriority()[0]->hosts()[0]->healthFlagSet( Host::HealthFlag::FAILED_ACTIVE_HC); health_checker->runCallbacks(cluster.prioritySet().hostSetsPerPriority()[0]->hosts()[0], HealthTransition::Changed); EXPECT_EQ(1UL, cluster.prioritySet().hostSetsPerPriority()[0]->healthyHosts().size()); - EXPECT_EQ(1UL, cluster.info()->stats().membership_healthy_.value()); - EXPECT_EQ(0UL, cluster.info()->stats().membership_degraded_.value()); + EXPECT_EQ(1UL, cluster.info()->endpointStats().membership_healthy_.value()); + EXPECT_EQ(0UL, cluster.info()->endpointStats().membership_degraded_.value()); cluster.prioritySet().hostSetsPerPriority()[0]->hosts()[0]->healthFlagClear( Host::HealthFlag::FAILED_OUTLIER_CHECK); outlier_detector->runCallbacks(cluster.prioritySet().hostSetsPerPriority()[0]->hosts()[0]); EXPECT_EQ(1UL, cluster.prioritySet().hostSetsPerPriority()[0]->healthyHosts().size()); - EXPECT_EQ(1UL, cluster.info()->stats().membership_healthy_.value()); - EXPECT_EQ(0UL, cluster.info()->stats().membership_degraded_.value()); + EXPECT_EQ(1UL, cluster.info()->endpointStats().membership_healthy_.value()); + EXPECT_EQ(0UL, cluster.info()->endpointStats().membership_degraded_.value()); cluster.prioritySet().hostSetsPerPriority()[0]->hosts()[0]->healthFlagClear( Host::HealthFlag::FAILED_ACTIVE_HC); health_checker->runCallbacks(cluster.prioritySet().hostSetsPerPriority()[0]->hosts()[0], HealthTransition::Changed); EXPECT_EQ(2UL, cluster.prioritySet().hostSetsPerPriority()[0]->healthyHosts().size()); - EXPECT_EQ(2UL, cluster.info()->stats().membership_healthy_.value()); - EXPECT_EQ(0UL, cluster.info()->stats().membership_degraded_.value()); + EXPECT_EQ(2UL, cluster.info()->endpointStats().membership_healthy_.value()); + EXPECT_EQ(0UL, cluster.info()->endpointStats().membership_degraded_.value()); cluster.prioritySet().hostSetsPerPriority()[0]->hosts()[0]->healthFlagSet( Host::HealthFlag::FAILED_OUTLIER_CHECK); outlier_detector->runCallbacks(cluster.prioritySet().hostSetsPerPriority()[0]->hosts()[0]); EXPECT_EQ(1UL, cluster.prioritySet().hostSetsPerPriority()[0]->healthyHosts().size()); - EXPECT_EQ(1UL, cluster.info()->stats().membership_healthy_.value()); - EXPECT_EQ(0UL, cluster.info()->stats().membership_degraded_.value()); + EXPECT_EQ(1UL, cluster.info()->endpointStats().membership_healthy_.value()); + EXPECT_EQ(0UL, cluster.info()->endpointStats().membership_degraded_.value()); cluster.prioritySet().hostSetsPerPriority()[0]->hosts()[1]->healthFlagSet( Host::HealthFlag::FAILED_ACTIVE_HC); health_checker->runCallbacks(cluster.prioritySet().hostSetsPerPriority()[0]->hosts()[1], HealthTransition::Changed); EXPECT_EQ(0UL, cluster.prioritySet().hostSetsPerPriority()[0]->healthyHosts().size()); - EXPECT_EQ(0UL, cluster.info()->stats().membership_healthy_.value()); - EXPECT_EQ(0UL, cluster.info()->stats().membership_degraded_.value()); + EXPECT_EQ(0UL, cluster.info()->endpointStats().membership_healthy_.value()); + EXPECT_EQ(0UL, cluster.info()->endpointStats().membership_degraded_.value()); cluster.prioritySet().hostSetsPerPriority()[0]->hosts()[1]->healthFlagSet( Host::HealthFlag::DEGRADED_ACTIVE_HC); @@ -2148,8 +2148,8 @@ TEST_F(StaticClusterImplTest, HealthyStat) { HealthTransition::Changed); EXPECT_EQ(0UL, cluster.prioritySet().hostSetsPerPriority()[0]->healthyHosts().size()); EXPECT_EQ(1UL, cluster.prioritySet().hostSetsPerPriority()[0]->degradedHosts().size()); - EXPECT_EQ(0UL, cluster.info()->stats().membership_healthy_.value()); - EXPECT_EQ(1UL, cluster.info()->stats().membership_degraded_.value()); + EXPECT_EQ(0UL, cluster.info()->endpointStats().membership_healthy_.value()); + EXPECT_EQ(1UL, cluster.info()->endpointStats().membership_degraded_.value()); // Mark the endpoint as unhealthy. This should decrement the degraded stat. cluster.prioritySet().hostSetsPerPriority()[0]->hosts()[1]->healthFlagSet( @@ -2158,8 +2158,8 @@ TEST_F(StaticClusterImplTest, HealthyStat) { HealthTransition::Changed); EXPECT_EQ(0UL, cluster.prioritySet().hostSetsPerPriority()[0]->healthyHosts().size()); EXPECT_EQ(0UL, cluster.prioritySet().hostSetsPerPriority()[0]->degradedHosts().size()); - EXPECT_EQ(0UL, cluster.info()->stats().membership_healthy_.value()); - EXPECT_EQ(0UL, cluster.info()->stats().membership_degraded_.value()); + EXPECT_EQ(0UL, cluster.info()->endpointStats().membership_healthy_.value()); + EXPECT_EQ(0UL, cluster.info()->endpointStats().membership_degraded_.value()); // Go back to degraded. cluster.prioritySet().hostSetsPerPriority()[0]->hosts()[1]->healthFlagClear( @@ -2168,8 +2168,8 @@ TEST_F(StaticClusterImplTest, HealthyStat) { HealthTransition::Changed); EXPECT_EQ(0UL, cluster.prioritySet().hostSetsPerPriority()[0]->healthyHosts().size()); EXPECT_EQ(1UL, cluster.prioritySet().hostSetsPerPriority()[0]->degradedHosts().size()); - EXPECT_EQ(0UL, cluster.info()->stats().membership_healthy_.value()); - EXPECT_EQ(1UL, cluster.info()->stats().membership_degraded_.value()); + EXPECT_EQ(0UL, cluster.info()->endpointStats().membership_healthy_.value()); + EXPECT_EQ(1UL, cluster.info()->endpointStats().membership_degraded_.value()); // Then go healthy. cluster.prioritySet().hostSetsPerPriority()[0]->hosts()[1]->healthFlagClear( @@ -2178,8 +2178,8 @@ TEST_F(StaticClusterImplTest, HealthyStat) { HealthTransition::Changed); EXPECT_EQ(1UL, cluster.prioritySet().hostSetsPerPriority()[0]->healthyHosts().size()); EXPECT_EQ(0UL, cluster.prioritySet().hostSetsPerPriority()[0]->degradedHosts().size()); - EXPECT_EQ(1UL, cluster.info()->stats().membership_healthy_.value()); - EXPECT_EQ(0UL, cluster.info()->stats().membership_degraded_.value()); + EXPECT_EQ(1UL, cluster.info()->endpointStats().membership_healthy_.value()); + EXPECT_EQ(0UL, cluster.info()->endpointStats().membership_degraded_.value()); } TEST_F(StaticClusterImplTest, UrlConfig) { diff --git a/test/extensions/clusters/aggregate/cluster_test.cc b/test/extensions/clusters/aggregate/cluster_test.cc index 0a9845b7a8f4e..ab83624bb6213 100644 --- a/test/extensions/clusters/aggregate/cluster_test.cc +++ b/test/extensions/clusters/aggregate/cluster_test.cc @@ -138,8 +138,8 @@ class AggregateClusterTest : public Event::TestUsingSimulatedTime, public testin Upstream::ThreadAwareLoadBalancerPtr thread_aware_lb_; Upstream::LoadBalancerFactorySharedPtr lb_factory_; Upstream::LoadBalancerPtr lb_; - Upstream::ClusterStatNames stat_names_; - Upstream::ClusterStats stats_; + Upstream::ClusterTrafficStatNames stat_names_; + Upstream::ClusterTrafficStats stats_; std::shared_ptr primary_info_{ new NiceMock()}; std::shared_ptr secondary_info_{ diff --git a/test/extensions/clusters/redis/redis_cluster_test.cc b/test/extensions/clusters/redis/redis_cluster_test.cc index 7fea1b0cd17d1..630da461e1074 100644 --- a/test/extensions/clusters/redis/redis_cluster_test.cc +++ b/test/extensions/clusters/redis/redis_cluster_test.cc @@ -791,7 +791,7 @@ TEST_F(RedisClusterTest, AddressAsHostname) { EXPECT_CALL(*cluster_callback_, onClusterSlotUpdate(_, _)); expectClusterSlotResponse(singleSlotPrimaryReplica("primary.com", "replica.org", 22120)); expectHealthyHosts(std::list({"127.0.1.1:22120", "127.0.1.2:22120"})); - EXPECT_EQ(0U, cluster_->info()->stats().update_failure_.value()); + EXPECT_EQ(0U, cluster_->info()->configUpdateStats().update_failure_.value()); // 2. Single slot with just the primary hostname expectRedisResolve(true); @@ -802,7 +802,7 @@ TEST_F(RedisClusterTest, AddressAsHostname) { EXPECT_CALL(*cluster_callback_, onClusterSlotUpdate(_, _)); expectClusterSlotResponse(singleSlotPrimary("primary.com", 22120)); expectHealthyHosts(std::list({"127.0.1.1:22120"})); - EXPECT_EQ(0U, cluster_->info()->stats().update_failure_.value()); + EXPECT_EQ(0U, cluster_->info()->configUpdateStats().update_failure_.value()); // 2. Single slot with just the primary IP address and replica hostname expectRedisResolve(); @@ -813,7 +813,7 @@ TEST_F(RedisClusterTest, AddressAsHostname) { EXPECT_CALL(*cluster_callback_, onClusterSlotUpdate(_, _)); expectClusterSlotResponse(singleSlotPrimaryReplica("127.0.1.1", "replica.org", 22120)); expectHealthyHosts(std::list({"127.0.1.1:22120", "127.0.1.2:22120"})); - EXPECT_EQ(0U, cluster_->info()->stats().update_failure_.value()); + EXPECT_EQ(0U, cluster_->info()->configUpdateStats().update_failure_.value()); } TEST_F(RedisClusterTest, AddressAsHostnameParallelResolution) { @@ -845,7 +845,7 @@ TEST_F(RedisClusterTest, AddressAsHostnameParallelResolution) { "127.0.1.1:22120", "127.0.1.2:22120", })); - EXPECT_EQ(0U, cluster_->info()->stats().update_failure_.value()); + EXPECT_EQ(0U, cluster_->info()->configUpdateStats().update_failure_.value()); } TEST_F(RedisClusterTest, AddressAsHostnameFailure) { @@ -875,7 +875,7 @@ TEST_F(RedisClusterTest, AddressAsHostnameFailure) { EXPECT_EQ(1UL, cluster_->prioritySet().hostSetsPerPriority()[0]->hosts().size()); EXPECT_EQ(1UL, cluster_->prioritySet().hostSetsPerPriority()[0]->healthyHosts().size()); expectHealthyHosts(std::list({"127.0.1.1:22120"})); - EXPECT_EQ(1UL, cluster_->info()->stats().update_failure_.value()); + EXPECT_EQ(1UL, cluster_->info()->configUpdateStats().update_failure_.value()); // 2. Primary resolution fails, so replica resolution is not even called. // Expect cluster slot update to be successful, with just one healthy host, and failure counter to @@ -894,7 +894,7 @@ TEST_F(RedisClusterTest, AddressAsHostnameFailure) { // healthy hosts is same as before, but failure count increases by 1 EXPECT_EQ(1UL, cluster_->prioritySet().hostSetsPerPriority()[0]->hosts().size()); EXPECT_EQ(1UL, cluster_->prioritySet().hostSetsPerPriority()[0]->healthyHosts().size()); - EXPECT_EQ(2UL, cluster_->info()->stats().update_failure_.value()); + EXPECT_EQ(2UL, cluster_->info()->configUpdateStats().update_failure_.value()); } TEST_F(RedisClusterTest, AddressAsHostnamePartialReplicaFailure) { @@ -940,7 +940,7 @@ TEST_F(RedisClusterTest, EmptyDnsResponse) { EXPECT_EQ(0UL, cluster_->prioritySet().hostSetsPerPriority()[0]->hosts().size()); EXPECT_EQ(0UL, cluster_->prioritySet().hostSetsPerPriority()[0]->healthyHosts().size()); - EXPECT_EQ(1U, cluster_->info()->stats().update_empty_.value()); + EXPECT_EQ(1U, cluster_->info()->configUpdateStats().update_empty_.value()); // Does not recreate the timer on subsequent DNS resolve calls. EXPECT_CALL(*dns_timer, enableTimer(_, _)); @@ -949,7 +949,7 @@ TEST_F(RedisClusterTest, EmptyDnsResponse) { EXPECT_EQ(0UL, cluster_->prioritySet().hostSetsPerPriority()[0]->hosts().size()); EXPECT_EQ(0UL, cluster_->prioritySet().hostSetsPerPriority()[0]->healthyHosts().size()); - EXPECT_EQ(2U, cluster_->info()->stats().update_empty_.value()); + EXPECT_EQ(2U, cluster_->info()->configUpdateStats().update_empty_.value()); } TEST_F(RedisClusterTest, FailedDnsResponse) { @@ -965,7 +965,7 @@ TEST_F(RedisClusterTest, FailedDnsResponse) { EXPECT_EQ(0UL, cluster_->prioritySet().hostSetsPerPriority()[0]->hosts().size()); EXPECT_EQ(0UL, cluster_->prioritySet().hostSetsPerPriority()[0]->healthyHosts().size()); - EXPECT_EQ(0U, cluster_->info()->stats().update_empty_.value()); + EXPECT_EQ(0U, cluster_->info()->configUpdateStats().update_empty_.value()); // Does not recreate the timer on subsequent DNS resolve calls. EXPECT_CALL(*dns_timer, enableTimer(_, _)); @@ -974,7 +974,7 @@ TEST_F(RedisClusterTest, FailedDnsResponse) { EXPECT_EQ(0UL, cluster_->prioritySet().hostSetsPerPriority()[0]->hosts().size()); EXPECT_EQ(0UL, cluster_->prioritySet().hostSetsPerPriority()[0]->healthyHosts().size()); - EXPECT_EQ(1U, cluster_->info()->stats().update_empty_.value()); + EXPECT_EQ(1U, cluster_->info()->configUpdateStats().update_empty_.value()); } TEST_F(RedisClusterTest, Basic) { @@ -1020,8 +1020,8 @@ TEST_F(RedisClusterTest, RedisResolveFailure) { // Initialization will wait til the redis cluster succeed. expectClusterSlotFailure(); - EXPECT_EQ(1U, cluster_->info()->stats().update_attempt_.value()); - EXPECT_EQ(1U, cluster_->info()->stats().update_failure_.value()); + EXPECT_EQ(1U, cluster_->info()->configUpdateStats().update_attempt_.value()); + EXPECT_EQ(1U, cluster_->info()->configUpdateStats().update_failure_.value()); expectRedisResolve(true); resolve_timer_->invokeCallback(); @@ -1036,8 +1036,8 @@ TEST_F(RedisClusterTest, RedisResolveFailure) { resolve_timer_->invokeCallback(); expectClusterSlotFailure(); expectHealthyHosts(std::list({"127.0.0.1:22120", "127.0.0.2:22120"})); - EXPECT_EQ(3U, cluster_->info()->stats().update_attempt_.value()); - EXPECT_EQ(2U, cluster_->info()->stats().update_failure_.value()); + EXPECT_EQ(3U, cluster_->info()->configUpdateStats().update_attempt_.value()); + EXPECT_EQ(2U, cluster_->info()->configUpdateStats().update_failure_.value()); } TEST_F(RedisClusterTest, FactoryInitNotRedisClusterTypeFailure) { @@ -1092,8 +1092,8 @@ TEST_F(RedisClusterTest, RedisErrorResponse) { EXPECT_CALL(*cluster_callback_, onClusterSlotUpdate(_, _)).Times(0); expectClusterSlotResponse(std::move(hello_world_response)); - EXPECT_EQ(1U, cluster_->info()->stats().update_attempt_.value()); - EXPECT_EQ(1U, cluster_->info()->stats().update_failure_.value()); + EXPECT_EQ(1U, cluster_->info()->configUpdateStats().update_attempt_.value()); + EXPECT_EQ(1U, cluster_->info()->configUpdateStats().update_failure_.value()); expectRedisResolve(); resolve_timer_->invokeCallback(); @@ -1118,9 +1118,9 @@ TEST_F(RedisClusterTest, RedisErrorResponse) { } expectClusterSlotResponse(createResponse(flags, no_replica)); expectHealthyHosts(std::list({"127.0.0.1:22120"})); - EXPECT_EQ(++update_attempt, cluster_->info()->stats().update_attempt_.value()); + EXPECT_EQ(++update_attempt, cluster_->info()->configUpdateStats().update_attempt_.value()); if (!flags.all()) { - EXPECT_EQ(++update_failure, cluster_->info()->stats().update_failure_.value()); + EXPECT_EQ(++update_failure, cluster_->info()->configUpdateStats().update_failure_.value()); } } } @@ -1155,9 +1155,9 @@ TEST_F(RedisClusterTest, RedisReplicaErrorResponse) { } expectHealthyHosts(std::list({"127.0.0.1:22120"})); expectClusterSlotResponse(createResponse(single_slot_primary, replica_flags)); - EXPECT_EQ(++update_attempt, cluster_->info()->stats().update_attempt_.value()); + EXPECT_EQ(++update_attempt, cluster_->info()->configUpdateStats().update_attempt_.value()); if (!(replica_flags.all() || replica_flags.none())) { - EXPECT_EQ(++update_failure, cluster_->info()->stats().update_failure_.value()); + EXPECT_EQ(++update_failure, cluster_->info()->configUpdateStats().update_failure_.value()); } } } diff --git a/test/extensions/filters/http/health_check/health_check_test.cc b/test/extensions/filters/http/health_check/health_check_test.cc index 7dcf99d5129c4..5e9051c7bb571 100644 --- a/test/extensions/filters/http/health_check/health_check_test.cc +++ b/test/extensions/filters/http/health_check/health_check_test.cc @@ -71,9 +71,9 @@ class HealthCheckFilterTest : public testing::Test { public: MockHealthCheckCluster(uint64_t membership_total, uint64_t membership_healthy, uint64_t membership_degraded = 0) { - info()->stats().membership_total_.set(membership_total); - info()->stats().membership_healthy_.set(membership_healthy); - info()->stats().membership_degraded_.set(membership_degraded); + info()->endpointStats().membership_total_.set(membership_total); + info()->endpointStats().membership_healthy_.set(membership_healthy); + info()->endpointStats().membership_degraded_.set(membership_degraded); } }; }; diff --git a/test/extensions/stats_sinks/common/statsd/statsd_test.cc b/test/extensions/stats_sinks/common/statsd/statsd_test.cc index 3d20059442c12..8e036f008e076 100644 --- a/test/extensions/stats_sinks/common/statsd/statsd_test.cc +++ b/test/extensions/stats_sinks/common/statsd/statsd_test.cc @@ -225,13 +225,13 @@ TEST_F(TcpStatsdSinkTest, Overflow) { // Synthetically set buffer above high watermark. Make sure we don't write anything. cluster_manager_.active_clusters_["fake_cluster"] - ->info_->stats() + ->info_->trafficStats() .upstream_cx_tx_bytes_buffered_.set(1024 * 1024 * 17); sink_->flush(snapshot_); // Lower and make sure we write. cluster_manager_.active_clusters_["fake_cluster"] - ->info_->stats() + ->info_->trafficStats() .upstream_cx_tx_bytes_buffered_.set(1024 * 1024 * 15); expectCreateConnection(); EXPECT_CALL(*connection_, write(BufferStringEqual("envoy.test_counter:1|c\n"), _)); @@ -239,7 +239,7 @@ TEST_F(TcpStatsdSinkTest, Overflow) { // Raise and make sure we don't write and kill connection. cluster_manager_.active_clusters_["fake_cluster"] - ->info_->stats() + ->info_->trafficStats() .upstream_cx_tx_bytes_buffered_.set(1024 * 1024 * 17); EXPECT_CALL(*connection_, close(Network::ConnectionCloseType::NoFlush)); sink_->flush(snapshot_); diff --git a/test/extensions/stats_sinks/hystrix/hystrix_test.cc b/test/extensions/stats_sinks/hystrix/hystrix_test.cc index 866cbc7df0de4..53dd5278abd76 100644 --- a/test/extensions/stats_sinks/hystrix/hystrix_test.cc +++ b/test/extensions/stats_sinks/hystrix/hystrix_test.cc @@ -82,9 +82,9 @@ class ClusterTestInfo { ON_CALL(error_4xx_counter_, value()).WillByDefault(Return((i + 1) * error_4xx_step)); ON_CALL(retry_4xx_counter_, value()).WillByDefault(Return((i + 1) * error_4xx_retry_step)); ON_CALL(success_counter_, value()).WillByDefault(Return((i + 1) * success_step)); - cluster_info_->stats().upstream_rq_timeout_.add(timeout_step); - cluster_info_->stats().upstream_rq_per_try_timeout_.add(timeout_retry_step); - cluster_info_->stats().upstream_rq_pending_overflow_.add(rejected_step); + cluster_info_->trafficStats().upstream_rq_timeout_.add(timeout_step); + cluster_info_->trafficStats().upstream_rq_per_try_timeout_.add(timeout_retry_step); + cluster_info_->trafficStats().upstream_rq_pending_overflow_.add(rejected_step); } NiceMock cluster_; diff --git a/test/mocks/upstream/cluster_info.cc b/test/mocks/upstream/cluster_info.cc index ba3a767c931c1..a210516d5e07a 100644 --- a/test/mocks/upstream/cluster_info.cc +++ b/test/mocks/upstream/cluster_info.cc @@ -54,11 +54,15 @@ MockClusterInfo::MockClusterInfo() : http2_options_(::Envoy::Http2::Utility::initializeAndValidateOptions( envoy::config::core::v3::Http2ProtocolOptions())), stat_names_(stats_store_.symbolTable()), + config_update_stats_names_(stats_store_.symbolTable()), + lb_stat_names_(stats_store_.symbolTable()), endpoint_stat_names_(stats_store_.symbolTable()), cluster_load_report_stat_names_(stats_store_.symbolTable()), cluster_circuit_breakers_stat_names_(stats_store_.symbolTable()), cluster_request_response_size_stat_names_(stats_store_.symbolTable()), cluster_timeout_budget_stat_names_(stats_store_.symbolTable()), stats_(ClusterInfoImpl::generateStats(stats_store_, stat_names_)), + config_update_stats_(config_update_stats_names_, stats_store_), + lb_stats_(lb_stat_names_, stats_store_), endpoint_stats_(endpoint_stat_names_, stats_store_), transport_socket_matcher_(new NiceMock()), load_report_stats_(ClusterInfoImpl::generateLoadReportStats(load_report_stats_store_, cluster_load_report_stat_names_)), @@ -94,7 +98,10 @@ MockClusterInfo::MockClusterInfo() .WillByDefault(ReturnPointee(&max_response_headers_count_)); ON_CALL(*this, maxRequestsPerConnection()) .WillByDefault(ReturnPointee(&max_requests_per_connection_)); - ON_CALL(*this, stats()).WillByDefault(ReturnRef(stats_)); + ON_CALL(*this, trafficStats()).WillByDefault(ReturnRef(stats_)); + ON_CALL(*this, lbStats()).WillByDefault(ReturnRef(lb_stats_)); + ON_CALL(*this, configUpdateStats()).WillByDefault(ReturnRef(config_update_stats_)); + ON_CALL(*this, endpointStats()).WillByDefault(ReturnRef(endpoint_stats_)); ON_CALL(*this, statsScope()).WillByDefault(ReturnRef(stats_store_)); // TODO(incfly): The following is a hack because it's not possible to directly embed // a mock transport socket factory matcher due to circular dependencies. Fix this up in a follow diff --git a/test/mocks/upstream/cluster_info.h b/test/mocks/upstream/cluster_info.h index bb6fded4f26f8..a0a31e0d6c0fe 100644 --- a/test/mocks/upstream/cluster_info.h +++ b/test/mocks/upstream/cluster_info.h @@ -151,7 +151,10 @@ class MockClusterInfo : public ClusterInfo { MOCK_METHOD(const std::string&, observabilityName, (), (const)); MOCK_METHOD(ResourceManager&, resourceManager, (ResourcePriority priority), (const)); MOCK_METHOD(TransportSocketMatcher&, transportSocketMatcher, (), (const)); - MOCK_METHOD(ClusterStats&, stats, (), (const)); + MOCK_METHOD(ClusterTrafficStats&, trafficStats, (), (const)); + MOCK_METHOD(ClusterLbStats&, lbStats, (), (const)); + MOCK_METHOD(ClusterEndpointStats&, endpointStats, (), (const)); + MOCK_METHOD(ClusterConfigUpdateStats&, configUpdateStats, (), (const)); MOCK_METHOD(Stats::Scope&, statsScope, (), (const)); MOCK_METHOD(ClusterLoadReportStats&, loadReportStats, (), (const)); MOCK_METHOD(ClusterRequestResponseSizeStatsOptRef, requestResponseSizeStats, (), (const)); @@ -196,12 +199,18 @@ class MockClusterInfo : public ClusterInfo { uint64_t max_requests_per_connection_{}; uint32_t max_response_headers_count_{Http::DEFAULT_MAX_HEADERS_COUNT}; NiceMock stats_store_; - ClusterStatNames stat_names_; + ClusterTrafficStatNames stat_names_; + ClusterConfigUpdateStatNames config_update_stats_names_; + ClusterLbStatNames lb_stat_names_; + ClusterEndpointStatNames endpoint_stat_names_; ClusterLoadReportStatNames cluster_load_report_stat_names_; ClusterCircuitBreakersStatNames cluster_circuit_breakers_stat_names_; ClusterRequestResponseSizeStatNames cluster_request_response_size_stat_names_; ClusterTimeoutBudgetStatNames cluster_timeout_budget_stat_names_; - ClusterStats stats_; + ClusterTrafficStats stats_; + ClusterConfigUpdateStats config_update_stats_; + ClusterLbStats lb_stats_; + ClusterEndpointStats endpoint_stats_; Upstream::TransportSocketMatcherPtr transport_socket_matcher_; NiceMock load_report_stats_store_; ClusterLoadReportStats load_report_stats_; diff --git a/test/mocks/upstream/cluster_manager.cc b/test/mocks/upstream/cluster_manager.cc index 05c5afcd8aacc..3b588bf67da86 100644 --- a/test/mocks/upstream/cluster_manager.cc +++ b/test/mocks/upstream/cluster_manager.cc @@ -15,7 +15,9 @@ using ::testing::ReturnRef; MockClusterManager::MockClusterManager(TimeSource&) : MockClusterManager() {} MockClusterManager::MockClusterManager() - : cluster_stat_names_(*symbol_table_), cluster_load_report_stat_names_(*symbol_table_), + : cluster_stat_names_(*symbol_table_), cluster_config_update_stat_names_(*symbol_table_), + cluster_lb_stat_names_(*symbol_table_), cluster_endpoint_stat_names_(*symbol_table_), + cluster_load_report_stat_names_(*symbol_table_), cluster_circuit_breakers_stat_names_(*symbol_table_), cluster_request_response_size_stat_names_(*symbol_table_), cluster_timeout_budget_stat_names_(*symbol_table_) { diff --git a/test/mocks/upstream/cluster_manager.h b/test/mocks/upstream/cluster_manager.h index 59dfce2e01c6b..6a068671aee40 100644 --- a/test/mocks/upstream/cluster_manager.h +++ b/test/mocks/upstream/cluster_manager.h @@ -56,7 +56,14 @@ class MockClusterManager : public ClusterManager { MOCK_METHOD(ClusterUpdateCallbacksHandle*, addThreadLocalClusterUpdateCallbacks_, (ClusterUpdateCallbacks & callbacks)); MOCK_METHOD(Config::SubscriptionFactory&, subscriptionFactory, ()); - const ClusterStatNames& clusterStatNames() const override { return cluster_stat_names_; } + const ClusterTrafficStatNames& clusterStatNames() const override { return cluster_stat_names_; } + const ClusterConfigUpdateStatNames& clusterConfigUpdateStatNames() const override { + return cluster_config_update_stat_names_; + } + const ClusterEndpointStatNames& clusterEndpointStatNames() const override { + return cluster_endpoint_stat_names_; + } + const ClusterLbStatNames& clusterLbStatNames() const override { return cluster_lb_stat_names_; } const ClusterLoadReportStatNames& clusterLoadReportStatNames() const override { return cluster_load_report_stat_names_; } @@ -88,7 +95,10 @@ class MockClusterManager : public ClusterManager { absl::flat_hash_map> active_clusters_; absl::flat_hash_map> warming_clusters_; Stats::TestUtil::TestSymbolTable symbol_table_; - ClusterStatNames cluster_stat_names_; + ClusterTrafficStatNames cluster_stat_names_; + ClusterConfigUpdateStatNames cluster_config_update_stat_names_; + ClusterLbStatNames cluster_lb_stat_names_; + ClusterEndpointStatNames cluster_endpoint_stat_names_; ClusterLoadReportStatNames cluster_load_report_stat_names_; ClusterCircuitBreakersStatNames cluster_circuit_breakers_stat_names_; ClusterRequestResponseSizeStatNames cluster_request_response_size_stat_names_;