diff options
author | Jon Bratseth <bratseth@gmail.com> | 2021-02-18 17:58:46 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2021-02-18 17:58:46 +0100 |
commit | 79d9ae7cc3eb7052cce5e40ea83874d312cf5012 (patch) | |
tree | 965cd6af495fc5cf12193fc20ef032f2ea222126 | |
parent | b6416d4e35daf38d15e038c0ac3d47b84ff38436 (diff) |
Better names
14 files changed, 60 insertions, 91 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java index 80c1f38ecf4..25d8e7a261f 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java @@ -75,7 +75,7 @@ public interface NodeRepository { Application getApplication(ZoneId zone, ApplicationId application); void patchApplication(ZoneId zone, ApplicationId application, - double currentTrafficFraction, double maxTrafficFraction); + double currentReadShare, double maxReadShare); /** Upgrade all nodes of given type to a new version */ void upgrade(ZoneId zone, NodeType type, Version version); diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/ApplicationPatch.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/ApplicationPatch.java index 1d1ea054a2d..aa2ed206dda 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/ApplicationPatch.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/ApplicationPatch.java @@ -16,19 +16,19 @@ import com.fasterxml.jackson.annotation.JsonProperty; public class ApplicationPatch { @JsonProperty - private final Double currentTrafficFraction; + private final Double currentReadShare; @JsonProperty - private final Double maxTrafficFraction; + private final Double maxReadShare; @JsonCreator - public ApplicationPatch(@JsonProperty("currentTrafficFraction") Double currentTrafficFraction, - @JsonProperty("maxTrafficFraction") Double maxTrafficFraction) { - this.currentTrafficFraction = currentTrafficFraction; - this.maxTrafficFraction = maxTrafficFraction; + public ApplicationPatch(@JsonProperty("currentReadShare") Double currentReadShare, + @JsonProperty("maxReadShare") Double maxReadShare) { + this.currentReadShare = currentReadShare; + this.maxReadShare = maxReadShare; } - public Double getCurrentTrafficFraction() { return currentTrafficFraction; } - public Double getMaxTrafficFraction() { return maxTrafficFraction; } + public Double getCurrentReadShare() { return currentReadShare; } + public Double getMaxReadShare() { return maxReadShare; } } 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 2d9bd3639c5..f7ab4d30088 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 @@ -64,7 +64,7 @@ public class ControllerMaintenance extends AbstractComponent { maintainers.add(new HostSwitchUpdater(controller, intervals.hostSwitchUpdater)); maintainers.add(new ReindexingTriggerer(controller, intervals.reindexingTriggerer)); maintainers.add(new EndpointCertificateMaintainer(controller, intervals.endpointCertificateMaintainer)); - maintainers.add(new TrafficFractionUpdater(controller, intervals.trafficFractionUpdater)); + maintainers.add(new TrafficShareUpdater(controller, intervals.trafficFractionUpdater)); } public Upgrader upgrader() { return upgrader; } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/TrafficFractionUpdater.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/TrafficShareUpdater.java index 8656db55aed..7c95125c6c3 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/TrafficFractionUpdater.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/TrafficShareUpdater.java @@ -23,12 +23,12 @@ import java.time.Duration; * * @author bratseth */ -public class TrafficFractionUpdater extends ControllerMaintainer { +public class TrafficShareUpdater extends ControllerMaintainer { private final ApplicationController applications; private final NodeRepository nodeRepository; - public TrafficFractionUpdater(Controller controller, Duration duration) { + public TrafficShareUpdater(Controller controller, Duration duration) { super(controller, duration, DeploymentMetricsMaintainer.class.getSimpleName(), SystemName.all()); this.applications = controller.applications(); this.nodeRepository = controller.serviceRegistry().configServer().nodeRepository(); @@ -55,12 +55,12 @@ public class TrafficFractionUpdater extends ControllerMaintainer { long prodRegions = instance.deployments().values().stream() .filter(i -> i.zone().environment().isProduction()) .count(); - double currentTrafficFraction = totalQps == 0 ? 0 : qpsInZone / totalQps; - double maxTrafficFraction = prodRegions < 2 ? 1.0 : 1.0 / ( prodRegions - 1.0); - if (currentTrafficFraction > maxTrafficFraction) // This can happen because the assumption of equal traffic - maxTrafficFraction = currentTrafficFraction; // distribution can be incorrect + double currentReadShare = totalQps == 0 ? 0 : qpsInZone / totalQps; + double maxReadShare = prodRegions < 2 ? 1.0 : 1.0 / ( prodRegions - 1.0); + if (currentReadShare > maxReadShare) // This can happen because the assumption of equal traffic + maxReadShare = currentReadShare; // distribution can be incorrect - nodeRepository.patchApplication(deployment.zone(), instance.id(), currentTrafficFraction, maxTrafficFraction); + nodeRepository.patchApplication(deployment.zone(), instance.id(), currentReadShare, maxReadShare); } } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/NodeRepositoryMock.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/NodeRepositoryMock.java index 7f9f70a373b..3961107848e 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/NodeRepositoryMock.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/NodeRepositoryMock.java @@ -187,8 +187,8 @@ public class NodeRepositoryMock implements NodeRepository { @Override public void setTrafficFraction(ZoneId zone, ApplicationId application, - double currentTrafficFraction, double maxTrafficFraction) { - trafficFractions.put(new DeploymentId(application, zone), new Pair<>(currentTrafficFraction, maxTrafficFraction)); + double currentReadShare, double maxReadShare) { + trafficFractions.put(new DeploymentId(application, zone), new Pair<>(currentReadShare, maxReadShare)); } @Override diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/TrafficFractionUpdaterTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/TrafficShareUpdaterTest.java index 9077707f4d0..2674e155b98 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/TrafficFractionUpdaterTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/TrafficShareUpdaterTest.java @@ -21,14 +21,14 @@ import static org.junit.Assert.assertEquals; * * @author bratseth */ -public class TrafficFractionUpdaterTest { +public class TrafficShareUpdaterTest { @Test public void testTrafficUpdater() { DeploymentTester tester = new DeploymentTester(); var application = tester.newDeploymentContext(); var deploymentMetricsMaintainer = new DeploymentMetricsMaintainer(tester.controller(), Duration.ofDays(1)); - var updater = new TrafficFractionUpdater(tester.controller(), Duration.ofDays(1)); + var updater = new TrafficShareUpdater(tester.controller(), Duration.ofDays(1)); ZoneId prod1 = ZoneId.from("prod", "ap-northeast-1"); ZoneId prod2 = ZoneId.from("prod", "us-east-3"); ZoneId prod3 = ZoneId.from("prod", "us-west-1"); @@ -85,11 +85,11 @@ public class TrafficFractionUpdaterTest { tester.controllerTester().serviceRegistry().configServerMock().setMetrics(new DeploymentId(application, zone), clusterMetrics); } - private void assertTrafficFraction(double currentTrafficFraction, double maxTrafficFraction, + private void assertTrafficFraction(double currentReadShare, double maxReadShare, ApplicationId application, ZoneId zone, DeploymentTester tester) { NodeRepositoryMock mock = (NodeRepositoryMock)tester.controller().serviceRegistry().configServer().nodeRepository(); - assertEquals(currentTrafficFraction, mock.getTrafficFraction(application, zone).getFirst(), 0.00001); - assertEquals(maxTrafficFraction, mock.getTrafficFraction(application, zone).getSecond(), 0.00001); + assertEquals(currentReadShare, mock.getTrafficFraction(application, zone).getFirst(), 0.00001); + assertEquals(maxReadShare, mock.getTrafficFraction(application, zone).getSecond(), 0.00001); } } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/applications/Status.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/applications/Status.java index 7871c5f7ed2..ace05d85bbd 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/applications/Status.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/applications/Status.java @@ -10,40 +10,40 @@ import java.util.Objects; */ public class Status { - private final double currentTrafficFraction; - private final double maxTrafficFraction; + private final double currentReadShare; + private final double maxReadShare; /** Do not use */ - public Status(double currentTrafficFraction, double maxTrafficFraction) { - this.currentTrafficFraction = currentTrafficFraction; - this.maxTrafficFraction = maxTrafficFraction; + public Status(double currentReadShare, double maxReadShare) { + this.currentReadShare = currentReadShare; + this.maxReadShare = maxReadShare; } - public Status withCurrentTrafficFraction(double currentTrafficFraction) { - return new Status(currentTrafficFraction, maxTrafficFraction); + public Status withCurrentReadShare(double currentReadShare) { + return new Status(currentReadShare, maxReadShare); } /** * Returns the current fraction of the global traffic to this application that is received by the * deployment in this zone. */ - public double currentTrafficFraction() { return currentTrafficFraction; } + public double currentReadShare() { return currentReadShare; } - public Status withMaxTrafficFraction(double maxTrafficFraction) { - return new Status(currentTrafficFraction, maxTrafficFraction); + public Status withMaxReadShare(double maxReadShare) { + return new Status(currentReadShare, maxReadShare); } /** * Returns an estimate of the max fraction of the global traffic to this application that may possibly * be received by the deployment in this zone. */ - public double maxTrafficFraction() { return maxTrafficFraction; } + public double maxReadShare() { return maxReadShare; } public static Status initial() { return new Status(0, 0); } @Override public int hashCode() { - return Objects.hash(currentTrafficFraction, maxTrafficFraction); + return Objects.hash(currentReadShare, maxReadShare); } @Override @@ -51,16 +51,16 @@ public class Status { if (o == this) return true; if ( ! (o instanceof Status)) return false; Status other = (Status)o; - if ( other.currentTrafficFraction != this.currentTrafficFraction) return false; - if ( other.maxTrafficFraction != this.maxTrafficFraction) return false; + if ( other.currentReadShare != this.currentReadShare) return false; + if ( other.maxReadShare != this.maxReadShare) return false; return true; } @Override public String toString() { return "application status: [" + - "currentTrafficFraction: " + currentTrafficFraction + ", " + - "maxTrafficFraction: " + maxTrafficFraction + + "currentReadShare: " + currentReadShare + ", " + + "maxReadShare: " + maxReadShare + "]"; } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ResourceTarget.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ResourceTarget.java index 90e15bdb12e..a2fbeb3b710 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ResourceTarget.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/ResourceTarget.java @@ -66,10 +66,10 @@ public class ResourceTarget { /** Ideal cpu load must take the application traffic fraction into account */ private static double idealCpuLoad(Application application) { double trafficFactor; - if (application.status().maxTrafficFraction() == 0) // No traffic fraction data + if (application.status().maxReadShare() == 0) // No traffic fraction data trafficFactor = 0.5; // assume we currently get half of the global share of traffic else - trafficFactor = application.status().currentTrafficFraction() / application.status().maxTrafficFraction(); + trafficFactor = application.status().currentReadShare() / application.status().maxReadShare(); if (trafficFactor < 0.5) // The expectation that we have almost no load with almost no queries is incorrect due trafficFactor = 0.5; // to write traffic; once that is separated we can lower this threshold (but not to 0) diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/ApplicationSerializer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/ApplicationSerializer.java index f72522544c6..c8b928779b9 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/ApplicationSerializer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/ApplicationSerializer.java @@ -40,8 +40,8 @@ public class ApplicationSerializer { private static final String idKey = "id"; private static final String statusKey = "status"; - private static final String currentTrafficFractionKey = "currentTrafficFraction"; - private static final String maxTrafficFractionKey = "maxTrafficFraction"; + private static final String currentReadShareKey = "currentReadShare"; + private static final String maxReadShareKey = "maxReadShare"; private static final String clustersKey = "clusters"; private static final String exclusiveKey = "exclusive"; @@ -91,14 +91,14 @@ public class ApplicationSerializer { } private static void toSlime(Status status, Cursor statusObject) { - statusObject.setDouble(currentTrafficFractionKey, status.currentTrafficFraction()); - statusObject.setDouble(maxTrafficFractionKey, status.maxTrafficFraction()); + statusObject.setDouble(currentReadShareKey, status.currentReadShare()); + statusObject.setDouble(maxReadShareKey, status.maxReadShare()); } private static Status statusFromSlime(Inspector statusObject) { if ( ! statusObject.valid()) return Status.initial(); // TODO: Remove this line after March 2021 - return new Status(statusObject.field(currentTrafficFractionKey).asDouble(), - statusObject.field(maxTrafficFractionKey).asDouble()); + return new Status(statusObject.field(currentReadShareKey).asDouble(), + statusObject.field(maxReadShareKey).asDouble()); } private static void clustersToSlime(Collection<Cluster> clusters, Cursor clustersObject) { diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/ApplicationPatcher.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/ApplicationPatcher.java index 5b23caa783d..771b570a4fd 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/ApplicationPatcher.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/ApplicationPatcher.java @@ -1,49 +1,18 @@ // Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.provision.restapi; -import com.google.common.base.Suppliers; -import com.yahoo.component.Version; import com.yahoo.config.provision.ApplicationId; -import com.yahoo.config.provision.DockerImage; -import com.yahoo.config.provision.NodeFlavors; -import com.yahoo.config.provision.NodeResources; -import com.yahoo.config.provision.TenantName; import com.yahoo.io.IOUtils; import com.yahoo.slime.Inspector; -import com.yahoo.slime.ObjectTraverser; import com.yahoo.slime.SlimeUtils; import com.yahoo.slime.Type; import com.yahoo.transaction.Mutex; -import com.yahoo.vespa.hosted.provision.LockedNodeList; -import com.yahoo.vespa.hosted.provision.Node; -import com.yahoo.vespa.hosted.provision.NodeMutex; import com.yahoo.vespa.hosted.provision.NodeRepository; import com.yahoo.vespa.hosted.provision.applications.Application; -import com.yahoo.vespa.hosted.provision.node.Address; -import com.yahoo.vespa.hosted.provision.node.Agent; -import com.yahoo.vespa.hosted.provision.node.Allocation; -import com.yahoo.vespa.hosted.provision.node.IP; -import com.yahoo.vespa.hosted.provision.node.Report; -import com.yahoo.vespa.hosted.provision.node.Reports; import java.io.IOException; import java.io.InputStream; import java.io.UncheckedIOException; -import java.time.Clock; -import java.time.Instant; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.Set; -import java.util.TreeSet; -import java.util.stream.Collectors; - -import static com.yahoo.config.provision.NodeResources.DiskSpeed.fast; -import static com.yahoo.config.provision.NodeResources.DiskSpeed.slow; -import static com.yahoo.config.provision.NodeResources.StorageType.local; -import static com.yahoo.config.provision.NodeResources.StorageType.remote; /** * A class which can take a partial JSON node/v2 application JSON structure and apply it to an application object. @@ -92,10 +61,10 @@ public class ApplicationPatcher implements AutoCloseable { private Application applyField(Application application, String name, Inspector value, Inspector root) { switch (name) { - case "currentTrafficFraction" : - return application.with(application.status().withCurrentTrafficFraction(asDouble(value))); - case "maxTrafficFraction" : - return application.with(application.status().withMaxTrafficFraction(asDouble(value))); + case "currentReadShare" : + return application.with(application.status().withCurrentReadShare(asDouble(value))); + case "maxReadShare" : + return application.with(application.status().withMaxReadShare(asDouble(value))); default : throw new IllegalArgumentException("Could not apply field '" + name + "' on an application: No such modifiable field"); } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java index cccf76ac4b2..3f3655dcab6 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java @@ -199,8 +199,8 @@ class AutoscalingTester { public void storeReadShare(double currentReadShare, double maxReadShare, ApplicationId applicationId) { Application application = nodeRepository().applications().require(applicationId); - application = application.with(application.status().withCurrentTrafficFraction(currentReadShare) - .withMaxTrafficFraction(maxReadShare)); + application = application.with(application.status().withCurrentReadShare(currentReadShare) + .withMaxReadShare(maxReadShare)); nodeRepository().applications().put(application, nodeRepository().nodes().lock(applicationId)); } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/ApplicationSerializerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/ApplicationSerializerTest.java index f2245764d8e..9cac6430d6e 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/ApplicationSerializerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/ApplicationSerializerTest.java @@ -52,7 +52,7 @@ public class ApplicationSerializerTest { Optional.of(Instant.ofEpochMilli(67890L)))), "Autoscaling status")); Application original = new Application(ApplicationId.from("myTenant", "myApplication", "myInstance"), - Status.initial().withCurrentTrafficFraction(0.3).withMaxTrafficFraction(0.5), + Status.initial().withCurrentReadShare(0.3).withMaxReadShare(0.5), clusters); Application serialized = ApplicationSerializer.fromJson(ApplicationSerializer.toJson(original)); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/ApplicationPatcherTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/ApplicationPatcherTest.java index 77335a0bced..85469e74c0f 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/ApplicationPatcherTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/ApplicationPatcherTest.java @@ -21,13 +21,13 @@ public class ApplicationPatcherTest { NodeRepositoryTester tester = new NodeRepositoryTester(); Application application = Application.empty(ApplicationId.from("t1", "a1", "i1")); tester.nodeRepository().applications().put(application, tester.nodeRepository().nodes().lock(application.id())); - String patch = "{ \"currentTrafficFraction\" :0.4, \"maxTrafficFraction\": 1.0 }"; + String patch = "{ \"currentReadShare\" :0.4, \"maxReadShare\": 1.0 }"; ApplicationPatcher patcher = new ApplicationPatcher(new ByteArrayInputStream(patch.getBytes()), application.id(), tester.nodeRepository()); Application patched = patcher.apply(); - assertEquals(0.4, patcher.application().status().currentTrafficFraction(), 0.0000001); - assertEquals(1.0, patcher.application().status().maxTrafficFraction(), 0.0000001); + assertEquals(0.4, patcher.application().status().currentReadShare(), 0.0000001); + assertEquals(1.0, patcher.application().status().maxReadShare(), 0.0000001); patcher.close(); } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiTest.java index 1ec38387c99..180c31dd147 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiTest.java @@ -260,8 +260,8 @@ public class NodesV2ApiTest { // Update (PATCH) an application assertResponse(new Request("http://localhost:8080/nodes/v2/application/tenant1.application1.instance1", - Utf8.toBytes("{\"currentTrafficFraction\": 0.3, " + - "\"maxTrafficFraction\": 0.5 }"), Request.Method.PATCH), + Utf8.toBytes("{\"currentReadShare\": 0.3, " + + "\"maxReadShare\": 0.5 }"), Request.Method.PATCH), "{\"message\":\"Updated application 'tenant1.application1.instance1'\"}"); } |