summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2020-09-04 10:19:18 +0200
committerJon Marius Venstad <venstad@gmail.com>2020-09-04 10:19:18 +0200
commit2095cf3077576d48c51ecbb5d00612a0763d3524 (patch)
tree077585c02b19ea5a03ce9dff08b813eb8454f293
parent182b2caa991dcb495457049185d42ec678e9c406 (diff)
Only add tombstones to deactivation in manual environments
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java3
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java39
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ApplicationStoreMock.java4
3 files changed, 44 insertions, 2 deletions
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<RoutingMethod> 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<Instant, byte[]> getMeta(ApplicationId id) { return meta.get(id); }
+
+ public NavigableMap<Instant, byte[]> getMeta(DeploymentId id) { return metaManual.get(id); }
+
}