summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOla Aunrønning <olaa@verizonmedia.com>2019-06-05 14:09:32 +0200
committerOla Aunrønning <olaa@verizonmedia.com>2019-06-05 14:09:32 +0200
commited828e3ff1b706c3809582217c1a889bcca27637 (patch)
tree45949e94e356714041458afd9c2d6f7ae0bae54a
parentfe1a5ab9f27b7be4d15aaf2ee640e86e79701e14 (diff)
Enable maintainer in Main
Filter on AWS zones Implemented ofCloud in ZoneFilterMock
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/zone/ZoneFilterMock.java6
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainer.java4
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CostReportMaintainerTest.java12
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainerTest.java25
4 files changed, 37 insertions, 10 deletions
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/zone/ZoneFilterMock.java b/config-provisioning/src/main/java/com/yahoo/config/provision/zone/ZoneFilterMock.java
index 528b1974f7d..1ad4c227d81 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/zone/ZoneFilterMock.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/zone/ZoneFilterMock.java
@@ -1,6 +1,7 @@
// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.config.provision.zone;
+import com.yahoo.config.provision.CloudName;
import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.RegionName;
@@ -77,6 +78,11 @@ public class ZoneFilterMock implements ZoneList {
return Collections.unmodifiableList(zones);
}
+ @Override
+ public ZoneList ofCloud(CloudName cloud) {
+ return filter(zoneId -> zoneId.cloud().equals(cloud));
+ }
+
private ZoneFilterMock filter(Predicate<ZoneId> condition) {
return new ZoneFilterMock(zones.stream().filter(negate ? condition.negate() : condition).collect(Collectors.toList()), false);
}
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainer.java
index 5ed7a14836e..9e0db7cc2e8 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainer.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainer.java
@@ -1,6 +1,7 @@
// Copyright 2019 Oath Inc. 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.CloudName;
import com.yahoo.config.provision.SystemName;
import com.yahoo.jdisc.Metric;
import com.yahoo.vespa.hosted.controller.Controller;
@@ -44,7 +45,7 @@ public class ResourceMeterMaintainer extends Maintainer {
Clock clock,
Metric metric,
ResourceSnapshotConsumer resourceSnapshotConsumer) {
- super(controller, interval, jobControl, ResourceMeterMaintainer.class.getSimpleName(), Set.of(SystemName.cd));
+ super(controller, interval, jobControl, ResourceMeterMaintainer.class.getSimpleName(), Set.of(SystemName.cd, SystemName.main));
this.clock = clock;
this.nodeRepository = nodeRepository;
this.metric = metric;
@@ -77,6 +78,7 @@ public class ResourceMeterMaintainer extends Maintainer {
private List<NodeRepositoryNode> getNodes() {
return controller().zoneRegistry().zones()
+ .ofCloud(CloudName.from("aws"))
.reachable().ids().stream()
.flatMap(zoneId -> uncheck(() -> nodeRepository.listNodes(zoneId, true).nodes().stream()))
.filter(node -> node.getOwner() != null && !node.getOwner().getTenant().equals("hosted-vespa"))
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CostReportMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CostReportMaintainerTest.java
index 890af974a0e..5e212a0623d 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CostReportMaintainerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CostReportMaintainerTest.java
@@ -1,5 +1,6 @@
package com.yahoo.vespa.hosted.controller.maintenance;
+import com.yahoo.config.provision.zone.ZoneId;
import com.yahoo.vespa.hosted.controller.ControllerTester;
import com.yahoo.vespa.hosted.controller.integration.NodeRepositoryClientMock;
import com.yahoo.vespa.hosted.controller.restapi.cost.CostReportConsumer;
@@ -10,13 +11,20 @@ import org.junit.Test;
import java.time.Clock;
import java.time.Duration;
import java.time.Instant;
-import java.time.ZoneId;
+import java.util.ArrayList;
+import java.util.List;
public class CostReportMaintainerTest {
@Test
public void maintain() {
ControllerTester tester = new ControllerTester();
+ List<ZoneId> zones = new ArrayList<>();
+ zones.add(ZoneId.from("prod", "us-east-3", "yahoo"));
+ zones.add(ZoneId.from("prod", "us-west-1", "yahoo"));
+ zones.add(ZoneId.from("prod", "us-central-1", "yahoo"));
+ zones.add(ZoneId.from("prod", "eu-west-1", "yahoo"));
+ tester.zoneRegistry().setZones(zones);
CostReportConsumer mockConsumer = csv -> Assert.assertEquals(csv,
"Date,Property,Reserved Cpu Cores,Reserved Memory GB,Reserved Disk Space GB,Usage Fraction\n" +
@@ -42,7 +50,7 @@ public class CostReportMaintainerTest {
mockConsumer,
new JobControl(tester.curator()),
new NodeRepositoryClientMock(),
- Clock.fixed(Instant.EPOCH, ZoneId.of("UTC")),
+ Clock.fixed(Instant.EPOCH, java.time.ZoneId.of("UTC")),
costConfig);
maintainer.maintain();
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainerTest.java
index df2a4b5ca7f..9c6ba6aca21 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainerTest.java
@@ -1,8 +1,10 @@
// Copyright 2019 Oath Inc. 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.zone.ZoneId;
import com.yahoo.vespa.hosted.controller.ControllerTester;
import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.vespa.hosted.controller.api.integration.noderepository.NodeRepositoryNode;
import com.yahoo.vespa.hosted.controller.api.integration.resource.ResourceSnapshot;
import com.yahoo.vespa.hosted.controller.api.integration.stubs.MockResourceSnapshotConsumer;
import com.yahoo.vespa.hosted.controller.integration.NodeRepositoryClientMock;
@@ -10,6 +12,9 @@ import com.yahoo.vespa.hosted.controller.integration.MetricsMock;
import org.junit.Test;
import java.time.Duration;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
import java.util.Map;
import static org.junit.Assert.*;
@@ -27,6 +32,12 @@ public class ResourceMeterMaintainerTest {
@Test
public void testMaintainer() {
ControllerTester tester = new ControllerTester();
+ List<ZoneId> zones = new ArrayList<>();
+ zones.add(ZoneId.from("prod", "us-east-3"));
+ zones.add(ZoneId.from("prod", "us-west-1"));
+ zones.add(ZoneId.from("prod", "us-central-1"));
+ zones.add(ZoneId.from("prod", "aws-us-east-1", "aws"));
+ tester.zoneRegistry().setZones(zones);
ResourceMeterMaintainer resourceMeterMaintainer = new ResourceMeterMaintainer(tester.controller(), Duration.ofMinutes(5), new JobControl(tester.curator()), nodeRepository, tester.clock(), metrics, snapshotConsumer);
resourceMeterMaintainer.maintain();
Map<ApplicationId, ResourceSnapshot> consumedResources = snapshotConsumer.consumedResources();
@@ -36,15 +47,15 @@ public class ResourceMeterMaintainerTest {
ResourceSnapshot app1 = consumedResources.get(ApplicationId.from("tenant1", "app1", "default"));
ResourceSnapshot app2 = consumedResources.get(ApplicationId.from("tenant2", "app2", "default"));
- assertEquals(96, app1.getResourceAllocation().getCpuCores(), DELTA);
- assertEquals(96, app1.getResourceAllocation().getMemoryGb(), DELTA);
- assertEquals(2000, app1.getResourceAllocation().getDiskGb(), DELTA);
+ assertEquals(24, app1.getResourceAllocation().getCpuCores(), DELTA);
+ assertEquals(24, app1.getResourceAllocation().getMemoryGb(), DELTA);
+ assertEquals(500, app1.getResourceAllocation().getDiskGb(), DELTA);
- assertEquals(160, app2.getResourceAllocation().getCpuCores(), DELTA);
- assertEquals(96, app2.getResourceAllocation().getMemoryGb(), DELTA);
- assertEquals(2000, app2.getResourceAllocation().getDiskGb(), DELTA);
+ assertEquals(40, app2.getResourceAllocation().getCpuCores(), DELTA);
+ assertEquals(24, app2.getResourceAllocation().getMemoryGb(), DELTA);
+ assertEquals(500, app2.getResourceAllocation().getDiskGb(), DELTA);
assertEquals(tester.clock().millis()/1000, metrics.getMetric("metering_last_reported"));
- assertEquals(4448.0d, (Double) metrics.getMetric("metering_total_reported"), DELTA);
+ assertEquals(1112.0d, (Double) metrics.getMetric("metering_total_reported"), DELTA);
}
} \ No newline at end of file