diff options
author | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-06-15 23:09:44 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-06-15 23:09:44 +0200 |
commit | 72231250ed81e10d66bfe70701e64fa5fe50f712 (patch) | |
tree | 2728bba1131a6f6e5bdf95afec7d7ff9358dac50 /clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/DummyCommunicator.java |
Publish
Diffstat (limited to 'clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/DummyCommunicator.java')
-rw-r--r-- | clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/DummyCommunicator.java | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/DummyCommunicator.java b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/DummyCommunicator.java new file mode 100644 index 00000000000..11b685d3f84 --- /dev/null +++ b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/DummyCommunicator.java @@ -0,0 +1,114 @@ +// Copyright 2016 Yahoo Inc. 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.vdslib.state.ClusterState; +import com.yahoo.vdslib.state.Node; +import com.yahoo.vdslib.state.NodeState; +import com.yahoo.vdslib.state.State; +import com.yahoo.vespa.clustercontroller.core.listeners.NodeAddedOrRemovedListener; + +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +public class DummyCommunicator implements Communicator, NodeLookup { + + List<Node> newNodes; + Timer timer; + + public class DummyGetNodeStateRequest extends GetNodeStateRequest { + Waiter<GetNodeStateRequest> waiter; + + public DummyGetNodeStateRequest(NodeInfo nodeInfo, Waiter<GetNodeStateRequest> waiter) { + super(nodeInfo); + + this.waiter = waiter; + } + + @Override + public void abort() { + + } + } + + public class DummySetClusterStateRequest extends SetClusterStateRequest { + + public DummySetClusterStateRequest(NodeInfo nodeInfo, ClusterState state) { + super(nodeInfo, state.getVersion()); + } + + } + + private Map<Node, DummyGetNodeStateRequest> getNodeStateRequests = new TreeMap<>(); + + public DummyCommunicator(List<Node> nodeList, Timer timer) { + this.newNodes = nodeList; + this.timer = timer; + } + + @Override + public synchronized void getNodeState(NodeInfo node, Waiter<GetNodeStateRequest> waiter) { + DummyGetNodeStateRequest req = new DummyGetNodeStateRequest(node, waiter); + getNodeStateRequests.put(node.getNode(), req); + node.setCurrentNodeStateRequest(req, timer.getCurrentTimeInMillis()); + notifyAll(); + } + + public void propagateOptions(final FleetControllerOptions options) { + + } + + public boolean setNodeState(Node node, State state, String description) throws Exception { + return setNodeState(node, new NodeState(node.getType(), state).setDescription(description), ""); + } + + public boolean setNodeState(Node node, NodeState state, String hostInfo) throws Exception { + DummyGetNodeStateRequest req = getNodeStateRequests.remove(node); + + if (req == null) { + throw new IllegalStateException("Premature set node state - wait for fleet controller to request first: " + node); + } + + GetNodeStateRequest.Reply reply = new GetNodeStateRequest.Reply(state.serialize(), hostInfo); + req.setReply(reply); + + req.waiter.done(req); + + return true; + } + + @Override + public void setSystemState(ClusterState state, NodeInfo node, Waiter<SetClusterStateRequest> waiter) { + DummySetClusterStateRequest req = new DummySetClusterStateRequest(node, state); + node.setSystemStateVersionSent(state); + req.setReply(new SetClusterStateRequest.Reply()); + waiter.done(req); + } + + @Override + public void shutdown() { + } + + @Override + public boolean updateCluster(ContentCluster cluster, NodeAddedOrRemovedListener listener) { + if (newNodes != null) { + List<Node> tmp = newNodes; + + for (Node node : tmp) + cluster.clusterInfo().setRpcAddress(node, "foo"); + + for (NodeInfo info : cluster.getNodeInfo()) { + if (!tmp.contains(info.getNode())) { + info.markRpcAddressOutdated(timer); + listener.handleMissingNode(info); + } + } + + newNodes = null; + return true; + } + + return false; + } + +} |