summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorValerij Fredriksen <freva@users.noreply.github.com>2021-04-09 12:54:07 +0200
committerGitHub <noreply@github.com>2021-04-09 12:54:07 +0200
commite41d94968e06897d751de0c073f6be012468ae85 (patch)
treee53f862e9591c5d9726026973c98c43dfd2065b2 /controller-server
parentefd8a4ed2e94a1a6cec85ecf9c0a5df82bf7daad (diff)
parent93ed895d6b945a120d91893d86a2c4c05f5e544f (diff)
Merge pull request #17334 from vespa-engine/andreer/archive-bucket-count-metric
add archive bucket count metric
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ArchiveAccessMaintainer.java14
-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/maintenance/ArchiveAccessMaintainerTest.java16
3 files changed, 28 insertions, 4 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ArchiveAccessMaintainer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ArchiveAccessMaintainer.java
index 826b411df9e..97385da468b 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ArchiveAccessMaintainer.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ArchiveAccessMaintainer.java
@@ -2,6 +2,7 @@
package com.yahoo.vespa.hosted.controller.maintenance;
import com.google.common.collect.Maps;
+import com.yahoo.jdisc.Metric;
import com.yahoo.vespa.hosted.controller.Controller;
import com.yahoo.vespa.hosted.controller.api.integration.archive.ArchiveBucketDb;
import com.yahoo.vespa.hosted.controller.api.integration.archive.ArchiveService;
@@ -10,6 +11,7 @@ import com.yahoo.vespa.hosted.controller.tenant.CloudTenant;
import com.yahoo.vespa.hosted.controller.tenant.Tenant;
import java.time.Duration;
+import java.util.Map;
import java.util.stream.Collectors;
/**
@@ -19,19 +21,29 @@ import java.util.stream.Collectors;
*/
public class ArchiveAccessMaintainer extends ControllerMaintainer {
+ private static final String bucketCountMetricName = "archive.bucketCount";
+
private final ArchiveBucketDb archiveBucketDb;
private final ArchiveService archiveService;
private final ZoneRegistry zoneRegistry;
+ private final Metric metric;
- public ArchiveAccessMaintainer(Controller controller, Duration interval) {
+ public ArchiveAccessMaintainer(Controller controller, Metric metric, Duration interval) {
super(controller, interval);
this.archiveBucketDb = controller.archiveBucketDb();
this.archiveService = controller.serviceRegistry().archiveService();
this.zoneRegistry = controller().zoneRegistry();
+ this.metric = metric;
}
@Override
protected boolean maintain() {
+
+ // Count buckets - so we can alert if we get close to the account limit of 1000
+ zoneRegistry.zones().all().ids().forEach(zoneId ->
+ metric.set(bucketCountMetricName, archiveBucketDb.buckets(zoneId).size(),
+ metric.createContext(Map.of("zone", zoneId.value()))));
+
var tenantArchiveAccessRoles = controller().tenants().asList().stream()
.filter(t -> t instanceof CloudTenant)
.map(t -> (CloudTenant) t)
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 ad41fc7c9e8..19199c5a281 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
@@ -66,7 +66,7 @@ public class ControllerMaintenance extends AbstractComponent {
maintainers.add(new EndpointCertificateMaintainer(controller, intervals.endpointCertificateMaintainer));
maintainers.add(new TrafficShareUpdater(controller, intervals.trafficFractionUpdater));
maintainers.add(new ArchiveUriUpdater(controller, intervals.archiveUriUpdater));
- maintainers.add(new ArchiveAccessMaintainer(controller, intervals.archiveAccessMaintainer));
+ maintainers.add(new ArchiveAccessMaintainer(controller, metric, intervals.archiveAccessMaintainer));
maintainers.add(new TenantRoleMaintainer(controller, intervals.tenantRoleMaintainer));
maintainers.add(new ChangeRequestMaintainer(controller, intervals.changeRequestMaintainer));
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ArchiveAccessMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ArchiveAccessMaintainerTest.java
index 89072519c7d..56247b04ac6 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ArchiveAccessMaintainerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ArchiveAccessMaintainerTest.java
@@ -3,6 +3,7 @@ package com.yahoo.vespa.hosted.controller.maintenance;
import com.yahoo.config.provision.TenantName;
import com.yahoo.config.provision.zone.ZoneId;
+import com.yahoo.jdisc.test.MockMetric;
import com.yahoo.vespa.flags.Flags;
import com.yahoo.vespa.flags.InMemoryFlagSource;
import com.yahoo.vespa.flags.PermanentFlags;
@@ -18,6 +19,7 @@ import org.junit.Test;
import java.time.Duration;
import java.util.Map;
import java.util.Optional;
+import java.util.stream.Collectors;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
@@ -40,13 +42,23 @@ public class ArchiveAccessMaintainerTest extends ControllerContainerCloudTest {
var tenant1 = createTenantWithAccessRole(tester, "tenant1", tenant1role);
createTenantWithAccessRole(tester, "tenant2", tenant2role);
- tester.controller().archiveBucketDb().archiveUriFor(ZoneId.from("prod.us-east-3"), tenant1);
+ ZoneId testZone = ZoneId.from("prod.us-east-3");
+ tester.controller().archiveBucketDb().archiveUriFor(testZone, tenant1);
var testBucket = new ArchiveBucket("bucketName", "keyArn").withTenant(tenant1);
MockArchiveService archiveService = (MockArchiveService) tester.controller().serviceRegistry().archiveService();
assertNull(archiveService.authorizedIamRoles.get(testBucket));
- new ArchiveAccessMaintainer(containerTester.controller(), Duration.ofMinutes(10)).maintain();
+ MockMetric metric = new MockMetric();
+ new ArchiveAccessMaintainer(containerTester.controller(), metric, Duration.ofMinutes(10)).maintain();
assertEquals(Map.of(tenant1, tenant1role), archiveService.authorizedIamRoles.get(testBucket));
+
+ var expected = Map.of("archive.bucketCount",
+ tester.controller().zoneRegistry().zones().all().ids().stream()
+ .collect(Collectors.toMap(
+ zone -> Map.of("zone", zone.value()),
+ zone -> zone.equals(testZone) ? 1d : 0d)));
+
+ assertEquals(expected, metric.metrics());
}
private TenantName createTenantWithAccessRole(ControllerTester tester, String tenantName, String role) {