From a07bb80ad57e6a5f95218228c63e92450f768081 Mon Sep 17 00:00:00 2001 From: Arne Juul Date: Thu, 28 Jan 2021 08:54:24 +0000 Subject: add maybePublishOldMetrics hook --- .../vespa/clustercontroller/core/FleetController.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetController.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetController.java index 16b7894211e..6dc4b1e8015 100644 --- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetController.java +++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetController.java @@ -74,6 +74,7 @@ public class FleetController implements NodeStateOrHostInfoChangeHandler, NodeAd private boolean processingCycle = false; private boolean wantedStateChanged = false; private long cycleCount = 0; + private long lastMetricUpdateCycleCount = 0; private long nextStateSendTime = 0; private Long controllerThreadId = null; @@ -384,6 +385,7 @@ public class FleetController implements NodeStateOrHostInfoChangeHandler, NodeAd ClusterState baselineState = stateBundle.getBaselineClusterState(); newStates.add(stateBundle); metricUpdater.updateClusterStateMetrics(cluster, baselineState); + lastMetricUpdateCycleCount = cycleCount; systemStateBroadcaster.handleNewClusterStates(stateBundle); // Iff master, always store new version in ZooKeeper _before_ publishing to any // nodes so that a cluster controller crash after publishing but before a successful @@ -393,6 +395,19 @@ public class FleetController implements NodeStateOrHostInfoChangeHandler, NodeAd } } + private boolean maybePublishOldMetrics() { + verifyInControllerThread(); + if (cycleCount > 300 + lastMetricUpdateCycleCount) { + ClusterStateBundle stateBundle = stateVersionTracker.getVersionedClusterStateBundle(); + ClusterState baselineState = stateBundle.getBaselineClusterState(); + metricUpdater.updateClusterStateMetrics(cluster, baselineState); + lastMetricUpdateCycleCount = cycleCount; + return true; + } else { + return false; + } + } + private void storeClusterStateMetaDataToZooKeeper(ClusterStateBundle stateBundle) { try { database.saveLatestSystemStateVersion(databaseContext, stateBundle.getVersion()); @@ -605,6 +620,7 @@ public class FleetController implements NodeStateOrHostInfoChangeHandler, NodeAd if ( ! isRunning()) { return; } didWork |= processNextQueuedRemoteTask(); didWork |= completeSatisfiedVersionDependentTasks(); + didWork |= maybePublishOldMetrics(); processingCycle = false; ++cycleCount; -- cgit v1.2.3