diff options
author | Ola Aunrønning <olaa@verizonmedia.com> | 2019-06-05 14:09:32 +0200 |
---|---|---|
committer | Ola Aunrønning <olaa@verizonmedia.com> | 2019-06-05 14:09:32 +0200 |
commit | ed828e3ff1b706c3809582217c1a889bcca27637 (patch) | |
tree | 45949e94e356714041458afd9c2d6f7ae0bae54a | |
parent | fe1a5ab9f27b7be4d15aaf2ee640e86e79701e14 (diff) |
Enable maintainer in Main
Filter on AWS zones
Implemented ofCloud in ZoneFilterMock
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 |