aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Musum <musum@yahooinc.com>2023-05-10 19:17:09 +0200
committerHarald Musum <musum@yahooinc.com>2023-05-12 09:42:15 +0200
commit1fca02b50e1c764063b8de71514fc5ccc79e3cd8 (patch)
treee0cc7bced261ec204e6e9d7a728291f31118dc00
parent9277dd5e246c8697d08a9149f50d45b17b55af92 (diff)
Inject timer from test classes instead of inheriting
-rw-r--r--clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/ClusterFeedBlockTest.java2
-rw-r--r--clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/DatabaseTest.java16
-rw-r--r--clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/DistributionBitCountTest.java5
-rw-r--r--clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/FleetControllerTest.java73
-rw-r--r--clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/GroupAutoTakedownLiveConfigTest.java18
-rw-r--r--clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/MasterElectionTest.java53
-rw-r--r--clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/NoZooKeeperTest.java5
-rw-r--r--clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/NodeSlobrokConfigurationMembershipTest.java17
-rw-r--r--clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/RpcServerTest.java41
-rw-r--r--clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/SlobrokTest.java10
-rw-r--r--clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/StateChangeTest.java23
-rw-r--r--clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/StateGatherTest.java4
-rw-r--r--clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/WantedStateTest.java9
13 files changed, 152 insertions, 124 deletions
diff --git a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/ClusterFeedBlockTest.java b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/ClusterFeedBlockTest.java
index f167fbc7231..8130def0907 100644
--- a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/ClusterFeedBlockTest.java
+++ b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/ClusterFeedBlockTest.java
@@ -29,6 +29,8 @@ public class ClusterFeedBlockTest extends FleetControllerTest {
private static final int NODE_COUNT = 3;
+ private final Timer timer = new FakeTimer();
+
// TODO dedupe fixture and setup stuff with other tests
private FleetController ctrl;
private DummyCommunicator communicator;
diff --git a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/DatabaseTest.java b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/DatabaseTest.java
index 1e7033f5e44..edf0cdbedd7 100644
--- a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/DatabaseTest.java
+++ b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/DatabaseTest.java
@@ -37,8 +37,9 @@ public class DatabaseTest extends FleetControllerTest {
void testWantedStatesInZooKeeper() throws Exception {
FleetControllerOptions.Builder builder = defaultOptions("mycluster");
builder.setZooKeeperServerAddress("127.0.0.1");
- setUpFleetController(true, builder);
- setUpVdsNodes(true);
+ Timer timer = new FakeTimer();
+ setUpFleetController(timer, builder);
+ setUpVdsNodes(timer);
log.info("WAITING FOR STABLE SYSTEM");
waitForStableSystem();
@@ -67,7 +68,8 @@ public class DatabaseTest extends FleetControllerTest {
log.info("CHECK THAT WANTED STATES PERSIST FLEETCONTROLLER RESTART");
stopFleetController();
- startFleetController(false);
+ timer = new RealTimer();
+ startFleetController(timer);
waitForState("version:\\d+ distributor:10 .2.s:d storage:10 .3.s:m .7.s:r");
assertWantedStates(wantedStates);
@@ -92,8 +94,9 @@ public class DatabaseTest extends FleetControllerTest {
.setMinRatioOfDistributorNodesUp(0)
.setMinRatioOfStorageNodesUp(0)
.setZooKeeperServerAddress("localhost");
- setUpFleetController(true, builder);
- setUpVdsNodes(true);
+ Timer timer = new FakeTimer();
+ setUpFleetController(timer, builder);
+ setUpVdsNodes(timer);
waitForStableSystem();
// Populate map of wanted states we should have
@@ -130,7 +133,8 @@ public class DatabaseTest extends FleetControllerTest {
stopFleetController();
for (int i = 6; i < nodes.size(); ++i) nodes.get(i).disconnect();
- startFleetController(false);
+ timer = new RealTimer();
+ startFleetController(timer);
waitForState("version:\\d+ distributor:3 storage:7 .1.s:m .3.s:d .4.s:d .5.s:d .6.s:m");
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 77bf7895e8c..95b9d13cad5 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
@@ -24,8 +24,9 @@ public class DistributionBitCountTest extends FleetControllerTest {
}
var builder = defaultOptions("mycluster", configuredNodes);
builder.setDistributionBits(17);
- setUpFleetController(false, builder);
- List<DummyVdsNode> nodes = setUpVdsNodes(false, true, configuredNodes);
+ Timer timer = new RealTimer();
+ setUpFleetController(timer, builder);
+ List<DummyVdsNode> nodes = setUpVdsNodes(timer, 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/FleetControllerTest.java b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/FleetControllerTest.java
index 4b79e45eb2c..3fe289c3b43 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
@@ -50,24 +50,14 @@ public abstract class FleetControllerTest implements Waiter {
private static final int DEFAULT_NODE_COUNT = 10;
private final Duration timeout = Duration.ofSeconds(30);
- protected final FakeTimer timer = new FakeTimer();
protected Slobrok slobrok;
protected FleetControllerOptions options;
ZooKeeperTestServer zooKeeperServer;
protected final List<FleetController> fleetControllers = new ArrayList<>();
protected List<DummyVdsNode> nodes = new ArrayList<>();
-
- private final Waiter waiter = new Waiter.Impl(new DataRetriever() {
- @Override
- public Object getMonitor() { return timer; }
- @Override
- public FleetController getFleetController() { return fleetController(); }
- @Override
- public List<DummyVdsNode> getDummyNodes() { return nodes; }
- @Override
- public Duration getTimeout() { return timeout; }
- });
+ // TODO: This should use the same timer as the fleet controllers (i.e. the one supplied in createFleetControllers()
+ private Waiter waiter = createWaiter(new FakeTimer());
static {
LogSetup.initVespaLogging("fleetcontroller");
@@ -102,9 +92,8 @@ public abstract class FleetControllerTest implements Waiter {
this.options = builder.build();
}
- FleetController createFleetController(boolean useFakeTimer, FleetControllerOptions options) throws Exception {
+ static FleetController createFleetController(Timer timer, FleetControllerOptions options) {
var context = new TestFleetControllerContext(options);
- Timer timer = useFakeTimer ? this.timer : new RealTimer();
var metricUpdater = new MetricUpdater(new NoMetricReporter(), options.fleetControllerIndex(), options.clusterName());
var log = new EventLog(timer, metricUpdater);
var cluster = new ContentCluster(options.clusterName(), options.nodes(), options.storageDistribution());
@@ -136,10 +125,10 @@ public abstract class FleetControllerTest implements Waiter {
return controller;
}
- protected FleetControllerOptions setUpFleetController(boolean useFakeTimer, FleetControllerOptions.Builder builder) throws Exception {
+ protected FleetControllerOptions setUpFleetController(Timer timer, FleetControllerOptions.Builder builder) throws Exception {
if (slobrok == null) setUpSystem(builder);
options = builder.build();
- startFleetController(useFakeTimer);
+ startFleetController(timer);
return options;
}
@@ -154,39 +143,39 @@ public abstract class FleetControllerTest implements Waiter {
fleetControllers.clear();
}
- void startFleetController(boolean useFakeTimer) throws Exception {
+ void startFleetController(Timer timer) {
if ( ! fleetControllers.isEmpty()) throw new IllegalStateException("already started fleetcontroller, not starting another");
- fleetControllers.add(createFleetController(useFakeTimer, options));
+ waiter = createWaiter(timer);
+ fleetControllers.add(createFleetController(timer, options));
}
- protected void setUpVdsNodes(boolean useFakeTimer) throws Exception {
- setUpVdsNodes(useFakeTimer, false);
+ protected void setUpVdsNodes(Timer timer) throws Exception {
+ setUpVdsNodes(timer, false);
}
- protected void setUpVdsNodes(boolean useFakeTimer, boolean startDisconnected) throws Exception {
- setUpVdsNodes(useFakeTimer, startDisconnected, DEFAULT_NODE_COUNT);
+ protected void setUpVdsNodes(Timer timer, boolean startDisconnected) throws Exception {
+ setUpVdsNodes(timer, startDisconnected, DEFAULT_NODE_COUNT);
}
- protected void setUpVdsNodes(boolean useFakeTimer, boolean startDisconnected, int nodeCount) throws Exception {
+ protected void setUpVdsNodes(Timer timer, 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, startDisconnected, nodeIndexes);
+ setUpVdsNodes(timer, startDisconnected, nodeIndexes);
}
- protected void setUpVdsNodes(boolean useFakeTimer, boolean startDisconnected, Set<Integer> nodeIndexes) throws Exception {
+ protected void setUpVdsNodes(Timer timer, boolean startDisconnected, Set<Integer> nodeIndexes) throws Exception {
for (int nodeIndex : nodeIndexes) {
- nodes.add(createNode(useFakeTimer, startDisconnected, DISTRIBUTOR, nodeIndex));
- nodes.add(createNode(useFakeTimer, startDisconnected, STORAGE, nodeIndex));
+ nodes.add(createNode(timer, startDisconnected, DISTRIBUTOR, nodeIndex));
+ nodes.add(createNode(timer, startDisconnected, STORAGE, nodeIndex));
}
}
- private DummyVdsNode createNode(boolean useFakeTimer, boolean startDisconnected,
+ private DummyVdsNode createNode(Timer timer, boolean startDisconnected,
NodeType nodeType, int nodeIndex) throws Exception {
String[] connectionSpecs = getSlobrokConnectionSpecs(slobrok);
- DummyVdsNode node = new DummyVdsNode(useFakeTimer ? timer : new RealTimer(), connectionSpecs,
- options.clusterName(), nodeType, nodeIndex);
+ DummyVdsNode node = new DummyVdsNode(timer, connectionSpecs, options.clusterName(), nodeType, nodeIndex);
if ( ! startDisconnected)
node.connect();
return node;
@@ -199,11 +188,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, boolean startDisconnected, List<ConfiguredNode> configuredNodes) throws Exception {
+ protected List<DummyVdsNode> setUpVdsNodes(Timer timer, boolean startDisconnected, List<ConfiguredNode> configuredNodes) throws Exception {
nodes = new ArrayList<>();
for (ConfiguredNode configuredNode : configuredNodes) {
- nodes.add(createNode(useFakeTimer, startDisconnected, DISTRIBUTOR, configuredNode.index()));
- nodes.add(createNode(useFakeTimer, startDisconnected, STORAGE, configuredNode.index()));
+ nodes.add(createNode(timer, startDisconnected, DISTRIBUTOR, configuredNode.index()));
+ nodes.add(createNode(timer, startDisconnected, STORAGE, configuredNode.index()));
}
return nodes;
}
@@ -216,7 +205,7 @@ public abstract class FleetControllerTest implements Waiter {
return indices.stream().map(idx -> new ConfiguredNode(idx, false)).collect(Collectors.toSet());
}
- void waitForStateExcludingNodeSubset(String expectedState, Set<Integer> excludedNodes) throws Exception {
+ void waitForStateExcludingNodeSubset(String expectedState, Set<Integer> excludedNodes, Timer timer) throws Exception {
// Due to the implementation details of the test base, this.waitForState() will always
// wait until all nodes added in the test have received the latest cluster state. Since we
// want to entirely ignore node #6, it won't get a cluster state at all and the test will
@@ -307,4 +296,20 @@ public abstract class FleetControllerTest implements Waiter {
Duration timeout() { return timeout; }
+ private Impl createWaiter(Timer timer) {
+ return new Impl(new DataRetriever() {
+ @Override
+ public Object getMonitor() { return timer; }
+
+ @Override
+ public FleetController getFleetController() { return fleetController(); }
+
+ @Override
+ public List<DummyVdsNode> getDummyNodes() { return nodes; }
+
+ @Override
+ public Duration getTimeout() { return timeout; }
+ });
+ }
+
}
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 a498f26fb7d..2801759e31e 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
@@ -12,6 +12,8 @@ import static org.junit.jupiter.api.Assertions.assertFalse;
@ExtendWith(CleanupZookeeperLogsOnSuccess.class)
public class GroupAutoTakedownLiveConfigTest extends FleetControllerTest {
+ private final Timer timer = new FakeTimer();
+
private static FleetControllerOptions.Builder createOptions(DistributionBuilder.GroupBuilder groupBuilder, double minNodeRatio) {
return defaultOptions("mycluster")
.setStorageDistribution(DistributionBuilder.forHierarchicCluster(groupBuilder))
@@ -41,8 +43,8 @@ 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, false, 9);
+ setUpFleetController(timer, options);
+ setUpVdsNodes(timer, false, 9);
waitForState("version:\\d+ distributor:9 storage:9");
return options.build();
}
@@ -59,7 +61,7 @@ public class GroupAutoTakedownLiveConfigTest extends FleetControllerTest {
void bootstrap_min_ratio_option_is_propagated_to_group_availability_logic() throws Exception {
setUp3x3ClusterWithMinNodeRatio(0.67);
takeDownContentNode(0);
- waitForStateExcludingNodeSubset("version:\\d+ distributor:9 storage:9 .0.s:d .1.s:d .2.s:d", asIntSet(0));
+ waitForStateExcludingNodeSubset("version:\\d+ distributor:9 storage:9 .0.s:d .1.s:d .2.s:d", asIntSet(0), timer);
}
@Test
@@ -67,14 +69,14 @@ public class GroupAutoTakedownLiveConfigTest extends FleetControllerTest {
// Initially, arbitrarily many nodes may be down in a group.
var options = setUp3x3ClusterWithMinNodeRatio(0.0);
takeDownContentNode(3);
- waitForStateExcludingNodeSubset("version:\\d+ distributor:9 storage:9 .3.s:d", asIntSet(3));
+ waitForStateExcludingNodeSubset("version:\\d+ distributor:9 storage:9 .3.s:d", asIntSet(3), timer);
reconfigureWithMinNodeRatio(options, 0.67);
- waitForStateExcludingNodeSubset("version:\\d+ distributor:9 storage:9 .3.s:d .4.s:d .5.s:d", asIntSet(3));
+ waitForStateExcludingNodeSubset("version:\\d+ distributor:9 storage:9 .3.s:d .4.s:d .5.s:d", asIntSet(3), timer);
reconfigureWithMinNodeRatio(options, 0.0);
// Aaaand back up again!
- waitForStateExcludingNodeSubset("version:\\d+ distributor:9 storage:9 .3.s:d", asIntSet(3));
+ waitForStateExcludingNodeSubset("version:\\d+ distributor:9 storage:9 .3.s:d", asIntSet(3), timer);
}
@Test
@@ -83,10 +85,10 @@ public class GroupAutoTakedownLiveConfigTest extends FleetControllerTest {
takeDownContentNode(6);
// Not enough nodes down to trigger group take-down yet
- waitForStateExcludingNodeSubset("version:\\d+ distributor:9 storage:9 .6.s:d", asIntSet(6));
+ waitForStateExcludingNodeSubset("version:\\d+ distributor:9 storage:9 .6.s:d", asIntSet(6), timer);
// Removing a node from the same group as node 6 will dip it under the configured threshold,
// taking down the entire group. In this case we configure out node 8.
reconfigureWithDistribution(options, DistributionBuilder.withGroupNodes(3, 3, 2));
- waitForStateExcludingNodeSubset("version:\\d+ distributor:8 storage:6", asIntSet(6, 8));
+ waitForStateExcludingNodeSubset("version:\\d+ distributor:8 storage:6", asIntSet(6, 8), timer);
}
}
diff --git a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/MasterElectionTest.java b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/MasterElectionTest.java
index 2d7d47d515b..19cfab2ec34 100644
--- a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/MasterElectionTest.java
+++ b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/MasterElectionTest.java
@@ -49,7 +49,7 @@ public class MasterElectionTest extends FleetControllerTest {
supervisor.transport().shutdown().join();
}
- protected void setUpFleetControllers(int count, boolean useFakeTimer, FleetControllerOptions.Builder builder) throws Exception {
+ protected void setUpFleetControllers(int count, Timer timer, FleetControllerOptions.Builder builder) throws Exception {
if (zooKeeperServer == null) {
zooKeeperServer = new ZooKeeperTestServer();
}
@@ -62,7 +62,7 @@ public class MasterElectionTest extends FleetControllerTest {
for (int i = 0; i < count; ++i) {
FleetControllerOptions.Builder b = FleetControllerOptions.Builder.copy(options);
b.setIndex(i);
- fleetControllers.add(createFleetController(useFakeTimer, b.build()));
+ fleetControllers.add(createFleetController(timer, b.build()));
}
}
@@ -102,8 +102,8 @@ public class MasterElectionTest extends FleetControllerTest {
void testMasterElection() throws Exception {
FleetControllerOptions.Builder builder = defaultOptions("mycluster");
builder.setMasterZooKeeperCooldownPeriod(100);
- boolean usingFakeTimer = false;
- setUpFleetControllers(3, usingFakeTimer, builder);
+ Timer timer = new RealTimer();
+ setUpFleetControllers(3, timer, builder);
waitForMaster(0);
log.log(Level.INFO, "SHUTTING DOWN FLEET CONTROLLER 0");
fleetControllers.get(0).shutdown();
@@ -118,18 +118,18 @@ public class MasterElectionTest extends FleetControllerTest {
}
log.log(Level.INFO, "STARTING FLEET CONTROLLER 1");
- fleetControllers.set(1, createFleetController(usingFakeTimer, fleetControllers.get(1).getOptions()));
+ fleetControllers.set(1, createFleetController(timer, fleetControllers.get(1).getOptions()));
waitForMaster(1);
log.log(Level.INFO, "STARTING FLEET CONTROLLER 0");
- fleetControllers.set(0, createFleetController(usingFakeTimer, fleetControllers.get(0).getOptions()));
+ fleetControllers.set(0, createFleetController(timer, fleetControllers.get(0).getOptions()));
waitForMaster(0);
}
@Test
void testMasterElectionWith5FleetControllers() throws Exception {
FleetControllerOptions.Builder builder = defaultOptions("mycluster");
- boolean usingFakeTimer = false;
- setUpFleetControllers(5, usingFakeTimer, builder);
+ RealTimer timer = new RealTimer();
+ setUpFleetControllers(5, timer, builder);
waitForMaster(0);
}
@@ -192,10 +192,11 @@ public class MasterElectionTest extends FleetControllerTest {
void testClusterStateVersionIncreasesAcrossMasterElections() throws Exception {
FleetControllerOptions.Builder options = defaultOptions("mycluster");
options.setMasterZooKeeperCooldownPeriod(1);
- setUpFleetControllers(3, false, options);
+ Timer timer = new RealTimer();
+ setUpFleetControllers(3, timer, options);
// Currently need to have content nodes present for the cluster controller to even bother
// attempting to persisting its cluster state version to ZK.
- setUpVdsNodes(false);
+ setUpVdsNodes(timer);
waitForStableSystem();
waitForMaster(0);
Stream.of(0, 1, 2).forEach(this::waitForCompleteCycle);
@@ -213,7 +214,8 @@ public class MasterElectionTest extends FleetControllerTest {
// "Magic" port value is in range allocated to module for testing.
zooKeeperServer = ZooKeeperTestServer.createWithFixedPort(18342);
options.setMasterZooKeeperCooldownPeriod(100);
- setUpFleetControllers(2, false, options);
+ Timer timer = new RealTimer();
+ setUpFleetControllers(2, timer, options);
waitForMaster(0);
zooKeeperServer.shutdown(true);
@@ -232,7 +234,8 @@ public class MasterElectionTest extends FleetControllerTest {
FleetControllerOptions.Builder builder = defaultOptions("mycluster")
.setMasterZooKeeperCooldownPeriod(100)
.setZooKeeperServerAddress("localhost");
- setUpFleetControllers(3, false, builder);
+ Timer timer = new RealTimer();
+ setUpFleetControllers(3, timer, builder);
waitForMaster(0);
log.log(Level.INFO, "STOPPING ZOOKEEPER SERVER AT " + zooKeeperServer.getAddress());
@@ -263,7 +266,8 @@ public class MasterElectionTest extends FleetControllerTest {
void testMasterZooKeeperCooldown() throws Exception {
FleetControllerOptions.Builder options = defaultOptions("mycluster");
options.setMasterZooKeeperCooldownPeriod(3600 * 1000); // An hour
- setUpFleetControllers(3, true, options);
+ FakeTimer timer = new FakeTimer();
+ setUpFleetControllers(3, timer, options);
waitForMaster(0);
timer.advanceTime(24 * 3600 * 1000); // A day
waitForCompleteCycle(1);
@@ -310,7 +314,8 @@ public class MasterElectionTest extends FleetControllerTest {
void testGetMaster() throws Exception {
FleetControllerOptions.Builder options = defaultOptions("mycluster");
options.setMasterZooKeeperCooldownPeriod(3600 * 1000); // An hour
- setUpFleetControllers(3, true, options);
+ FakeTimer timer = new FakeTimer();
+ setUpFleetControllers(3, timer, options);
waitForMaster(0);
List<Target> connections = new ArrayList<>();
@@ -390,7 +395,8 @@ public class MasterElectionTest extends FleetControllerTest {
void testReconfigure() throws Exception {
FleetControllerOptions.Builder options = defaultOptions("mycluster");
options.setMasterZooKeeperCooldownPeriod(1);
- setUpFleetControllers(3, false, options);
+ Timer timer = new RealTimer();
+ setUpFleetControllers(3, timer, options);
waitForMaster(0);
FleetControllerOptions newOptions = FleetControllerOptions.Builder.copy(options.build()).build();
@@ -418,8 +424,9 @@ public class MasterElectionTest extends FleetControllerTest {
.setMinRatioOfStorageNodesUp(0)
.setMinDistributorNodesUp(0)
.setMinStorageNodesUp(1);
- setUpFleetControllers(3, false, builder);
- setUpVdsNodes(false);
+ Timer timer = new RealTimer();
+ setUpFleetControllers(3, timer, builder);
+ setUpVdsNodes(timer);
waitForStableSystem();
waitForMaster(0);
@@ -461,8 +468,9 @@ public class MasterElectionTest extends FleetControllerTest {
.setMasterZooKeeperCooldownPeriod(1)
.setMinTimeBeforeFirstSystemStateBroadcast(100000);
boolean useFakeTimer = false;
- setUpFleetControllers(3, useFakeTimer, builder);
- setUpVdsNodes(false);
+ Timer timer = new RealTimer();
+ setUpFleetControllers(3, timer, builder);
+ setUpVdsNodes(timer);
waitForMaster(0);
waitForStableSystem();
log.info("Waiting for full maintenance mode in default space");
@@ -486,7 +494,7 @@ public class MasterElectionTest extends FleetControllerTest {
waitForMaster(1);
waitForCompleteCycle(1);
- fleetControllers.set(0, createFleetController(useFakeTimer, fleetControllers.get(0).getOptions()));
+ fleetControllers.set(0, createFleetController(timer, fleetControllers.get(0).getOptions()));
waitForMaster(0);
waitForCompleteCycle(0);
@@ -502,8 +510,9 @@ public class MasterElectionTest extends FleetControllerTest {
.setClusterHasGlobalDocumentTypes(false)
.setMasterZooKeeperCooldownPeriod(1)
.setMinTimeBeforeFirstSystemStateBroadcast(100000);
- setUpFleetControllers(3, false, builder);
- setUpVdsNodes(false);
+ Timer timer = new RealTimer();
+ setUpFleetControllers(3, timer, builder);
+ setUpVdsNodes(timer);
waitForMaster(0);
waitForStableSystem();
waitForStateInAllSpaces("version:\\d+ distributor:10 storage:10");
diff --git a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/NoZooKeeperTest.java b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/NoZooKeeperTest.java
index 7030cf4cc16..2e8c688f6ee 100644
--- a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/NoZooKeeperTest.java
+++ b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/NoZooKeeperTest.java
@@ -11,8 +11,9 @@ public class NoZooKeeperTest extends FleetControllerTest {
void testWantedStatesInZooKeeper() throws Exception {
// Null is the default for zooKeeperServerAddress
FleetControllerOptions.Builder builder = defaultOptions("mycluster");
- setUpFleetController(true, builder);
- setUpVdsNodes(true);
+ Timer timer = new FakeTimer();
+ setUpFleetController(timer, builder);
+ setUpVdsNodes(timer);
waitForStableSystem();
assertTrue(nodes.get(0).isDistributor());
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 4ca090b4947..2c77767d6b4 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
@@ -15,16 +15,17 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
@Timeout(30)
public class NodeSlobrokConfigurationMembershipTest extends FleetControllerTest {
+ private final Timer timer = new FakeTimer();
private final Set<Integer> nodeIndices = asIntSet(0, 1, 2, 3);
private final int foreignNodeIndex = 6;
private FleetControllerOptions setUpClusterWithForeignNode(Set<Integer> validIndices) throws Exception {
Set<ConfiguredNode> configuredNodes = asConfiguredNodes(validIndices);
FleetControllerOptions.Builder options = optionsForConfiguredNodes(configuredNodes);
- setUpFleetController(true, options);
+ setUpFleetController(timer, options);
Set<Integer> nodesWithStranger = new TreeSet<>(validIndices);
nodesWithStranger.add(foreignNodeIndex);
- setUpVdsNodes(true, false, nodesWithStranger);
+ setUpVdsNodes(timer, false, nodesWithStranger);
return options.build();
}
@@ -39,13 +40,13 @@ public class NodeSlobrokConfigurationMembershipTest extends FleetControllerTest
@Test
void testSlobrokNodeOutsideConfiguredIndexSetIsNotIncludedInCluster() throws Exception {
setUpClusterWithForeignNode(nodeIndices);
- waitForStateExcludingNodeSubset("version:\\d+ distributor:4 storage:4", asIntSet(foreignNodeIndex));
+ waitForStateExcludingNodeSubset("version:\\d+ distributor:4 storage:4", asIntSet(foreignNodeIndex), timer);
}
@Test
void testNodeSetReconfigurationForcesFreshSlobrokFetch() throws Exception {
var options = setUpClusterWithForeignNode(nodeIndices);
- waitForStateExcludingNodeSubset("version:\\d+ distributor:4 storage:4", asIntSet(foreignNodeIndex));
+ waitForStateExcludingNodeSubset("version:\\d+ distributor:4 storage:4", asIntSet(foreignNodeIndex), timer);
// If we get a configuration with the node present, we have to accept it into
// cluster. If we do not re-fetch state from slobrok we risk racing
@@ -63,8 +64,8 @@ public class NodeSlobrokConfigurationMembershipTest extends FleetControllerTest
void test_removed_retired_node_is_not_included_in_state() throws Exception {
Set<ConfiguredNode> configuredNodes = asConfiguredNodes(nodeIndices);
FleetControllerOptions.Builder builder = optionsForConfiguredNodes(configuredNodes);
- options = setUpFleetController(true, builder);
- setUpVdsNodes(true, false, nodeIndices);
+ options = setUpFleetController(timer, builder);
+ setUpVdsNodes(timer, false, nodeIndices);
waitForState("version:\\d+ distributor:4 storage:4");
@@ -89,11 +90,11 @@ public class NodeSlobrokConfigurationMembershipTest extends FleetControllerTest
// The previously retired node should now be marked as down, as it no longer
// exists from the point of view of the content cluster. We have to use a subset
// state waiter, as the controller will not send the new state to node 0.
- waitForStateExcludingNodeSubset("version:\\d+ distributor:4 .0.s:d storage:4 .0.s:d", asIntSet(0));
+ waitForStateExcludingNodeSubset("version:\\d+ distributor:4 .0.s:d storage:4 .0.s:d", asIntSet(0), timer);
// Ensure it remains down for subsequent cluster state versions as well.
nodes.get(3).disconnect();
- waitForStateExcludingNodeSubset("version:\\d+ distributor:4 .0.s:d storage:4 .0.s:d .1.s:d", asIntSet(0, 1));
+ waitForStateExcludingNodeSubset("version:\\d+ distributor:4 .0.s:d storage:4 .0.s:d .1.s:d", asIntSet(0, 1), timer);
}
}
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 b78c4fad1f6..4a5b88ef28c 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
@@ -46,6 +46,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
public class RpcServerTest extends FleetControllerTest {
public static Logger log = Logger.getLogger(RpcServerTest.class.getName());
+ private final FakeTimer timer = new FakeTimer();
private Supervisor supervisor;
@@ -63,8 +64,8 @@ public class RpcServerTest extends FleetControllerTest {
void testGetSystemState() throws Exception {
LogFormatter.initializeLogging();
FleetControllerOptions.Builder options = defaultOptions("mycluster");
- setUpFleetController(true, options);
- setUpVdsNodes(true);
+ setUpFleetController(timer, options);
+ setUpVdsNodes(timer);
waitForStableSystem();
assertTrue(nodes.get(0).isDistributor());
@@ -134,8 +135,8 @@ public class RpcServerTest extends FleetControllerTest {
builder.setMinRatioOfStorageNodesUp(0);
builder.setMaxInitProgressTime(30000);
builder.setStableStateTimePeriod(60000);
- setUpFleetController(true, builder);
- setUpVdsNodes(true);
+ setUpFleetController(timer, builder);
+ setUpVdsNodes(timer);
waitForStableSystem();
setWantedNodeState(State.DOWN, NodeType.DISTRIBUTOR, 2);
@@ -227,8 +228,8 @@ public class RpcServerTest extends FleetControllerTest {
.setMinRatioOfStorageNodesUp(0)
.setMaxInitProgressTime(30000)
.setStableStateTimePeriod(60000);
- setUpFleetController(true, builder);
- setUpVdsNodes(true, false, configuredNodes);
+ setUpFleetController(timer, builder);
+ setUpVdsNodes(timer, false, configuredNodes);
waitForState("version:\\d+ distributor:5 storage:5 .4.s:r");
setWantedNodeState(State.DOWN, NodeType.DISTRIBUTOR, 2);
@@ -259,8 +260,8 @@ public class RpcServerTest extends FleetControllerTest {
FleetControllerOptions.Builder builder = defaultOptions("mycluster", configuredNodes)
.setMaxInitProgressTime(30000)
.setStableStateTimePeriod(60000);
- setUpFleetController(true, builder);
- setUpVdsNodes(true, false, configuredNodes);
+ setUpFleetController(timer, builder);
+ setUpVdsNodes(timer, false, configuredNodes);
waitForState("version:\\d+ distributor:5 storage:5");
}
@@ -274,7 +275,7 @@ public class RpcServerTest extends FleetControllerTest {
}
{ // Configuration change: Add 2 new nodes and retire the 5 existing ones
- setUpVdsNodes(true, false, 2);
+ setUpVdsNodes(timer, false, 2);
Set<ConfiguredNode> configuredNodes = new TreeSet<>();
for (int i = 0; i < 5; i++)
configuredNodes.add(new ConfiguredNode(i, true));
@@ -339,8 +340,8 @@ public class RpcServerTest extends FleetControllerTest {
.setMaxInitProgressTime(30000)
.setStableStateTimePeriod(60000);
options = builder.build();
- setUpFleetController(true, builder);
- setUpVdsNodes(true, false, configuredNodes);
+ setUpFleetController(timer, builder);
+ setUpVdsNodes(timer, false, configuredNodes);
waitForState("version:\\d+ distributor:5 storage:5");
}
@@ -357,7 +358,7 @@ public class RpcServerTest extends FleetControllerTest {
}
{ // Configuration change: Add 2 new nodes and retire the 5 existing ones
- setUpVdsNodes(true, false, 2);
+ setUpVdsNodes(timer, false, 2);
Set<ConfiguredNode> configuredNodes = new TreeSet<>();
for (int i = 0; i < 5; i++)
configuredNodes.add(new ConfiguredNode(i, true));
@@ -412,8 +413,8 @@ public class RpcServerTest extends FleetControllerTest {
Set<ConfiguredNode> configuredNodes = nodeIndexes.stream().map(i -> new ConfiguredNode(i, false)).collect(Collectors.toSet());
FleetControllerOptions.Builder options = defaultOptions("mycluster", configuredNodes);
//options.setStorageDistribution(new Distribution(getDistConfig(nodeIndexes)));
- setUpFleetController(true, options);
- setUpVdsNodes(true, false, nodeIndexes);
+ setUpFleetController(timer, options);
+ setUpVdsNodes(timer, 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();
@@ -449,8 +450,8 @@ public class RpcServerTest extends FleetControllerTest {
void testSetNodeStateOutOfRange() throws Exception {
FleetControllerOptions.Builder options = defaultOptions("mycluster");
options.setStorageDistribution(new Distribution(Distribution.getDefaultDistributionConfig(2, 10)));
- setUpFleetController(true, options);
- setUpVdsNodes(true);
+ setUpFleetController(timer, options);
+ setUpVdsNodes(timer);
waitForStableSystem();
int rpcPort = fleetController().getRpcPort();
@@ -475,8 +476,8 @@ public class RpcServerTest extends FleetControllerTest {
void testGetMaster() throws Exception {
FleetControllerOptions.Builder options = defaultOptions("mycluster");
options.setStorageDistribution(new Distribution(Distribution.getDefaultDistributionConfig(2, 10)));
- setUpFleetController(true, options);
- setUpVdsNodes(true);
+ setUpFleetController(timer, options);
+ setUpVdsNodes(timer);
waitForStableSystem();
int rpcPort = fleetController().getRpcPort();
@@ -493,9 +494,9 @@ public class RpcServerTest extends FleetControllerTest {
@Test
void testGetNodeList() throws Exception {
- setUpFleetController(true, defaultOptions("mycluster", 5));
+ setUpFleetController(timer, defaultOptions("mycluster", 5));
final int nodeCount = 5;
- setUpVdsNodes(true, false, nodeCount);
+ setUpVdsNodes(timer, false, nodeCount);
waitForStableSystem();
assertTrue(nodes.get(0).isDistributor());
diff --git a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/SlobrokTest.java b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/SlobrokTest.java
index 667dc09361f..1fb648d8a6f 100644
--- a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/SlobrokTest.java
+++ b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/SlobrokTest.java
@@ -15,13 +15,15 @@ public class SlobrokTest extends FleetControllerTest {
private static final Logger log = Logger.getLogger(SlobrokTest.class.getName());
+ private final FakeTimer timer = new FakeTimer();
+
@Test
void testSingleSlobrokRestart() throws Exception {
FleetControllerOptions.Builder builder = defaultOptions("mycluster")
.setNodeStateRequestTimeoutMS(60 * 60 * 1000)
.setMaxSlobrokDisconnectGracePeriod(60 * 60 * 1000);
- setUpFleetController(true, builder);
- setUpVdsNodes(true);
+ setUpFleetController(timer, builder);
+ setUpVdsNodes(timer);
waitForStableSystem();
FleetController fleetController = fleetController();
@@ -74,8 +76,8 @@ public class SlobrokTest extends FleetControllerTest {
FleetControllerOptions.Builder builder = defaultOptions("mycluster")
.setMaxSlobrokDisconnectGracePeriod(60 * 1000)
.setNodeStateRequestTimeoutMS(10000 * 60 * 1000);
- setUpFleetController(true, builder);
- setUpVdsNodes(true);
+ setUpFleetController(timer, builder);
+ setUpVdsNodes(timer);
waitForStableSystem();
int version = fleetController().getSystemState().getVersion();
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 c9d135d4e11..8810172c801 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
@@ -18,7 +18,6 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.logging.Logger;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -29,7 +28,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
@ExtendWith(CleanupZookeeperLogsOnSuccess.class)
public class StateChangeTest extends FleetControllerTest {
- public static Logger log = Logger.getLogger(StateChangeTest.class.getName());
+ private final FakeTimer timer = new FakeTimer();
+
private FleetController ctrl;
private DummyCommunicator communicator;
private EventLog eventLog;
@@ -935,15 +935,14 @@ public class StateChangeTest extends FleetControllerTest {
FleetControllerOptions.Builder builder = defaultOptions()
.setMinTimeBeforeFirstSystemStateBroadcast(3 * 60 * 1000);
setUpSystem(builder);
- boolean useFakeTimer = true;
- setUpVdsNodes(useFakeTimer, true);
+ setUpVdsNodes(timer, 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) {
nodes.get(i).connect();
}
}
- setUpFleetController(useFakeTimer, builder);
+ setUpFleetController(timer, builder);
StateWaiter waiter = new StateWaiter(timer);
fleetController().addSystemStateListener(waiter);
@@ -980,10 +979,8 @@ public class StateChangeTest extends FleetControllerTest {
FleetControllerOptions.Builder builder = defaultOptions()
.setMinTimeBeforeFirstSystemStateBroadcast(300 * 60 * 1000);
- boolean useFakeTimer = true;
setUpSystem(builder);
-
- setUpVdsNodes(useFakeTimer, true);
+ setUpVdsNodes(timer, true);
for (DummyVdsNode node : nodes) {
node.connect();
@@ -991,7 +988,7 @@ public class StateChangeTest extends FleetControllerTest {
// Marking one node as 'initializing' improves testing of state later on.
nodes.get(3).setNodeState(State.INITIALIZING);
- setUpFleetController(useFakeTimer, builder);
+ setUpFleetController(timer, builder);
final StateWaiter waiter = new StateWaiter(timer);
@@ -1015,8 +1012,8 @@ public class StateChangeTest extends FleetControllerTest {
@Test
void testDontTagFailingSetSystemStateOk() throws Exception {
FleetControllerOptions.Builder options = defaultOptions();
- setUpFleetController(true, options);
- setUpVdsNodes(true);
+ setUpFleetController(timer, options);
+ setUpVdsNodes(timer);
waitForStableSystem();
StateWaiter waiter = new StateWaiter(timer);
@@ -1091,8 +1088,8 @@ public class StateChangeTest extends FleetControllerTest {
@Test
void testSetAllTimestampsAfterDowntime() throws Exception {
FleetControllerOptions.Builder options = defaultOptions();
- setUpFleetController(true, options);
- setUpVdsNodes(true);
+ setUpFleetController(timer, options);
+ setUpVdsNodes(timer);
waitForStableSystem();
StateWaiter waiter = new StateWaiter(timer);
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 7848320f60a..12c12d330b8 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
@@ -16,6 +16,8 @@ public class StateGatherTest extends FleetControllerTest {
public static Logger log = Logger.getLogger(StateGatherTest.class.getName());
+ private final FakeTimer timer = new FakeTimer();
+
private String getGetNodeStateReplyCounts(DummyVdsNode node) {
StringBuilder sb = new StringBuilder();
sb.append("timedout ").append(node.timedOutStateReplies)
@@ -34,7 +36,7 @@ public class StateGatherTest extends FleetControllerTest {
// Force actual message timeout to be lower than request timeout.
.setNodeStateRequestTimeoutEarliestPercentage(80)
.setNodeStateRequestTimeoutLatestPercentage(80);
- setUpFleetController(true, builder);
+ setUpFleetController(timer, builder);
String[] connectionSpecs = getSlobrokConnectionSpecs(slobrok);
DummyVdsNode dnode = new DummyVdsNode(timer, connectionSpecs, builder.clusterName(), NodeType.DISTRIBUTOR, 0);
DummyVdsNode snode = new DummyVdsNode(timer, connectionSpecs, builder.clusterName(), NodeType.STORAGE, 0);
diff --git a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/WantedStateTest.java b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/WantedStateTest.java
index 4dcd0a6f499..411f31875c4 100644
--- a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/WantedStateTest.java
+++ b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/WantedStateTest.java
@@ -15,6 +15,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
public class WantedStateTest extends FleetControllerTest {
private Supervisor supervisor;
+ private final Timer timer = new FakeTimer();
@BeforeEach
public void setup() {
@@ -28,8 +29,8 @@ public class WantedStateTest extends FleetControllerTest {
@Test
void testSettingStorageNodeMaintenanceAndBack() throws Exception {
- setUpFleetController(true, defaultOptions("mycluster"));
- setUpVdsNodes(true);
+ setUpFleetController(timer, defaultOptions("mycluster"));
+ setUpVdsNodes(timer);
waitForStableSystem();
setWantedState(nodes.get(1), State.MAINTENANCE, null, supervisor);
@@ -41,8 +42,8 @@ public class WantedStateTest extends FleetControllerTest {
@Test
void testOverridingWantedStateOtherReason() throws Exception {
- setUpFleetController(true, defaultOptions("mycluster"));
- setUpVdsNodes(true);
+ setUpFleetController(timer, defaultOptions("mycluster"));
+ setUpVdsNodes(timer);
waitForStableSystem();
setWantedState(nodes.get(1), State.MAINTENANCE, "Foo", supervisor);