diff options
author | Harald Musum <musum@yahooinc.com> | 2023-05-10 19:17:09 +0200 |
---|---|---|
committer | Harald Musum <musum@yahooinc.com> | 2023-05-12 09:42:15 +0200 |
commit | 1fca02b50e1c764063b8de71514fc5ccc79e3cd8 (patch) | |
tree | e0cc7bced261ec204e6e9d7a728291f31118dc00 | |
parent | 9277dd5e246c8697d08a9149f50d45b17b55af92 (diff) |
Inject timer from test classes instead of inheriting
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); |