diff options
author | Tor Brede Vekterli <vekterli@verizonmedia.com> | 2021-03-09 13:49:39 +0100 |
---|---|---|
committer | Tor Brede Vekterli <vekterli@verizonmedia.com> | 2021-03-09 13:49:39 +0100 |
commit | 5bd15b57d2b6dd82b6bb71f95609be0447f2402d (patch) | |
tree | 84a6be12bb6b39009a7fb464f2af44205a62dfa8 | |
parent | 540a632a1a7a13762b6612370c0b839f46a5240e (diff) |
Immediately exit cluster controller if node index config is changed live
We do not support live reconfigs of CC index, so swiftly exit if we
detect this, allowing the config sentinel to restart the service.
-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; } |