diff options
author | Harald Musum <musum@verizonmedia.com> | 2020-09-16 14:58:24 +0200 |
---|---|---|
committer | Harald Musum <musum@verizonmedia.com> | 2020-09-16 14:58:24 +0200 |
commit | 14ff7194bf46c5d56faabcf0a26d7606b3d0c927 (patch) | |
tree | 43edf18cd1364cfed36cb11b1fb0691e4231d0ce /node-repository | |
parent | c12dfa2fef99ad6bf76cf7560002b5f821bcab23 (diff) |
Test with bootstrapping flag set
Diffstat (limited to 'node-repository')
2 files changed, 23 insertions, 4 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockDeployer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockDeployer.java index ae3d6ebf815..06ece5b3767 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockDeployer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockDeployer.java @@ -12,7 +12,6 @@ import com.yahoo.config.provision.HostSpec; import com.yahoo.transaction.NestedTransaction; import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.NodeRepository; -import com.yahoo.vespa.hosted.provision.node.Agent; import com.yahoo.vespa.hosted.provision.provisioning.NodeRepositoryProvisioner; import java.time.Clock; @@ -44,6 +43,7 @@ public class MockDeployer implements Deployer { private final ReentrantLock lock = new ReentrantLock(); private boolean failActivate = false; + private boolean bootstrapping = true; /** Create a mock deployer which returns empty on every deploy request. */ @Inject @@ -83,6 +83,8 @@ public class MockDeployer implements Deployer { public void setFailActivate(boolean failActivate) { this.failActivate = failActivate; } + public void setBootstrapping(boolean bootstrapping) { this.bootstrapping = bootstrapping; } + @Override public Optional<Deployment> deployFromLocalActive(ApplicationId id, boolean bootstrap) { return deployFromLocalActive(id, Duration.ofSeconds(60)); @@ -117,6 +119,11 @@ public class MockDeployer implements Deployer { return Optional.ofNullable(lastDeployTimes.get(application)); } + @Override + public boolean bootstrapping() { + return bootstrapping; + } + public void removeApplication(ApplicationId applicationId) { new MockDeployment(provisioner, new ApplicationContext(applicationId, List.of())).activate(); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainerTest.java index 099282205fe..ec830a7dc31 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainerTest.java @@ -87,8 +87,9 @@ public class PeriodicApplicationMaintainerTest { // Create applications fixture.activate(); - // Exhaust initial wait period + // Exhaust initial wait period and set bootstrapping to be done clock.advance(Duration.ofMinutes(30).plus(Duration.ofSeconds(1))); + fixture.setBootstrapping(false); // Fail and park some nodes nodeRepository.fail(nodeRepository.getNodes(fixture.app1).get(3).hostname(), Agent.system, "Failing to unit test"); @@ -161,9 +162,15 @@ public class PeriodicApplicationMaintainerTest { // Exhaust initial wait period clock.advance(Duration.ofMinutes(30).plus(Duration.ofSeconds(1))); - // First deployment of applications + // Will not do any deployments, as bootstrapping is still in progress + fixture.runApplicationMaintainer(); + assertEquals("No deployment expected", 2, fixture.deployer.redeployments); + + // First deployment of applications will happen now, as bootstrapping is done + fixture.setBootstrapping(false); fixture.runApplicationMaintainer(); assertEquals("No deployment expected", 4, fixture.deployer.redeployments); + Instant firstDeployTime = clock.instant(); assertEquals(firstDeployTime, fixture.deployer.lastDeployTime(fixture.app1).get()); assertEquals(firstDeployTime, fixture.deployer.lastDeployTime(fixture.app2).get()); @@ -186,8 +193,9 @@ public class PeriodicApplicationMaintainerTest { public void queues_all_eligible_applications_for_deployment() throws Exception { fixture.activate(); - // Exhaust initial wait period + // Exhaust initial wait period and set bootstrapping to be done clock.advance(Duration.ofMinutes(30).plus(Duration.ofSeconds(1))); + fixture.setBootstrapping(false); // Lock deployer to simulate slow deployments fixture.deployer.lock().lockInterruptibly(); @@ -298,6 +306,10 @@ public class PeriodicApplicationMaintainerTest { return NodeList.copyOf(nodeRepository.getNodes(NodeType.tenant, states)); } + void setBootstrapping(boolean bootstrapping) { + deployer.setBootstrapping(bootstrapping); + } + } private static class TestablePeriodicApplicationMaintainer extends PeriodicApplicationMaintainer { |