aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Musum <musum@yahooinc.com>2022-09-05 09:39:27 +0200
committerHarald Musum <musum@yahooinc.com>2022-09-05 09:39:27 +0200
commit6bce84a6c373670fc923624096524f9892f9b165 (patch)
tree6ff5115af9ef0c5af3e7311355690540fa2ac7ca
parentd2b97d2d8a546476d51ce8a6351c1bb1accb4716 (diff)
Remove support for 'setsystemstate2' RPC method in cluster controller
-rw-r--r--clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/NodeInfo.java26
-rw-r--r--clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/RPCCommunicator.java32
-rw-r--r--clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/RPCGetNodeStateWaiter.java13
-rw-r--r--clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/RPCSetClusterStateWaiter.java8
-rw-r--r--clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/DistributionBitCountTest.java2
-rw-r--r--clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/DummyVdsNode.java125
-rw-r--r--clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/DummyVdsNodeOptions.java18
-rw-r--r--clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/FleetControllerTest.java26
-rw-r--r--clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/GroupAutoTakedownLiveConfigTest.java2
-rw-r--r--clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/NodeSlobrokConfigurationMembershipTest.java4
-rw-r--r--clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/RpcServerTest.java16
-rw-r--r--clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/RpcVersionAutoDowngradeTest.java46
-rw-r--r--clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/StateChangeTest.java4
-rw-r--r--clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/StateGatherTest.java5
-rw-r--r--clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/rpc/RPCCommunicatorTest.java27
-rw-r--r--clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/testutils/WaitCondition.java2
16 files changed, 65 insertions, 291 deletions
diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/NodeInfo.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/NodeInfo.java
index 746432f1d38..3f1a7ab5d7b 100644
--- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/NodeInfo.java
+++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/NodeInfo.java
@@ -98,9 +98,6 @@ abstract public class NodeInfo implements Comparable<NodeInfo> {
private int prematureCrashCount = 0;
- /** Remember last time we adjusted version, such that if we had multiple requests pending when we did, we can avoid printing error right after. */
- private long adjustedVersionTime = 0;
-
private HostInfo hostInfo = HostInfo.createHostInfo("{}");
private Group group;
@@ -382,29 +379,6 @@ abstract public class NodeInfo implements Comparable<NodeInfo> {
return nextAttemptTime;
}
- /** @return True if we demoted communication version so this can be valid error. */
- public boolean notifyNoSuchMethodError(String methodName, Timer timer) {
- if (methodName.equals(RPCCommunicator.SET_DISTRIBUTION_STATES_RPC_METHOD_NAME)) {
- if (version == RPCCommunicator.SET_DISTRIBUTION_STATES_RPC_VERSION) {
- downgradeToRpcVersion(RPCCommunicator.LEGACY_SET_SYSTEM_STATE2_RPC_VERSION, methodName, timer);
- return true;
- } else if (timer.getCurrentTimeInMillis() - 2000 < adjustedVersionTime) {
- log.log(Level.FINE, () -> "Node " + toString() + " does not support " + methodName + " call. Version already downgraded, so ignoring it.");
- return true;
- }
- }
- log.log(Level.WARNING, "Node " + toString() + " does not support " + methodName + " which it should.");
- return false;
- }
-
- private void downgradeToRpcVersion(int newVersion, String methodName, Timer timer) {
- log.log(Level.FINE, () -> String.format("Node %s does not support %s call. Downgrading to version %d.",
- toString(), methodName, newVersion));
- version = newVersion;
- nextAttemptTime = 0;
- adjustedVersionTime = timer.getCurrentTimeInMillis();
- }
-
public Target getConnection() {
return connection;
}
diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/RPCCommunicator.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/RPCCommunicator.java
index 3738a17f4b6..58bbd03044f 100644
--- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/RPCCommunicator.java
+++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/RPCCommunicator.java
@@ -37,15 +37,18 @@ public class RPCCommunicator implements Communicator {
public static final Logger log = Logger.getLogger(RPCCommunicator.class.getName());
+ // Rpc method versions and Vespa versions which supports each version:
+ // 0 - 4.1
+ // 1 - 4.2-5.0.10
+ // 2 - 5.0.11-8.48.3
+ // 3 - 6.220+
+ // 4 - 7.24+
public static final int ACTIVATE_CLUSTER_STATE_VERSION_RPC_VERSION = 4;
public static final String ACTIVATE_CLUSTER_STATE_VERSION_RPC_METHOD_NAME = "activate_cluster_state_version";
public static final int SET_DISTRIBUTION_STATES_RPC_VERSION = 3;
public static final String SET_DISTRIBUTION_STATES_RPC_METHOD_NAME = "setdistributionstates";
- public static final int LEGACY_SET_SYSTEM_STATE2_RPC_VERSION = 2;
- public static final String LEGACY_SET_SYSTEM_STATE2_RPC_METHOD_NAME = "setsystemstate2";
-
private final Timer timer;
private final Supervisor supervisor;
private Duration nodeStateRequestTimeoutIntervalMax;
@@ -121,7 +124,7 @@ public class RPCCommunicator implements Communicator {
req.parameters().add(new Int32Value(fleetControllerIndex));
RPCGetNodeStateRequest stateRequest = new RPCGetNodeStateRequest(node, req);
- RPCGetNodeStateWaiter waiter = new RPCGetNodeStateWaiter(stateRequest, externalWaiter, timer);
+ RPCGetNodeStateWaiter waiter = new RPCGetNodeStateWaiter(stateRequest, externalWaiter);
Duration requestTimeout = nodeStateRequestTimeoutIntervalMax.plus(nodeStateRequestRoundTripTimeMax);
@@ -140,20 +143,13 @@ public class RPCCommunicator implements Communicator {
log.log(Level.FINE, () -> String.format("Connection to '%s' could not be created.", node.getRpcAddress()));
return;
}
- int nodeVersion = node.getVersion();
- Request req;
- if (nodeVersion <= 2) {
- req = new Request(LEGACY_SET_SYSTEM_STATE2_RPC_METHOD_NAME);
- req.parameters().add(new StringValue(baselineState.toString(false)));
- } else {
- req = new Request(SET_DISTRIBUTION_STATES_RPC_METHOD_NAME);
- SlimeClusterStateBundleCodec codec = new SlimeClusterStateBundleCodec();
- EncodedClusterStateBundle encodedBundle = codec.encode(stateBundle);
- Values v = req.parameters();
- v.add(new Int8Value(encodedBundle.getCompression().type().getCode()));
- v.add(new Int32Value(encodedBundle.getCompression().uncompressedSize()));
- v.add(new DataValue(encodedBundle.getCompression().data()));
- }
+ Request req = new Request(SET_DISTRIBUTION_STATES_RPC_METHOD_NAME);
+ SlimeClusterStateBundleCodec codec = new SlimeClusterStateBundleCodec();
+ EncodedClusterStateBundle encodedBundle = codec.encode(stateBundle);
+ Values v = req.parameters();
+ v.add(new Int8Value(encodedBundle.getCompression().type().getCode()));
+ v.add(new Int32Value(encodedBundle.getCompression().uncompressedSize()));
+ v.add(new DataValue(encodedBundle.getCompression().data()));
log.log(Level.FINE, () -> String.format("Sending '%s' RPC to %s for state version %d",
req.methodName(), node.getRpcAddress(), stateBundle.getVersion()));
diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/RPCGetNodeStateWaiter.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/RPCGetNodeStateWaiter.java
index 5f77e831918..74ce1668b2b 100644
--- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/RPCGetNodeStateWaiter.java
+++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/RPCGetNodeStateWaiter.java
@@ -6,7 +6,6 @@ import com.yahoo.jrt.Request;
import com.yahoo.jrt.RequestWaiter;
import com.yahoo.vespa.clustercontroller.core.Communicator;
import com.yahoo.vespa.clustercontroller.core.GetNodeStateRequest;
-import com.yahoo.vespa.clustercontroller.core.Timer;
/**
* Handles the reply to a get node state request to a node.
@@ -15,23 +14,13 @@ public class RPCGetNodeStateWaiter implements RequestWaiter {
private final RPCGetNodeStateRequest request;
private final Communicator.Waiter<GetNodeStateRequest> waiter;
- private final Timer timer;
- public RPCGetNodeStateWaiter(RPCGetNodeStateRequest request,
- Communicator.Waiter<GetNodeStateRequest> waiter, Timer timer) {
+ public RPCGetNodeStateWaiter(RPCGetNodeStateRequest request, Communicator.Waiter<GetNodeStateRequest> waiter) {
this.request = request;
this.waiter = waiter;
- this.timer = timer;
}
private GetNodeStateRequest.Reply convertToReply(Request req) {
- if (req.errorCode() == ErrorCode.NO_SUCH_METHOD) {
- // If we get no such method error, and we downgrade version, we must retry. May be ok that it doesn't exist
- if (request.getNodeInfo().notifyNoSuchMethodError(req.methodName(), timer)) {
- return new GetNodeStateRequest.Reply(Communicator.TRANSIENT_ERROR, "Downgrading version");
- }
- }
-
if (req.isError()) {
return new GetNodeStateRequest.Reply(req.errorCode(), req.errorMessage());
}
diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/RPCSetClusterStateWaiter.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/RPCSetClusterStateWaiter.java
index 89f37173701..41fc7f67fbb 100644
--- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/RPCSetClusterStateWaiter.java
+++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/RPCSetClusterStateWaiter.java
@@ -30,13 +30,7 @@ public class RPCSetClusterStateWaiter implements RequestWaiter {
public SetClusterStateRequest.Reply getReply(Request req) {
NodeInfo info = request.getNodeInfo();
- if (req.methodName().equals(RPCCommunicator.SET_DISTRIBUTION_STATES_RPC_METHOD_NAME)
- || req.methodName().equals(RPCCommunicator.LEGACY_SET_SYSTEM_STATE2_RPC_METHOD_NAME)) {
- if (req.isError() && req.errorCode() == ErrorCode.NO_SUCH_METHOD) {
- if (info.notifyNoSuchMethodError(req.methodName(), timer)) {
- return new SetClusterStateRequest.Reply(Communicator.TRANSIENT_ERROR, "Trying lower version");
- }
- }
+ if (req.methodName().equals(RPCCommunicator.SET_DISTRIBUTION_STATES_RPC_METHOD_NAME)) {
if (req.isError()) {
return new SetClusterStateRequest.Reply(req.errorCode(), req.errorMessage());
} else if (!req.checkReturnTypes("")) {
diff --git a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/DistributionBitCountTest.java b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/DistributionBitCountTest.java
index 0f2e2e23492..f7e376c419d 100644
--- a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/DistributionBitCountTest.java
+++ b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/DistributionBitCountTest.java
@@ -26,7 +26,7 @@ public class DistributionBitCountTest extends FleetControllerTest {
builder.setDistributionBits(17);
setUpFleetController(false, builder);
startingTest(testName);
- List<DummyVdsNode> nodes = setUpVdsNodes(false, new DummyVdsNodeOptions(), true, configuredNodes);
+ List<DummyVdsNode> nodes = setUpVdsNodes(false, true, configuredNodes);
for (DummyVdsNode node : nodes) {
node.setNodeState(new NodeState(node.getType(), State.UP).setMinUsedBits(20));
node.connect();
diff --git a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/DummyVdsNode.java b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/DummyVdsNode.java
index fbaf41fdd47..5981c2a1cf6 100644
--- a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/DummyVdsNode.java
+++ b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/DummyVdsNode.java
@@ -33,8 +33,6 @@ import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Collectors;
-import static ai.vespa.validation.Validation.requireAtLeast;
-
/**
*
* Used to fake a node in VDS, such that we can test the fleetcontroller without dummy interface for talking to
@@ -53,8 +51,6 @@ public class DummyVdsNode {
private Supervisor supervisor;
private Acceptor acceptor;
private Register register;
- private final int stateCommunicationVersion;
- private boolean negotiatedHandle = false;
private final Timer timer;
private boolean failSetSystemStateRequests = false;
private boolean resetTimestampOnReconnect = false;
@@ -120,7 +116,7 @@ public class DummyVdsNode {
}
};
- public DummyVdsNode(Timer timer, DummyVdsNodeOptions options, String[] slobrokConnectionSpecs, String clusterName,
+ public DummyVdsNode(Timer timer, String[] slobrokConnectionSpecs, String clusterName,
NodeType nodeType, int index) throws Exception {
this.timer = timer;
this.slobrokConnectionSpecs = slobrokConnectionSpecs;
@@ -128,7 +124,6 @@ public class DummyVdsNode {
type = nodeType;
this.index = index;
this.nodeState = new NodeState(type, State.UP);
- this.stateCommunicationVersion = requireAtLeast(options.stateCommunicationVersion, "state communication version cannot be less than 2", 2);
messageResponder.start();
nodeState.setStartTimestamp(timer.getCurrentTimeInMillis() / 1000);
}
@@ -154,7 +149,6 @@ public class DummyVdsNode {
slist.setup(slobrokConnectionSpecs);
register = new Register(supervisor, slist, new Spec("localhost", acceptor.port()), new BackOff());
registerSlobrok();
- negotiatedHandle = false;
return acceptor.port();
}
@@ -197,8 +191,6 @@ public class DummyVdsNode {
return new Node(type, index);
}
- public int getStateCommunicationVersion() { return stateCommunicationVersion; }
-
void waitForSystemStateVersion(int version, Duration timeout) {
try {
Instant endTime = Instant.now().plus(timeout);
@@ -302,58 +294,32 @@ public class DummyVdsNode {
m.returnDesc(0, "returnCode", "Returncode of request. Should be 0 = OK");
supervisor.addMethod(m);
- m = new Method("setsystemstate", "s", "is", this::rpc_setSystemState);
- m.methodDesc("Set system state of entire system");
- m.paramDesc(0, "systemState", "new systemstate");
- m.returnDesc(0, "returnCode", "Returncode of request. Should be 1 = OK");
- m.returnDesc(1, "returnMessage", "Textual error message if returncode is not ok.");
+ m = new Method("getnodestate3", "sii", "ss", this::rpc_getNodeState2);
+ m.methodDesc("Get nodeState of a node, answer when state changes from given state.");
+ m.paramDesc(0, "nodeStateIn", "The node state of the given node");
+ m.paramDesc(1, "timeout", "Time timeout in milliseconds set by the state requester.");
+ m.returnDesc(0, "nodeStateOut", "The node state of the given node");
+ m.returnDesc(1, "hostinfo", "Information on the host node is running on");
supervisor.addMethod(m);
- if (stateCommunicationVersion > 0) {
- m = new Method("getnodestate2", "si", "s", this::rpc_getNodeState2);
- m.methodDesc("Get nodeState of a node, answer when state changes from given state.");
- m.paramDesc(0, "nodeStateIn", "The node state of the given node");
- m.paramDesc(1, "timeout", "Time timeout in milliseconds set by the state requester.");
- m.returnDesc(0, "nodeStateOut", "The node state of the given node");
- supervisor.addMethod(m);
-
- m = new Method("setsystemstate2", "s", "", this::rpc_setSystemState2);
- m.methodDesc("Set system state of entire system");
- m.paramDesc(0, "systemState", "new systemstate");
- supervisor.addMethod(m);
-
- if (stateCommunicationVersion > 1) {
- m = new Method("getnodestate3", "sii", "ss", this::rpc_getNodeState2);
- m.methodDesc("Get nodeState of a node, answer when state changes from given state.");
- m.paramDesc(0, "nodeStateIn", "The node state of the given node");
- m.paramDesc(1, "timeout", "Time timeout in milliseconds set by the state requester.");
- m.returnDesc(0, "nodeStateOut", "The node state of the given node");
- m.returnDesc(1, "hostinfo", "Information on the host node is running on");
- supervisor.addMethod(m);
- }
- }
- if (stateCommunicationVersion >= RPCCommunicator.SET_DISTRIBUTION_STATES_RPC_VERSION) {
- m = new Method(RPCCommunicator.SET_DISTRIBUTION_STATES_RPC_METHOD_NAME, "bix", "", this::rpc_setDistributionStates);
- m.methodDesc("Set distribution states for cluster and bucket spaces");
- m.paramDesc(0, "compressionType", "Compression type for payload");
- m.paramDesc(1, "uncompressedSize", "Uncompressed size of payload");
- m.paramDesc(2, "payload", "Slime format payload");
- supervisor.addMethod(m);
- }
- if (stateCommunicationVersion >= RPCCommunicator.ACTIVATE_CLUSTER_STATE_VERSION_RPC_VERSION) {
- m = new Method(RPCCommunicator.ACTIVATE_CLUSTER_STATE_VERSION_RPC_METHOD_NAME, "i", "i", this::rpc_activateClusterStateVersion);
- m.methodDesc("Activate a given cluster state version");
- m.paramDesc(0, "stateVersion", "Cluster state version to activate");
- m.returnDesc(0, "actualVersion", "Actual cluster state version on node");
- supervisor.addMethod(m);
- }
+ m = new Method(RPCCommunicator.SET_DISTRIBUTION_STATES_RPC_METHOD_NAME, "bix", "", this::rpc_setDistributionStates);
+ m.methodDesc("Set distribution states for cluster and bucket spaces");
+ m.paramDesc(0, "compressionType", "Compression type for payload");
+ m.paramDesc(1, "uncompressedSize", "Uncompressed size of payload");
+ m.paramDesc(2, "payload", "Slime format payload");
+ supervisor.addMethod(m);
+
+ m = new Method(RPCCommunicator.ACTIVATE_CLUSTER_STATE_VERSION_RPC_METHOD_NAME, "i", "i", this::rpc_activateClusterStateVersion);
+ m.methodDesc("Activate a given cluster state version");
+ m.paramDesc(0, "stateVersion", "Cluster state version to activate");
+ m.returnDesc(0, "actualVersion", "Actual cluster state version on node");
+ supervisor.addMethod(m);
}
private void rpc_storageConnect(Request req) {
synchronized(timer) {
log.log(Level.FINEST, () -> "Dummy node " + this + " got old type handle connect message.");
req.returnValues().add(new Int32Value(0));
- negotiatedHandle = true;
}
}
@@ -437,56 +403,6 @@ public class DummyVdsNode {
}
}
- private void rpc_setSystemState(Request req) {
- try{
- if (shouldFailSetSystemStateRequests()) {
- req.setError(ErrorCode.GENERAL_ERROR, "Dummy node configured to fail setSystemState() calls");
- return;
- }
- if (!negotiatedHandle) {
- req.setError(75000, "Connection not bound to a handle");
- return;
- }
- ClusterState newState = new ClusterState(req.parameters().get(0).asString());
- synchronized(timer) {
- updateStartTimestamps(newState);
- clusterStateBundles.add(0, ClusterStateBundle.ofBaselineOnly(AnnotatedClusterState.withoutAnnotations(newState)));
- timer.notifyAll();
- }
- req.returnValues().add(new Int32Value(1));
- req.returnValues().add(new StringValue("OK"));
- log.log(Level.FINE, () -> "Dummy node " + this + ": Got new system state (through old setsystemstate call) " + newState);
- } catch (Exception e) {
- log.log(Level.SEVERE, "Dummy node " + this + ": An error occurred when answering setsystemstate request: " + e.getMessage());
- e.printStackTrace(System.err);
- req.returnValues().add(new Int32Value(ErrorCode.METHOD_FAILED));
- req.returnValues().add(new StringValue(e.getMessage()));
- }
- }
-
- private void rpc_setSystemState2(Request req) {
- try{
- if (shouldFailSetSystemStateRequests()) {
- req.setError(ErrorCode.GENERAL_ERROR, "Dummy node configured to fail setSystemState2() calls");
- return;
- }
- ClusterState newState = new ClusterState(req.parameters().get(0).asString());
- synchronized(timer) {
- updateStartTimestamps(newState);
- clusterStateBundles.add(0, ClusterStateBundle.ofBaselineOnly(AnnotatedClusterState.withoutAnnotations(newState)));
- if (stateCommunicationVersion < RPCCommunicator.ACTIVATE_CLUSTER_STATE_VERSION_RPC_VERSION) {
- activatedClusterStateVersion = newState.getVersion(); // Simulate node that does not know of activation
- }
- timer.notifyAll();
- }
- log.log(Level.FINE, () -> "Dummy node " + this + ": Got new system state " + newState);
- } catch (Exception e) {
- log.log(Level.SEVERE, "Dummy node " + this + ": An error occurred when answering setsystemstate request: " + e.getMessage());
- e.printStackTrace(System.err);
- req.setError(ErrorCode.METHOD_FAILED, e.getMessage());
- }
- }
-
private void rpc_setDistributionStates(Request req) {
try {
if (shouldFailSetSystemStateRequests()) {
@@ -497,9 +413,6 @@ public class DummyVdsNode {
synchronized(timer) {
updateStartTimestamps(stateBundle.getBaselineClusterState());
clusterStateBundles.add(0, stateBundle);
- if (stateCommunicationVersion < RPCCommunicator.ACTIVATE_CLUSTER_STATE_VERSION_RPC_VERSION) {
- activatedClusterStateVersion = stateBundle.getVersion(); // Simulate node that does not know of activation
- }
timer.notifyAll();
}
log.log(Level.FINE, () -> "Dummy node " + this + ": Got new cluster state " + stateBundle);
diff --git a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/DummyVdsNodeOptions.java b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/DummyVdsNodeOptions.java
deleted file mode 100644
index d6b5e7fa5d2..00000000000
--- a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/DummyVdsNodeOptions.java
+++ /dev/null
@@ -1,18 +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;
-
-import com.yahoo.vespa.clustercontroller.core.rpc.RPCCommunicator;
-
-/**
- * Options for simulated content nodes that are registered in Slobrok and communicate
- * over regular RPC.
- */
-public class DummyVdsNodeOptions {
- // Rpc method versions and which Vespa versions supports each version:
- // 0 - 4.1
- // 1 - 4.2-5.0.10
- // 2 - 5.0.11+
- // 3 - 6.220+
- // 4 - 7.24+
- int stateCommunicationVersion = RPCCommunicator.ACTIVATE_CLUSTER_STATE_VERSION_RPC_VERSION;
-}
diff --git a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/FleetControllerTest.java b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/FleetControllerTest.java
index bf06474a3af..2a77b4c7636 100644
--- a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/FleetControllerTest.java
+++ b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/FleetControllerTest.java
@@ -173,28 +173,28 @@ public abstract class FleetControllerTest implements Waiter {
}
protected void setUpVdsNodes(boolean useFakeTimer) throws Exception {
- setUpVdsNodes(useFakeTimer, new DummyVdsNodeOptions(), false);
+ setUpVdsNodes(useFakeTimer, false);
}
- protected void setUpVdsNodes(boolean useFakeTimer, DummyVdsNodeOptions options, boolean startDisconnected) throws Exception {
- setUpVdsNodes(useFakeTimer, options, startDisconnected, DEFAULT_NODE_COUNT);
+ protected void setUpVdsNodes(boolean useFakeTimer, boolean startDisconnected) throws Exception {
+ setUpVdsNodes(useFakeTimer, startDisconnected, DEFAULT_NODE_COUNT);
}
- protected void setUpVdsNodes(boolean useFakeTimer, DummyVdsNodeOptions options, boolean startDisconnected, int nodeCount) throws Exception {
+ protected void setUpVdsNodes(boolean useFakeTimer, boolean startDisconnected, int nodeCount) throws Exception {
TreeSet<Integer> nodeIndexes = new TreeSet<>();
for (int i = 0; i < nodeCount; ++i)
nodeIndexes.add(this.nodes.size()/2 + i); // divide by 2 because there are 2 nodes (storage and distributor) per index
- setUpVdsNodes(useFakeTimer, options, startDisconnected, nodeIndexes);
+ setUpVdsNodes(useFakeTimer, startDisconnected, nodeIndexes);
}
- protected void setUpVdsNodes(boolean useFakeTimer, DummyVdsNodeOptions nodeOptions, boolean startDisconnected, Set<Integer> nodeIndexes) throws Exception {
+ protected void setUpVdsNodes(boolean useFakeTimer, boolean startDisconnected, Set<Integer> nodeIndexes) throws Exception {
for (int nodeIndex : nodeIndexes) {
- nodes.add(createNode(useFakeTimer, nodeOptions, startDisconnected, DISTRIBUTOR, nodeIndex));
- nodes.add(createNode(useFakeTimer, nodeOptions, startDisconnected, STORAGE, nodeIndex));
+ nodes.add(createNode(useFakeTimer, startDisconnected, DISTRIBUTOR, nodeIndex));
+ nodes.add(createNode(useFakeTimer, startDisconnected, STORAGE, nodeIndex));
}
}
- private DummyVdsNode createNode(boolean useFakeTimer, DummyVdsNodeOptions nodeOptions, boolean startDisconnected,
+ private DummyVdsNode createNode(boolean useFakeTimer, boolean startDisconnected,
NodeType nodeType, int nodeIndex) throws Exception {
String[] connectionSpecs = getSlobrokConnectionSpecs(slobrok);
- DummyVdsNode node = new DummyVdsNode(useFakeTimer ? timer : new RealTimer(), nodeOptions, connectionSpecs,
+ DummyVdsNode node = new DummyVdsNode(useFakeTimer ? timer : new RealTimer(), connectionSpecs,
options.clusterName(), nodeType, nodeIndex);
if ( ! startDisconnected)
node.connect();
@@ -208,11 +208,11 @@ public abstract class FleetControllerTest implements Waiter {
* As two dummy nodes are created for each configured node - one distributor and one storage node -
* the returned list is twice as large as configuredNodes.
*/
- protected List<DummyVdsNode> setUpVdsNodes(boolean useFakeTimer, DummyVdsNodeOptions options, boolean startDisconnected, List<ConfiguredNode> configuredNodes) throws Exception {
+ protected List<DummyVdsNode> setUpVdsNodes(boolean useFakeTimer, boolean startDisconnected, List<ConfiguredNode> configuredNodes) throws Exception {
nodes = new ArrayList<>();
for (ConfiguredNode configuredNode : configuredNodes) {
- nodes.add(createNode(useFakeTimer, options, startDisconnected, DISTRIBUTOR, configuredNode.index()));
- nodes.add(createNode(useFakeTimer, options, startDisconnected, STORAGE, configuredNode.index()));
+ nodes.add(createNode(useFakeTimer, startDisconnected, DISTRIBUTOR, configuredNode.index()));
+ nodes.add(createNode(useFakeTimer, startDisconnected, STORAGE, configuredNode.index()));
}
return nodes;
}
diff --git a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/GroupAutoTakedownLiveConfigTest.java b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/GroupAutoTakedownLiveConfigTest.java
index 9a5be27da94..036d3edd2a8 100644
--- a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/GroupAutoTakedownLiveConfigTest.java
+++ b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/GroupAutoTakedownLiveConfigTest.java
@@ -42,7 +42,7 @@ public class GroupAutoTakedownLiveConfigTest extends FleetControllerTest {
private FleetControllerOptions setUp3x3ClusterWithMinNodeRatio(double minNodeRatio) throws Exception {
FleetControllerOptions.Builder options = createOptions(DistributionBuilder.withGroups(3).eachWithNodeCount(3), minNodeRatio);
setUpFleetController(true, options);
- setUpVdsNodes(true, new DummyVdsNodeOptions(), false, 9);
+ setUpVdsNodes(true, false, 9);
waitForState("version:\\d+ distributor:9 storage:9");
return options.build();
}
diff --git a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/NodeSlobrokConfigurationMembershipTest.java b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/NodeSlobrokConfigurationMembershipTest.java
index 9acaf46b144..a760adf3cf2 100644
--- a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/NodeSlobrokConfigurationMembershipTest.java
+++ b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/NodeSlobrokConfigurationMembershipTest.java
@@ -24,7 +24,7 @@ public class NodeSlobrokConfigurationMembershipTest extends FleetControllerTest
setUpFleetController(true, options);
Set<Integer> nodesWithStranger = new TreeSet<>(validIndices);
nodesWithStranger.add(foreignNodeIndex);
- setUpVdsNodes(true, new DummyVdsNodeOptions(), false, nodesWithStranger);
+ setUpVdsNodes(true, false, nodesWithStranger);
return options.build();
}
@@ -64,7 +64,7 @@ public class NodeSlobrokConfigurationMembershipTest extends FleetControllerTest
Set<ConfiguredNode> configuredNodes = asConfiguredNodes(nodeIndices);
FleetControllerOptions.Builder builder = optionsForConfiguredNodes(configuredNodes);
options = setUpFleetController(true, builder);
- setUpVdsNodes(true, new DummyVdsNodeOptions(), false, nodeIndices);
+ setUpVdsNodes(true, false, nodeIndices);
waitForState("version:\\d+ distributor:4 storage:4");
diff --git a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/RpcServerTest.java b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/RpcServerTest.java
index 63505bbd251..4b4cb348968 100644
--- a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/RpcServerTest.java
+++ b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/RpcServerTest.java
@@ -263,7 +263,7 @@ public class RpcServerTest extends FleetControllerTest {
.setMaxInitProgressTime(30000)
.setStableStateTimePeriod(60000);
setUpFleetController(true, builder);
- setUpVdsNodes(true, new DummyVdsNodeOptions(), false, configuredNodes);
+ setUpVdsNodes(true, false, configuredNodes);
waitForState("version:\\d+ distributor:5 storage:5 .4.s:r");
setWantedNodeState(State.DOWN, NodeType.DISTRIBUTOR, 2);
@@ -297,7 +297,7 @@ public class RpcServerTest extends FleetControllerTest {
.setMaxInitProgressTime(30000)
.setStableStateTimePeriod(60000);
setUpFleetController(true, builder);
- setUpVdsNodes(true, new DummyVdsNodeOptions(), false, configuredNodes);
+ setUpVdsNodes(true, false, configuredNodes);
waitForState("version:\\d+ distributor:5 storage:5");
}
@@ -311,7 +311,7 @@ public class RpcServerTest extends FleetControllerTest {
}
{ // Configuration change: Add 2 new nodes and retire the 5 existing ones
- setUpVdsNodes(true, new DummyVdsNodeOptions(), false, 2);
+ setUpVdsNodes(true, false, 2);
Set<ConfiguredNode> configuredNodes = new TreeSet<>();
for (int i = 0; i < 5; i++)
configuredNodes.add(new ConfiguredNode(i, true));
@@ -379,7 +379,7 @@ public class RpcServerTest extends FleetControllerTest {
.setStableStateTimePeriod(60000);
options = builder.build();
setUpFleetController(true, builder);
- setUpVdsNodes(true, new DummyVdsNodeOptions(), false, configuredNodes);
+ setUpVdsNodes(true, false, configuredNodes);
waitForState("version:\\d+ distributor:5 storage:5");
}
@@ -396,7 +396,7 @@ public class RpcServerTest extends FleetControllerTest {
}
{ // Configuration change: Add 2 new nodes and retire the 5 existing ones
- setUpVdsNodes(true, new DummyVdsNodeOptions(), false, 2);
+ setUpVdsNodes(true, false, 2);
Set<ConfiguredNode> configuredNodes = new TreeSet<>();
for (int i = 0; i < 5; i++)
configuredNodes.add(new ConfiguredNode(i, true));
@@ -453,7 +453,7 @@ public class RpcServerTest extends FleetControllerTest {
FleetControllerOptions.Builder options = defaultOptions("mycluster", configuredNodes);
//options.setStorageDistribution(new Distribution(getDistConfig(nodeIndexes)));
setUpFleetController(true, options);
- setUpVdsNodes(true, new DummyVdsNodeOptions(), false, nodeIndexes);
+ setUpVdsNodes(true, false, nodeIndexes);
waitForState("version:\\d+ distributor:26 .0.s:d .1.s:d .2.s:d .3.s:d .5.s:d .7.s:d .8.s:d .11.s:d .12.s:d .13.s:d .15.s:d .17.s:d .18.s:d .19.s:d .20.s:d .24.s:d storage:26 .0.s:d .1.s:d .2.s:d .3.s:d .5.s:d .7.s:d .8.s:d .11.s:d .12.s:d .13.s:d .15.s:d .17.s:d .18.s:d .19.s:d .20.s:d .24.s:d");
int rpcPort = fleetController.getRpcPort();
@@ -541,7 +541,7 @@ public class RpcServerTest extends FleetControllerTest {
startingTest("RpcServerTest::testGetNodeList");
setUpFleetController(true, defaultOptions("mycluster", 5));
final int nodeCount = 5;
- setUpVdsNodes(true, new DummyVdsNodeOptions(), false, nodeCount);
+ setUpVdsNodes(true, false, nodeCount);
waitForStableSystem();
assertTrue(nodes.get(0).isDistributor());
@@ -573,7 +573,7 @@ public class RpcServerTest extends FleetControllerTest {
continue;
}
assertNotEquals("", rpc[i]);
- Request req2 = new Request("getnodestate2");
+ Request req2 = new Request("getnodestate3");
req2.parameters().add(new StringValue("unknown"));
Target connection2 = supervisor.connect(new Spec(rpc[i]));
connection2.invokeSync(req2, timeout());
diff --git a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/RpcVersionAutoDowngradeTest.java b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/RpcVersionAutoDowngradeTest.java
deleted file mode 100644
index 3740c6de491..00000000000
--- a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/RpcVersionAutoDowngradeTest.java
+++ /dev/null
@@ -1,46 +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;
-
-import com.yahoo.vdslib.distribution.ConfiguredNode;
-import com.yahoo.vdslib.state.NodeState;
-import com.yahoo.vdslib.state.State;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@ExtendWith(CleanupZookeeperLogsOnSuccess.class)
-public class RpcVersionAutoDowngradeTest extends FleetControllerTest {
-
- private void setUpFakeCluster(int nodeRpcVersion) throws Exception {
- List<ConfiguredNode> configuredNodes = new ArrayList<>();
- for (int i = 0 ; i < 10; i++) {
- configuredNodes.add(new ConfiguredNode(i, false));
- }
- FleetControllerOptions.Builder options = defaultOptions("mycluster", configuredNodes);
- setUpFleetController(false, options);
- DummyVdsNodeOptions nodeOptions = new DummyVdsNodeOptions();
- nodeOptions.stateCommunicationVersion = nodeRpcVersion;
- List<DummyVdsNode> nodes = setUpVdsNodes(false, nodeOptions, true, configuredNodes);
- for (DummyVdsNode node : nodes) {
- node.setNodeState(new NodeState(node.getType(), State.UP).setMinUsedBits(20));
- node.connect();
- }
- }
-
- @Test
- void cluster_state_rpc_version_is_auto_downgraded_and_retried_for_older_nodes() throws Exception {
- setUpFakeCluster(2); // HEAD is at v4
- waitForState("version:\\d+ distributor:10 storage:10");
- }
-
- @Test
- void implicit_activation_for_nodes_that_return_not_found_for_version_activation_rpc() throws Exception {
- setUpFakeCluster(3); // HEAD is at v4
- waitForState("version:\\d+ distributor:10 storage:10");
- }
-
- // TODO partial version setup for simulating upgrades
-
-}
diff --git a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/StateChangeTest.java b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/StateChangeTest.java
index 7db8f47ce5b..5256c952d15 100644
--- a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/StateChangeTest.java
+++ b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/StateChangeTest.java
@@ -958,7 +958,7 @@ public class StateChangeTest extends FleetControllerTest {
builder.setMinTimeBeforeFirstSystemStateBroadcast(3 * 60 * 1000);
setUpSystem(builder);
boolean useFakeTimer = true;
- setUpVdsNodes(useFakeTimer, new DummyVdsNodeOptions(), true);
+ setUpVdsNodes(useFakeTimer, true);
// Leave one node down to avoid sending cluster state due to having seen all node states.
for (int i = 0; i < nodes.size(); ++i) {
if (i != 3) {
@@ -1006,7 +1006,7 @@ public class StateChangeTest extends FleetControllerTest {
boolean useFakeTimer = true;
setUpSystem(builder);
- setUpVdsNodes(useFakeTimer, new DummyVdsNodeOptions(), true);
+ setUpVdsNodes(useFakeTimer, true);
for (DummyVdsNode node : nodes) {
node.connect();
diff --git a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/StateGatherTest.java b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/StateGatherTest.java
index 58df1c1f5eb..796204989b9 100644
--- a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/StateGatherTest.java
+++ b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/StateGatherTest.java
@@ -37,9 +37,8 @@ public class StateGatherTest extends FleetControllerTest {
.setNodeStateRequestTimeoutLatestPercentage(80);
setUpFleetController(true, builder);
String[] connectionSpecs = getSlobrokConnectionSpecs(slobrok);
- DummyVdsNodeOptions dummyOptions = new DummyVdsNodeOptions();
- DummyVdsNode dnode = new DummyVdsNode(timer, dummyOptions, connectionSpecs, builder.clusterName(), NodeType.DISTRIBUTOR, 0);
- DummyVdsNode snode = new DummyVdsNode(timer, dummyOptions, connectionSpecs, builder.clusterName(), NodeType.STORAGE, 0);
+ DummyVdsNode dnode = new DummyVdsNode(timer, connectionSpecs, builder.clusterName(), NodeType.DISTRIBUTOR, 0);
+ DummyVdsNode snode = new DummyVdsNode(timer, connectionSpecs, builder.clusterName(), NodeType.STORAGE, 0);
dnode.connect();
snode.connect();
diff --git a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/rpc/RPCCommunicatorTest.java b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/rpc/RPCCommunicatorTest.java
index 7e0b7f6d953..b533168e61a 100644
--- a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/rpc/RPCCommunicatorTest.java
+++ b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/rpc/RPCCommunicatorTest.java
@@ -1,7 +1,6 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.clustercontroller.core.rpc;
-import com.yahoo.jrt.ErrorCode;
import com.yahoo.jrt.Request;
import com.yahoo.jrt.RequestWaiter;
import com.yahoo.jrt.Supervisor;
@@ -159,32 +158,6 @@ public class RPCCommunicatorTest {
}
@Test
- void set_distribution_states_v3_rpc_auto_downgrades_to_v2_on_unknown_method_error() {
- var f = new Fixture<SetClusterStateRequest>();
- var cf = ClusterFixture.forFlatCluster(3).bringEntireClusterUp().assignDummyRpcAddresses();
- var sentBundle = ClusterStateBundleUtil.makeBundle("version:123 distributor:3 storage:3");
- f.communicator.setSystemState(sentBundle, cf.cluster().getNodeInfo(Node.ofStorage(1)), f.mockWaiter);
-
- RequestWaiter waiter = f.receivedWaiter.get();
- assertNotNull(waiter);
- Request req = f.receivedRequest.get();
- assertNotNull(req);
-
- req.setError(ErrorCode.NO_SUCH_METHOD, "que?");
- waiter.handleRequestDone(req);
-
- // This would normally be done in processResponses(), but that code path is not invoked in this test.
- cf.cluster().getNodeInfo(Node.ofStorage(1)).setClusterStateBundleVersionAcknowledged(123, false);
-
- f.receivedRequest.set(null);
- // Now when we try again, we should have been downgraded to the legacy setsystemstate2 RPC
- f.communicator.setSystemState(sentBundle, cf.cluster().getNodeInfo(Node.ofStorage(1)), f.mockWaiter);
- req = f.receivedRequest.get();
- assertNotNull(req);
- assertEquals(req.methodName(), RPCCommunicator.LEGACY_SET_SYSTEM_STATE2_RPC_METHOD_NAME);
- }
-
- @Test
void activateClusterStateVersion_sends_version_activation_rpc() {
var f = new Fixture<ActivateClusterStateVersionRequest>();
var cf = ClusterFixture.forFlatCluster(3).bringEntireClusterUp().assignDummyRpcAddresses();
diff --git a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/testutils/WaitCondition.java b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/testutils/WaitCondition.java
index deccaf282d6..211d475de31 100644
--- a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/testutils/WaitCondition.java
+++ b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/testutils/WaitCondition.java
@@ -128,7 +128,7 @@ public interface WaitCondition {
if (!match) {
return "Node " + node + " state mismatch.\n wanted: " + pattern + "\n is: " + node.getClusterStateBundle().toString();
}
- if (node.getStateCommunicationVersion() > 0 && !node.hasPendingGetNodeStateRequest()) {
+ if (!node.hasPendingGetNodeStateRequest()) {
return "Node " + node + " has not received another get node state request yet";
}
}