diff options
author | Tor Brede Vekterli <vekterli@verizonmedia.com> | 2021-03-09 14:03:40 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-09 14:03:40 +0100 |
commit | 934be121d5c905660b14ea2d8a18798db834fa64 (patch) | |
tree | 9e281d3b9fee1156a597ba43b92e01f57687d066 /clustercontroller-core | |
parent | 775ff801a0ccd23eb1b571b5b715ebbfd39a9b30 (diff) | |
parent | 5bd15b57d2b6dd82b6bb71f95609be0447f2402d (diff) |
Merge pull request #16856 from vespa-engine/vekterli/immediately-exit-cc-if-node-index-changed-live
Immediately exit cluster controller if node index config is changed live
Diffstat (limited to 'clustercontroller-core')
-rw-r--r-- | clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/FleetController.java | 23 |
1 files changed, 20 insertions, 3 deletions
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 bafd7168f03..5d5ffb917d2 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 @@ -70,6 +70,7 @@ public class FleetController implements NodeStateOrHostInfoChangeHandler, NodeAd private final AtomicBoolean running = new AtomicBoolean(true); private FleetControllerOptions options; private FleetControllerOptions nextOptions; + private final int configuredIndex; private final List<SystemStateListener> systemStateListeners = new CopyOnWriteArrayList<>(); private boolean processingCycle = false; private boolean wantedStateChanged = false; @@ -125,6 +126,7 @@ public class FleetController implements NodeStateOrHostInfoChangeHandler, NodeAd MetricUpdater metricUpdater, FleetControllerOptions options) { log.info("Starting up cluster controller " + options.fleetControllerIndex + " for cluster " + cluster.getName()); + this.configuredIndex = options.fleetControllerIndex; this.timer = timer; this.monitor = timer; this.eventLog = eventLog; @@ -487,6 +489,7 @@ public class FleetController implements NodeStateOrHostInfoChangeHandler, NodeAd /** This is called when the options field has been set to a new set of options */ private void propagateOptions() { verifyInControllerThread(); + selfTerminateIfConfiguredNodeIndexHasChanged(); if (changesConfiguredNodeSet(options.nodes)) { // Force slobrok node re-fetch in case of changes to the set of configured nodes @@ -544,6 +547,16 @@ public class FleetController implements NodeStateOrHostInfoChangeHandler, NodeAd nextConfigGeneration = -1; } + private void selfTerminateIfConfiguredNodeIndexHasChanged() { + if (options.fleetControllerIndex != configuredIndex) { + log.warning(String.format("Got new configuration where CC index has changed from %d to %d. We do not support "+ + "doing this live; immediately exiting now to force new configuration", + configuredIndex, options.fleetControllerIndex)); + prepareShutdownEdge(); + System.exit(1); + } + } + public StatusPageResponse fetchStatusPage(StatusPageServer.HttpRequest httpRequest) { verifyInControllerThread(); StatusPageResponse.ResponseCode responseCode; @@ -1103,12 +1116,16 @@ public class FleetController implements NodeStateOrHostInfoChangeHandler, NodeAd synchronized (monitor) { running.set(false); } System.exit(1); } finally { - running.set(false); - failAllVersionDependentTasks(); - synchronized (monitor) { monitor.notifyAll(); } + prepareShutdownEdge(); } } + private void prepareShutdownEdge() { + running.set(false); + failAllVersionDependentTasks(); + synchronized (monitor) { monitor.notifyAll(); } + } + public DatabaseHandler.Context databaseContext = new DatabaseHandler.Context() { @Override public ContentCluster getCluster() { return cluster; } |