summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@yahooinc.com>2022-05-03 16:06:14 +0200
committerValerij Fredriksen <valerijf@yahooinc.com>2022-05-05 14:55:53 +0200
commit9624701b8f3fa93779aa6fb352aacebb6dd138ac (patch)
treec2f490284b52d9f76b8cc608714ee0ab752fae9a /controller-server
parent25e3c3a9ac64309593433e87ade9d608c4c2c2e4 (diff)
Generalize ContainerImageExpirer to ArtifactExpirer
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ArtifactExpirer.java (renamed from controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ContainerImageExpirer.java)32
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintenance.java2
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ArtifactRegistryMock.java (renamed from controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ContainerRegistryMock.java)20
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ServiceRegistryMock.java4
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ArtifactExpirerTest.java (renamed from controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ContainerImageExpirerTest.java)19
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/responses/maintenance.json6
6 files changed, 41 insertions, 42 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ContainerImageExpirer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ArtifactExpirer.java
index c87dd262fa3..a7cff2fdda0 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ContainerImageExpirer.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ArtifactExpirer.java
@@ -4,7 +4,7 @@ package com.yahoo.vespa.hosted.controller.maintenance;
import com.yahoo.component.Version;
import com.yahoo.config.provision.SystemName;
import com.yahoo.vespa.hosted.controller.Controller;
-import com.yahoo.vespa.hosted.controller.api.integration.container.ContainerImage;
+import com.yahoo.vespa.hosted.controller.api.integration.artifact.Artifact;
import com.yahoo.vespa.hosted.controller.versions.VersionStatus;
import com.yahoo.vespa.hosted.controller.versions.VespaVersion;
@@ -19,17 +19,17 @@ import java.util.logging.Logger;
import java.util.stream.Collectors;
/**
- * Periodically expire unused container images.
+ * Periodically expire unused artifacts, e.g. container images and RPMs.
*
* @author mpolden
*/
-public class ContainerImageExpirer extends ControllerMaintainer {
+public class ArtifactExpirer extends ControllerMaintainer {
- private static final Logger log = Logger.getLogger(ContainerImageExpirer.class.getName());
+ private static final Logger log = Logger.getLogger(ArtifactExpirer.class.getName());
private static final Duration MIN_AGE = Duration.ofDays(14);
- public ContainerImageExpirer(Controller controller, Duration interval) {
+ public ArtifactExpirer(Controller controller, Duration interval) {
super(controller, interval, null, expiringSystems());
}
@@ -37,31 +37,31 @@ public class ContainerImageExpirer extends ControllerMaintainer {
protected double maintain() {
Instant now = controller().clock().instant();
VersionStatus versionStatus = controller().readVersionStatus();
- List<ContainerImage> imagesToExpire = controller().serviceRegistry().containerRegistry().list().stream()
- .filter(image -> isExpired(image, now, versionStatus))
+ List<Artifact> artifactsToExpire = controller().serviceRegistry().containerRegistry().list().stream()
+ .filter(artifact -> isExpired(artifact, now, versionStatus))
.collect(Collectors.toList());
- if (!imagesToExpire.isEmpty()) {
- log.log(Level.INFO, "Expiring " + imagesToExpire.size() + " container images: " + imagesToExpire);
- controller().serviceRegistry().containerRegistry().deleteAll(imagesToExpire);
+ if (!artifactsToExpire.isEmpty()) {
+ log.log(Level.INFO, "Expiring " + artifactsToExpire.size() + " artifacts: " + artifactsToExpire);
+ controller().serviceRegistry().containerRegistry().deleteAll(artifactsToExpire);
}
return 1.0;
}
- /** Returns whether given image is expired */
- private boolean isExpired(ContainerImage image, Instant now, VersionStatus versionStatus) {
+ /** Returns whether given artifact is expired */
+ private boolean isExpired(Artifact artifact, Instant now, VersionStatus versionStatus) {
List<VespaVersion> versions = versionStatus.versions();
if (versions.isEmpty()) return false;
- if (versionStatus.isActive(image.version())) return false;
- if (image.createdAt().isAfter(now.minus(MIN_AGE))) return false;
+ if (versionStatus.isActive(artifact.version())) return false;
+ if (artifact.createdAt().isAfter(now.minus(MIN_AGE))) return false;
Version maxVersion = versions.stream().map(VespaVersion::versionNumber).max(Comparator.naturalOrder()).get();
- if (image.version().isAfter(maxVersion)) return false; // A future version
+ if (artifact.version().isAfter(maxVersion)) return false; // A future version
return true;
}
- /** Returns systems where images can be expired */
+ /** Returns systems where artifacts can be expired */
private static Set<SystemName> expiringSystems() {
// Run only in public and main. Public systems have distinct container registries, while main and CD have
// shared registries.
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 041d0694ca9..e929940b68b 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
@@ -63,7 +63,7 @@ public class ControllerMaintenance extends AbstractComponent {
maintainers.add(new ResourceTagMaintainer(controller, intervals.resourceTagMaintainer, controller.serviceRegistry().resourceTagger()));
maintainers.add(new SystemRoutingPolicyMaintainer(controller, intervals.systemRoutingPolicyMaintainer));
maintainers.add(new ApplicationMetaDataGarbageCollector(controller, intervals.applicationMetaDataGarbageCollector));
- maintainers.add(new ContainerImageExpirer(controller, intervals.containerImageExpirer));
+ maintainers.add(new ArtifactExpirer(controller, intervals.containerImageExpirer));
maintainers.add(new HostInfoUpdater(controller, intervals.hostInfoUpdater));
maintainers.add(new ReindexingTriggerer(controller, intervals.reindexingTriggerer));
maintainers.add(new EndpointCertificateMaintainer(controller, intervals.endpointCertificateMaintainer));
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ContainerRegistryMock.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ArtifactRegistryMock.java
index 4791017548d..1d3974fe7a7 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ContainerRegistryMock.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ArtifactRegistryMock.java
@@ -1,8 +1,8 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.controller.integration;
-import com.yahoo.vespa.hosted.controller.api.integration.container.ContainerImage;
-import com.yahoo.vespa.hosted.controller.api.integration.container.ContainerRegistry;
+import com.yahoo.vespa.hosted.controller.api.integration.artifact.Artifact;
+import com.yahoo.vespa.hosted.controller.api.integration.artifact.ArtifactRegistry;
import java.util.Comparator;
import java.util.HashMap;
@@ -13,26 +13,26 @@ import java.util.stream.Collectors;
/**
* @author mpolden
*/
-public class ContainerRegistryMock implements ContainerRegistry {
+public class ArtifactRegistryMock implements ArtifactRegistry {
- private static final Comparator<ContainerImage> comparator = Comparator.comparing(ContainerImage::registry)
- .thenComparing(ContainerImage::repository)
- .thenComparing(ContainerImage::version);
+ private static final Comparator<Artifact> comparator = Comparator.comparing((Artifact artifact) -> artifact.registry().orElse(""))
+ .thenComparing(artifact -> artifact.repository().orElse(""))
+ .thenComparing(Artifact::version);
- private final Map<String, ContainerImage> images = new HashMap<>();
+ private final Map<String, Artifact> images = new HashMap<>();
- public ContainerRegistryMock add(ContainerImage image) {
+ public ArtifactRegistryMock add(Artifact image) {
images.put(image.id(), image);
return this;
}
@Override
- public void deleteAll(List<ContainerImage> images) {
+ public void deleteAll(List<Artifact> images) {
images.forEach(image -> this.images.remove(image.id()));
}
@Override
- public List<ContainerImage> list() {
+ public List<Artifact> list() {
return images.values().stream().sorted(comparator).collect(Collectors.toUnmodifiableList());
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ServiceRegistryMock.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ServiceRegistryMock.java
index 0afb1e67a85..0b37c4ebb8d 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ServiceRegistryMock.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ServiceRegistryMock.java
@@ -82,7 +82,7 @@ public class ServiceRegistryMock extends AbstractComponent implements ServiceReg
private final MockResourceTagger mockResourceTagger = new MockResourceTagger();
private final RoleService roleService = new MockRoleService();
private final BillingController billingController = new MockBillingController(clock);
- private final ContainerRegistryMock containerRegistry = new ContainerRegistryMock();
+ private final ArtifactRegistryMock containerRegistry = new ArtifactRegistryMock();
private final NoopTenantSecretService tenantSecretService = new NoopTenantSecretService();
private final ArchiveService archiveService = new MockArchiveService();
private final MockChangeRequestClient changeRequestClient = new MockChangeRequestClient();
@@ -236,7 +236,7 @@ public class ServiceRegistryMock extends AbstractComponent implements ServiceReg
}
@Override
- public ContainerRegistryMock containerRegistry() {
+ public ArtifactRegistryMock containerRegistry() {
return containerRegistry;
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ContainerImageExpirerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ArtifactExpirerTest.java
index baebf7239ee..ddc1c0b599f 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ContainerImageExpirerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ArtifactExpirerTest.java
@@ -2,10 +2,10 @@
package com.yahoo.vespa.hosted.controller.maintenance;
import com.yahoo.component.Version;
-import com.yahoo.vespa.hosted.controller.api.integration.container.ContainerImage;
+import com.yahoo.vespa.hosted.controller.api.integration.artifact.Artifact;
import com.yahoo.vespa.hosted.controller.api.integration.container.ContainerImage.Architecture;
import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester;
-import com.yahoo.vespa.hosted.controller.integration.ContainerRegistryMock;
+import com.yahoo.vespa.hosted.controller.integration.ArtifactRegistryMock;
import org.junit.Test;
import java.time.Duration;
@@ -18,19 +18,18 @@ import static org.junit.Assert.assertEquals;
/**
* @author mpolden
*/
-public class ContainerImageExpirerTest {
+public class ArtifactExpirerTest {
@Test
public void maintain() {
DeploymentTester tester = new DeploymentTester();
- ContainerImageExpirer expirer = new ContainerImageExpirer(tester.controller(), Duration.ofDays(1));
- ContainerRegistryMock registry = tester.controllerTester().serviceRegistry().containerRegistry();
+ ArtifactExpirer expirer = new ArtifactExpirer(tester.controller(), Duration.ofDays(1));
+ ArtifactRegistryMock registry = tester.controllerTester().serviceRegistry().containerRegistry();
Instant instant = tester.clock().instant();
- ContainerImage image0 = new ContainerImage("image0", "registry.example.com", "vespa/vespa", instant, Version.fromString("7.1"), Optional.empty());
- ContainerImage image1 = new ContainerImage("image1", "registry.example.com", "vespa/vespa", instant, Version.fromString("7.2"), Optional.of(Architecture.amd64));
- ContainerImage image2 = new ContainerImage("image2", "registry.example.com", "vespa/vespa", instant, Version.fromString("7.4"), Optional.of(Architecture.amd64));
-
+ Artifact image0 = new Artifact("image0", "registry.example.com", "vespa/vespa", instant, Version.fromString("7.1"), Optional.empty());
+ Artifact image1 = new Artifact("image1", "registry.example.com", "vespa/vespa", instant, Version.fromString("7.2"), Optional.of(Architecture.amd64));
+ Artifact image2 = new Artifact("image2", "registry.example.com", "vespa/vespa", instant, Version.fromString("7.4"), Optional.of(Architecture.amd64));
registry.add(image0)
.add(image1)
.add(image2);
@@ -53,7 +52,7 @@ public class ContainerImageExpirerTest {
assertEquals(List.of(image1, image2), registry.list());
// A new version becomes active. The active and future version are kept
- ContainerImage image3 = new ContainerImage("image3", "registry.example.com", "vespa/vespa", tester.clock().instant(), Version.fromString("7.3"), Optional.of(Architecture.amd64));
+ Artifact image3 = new Artifact("image3", "registry.example.com", "vespa/vespa", tester.clock().instant(), Version.fromString("7.3"), Optional.of(Architecture.amd64));
registry.add(image3);
tester.controllerTester().upgradeSystem(image3.version());
expirer.maintain();
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 79e11fa1140..8b2e5578ae0 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": "ArchiveUriUpdater"
},
{
+ "name": "ArtifactExpirer"
+ },
+ {
"name": "BillingDatabaseMaintainer"
},
{
@@ -28,9 +31,6 @@
"name": "ContactInformationMaintainer"
},
{
- "name": "ContainerImageExpirer"
- },
- {
"name": "CostReportMaintainer"
},
{