aboutsummaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2018-10-24 08:45:31 +0200
committerGitHub <noreply@github.com>2018-10-24 08:45:31 +0200
commitd0c7bb79ab5d79745cf686c8388972f4d3c7143c (patch)
treefcddfa8c08db67f3bff0bf7688dae5ba5dc5416c /controller-server
parentfce53d10fb4ba25d8c0449b18eebd9eef830cdf1 (diff)
parentc49cdc0e0ef900cb4cda93bcfdb88692767ae46e (diff)
Merge pull request #7400 from vespa-engine/mpolden/remove-pr-instances
Remove PR instances
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintenance.java3
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DatabaseMaintainer.java40
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DatabaseMaintainerTest.java46
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/responses/maintenance.json3
4 files changed, 92 insertions, 0 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintenance.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintenance.java
index 33555c08a43..a00c2ccb4ed 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintenance.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintenance.java
@@ -48,6 +48,7 @@ public class ControllerMaintenance extends AbstractComponent {
private final OsVersionStatusUpdater osVersionStatusUpdater;
private final JobRunner jobRunner;
private final ContactInformationMaintainer contactInformationMaintainer;
+ private final DatabaseMaintainer databaseMaintainer;
@SuppressWarnings("unused") // instantiated by Dependency Injection
public ControllerMaintenance(MaintainerConfig maintainerConfig, ApiAuthorityConfig apiAuthorityConfig, Controller controller, CuratorDb curator,
@@ -74,6 +75,7 @@ public class ControllerMaintenance extends AbstractComponent {
osUpgraders = osUpgraders(controller, jobControl);
osVersionStatusUpdater = new OsVersionStatusUpdater(controller, maintenanceInterval, jobControl);
contactInformationMaintainer = new ContactInformationMaintainer(controller, Duration.ofHours(12), jobControl, organization, apiAuthorityConfig);
+ databaseMaintainer = new DatabaseMaintainer(controller, maintenanceInterval, jobControl);
}
public Upgrader upgrader() { return upgrader; }
@@ -100,6 +102,7 @@ public class ControllerMaintenance extends AbstractComponent {
osVersionStatusUpdater.deconstruct();
jobRunner.deconstruct();
contactInformationMaintainer.deconstruct();
+ databaseMaintainer.deconstruct();
}
/** Create one OS upgrader per cloud found in the zone registry of controller */
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DatabaseMaintainer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DatabaseMaintainer.java
new file mode 100644
index 00000000000..ac368b00b82
--- /dev/null
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DatabaseMaintainer.java
@@ -0,0 +1,40 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.hosted.controller.maintenance;
+
+import com.yahoo.vespa.hosted.controller.Application;
+import com.yahoo.vespa.hosted.controller.Controller;
+
+import java.time.Duration;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * Runs maintenance operations for the controller database, such as removing stale entries.
+ *
+ * @author mpolden
+ */
+public class DatabaseMaintainer extends Maintainer {
+
+ public DatabaseMaintainer(Controller controller, Duration interval, JobControl jobControl) {
+ super(controller, interval, jobControl);
+ }
+
+ @Override
+ protected void maintain() {
+ removePullRequestInstances();
+ }
+
+ /** Pull request instances are no longer created. This removes all existing entries */
+ // TODO: Remove after 2018-11-01
+ // TODO: Remove ApplicationList#notPullRequest and its usages
+ private void removePullRequestInstances() {
+ List<Application> pullRequestInstances = controller().applications().asList().stream()
+ .filter(a -> a.id().instance().value().matches("^(default-pr)?\\d+$"))
+ .collect(Collectors.toList());
+
+ pullRequestInstances.forEach(application -> {
+ controller().applications().lockIfPresent(application.id(), (lockedApplication) -> controller().curator().removeApplication(lockedApplication.get().id()));
+ });
+ }
+
+}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DatabaseMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DatabaseMaintainerTest.java
new file mode 100644
index 00000000000..bdb55d0b546
--- /dev/null
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DatabaseMaintainerTest.java
@@ -0,0 +1,46 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.hosted.controller.maintenance;
+
+import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.config.provision.Environment;
+import com.yahoo.vespa.hosted.controller.Application;
+import com.yahoo.vespa.hosted.controller.application.ApplicationPackage;
+import com.yahoo.vespa.hosted.controller.deployment.ApplicationPackageBuilder;
+import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester;
+import org.junit.Test;
+
+import java.time.Duration;
+import java.time.Instant;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * @author mpolden
+ */
+public class DatabaseMaintainerTest {
+
+ @Test
+ public void remove_pull_request_instances() {
+ DeploymentTester tester = new DeploymentTester();
+ DatabaseMaintainer maintainer = new DatabaseMaintainer(tester.controller(), Duration.ofDays(1), new JobControl(tester.controller().curator()));
+
+ // Deploy regular application
+ Application app1 = tester.createApplication("app1", "tenant1", 1, 1);
+ ApplicationPackage applicationPackage = new ApplicationPackageBuilder()
+ .environment(Environment.prod)
+ .region("us-east-3")
+ .build();
+ tester.deployCompletely(app1, applicationPackage);
+
+ // Create pr instance (no longer permitted through ApplicationController so we have to cheat)
+ Application app2 = new Application(ApplicationId.from("tenant1", "app1", "default-pr1"), Instant.now());
+ tester.controller().curator().writeApplication(app2);
+ assertTrue(tester.applications().get(app2.id()).isPresent());
+
+ maintainer.maintain();
+ assertTrue("Regular application is not deleted", tester.applications().get(app1.id()).isPresent());
+ assertFalse("PR instance is deleted", tester.applications().get(app2.id()).isPresent());
+ }
+
+}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/responses/maintenance.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/responses/maintenance.json
index 6a71e524ae4..707b71b772f 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/responses/maintenance.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/responses/maintenance.json
@@ -13,6 +13,9 @@
"name": "ContactInformationMaintainer"
},
{
+ "name": "DatabaseMaintainer"
+ },
+ {
"name": "DefaultOsUpgrader"
},
{