diff options
author | Håkon Hallingstad <hakon@yahooinc.com> | 2022-04-20 09:37:22 +0200 |
---|---|---|
committer | Håkon Hallingstad <hakon@yahooinc.com> | 2022-04-20 09:37:22 +0200 |
commit | 13ce3ec709d0eaa74fb93ae843ec949d62802a01 (patch) | |
tree | 4d62beefa3aa45bbe38d82493d3573b782e17ef4 /clustercontroller-core/src/main/java/com | |
parent | 7bc9a2f5b32f7bb240f91bfec165266c4f98724f (diff) |
Trigger saveWantedState when nodes are removed or orphaned wanted states are loaded
Diffstat (limited to 'clustercontroller-core/src/main/java/com')
16 files changed, 109 insertions, 81 deletions
diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/ClusterInfo.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/ClusterInfo.java index da5114b8675..2cfaf64fe83 100644 --- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/ClusterInfo.java +++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/ClusterInfo.java @@ -4,6 +4,7 @@ package com.yahoo.vespa.clustercontroller.core; import com.yahoo.vdslib.distribution.ConfiguredNode; import com.yahoo.vdslib.distribution.Distribution; import com.yahoo.vdslib.state.Node; +import com.yahoo.vespa.clustercontroller.core.listeners.NodeListener; import java.util.Collection; import java.util.Collections; @@ -52,15 +53,23 @@ public class ClusterInfo { boolean hasConfiguredNode(int index) { return nodes.containsKey(index); } /** Sets the nodes which belongs to this cluster */ - void setNodes(Collection<ConfiguredNode> newNodes, ContentCluster owner, Distribution distribution) { + void setNodes(Collection<ConfiguredNode> newNodes, ContentCluster owner, + Distribution distribution, NodeListener nodeListener) { // Remove info for removed nodes Set<ConfiguredNode> newNodesSet = new HashSet<>(newNodes); for (ConfiguredNode existingNode : this.nodes.values()) { if ( ! newNodesSet.contains(existingNode)) { - Node existingStorageNode = storageNodeInfo.remove(existingNode.index()).getNode(); - Node existingDistributorNode = distributorNodeInfo.remove(existingNode.index()).getNode(); - allNodeInfo.remove(existingDistributorNode); - allNodeInfo.remove(existingStorageNode); + { + Node existingStorageNode = storageNodeInfo.remove(existingNode.index()).getNode(); + allNodeInfo.remove(existingStorageNode); + nodeListener.handleRemovedNode(existingStorageNode); + } + + { + Node existingDistributorNode = distributorNodeInfo.remove(existingNode.index()).getNode(); + allNodeInfo.remove(existingDistributorNode); + nodeListener.handleRemovedNode(existingDistributorNode); + } } } diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/ContentCluster.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/ContentCluster.java index 579417cb8ae..f2a4a9736c3 100644 --- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/ContentCluster.java +++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/ContentCluster.java @@ -10,6 +10,7 @@ import com.yahoo.vdslib.state.Node; import com.yahoo.vdslib.state.NodeState; import com.yahoo.vdslib.state.NodeType; import com.yahoo.vdslib.state.State; +import com.yahoo.vespa.clustercontroller.core.listeners.NodeListener; import com.yahoo.vespa.clustercontroller.core.status.statuspage.HtmlTable; import com.yahoo.vespa.clustercontroller.core.status.statuspage.VdsClusterHtmlRenderer; import com.yahoo.vespa.clustercontroller.utils.staterestapi.requests.SetUnitStateRequest; @@ -42,7 +43,7 @@ public class ContentCluster { if (configuredNodes == null) throw new IllegalArgumentException("Nodes must be set"); this.clusterName = clusterName; this.distribution = distribution; - setNodes(configuredNodes); + setNodes(configuredNodes, new NodeListener() {}); } // TODO move out, this doesn't belong in a domain model class @@ -110,8 +111,8 @@ public class ContentCluster { } /** Sets the configured nodes of this cluster */ - public final void setNodes(Collection<ConfiguredNode> configuredNodes) { - clusterInfo.setNodes(configuredNodes, this, distribution); + public final void setNodes(Collection<ConfiguredNode> configuredNodes, NodeListener nodeListener) { + clusterInfo.setNodes(configuredNodes, this, distribution, nodeListener); } public void setStartTimestamp(Node n, long startTimestamp) { 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 1d98b9fe831..7f385c6077c 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 @@ -12,8 +12,8 @@ import com.yahoo.vdslib.state.State; import com.yahoo.vespa.clustercontroller.core.database.DatabaseHandler; import com.yahoo.vespa.clustercontroller.core.database.ZooKeeperDatabaseFactory; import com.yahoo.vespa.clustercontroller.core.hostinfo.HostInfo; -import com.yahoo.vespa.clustercontroller.core.listeners.NodeAddedOrRemovedListener; -import com.yahoo.vespa.clustercontroller.core.listeners.NodeStateOrHostInfoChangeHandler; +import com.yahoo.vespa.clustercontroller.core.listeners.SlobrokListener; +import com.yahoo.vespa.clustercontroller.core.listeners.NodeListener; import com.yahoo.vespa.clustercontroller.core.listeners.SystemStateListener; import com.yahoo.vespa.clustercontroller.core.rpc.RPCCommunicator; import com.yahoo.vespa.clustercontroller.core.rpc.RpcServer; @@ -47,7 +47,7 @@ import java.util.logging.Logger; import java.util.stream.Collectors; import java.util.stream.Stream; -public class FleetController implements NodeStateOrHostInfoChangeHandler, NodeAddedOrRemovedListener, SystemStateListener, +public class FleetController implements NodeListener, SlobrokListener, SystemStateListener, Runnable, RemoteClusterControllerTaskScheduler { private static final Logger logger = Logger.getLogger(FleetController.class.getName()); @@ -332,6 +332,13 @@ public class FleetController implements NodeStateOrHostInfoChangeHandler, NodeAd } @Override + public void handleRemovedNode(Node node) { + verifyInControllerThread(); + // Prune orphaned wanted states + wantedStateChanged = true; + } + + @Override public void handleUpdatedHostInfo(NodeInfo nodeInfo, HostInfo newHostInfo) { verifyInControllerThread(); triggerBundleRecomputationIfResourceExhaustionStateChanged(nodeInfo, newHostInfo); @@ -511,7 +518,7 @@ public class FleetController implements NodeStateOrHostInfoChangeHandler, NodeAd eventLog.setMaxSize(options.eventLogMaxSize, options.eventNodeLogMaxSize); cluster.setPollingFrequency(options.statePollingFrequency); cluster.setDistribution(options.storageDistribution); - cluster.setNodes(options.nodes); + cluster.setNodes(options.nodes, databaseContext.getNodeStateUpdateListener()); database.setZooKeeperAddress(options.zooKeeperServerAddress, databaseContext); database.setZooKeeperSessionTimeout(options.zooKeeperSessionTimeout, databaseContext); stateGatherer.setMaxSlobrokDisconnectGracePeriod(options.maxSlobrokDisconnectGracePeriod); @@ -790,8 +797,8 @@ public class FleetController implements NodeStateOrHostInfoChangeHandler, NodeAd @Override public boolean inMasterMoratorium() { return inMasterMoratorium; } }; - context.nodeStateOrHostInfoChangeHandler = this; - context.nodeAddedOrRemovedListener = this; + context.nodeListener = this; + context.slobrokListener = this; return context; } @@ -1095,7 +1102,7 @@ public class FleetController implements NodeStateOrHostInfoChangeHandler, NodeAd didWork = true; } if (wantedStateChanged) { - database.saveWantedStates(databaseContext); + didWork |= database.saveWantedStates(databaseContext); wantedStateChanged = false; } } else { @@ -1150,9 +1157,9 @@ public class FleetController implements NodeStateOrHostInfoChangeHandler, NodeAd @Override public FleetController getFleetController() { return FleetController.this; } @Override - public NodeAddedOrRemovedListener getNodeAddedOrRemovedListener() { return FleetController.this; } + public SlobrokListener getNodeAddedOrRemovedListener() { return FleetController.this; } @Override - public NodeStateOrHostInfoChangeHandler getNodeStateUpdateListener() { return FleetController.this; } + public NodeListener getNodeStateUpdateListener() { return FleetController.this; } }; public void waitForCompleteCycle(long timeoutMS) { diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/NodeLookup.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/NodeLookup.java index cdf8b24e72d..882ae8894fa 100644 --- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/NodeLookup.java +++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/NodeLookup.java @@ -1,7 +1,7 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.clustercontroller.core; -import com.yahoo.vespa.clustercontroller.core.listeners.NodeAddedOrRemovedListener; +import com.yahoo.vespa.clustercontroller.core.listeners.SlobrokListener; /** * Interface for a node lookup service, such as slobrok, config, or tier controller. @@ -10,7 +10,7 @@ public interface NodeLookup { void shutdown(); - boolean updateCluster(ContentCluster cluster, NodeAddedOrRemovedListener listener); + boolean updateCluster(ContentCluster cluster, SlobrokListener listener); /** * Returns whether the lookup instance has been able to bootstrap itself with information about nodes. diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/NodeStateGatherer.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/NodeStateGatherer.java index cb22271b401..69e97de84f9 100644 --- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/NodeStateGatherer.java +++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/NodeStateGatherer.java @@ -7,7 +7,7 @@ import java.util.logging.Level; import com.yahoo.vdslib.state.NodeState; import com.yahoo.vdslib.state.State; import com.yahoo.vespa.clustercontroller.core.hostinfo.HostInfo; -import com.yahoo.vespa.clustercontroller.core.listeners.NodeStateOrHostInfoChangeHandler; +import com.yahoo.vespa.clustercontroller.core.listeners.NodeListener; import java.util.LinkedList; import java.util.List; @@ -54,7 +54,7 @@ public class NodeStateGatherer { * Sends state requests to nodes that does not have one pending and is due * for another attempt. */ - public boolean sendMessages(ContentCluster cluster, Communicator communicator, NodeStateOrHostInfoChangeHandler listener) { + public boolean sendMessages(ContentCluster cluster, Communicator communicator, NodeListener listener) { boolean sentAnyMessages = false; long currentTime = timer.getCurrentTimeInMillis(); for (NodeInfo info : cluster.getNodeInfos()) { @@ -93,7 +93,7 @@ public class NodeStateGatherer { } /** Reads replies to get node state requests and create events. */ - public boolean processResponses(NodeStateOrHostInfoChangeHandler listener) { + public boolean processResponses(NodeListener listener) { boolean processedAnyResponses = false; long currentTime = timer.getCurrentTimeInMillis(); synchronized(monitor) { diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/RemoteClusterControllerTask.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/RemoteClusterControllerTask.java index 949ad6f56a2..3c2143818e3 100644 --- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/RemoteClusterControllerTask.java +++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/RemoteClusterControllerTask.java @@ -2,8 +2,8 @@ package com.yahoo.vespa.clustercontroller.core; import com.yahoo.vdslib.state.ClusterState; -import com.yahoo.vespa.clustercontroller.core.listeners.NodeAddedOrRemovedListener; -import com.yahoo.vespa.clustercontroller.core.listeners.NodeStateOrHostInfoChangeHandler; +import com.yahoo.vespa.clustercontroller.core.listeners.SlobrokListener; +import com.yahoo.vespa.clustercontroller.core.listeners.NodeListener; import java.time.Instant; import java.util.Optional; @@ -15,8 +15,8 @@ public abstract class RemoteClusterControllerTask { public ClusterState currentConsolidatedState; public ClusterStateBundle publishedClusterStateBundle; public MasterInterface masterInfo; - public NodeStateOrHostInfoChangeHandler nodeStateOrHostInfoChangeHandler; - public NodeAddedOrRemovedListener nodeAddedOrRemovedListener; + public NodeListener nodeListener; + public SlobrokListener slobrokListener; } private final Object monitor = new Object(); diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/StateChangeHandler.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/StateChangeHandler.java index 47b5b38edc8..4c832592422 100644 --- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/StateChangeHandler.java +++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/StateChangeHandler.java @@ -8,7 +8,7 @@ import com.yahoo.vdslib.state.NodeState; import com.yahoo.vdslib.state.NodeType; import com.yahoo.vdslib.state.State; import com.yahoo.vespa.clustercontroller.core.database.DatabaseHandler; -import com.yahoo.vespa.clustercontroller.core.listeners.NodeStateOrHostInfoChangeHandler; +import com.yahoo.vespa.clustercontroller.core.listeners.NodeListener; import java.util.Map; import java.util.Set; @@ -113,7 +113,7 @@ public class StateChangeHandler { public void handleNewReportedNodeState(final ClusterState currentClusterState, final NodeInfo node, final NodeState reportedState, - final NodeStateOrHostInfoChangeHandler nodeListener) + final NodeListener nodeListener) { final NodeState currentState = currentClusterState.getNodeState(node.getNode()); final Level level = (currentState.equals(reportedState) && node.getVersion() == 0) ? Level.FINEST : Level.FINE; @@ -164,7 +164,7 @@ public class StateChangeHandler { public void handleMissingNode(final ClusterState currentClusterState, final NodeInfo node, - final NodeStateOrHostInfoChangeHandler nodeListener) { + final NodeListener nodeListener) { final long timeNow = timer.getCurrentTimeInMillis(); if (node.getLatestNodeStateRequestTime() != null) { @@ -241,7 +241,7 @@ public class StateChangeHandler { // `--> this will require adding more event edges and premature crash handling to it. Which is fine. public boolean watchTimers(final ContentCluster cluster, final ClusterState currentClusterState, - final NodeStateOrHostInfoChangeHandler nodeListener) + final NodeListener nodeListener) { boolean triggeredAnyTimers = false; final long currentTime = timer.getCurrentTimeInMillis(); @@ -257,7 +257,7 @@ public class StateChangeHandler { } private boolean handleTimeDependentOpsForNode(final ClusterState currentClusterState, - final NodeStateOrHostInfoChangeHandler nodeListener, + final NodeListener nodeListener, final long currentTime, final NodeInfo node) { @@ -334,7 +334,7 @@ public class StateChangeHandler { } private boolean reportDownIfOutdatedSlobrokNode(ClusterState currentClusterState, - NodeStateOrHostInfoChangeHandler nodeListener, + NodeListener nodeListener, long currentTime, NodeInfo node, NodeState lastReportedState) @@ -379,7 +379,7 @@ public class StateChangeHandler { private void updateNodeInfoFromReportedState(final NodeInfo node, final NodeState currentState, final NodeState reportedState, - final NodeStateOrHostInfoChangeHandler nodeListener) { + final NodeListener nodeListener) { final long timeNow = timer.getCurrentTimeInMillis(); log.log(Level.FINE, () -> String.format("Finding new cluster state entry for %s switching state %s", node, currentState.getTextualDifference(reportedState))); @@ -400,7 +400,7 @@ public class StateChangeHandler { private void markNodeUnstableIfDownEdgeDuringInit(final NodeInfo node, final NodeState currentState, final NodeState reportedState, - final NodeStateOrHostInfoChangeHandler nodeListener, + final NodeListener nodeListener, final long timeNow) { if (currentState.getState().equals(State.INITIALIZING) && reportedState.getState().oneOf("ds") @@ -419,7 +419,7 @@ public class StateChangeHandler { private boolean handleImplicitCrashEdgeFromReverseInitProgress(final NodeInfo node, final NodeState currentState, final NodeState reportedState, - final NodeStateOrHostInfoChangeHandler nodeListener, + final NodeListener nodeListener, final long timeNow) { if (currentState.getState().equals(State.INITIALIZING) && (reportedState.getState().equals(State.INITIALIZING) && reportedState.getInitProgress() < currentState.getInitProgress())) @@ -438,7 +438,7 @@ public class StateChangeHandler { } private boolean handleReportedNodeCrashEdge(NodeInfo node, NodeState currentState, - NodeState reportedState, NodeStateOrHostInfoChangeHandler nodeListener, + NodeState reportedState, NodeListener nodeListener, long timeNow) { if (nodeUpToDownEdge(node, currentState, reportedState)) { node.setTransitionTime(timeNow); @@ -467,7 +467,7 @@ public class StateChangeHandler { && (node.getWantedState().getState().equals(State.RETIRED) || !reportedState.getState().equals(State.INITIALIZING)); } - private boolean handlePrematureCrash(NodeInfo node, NodeStateOrHostInfoChangeHandler changeListener) { + private boolean handlePrematureCrash(NodeInfo node, NodeListener changeListener) { node.setPrematureCrashCount(node.getPrematureCrashCount() + 1); if (disableUnstableNodes && node.getPrematureCrashCount() > maxPrematureCrashes) { NodeState wantedState = new NodeState(node.getNode().getType(), State.DOWN) diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/database/DatabaseHandler.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/database/DatabaseHandler.java index 9a528baf875..01b8ed48c80 100644 --- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/database/DatabaseHandler.java +++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/database/DatabaseHandler.java @@ -10,8 +10,8 @@ import com.yahoo.vespa.clustercontroller.core.FleetControllerContext; import com.yahoo.vespa.clustercontroller.core.FleetController; import com.yahoo.vespa.clustercontroller.core.NodeInfo; import com.yahoo.vespa.clustercontroller.core.Timer; -import com.yahoo.vespa.clustercontroller.core.listeners.NodeAddedOrRemovedListener; -import com.yahoo.vespa.clustercontroller.core.listeners.NodeStateOrHostInfoChangeHandler; +import com.yahoo.vespa.clustercontroller.core.listeners.SlobrokListener; +import com.yahoo.vespa.clustercontroller.core.listeners.NodeListener; import org.apache.zookeeper.KeeperException; import java.io.PrintWriter; @@ -32,8 +32,8 @@ public class DatabaseHandler { public interface DatabaseContext { ContentCluster getCluster(); FleetController getFleetController(); - NodeAddedOrRemovedListener getNodeAddedOrRemovedListener(); - NodeStateOrHostInfoChangeHandler getNodeStateUpdateListener(); + SlobrokListener getNodeAddedOrRemovedListener(); + NodeListener getNodeStateUpdateListener(); } private static class Data { @@ -425,7 +425,7 @@ public class DatabaseHandler { } } - public void saveWantedStates(DatabaseContext databaseContext) { + public boolean saveWantedStates(DatabaseContext databaseContext) { fleetControllerContext.log(logger, Level.FINE, () -> "Checking whether wanted states have changed compared to zookeeper version."); Map<Node, NodeState> wantedStates = new TreeMap<>(); for (NodeInfo info : databaseContext.getCluster().getNodeInfos()) { @@ -443,6 +443,9 @@ public class DatabaseHandler { fleetControllerContext.log(logger, Level.FINE, () -> "Scheduling new wanted states to be stored into zookeeper."); pendingStore.wantedStates = wantedStates; doNextZooKeeperTask(databaseContext); + return true; + } else { + return false; } } @@ -465,7 +468,11 @@ public class DatabaseHandler { boolean altered = false; for (Node node : wantedStates.keySet()) { NodeInfo nodeInfo = databaseContext.getCluster().getNodeInfo(node); - if (nodeInfo == null) continue; // ignore wanted state of nodes which doesn't exist + if (nodeInfo == null) { + databaseContext.getNodeStateUpdateListener().handleRemovedNode(node); + altered = true; + continue; + } NodeState wantedState = wantedStates.get(node); if ( ! nodeInfo.getUserWantedState().equals(wantedState)) { nodeInfo.setWantedState(wantedState); diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/listeners/NodeListener.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/listeners/NodeListener.java new file mode 100644 index 00000000000..351b68b3b57 --- /dev/null +++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/listeners/NodeListener.java @@ -0,0 +1,25 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.clustercontroller.core.listeners; + +import com.yahoo.vdslib.state.Node; +import com.yahoo.vdslib.state.NodeState; +import com.yahoo.vespa.clustercontroller.core.NodeInfo; +import com.yahoo.vespa.clustercontroller.core.hostinfo.HostInfo; + +/** + * Implemented by classes wanting events when there are node changes. + */ +public interface NodeListener { + + default void handleNewNodeState(NodeInfo currentInfo, NodeState newState) {} + default void handleNewWantedNodeState(NodeInfo node, NodeState newState) {} + + /** Invoked after NodeInfo has been removed from the content cluster. */ + default void handleRemovedNode(Node node) {} + + /** + * For every getnodestate RPC call, handleUpdatedHostInfo() will be called with the host info JSON string. + */ + default void handleUpdatedHostInfo(NodeInfo node, HostInfo newHostInfo) {} + +} diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/listeners/NodeStateOrHostInfoChangeHandler.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/listeners/NodeStateOrHostInfoChangeHandler.java deleted file mode 100644 index b76b46b216b..00000000000 --- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/listeners/NodeStateOrHostInfoChangeHandler.java +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.clustercontroller.core.listeners; - -import com.yahoo.vdslib.state.NodeState; -import com.yahoo.vespa.clustercontroller.core.NodeInfo; -import com.yahoo.vespa.clustercontroller.core.hostinfo.HostInfo; - -/** - * Implemented by classes wanting events when node states changes. - */ -public interface NodeStateOrHostInfoChangeHandler { - - void handleNewNodeState(NodeInfo currentInfo, NodeState newState); - void handleNewWantedNodeState(NodeInfo node, NodeState newState); - - /** - * For every getnodestate RPC call, handleUpdatedHostInfo() will be called with the host info JSON string. - */ - void handleUpdatedHostInfo(NodeInfo node, HostInfo newHostInfo); - -} diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/listeners/NodeAddedOrRemovedListener.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/listeners/SlobrokListener.java index d811708c999..5a397cc4935 100644 --- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/listeners/NodeAddedOrRemovedListener.java +++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/listeners/SlobrokListener.java @@ -4,9 +4,9 @@ package com.yahoo.vespa.clustercontroller.core.listeners; import com.yahoo.vespa.clustercontroller.core.NodeInfo; /** - * Listeners for new nodes detected. + * Implemented by classes that wants to be notified of Slobrok events. */ -public interface NodeAddedOrRemovedListener { +public interface SlobrokListener { void handleNewNode(NodeInfo node); void handleMissingNode(NodeInfo node); void handleNewRpcAddress(NodeInfo node); diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/requests/SetNodeStateRequest.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/requests/SetNodeStateRequest.java index 431c207af5c..ddbda2bf776 100644 --- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/requests/SetNodeStateRequest.java +++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/requests/SetNodeStateRequest.java @@ -11,7 +11,7 @@ import com.yahoo.vespa.clustercontroller.core.ContentCluster; import com.yahoo.vespa.clustercontroller.core.NodeInfo; import com.yahoo.vespa.clustercontroller.core.NodeStateChangeChecker; import com.yahoo.vespa.clustercontroller.core.RemoteClusterControllerTask; -import com.yahoo.vespa.clustercontroller.core.listeners.NodeStateOrHostInfoChangeHandler; +import com.yahoo.vespa.clustercontroller.core.listeners.NodeListener; import com.yahoo.vespa.clustercontroller.core.restapiv2.Id; import com.yahoo.vespa.clustercontroller.core.restapiv2.MissingIdException; import com.yahoo.vespa.clustercontroller.core.restapiv2.Request; @@ -62,7 +62,7 @@ public class SetNodeStateRequest extends Request<SetResponse> { condition, newStates, id.getNode(), - context.nodeStateOrHostInfoChangeHandler, + context.nodeListener, context.currentConsolidatedState, context.masterInfo.inMasterMoratorium(), probe); @@ -112,7 +112,7 @@ public class SetNodeStateRequest extends Request<SetResponse> { SetUnitStateRequest.Condition condition, Map<String, UnitState> newStates, Node node, - NodeStateOrHostInfoChangeHandler stateListener, + NodeListener stateListener, ClusterState currentClusterState, boolean inMasterMoratorium, boolean probe) throws StateRestApiException { @@ -159,7 +159,7 @@ public class SetNodeStateRequest extends Request<SetResponse> { SetUnitStateRequest.Condition condition, NodeInfo nodeInfo, ContentCluster cluster, - NodeStateOrHostInfoChangeHandler stateListener, + NodeListener stateListener, boolean probe) { if (result.settingWantedStateIsAllowed()) { setNewWantedState(nodeInfo, newWantedState, stateListener, probe); @@ -186,7 +186,7 @@ public class SetNodeStateRequest extends Request<SetResponse> { private static void setDistributorWantedState(ContentCluster cluster, int index, NodeState newStorageWantedState, - NodeStateOrHostInfoChangeHandler stateListener, + NodeListener stateListener, boolean probe) { Node distributorNode = new Node(NodeType.DISTRIBUTOR, index); NodeInfo nodeInfo = cluster.getNodeInfo(distributorNode); @@ -224,7 +224,7 @@ public class SetNodeStateRequest extends Request<SetResponse> { private static void setNewWantedState(NodeInfo nodeInfo, NodeState newWantedState, - NodeStateOrHostInfoChangeHandler stateListener, + NodeListener stateListener, boolean probe) { if (probe) return; nodeInfo.setWantedState(newWantedState); diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/requests/SetNodeStatesForClusterRequest.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/requests/SetNodeStatesForClusterRequest.java index 55ac75957bc..1cc8f2860c6 100644 --- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/requests/SetNodeStatesForClusterRequest.java +++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/requests/SetNodeStatesForClusterRequest.java @@ -70,7 +70,7 @@ public class SetNodeStatesForClusterRequest extends Request<SetResponse> { condition, newStates, node, - context.nodeStateOrHostInfoChangeHandler, + context.nodeListener, context.currentConsolidatedState, context.masterInfo.inMasterMoratorium(), probe); diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/requests/WantedStateSetter.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/requests/WantedStateSetter.java index 8095d37d641..51b2f1cfe4f 100644 --- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/requests/WantedStateSetter.java +++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/restapiv2/requests/WantedStateSetter.java @@ -4,7 +4,7 @@ package com.yahoo.vespa.clustercontroller.core.restapiv2.requests; import com.yahoo.vdslib.state.ClusterState; import com.yahoo.vdslib.state.Node; import com.yahoo.vespa.clustercontroller.core.ContentCluster; -import com.yahoo.vespa.clustercontroller.core.listeners.NodeStateOrHostInfoChangeHandler; +import com.yahoo.vespa.clustercontroller.core.listeners.NodeListener; import com.yahoo.vespa.clustercontroller.utils.staterestapi.errors.StateRestApiException; import com.yahoo.vespa.clustercontroller.utils.staterestapi.requests.SetUnitStateRequest; import com.yahoo.vespa.clustercontroller.utils.staterestapi.response.SetResponse; @@ -21,7 +21,7 @@ public interface WantedStateSetter { SetUnitStateRequest.Condition condition, Map<String, UnitState> newStates, Node node, - NodeStateOrHostInfoChangeHandler stateListener, + NodeListener stateListener, ClusterState currentClusterState, boolean inMasterMoratorium, boolean probe) throws StateRestApiException; diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/RpcServer.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/RpcServer.java index 60cd3c06893..6e416ce4906 100644 --- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/RpcServer.java +++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/RpcServer.java @@ -27,8 +27,8 @@ import com.yahoo.vespa.clustercontroller.core.ContentCluster; import com.yahoo.vespa.clustercontroller.core.MasterElectionHandler; import com.yahoo.vespa.clustercontroller.core.NodeInfo; import com.yahoo.vespa.clustercontroller.core.Timer; -import com.yahoo.vespa.clustercontroller.core.listeners.NodeAddedOrRemovedListener; -import com.yahoo.vespa.clustercontroller.core.listeners.NodeStateOrHostInfoChangeHandler; +import com.yahoo.vespa.clustercontroller.core.listeners.SlobrokListener; +import com.yahoo.vespa.clustercontroller.core.listeners.NodeListener; import java.io.PrintWriter; import java.io.StringWriter; @@ -186,8 +186,8 @@ public class RpcServer { } public boolean handleRpcRequests(ContentCluster cluster, ClusterState systemState, - NodeStateOrHostInfoChangeHandler changeListener, - NodeAddedOrRemovedListener addedListener) + NodeListener changeListener, + SlobrokListener addedListener) { boolean handledAnyRequests = false; if (!isConnected()) { diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/SlobrokClient.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/SlobrokClient.java index 589e9b25e54..c88bf71af09 100644 --- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/SlobrokClient.java +++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/SlobrokClient.java @@ -13,7 +13,7 @@ import com.yahoo.vespa.clustercontroller.core.FleetControllerContext; import com.yahoo.vespa.clustercontroller.core.NodeInfo; import com.yahoo.vespa.clustercontroller.core.NodeLookup; import com.yahoo.vespa.clustercontroller.core.Timer; -import com.yahoo.vespa.clustercontroller.core.listeners.NodeAddedOrRemovedListener; +import com.yahoo.vespa.clustercontroller.core.listeners.SlobrokListener; import java.util.Iterator; import java.util.LinkedList; @@ -78,7 +78,7 @@ public class SlobrokClient implements NodeLookup { } @Override - public boolean updateCluster(ContentCluster cluster, NodeAddedOrRemovedListener listener) { + public boolean updateCluster(ContentCluster cluster, SlobrokListener listener) { if (mirror == null) return false; int mirrorVersion = mirror.updates(); if (freshMirror) { |