From 2095cf3077576d48c51ecbb5d00612a0763d3524 Mon Sep 17 00:00:00 2001 From: Jon Marius Venstad Date: Fri, 4 Sep 2020 10:19:18 +0200 Subject: Only add tombstones to deactivation in manual environments --- .../hosted/controller/ApplicationController.java | 3 +- .../vespa/hosted/controller/ControllerTest.java | 39 +++++++++++++++++++++- .../integration/ApplicationStoreMock.java | 4 +++ 3 files changed, 44 insertions(+), 2 deletions(-) (limited to 'controller-server/src') diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java index d8abc77ed06..7135cbe77c9 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java @@ -725,7 +725,8 @@ public class ApplicationController { // ok; already gone } finally { controller.routing().policies().refresh(application.get().id().instance(instanceName), application.get().deploymentSpec(), zone); - applicationStore.putMetaTombstone(id, clock.instant()); + if (zone.environment().isManuallyDeployed()) + applicationStore.putMetaTombstone(id, clock.instant()); } return application.with(instanceName, instance -> instance.withoutDeploymentIn(zone)); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java index 0290c72b9eb..942c9ac037b 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java @@ -48,6 +48,7 @@ import java.time.Duration; import java.time.Instant; import java.util.Collection; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.function.Function; @@ -60,6 +61,7 @@ import static com.yahoo.vespa.hosted.controller.api.integration.deployment.JobTy import static com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType.productionUsWest1; import static com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType.stagingTest; import static com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType.systemTest; +import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; @@ -181,6 +183,27 @@ public class ControllerTest { assertNull("Zone was removed", context.instance().deployments().get(productionUsWest1.zone(main))); assertNull("Deployment job was removed", context.instanceJobs().get(productionUsWest1)); + + // Submission has stored application meta. + assertArrayEquals(applicationPackage.metaDataZip(), + tester.controllerTester().serviceRegistry().applicationStore() + .getMeta(context.instanceId()) + .get(tester.clock().instant())); + + // Meta data tombstone placed on delete + tester.clock().advance(Duration.ofSeconds(1)); + context.submit(ApplicationPackage.deploymentRemoval()); + tester.clock().advance(Duration.ofSeconds(1)); + context.submit(ApplicationPackage.deploymentRemoval()); + tester.applications().deleteApplication(context.application().id(), + tester.controllerTester().credentialsFor(context.instanceId().tenant())); + assertArrayEquals(new byte[0], + tester.controllerTester().serviceRegistry().applicationStore() + .getMeta(context.instanceId()) + .get(tester.clock().instant())); + + assertNull(tester.controllerTester().serviceRegistry().applicationStore() + .getMeta(context.deploymentIdIn(productionUsWest1.zone(main)))); } @Test @@ -635,7 +658,7 @@ public class ControllerTest { tester.configServer().application(context.instanceId(), zone).get().activated()); assertTrue("No job status added", context.instanceJobs().isEmpty()); - assertEquals("DeploymentSpec is not persisted", DeploymentSpec.empty, context.application().deploymentSpec()); + assertEquals("DeploymentSpec is not stored", DeploymentSpec.empty, context.application().deploymentSpec()); // Verify zone supports shared layer 4 and shared routing methods Set routingMethods = tester.controller().routing().endpointsOf(context.deploymentIdIn(zone)) @@ -644,6 +667,20 @@ public class ControllerTest { .map(Endpoint::routingMethod) .collect(Collectors.toSet()); assertEquals(routingMethods, Set.of(RoutingMethod.shared, RoutingMethod.sharedLayer4)); + + // Deployment has stored application meta. + assertArrayEquals(applicationPackage.metaDataZip(), + tester.controllerTester().serviceRegistry().applicationStore() + .getMeta(new DeploymentId(context.instanceId(), zone)) + .get(tester.clock().instant())); + + // Meta data tombstone placed on delete + tester.clock().advance(Duration.ofSeconds(1)); + tester.controller().applications().deactivate(context.instanceId(), zone); + assertArrayEquals(new byte[0], + tester.controllerTester().serviceRegistry().applicationStore() + .getMeta(new DeploymentId(context.instanceId(), zone)) + .get(tester.clock().instant())); } @Test diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ApplicationStoreMock.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ApplicationStoreMock.java index 81bda23146e..59e2b6c04d8 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ApplicationStoreMock.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ApplicationStoreMock.java @@ -141,4 +141,8 @@ public class ApplicationStoreMock implements ApplicationStore { } } + public NavigableMap getMeta(ApplicationId id) { return meta.get(id); } + + public NavigableMap getMeta(DeploymentId id) { return metaManual.get(id); } + } -- cgit v1.2.3