summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@verizonmedia.com>2020-03-25 14:49:50 +0100
committerJon Bratseth <bratseth@verizonmedia.com>2020-03-25 14:49:50 +0100
commitf2e14e9ac5e5ea2b05f7aa34bf21dc73b6d8e0eb (patch)
tree2704a33e1614e66b20e26151e9f50942add36e4c
parent668412faf939d3d3d185c6e7c81056c4cdb5afe3 (diff)
Move group argument inside Capacity
-rw-r--r--config-model-api/abi-spec.json516
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/model/api/HostProvisioner.java6
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/model/api/package-info.java1
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/provision/HostsXmlProvisioner.java6
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/provision/InMemoryProvisioner.java18
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/provision/SingleNodeProvisioner.java9
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/HostSystem.java4
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecification.java2
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java8
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/VespaModelFactoryTest.java6
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/Capacity.java61
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/Provisioner.java5
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/provision/ProvisionerAdapter.java8
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/provision/StaticProvisioner.java9
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java8
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/http/SessionHandlerTest.java6
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java6
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java4
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImpl.java10
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java29
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockDeployer.java10
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java10
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockProvisioner.java6
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java2
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/NodeMetricsFetcherTest.java4
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirerTest.java4
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/InactiveAndFailedExpirerTest.java15
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java30
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OperatorChangeApplicationMaintainerTest.java6
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainerTest.java4
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RebalancerTest.java4
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ReservationExpirerTest.java2
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RetiredExpirerTest.java8
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AclProvisioningTest.java4
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DockerProvisioningTest.java5
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerAllocationTest.java4
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java8
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/MultigroupProvisioningTest.java36
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/NodeTypeProvisioningTest.java6
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java23
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java29
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/duper/InfraApplication.java1
-rw-r--r--service-monitor/src/main/java/com/yahoo/vespa/service/monitor/InfraApplicationApi.java2
43 files changed, 260 insertions, 685 deletions
diff --git a/config-model-api/abi-spec.json b/config-model-api/abi-spec.json
index 0c061dd8222..4ccf34d30b0 100644
--- a/config-model-api/abi-spec.json
+++ b/config-model-api/abi-spec.json
@@ -606,521 +606,5 @@
"public static final com.yahoo.config.application.api.ValidationOverrides empty",
"public static final com.yahoo.config.application.api.ValidationOverrides all"
]
- },
- "com.yahoo.config.model.api.ApplicationInfo": {
- "superClass": "java.lang.Object",
- "interfaces": [],
- "attributes": [
- "public"
- ],
- "methods": [
- "public void <init>(com.yahoo.config.provision.ApplicationId, long, com.yahoo.config.model.api.Model)",
- "public com.yahoo.config.provision.ApplicationId getApplicationId()",
- "public long getGeneration()",
- "public com.yahoo.config.model.api.Model getModel()",
- "public java.lang.String toString()"
- ],
- "fields": []
- },
- "com.yahoo.config.model.api.ConfigChangeAction$Type": {
- "superClass": "java.lang.Enum",
- "interfaces": [],
- "attributes": [
- "public",
- "final",
- "enum"
- ],
- "methods": [
- "public static com.yahoo.config.model.api.ConfigChangeAction$Type[] values()",
- "public static com.yahoo.config.model.api.ConfigChangeAction$Type valueOf(java.lang.String)",
- "public java.lang.String toString()"
- ],
- "fields": [
- "public static final enum com.yahoo.config.model.api.ConfigChangeAction$Type RESTART",
- "public static final enum com.yahoo.config.model.api.ConfigChangeAction$Type REFEED"
- ]
- },
- "com.yahoo.config.model.api.ConfigChangeAction": {
- "superClass": "java.lang.Object",
- "interfaces": [],
- "attributes": [
- "public",
- "interface",
- "abstract"
- ],
- "methods": [
- "public abstract com.yahoo.config.model.api.ConfigChangeAction$Type getType()",
- "public abstract java.lang.String getMessage()",
- "public abstract java.util.List getServices()",
- "public abstract boolean allowed()"
- ],
- "fields": []
- },
- "com.yahoo.config.model.api.ConfigChangeRefeedAction": {
- "superClass": "java.lang.Object",
- "interfaces": [
- "com.yahoo.config.model.api.ConfigChangeAction"
- ],
- "attributes": [
- "public",
- "interface",
- "abstract"
- ],
- "methods": [
- "public com.yahoo.config.model.api.ConfigChangeAction$Type getType()",
- "public java.lang.String name()",
- "public abstract java.lang.String getDocumentType()"
- ],
- "fields": []
- },
- "com.yahoo.config.model.api.ConfigChangeRestartAction": {
- "superClass": "java.lang.Object",
- "interfaces": [
- "com.yahoo.config.model.api.ConfigChangeAction"
- ],
- "attributes": [
- "public",
- "interface",
- "abstract"
- ],
- "methods": [
- "public com.yahoo.config.model.api.ConfigChangeAction$Type getType()",
- "public boolean allowed()"
- ],
- "fields": []
- },
- "com.yahoo.config.model.api.ConfigDefinitionRepo": {
- "superClass": "java.lang.Object",
- "interfaces": [],
- "attributes": [
- "public",
- "interface",
- "abstract"
- ],
- "methods": [
- "public abstract java.util.Map getConfigDefinitions()",
- "public abstract com.yahoo.vespa.config.buildergen.ConfigDefinition get(com.yahoo.vespa.config.ConfigDefinitionKey)"
- ],
- "fields": []
- },
- "com.yahoo.config.model.api.ConfigDefinitionStore": {
- "superClass": "java.lang.Object",
- "interfaces": [],
- "attributes": [
- "public",
- "interface",
- "abstract"
- ],
- "methods": [
- "public abstract com.yahoo.vespa.config.ConfigDefinition getConfigDefinition(com.yahoo.vespa.config.ConfigDefinitionKey)"
- ],
- "fields": []
- },
- "com.yahoo.config.model.api.ConfigModelPlugin": {
- "superClass": "java.lang.Object",
- "interfaces": [],
- "attributes": [
- "public",
- "interface",
- "abstract"
- ],
- "methods": [],
- "fields": []
- },
- "com.yahoo.config.model.api.ConfigServerSpec": {
- "superClass": "java.lang.Object",
- "interfaces": [],
- "attributes": [
- "public",
- "interface",
- "abstract"
- ],
- "methods": [
- "public abstract java.lang.String getHostName()",
- "public abstract int getConfigServerPort()",
- "public int getHttpPort()",
- "public abstract int getZooKeeperPort()"
- ],
- "fields": []
- },
- "com.yahoo.config.model.api.ContainerEndpoint": {
- "superClass": "java.lang.Object",
- "interfaces": [],
- "attributes": [
- "public"
- ],
- "methods": [
- "public void <init>(java.lang.String, java.util.List)",
- "public java.lang.String clusterId()",
- "public java.util.List names()",
- "public boolean equals(java.lang.Object)",
- "public int hashCode()",
- "public java.lang.String toString()"
- ],
- "fields": []
- },
- "com.yahoo.config.model.api.EndpointCertificateMetadata": {
- "superClass": "java.lang.Object",
- "interfaces": [],
- "attributes": [
- "public"
- ],
- "methods": [
- "public void <init>(java.lang.String, java.lang.String, int)",
- "public java.lang.String keyName()",
- "public java.lang.String certName()",
- "public int version()",
- "public java.lang.String toString()"
- ],
- "fields": []
- },
- "com.yahoo.config.model.api.EndpointCertificateSecrets": {
- "superClass": "java.lang.Object",
- "interfaces": [],
- "attributes": [
- "public"
- ],
- "methods": [
- "public void <init>(java.lang.String, java.lang.String)",
- "public java.lang.String certificate()",
- "public java.lang.String key()",
- "public boolean isMissing()"
- ],
- "fields": [
- "public static final com.yahoo.config.model.api.EndpointCertificateSecrets MISSING"
- ]
- },
- "com.yahoo.config.model.api.FileDistribution": {
- "superClass": "java.lang.Object",
- "interfaces": [],
- "attributes": [
- "public",
- "interface",
- "abstract"
- ],
- "methods": [
- "public abstract void startDownload(java.lang.String, int, java.util.Set)",
- "public abstract java.io.File getFileReferencesDir()"
- ],
- "fields": []
- },
- "com.yahoo.config.model.api.HostInfo": {
- "superClass": "java.lang.Object",
- "interfaces": [],
- "attributes": [
- "public"
- ],
- "methods": [
- "public void <init>(java.lang.String, java.util.Collection)",
- "public java.lang.String getHostname()",
- "public java.util.Collection getServices()",
- "public boolean equals(java.lang.Object)",
- "public int hashCode()"
- ],
- "fields": []
- },
- "com.yahoo.config.model.api.HostProvisioner": {
- "superClass": "java.lang.Object",
- "interfaces": [],
- "attributes": [
- "public",
- "interface",
- "abstract"
- ],
- "methods": [
- "public abstract com.yahoo.config.provision.HostSpec allocateHost(java.lang.String)",
- "public abstract java.util.List prepare(com.yahoo.config.provision.ClusterSpec, com.yahoo.config.provision.Capacity, int, com.yahoo.config.provision.ProvisionLogger)"
- ],
- "fields": []
- },
- "com.yahoo.config.model.api.Model": {
- "superClass": "java.lang.Object",
- "interfaces": [],
- "attributes": [
- "public",
- "interface",
- "abstract"
- ],
- "methods": [
- "public abstract com.yahoo.vespa.config.ConfigPayload getConfig(com.yahoo.vespa.config.ConfigKey, com.yahoo.vespa.config.buildergen.ConfigDefinition)",
- "public abstract java.util.Set allConfigsProduced()",
- "public abstract java.util.Collection getHosts()",
- "public abstract java.util.Set allConfigIds()",
- "public abstract void distributeFiles(com.yahoo.config.model.api.FileDistribution)",
- "public abstract java.util.Set fileReferences()",
- "public abstract com.yahoo.config.provision.AllocatedHosts allocatedHosts()",
- "public boolean allowModelVersionMismatch(java.time.Instant)",
- "public boolean skipOldConfigModels(java.time.Instant)",
- "public com.yahoo.component.Version version()"
- ],
- "fields": []
- },
- "com.yahoo.config.model.api.ModelContext$Properties": {
- "superClass": "java.lang.Object",
- "interfaces": [],
- "attributes": [
- "public",
- "interface",
- "abstract"
- ],
- "methods": [
- "public abstract boolean multitenant()",
- "public abstract com.yahoo.config.provision.ApplicationId applicationId()",
- "public abstract java.util.List configServerSpecs()",
- "public abstract com.yahoo.config.provision.HostName loadBalancerName()",
- "public abstract java.net.URI ztsUrl()",
- "public abstract java.lang.String athenzDnsSuffix()",
- "public abstract boolean hostedVespa()",
- "public abstract com.yahoo.config.provision.Zone zone()",
- "public abstract java.util.Set endpoints()",
- "public abstract boolean isBootstrap()",
- "public abstract boolean isFirstTimeDeployment()",
- "public boolean useDedicatedNodeForLogserver()",
- "public abstract boolean useAdaptiveDispatch()",
- "public java.util.Optional tlsSecrets()",
- "public java.util.Optional endpointCertificateSecrets()",
- "public abstract double defaultTermwiseLimit()",
- "public abstract boolean useBucketSpaceMetric()",
- "public boolean useNewAthenzFilter()",
- "public boolean usePhraseSegmenting()",
- "public java.lang.String proxyProtocol()",
- "public java.util.Optional athenzDomain()",
- "public boolean useDedicatedNodesWhenUnspecified()"
- ],
- "fields": []
- },
- "com.yahoo.config.model.api.ModelContext": {
- "superClass": "java.lang.Object",
- "interfaces": [],
- "attributes": [
- "public",
- "interface",
- "abstract"
- ],
- "methods": [
- "public abstract com.yahoo.config.application.api.ApplicationPackage applicationPackage()",
- "public abstract java.util.Optional previousModel()",
- "public abstract java.util.Optional permanentApplicationPackage()",
- "public abstract java.util.Optional hostProvisioner()",
- "public abstract com.yahoo.config.application.api.DeployLogger deployLogger()",
- "public abstract com.yahoo.config.model.api.ConfigDefinitionRepo configDefinitionRepo()",
- "public abstract com.yahoo.config.application.api.FileRegistry getFileRegistry()",
- "public abstract com.yahoo.config.model.api.ModelContext$Properties properties()",
- "public java.util.Optional appDir()",
- "public java.util.Optional wantedDockerImageRepository()",
- "public abstract com.yahoo.component.Version modelVespaVersion()",
- "public abstract com.yahoo.component.Version wantedNodeVespaVersion()"
- ],
- "fields": []
- },
- "com.yahoo.config.model.api.ModelCreateResult": {
- "superClass": "java.lang.Object",
- "interfaces": [],
- "attributes": [
- "public"
- ],
- "methods": [
- "public void <init>(com.yahoo.config.model.api.Model, java.util.List)",
- "public com.yahoo.config.model.api.Model getModel()",
- "public java.util.List getConfigChangeActions()"
- ],
- "fields": []
- },
- "com.yahoo.config.model.api.ModelFactory": {
- "superClass": "java.lang.Object",
- "interfaces": [],
- "attributes": [
- "public",
- "interface",
- "abstract"
- ],
- "methods": [
- "public abstract com.yahoo.component.Version version()",
- "public abstract com.yahoo.config.model.api.Model createModel(com.yahoo.config.model.api.ModelContext)",
- "public abstract com.yahoo.config.model.api.ModelCreateResult createAndValidateModel(com.yahoo.config.model.api.ModelContext, com.yahoo.config.model.api.ValidationParameters)"
- ],
- "fields": []
- },
- "com.yahoo.config.model.api.ModelState": {
- "superClass": "java.lang.Object",
- "interfaces": [],
- "attributes": [
- "public",
- "interface",
- "abstract"
- ],
- "methods": [
- "public abstract com.yahoo.config.model.api.Model getModel()"
- ],
- "fields": []
- },
- "com.yahoo.config.model.api.PortInfo": {
- "superClass": "java.lang.Object",
- "interfaces": [],
- "attributes": [
- "public"
- ],
- "methods": [
- "public void <init>(int, java.util.Collection)",
- "public int getPort()",
- "public java.util.Collection getTags()",
- "public boolean equals(java.lang.Object)",
- "public int hashCode()"
- ],
- "fields": []
- },
- "com.yahoo.config.model.api.ServiceInfo": {
- "superClass": "java.lang.Object",
- "interfaces": [],
- "attributes": [
- "public"
- ],
- "methods": [
- "public void <init>(java.lang.String, java.lang.String, java.util.Collection, java.util.Map, java.lang.String, java.lang.String)",
- "public java.lang.String getServiceName()",
- "public java.lang.String getConfigId()",
- "public java.lang.String getServiceType()",
- "public java.util.Optional getProperty(java.lang.String)",
- "public java.util.Collection getPorts()",
- "public java.lang.String getHostName()",
- "public boolean equals(java.lang.Object)",
- "public int hashCode()"
- ],
- "fields": []
- },
- "com.yahoo.config.model.api.SuperModel": {
- "superClass": "java.lang.Object",
- "interfaces": [],
- "attributes": [
- "public"
- ],
- "methods": [
- "public void <init>()",
- "public void <init>(java.util.Map, boolean)",
- "public java.util.Map getModelsPerTenant()",
- "public java.util.Map getModels()",
- "public boolean isComplete()",
- "public java.util.List getAllApplicationInfos()",
- "public java.util.Optional getApplicationInfo(com.yahoo.config.provision.ApplicationId)",
- "public com.yahoo.config.model.api.SuperModel cloneAndSetApplication(com.yahoo.config.model.api.ApplicationInfo)",
- "public com.yahoo.config.model.api.SuperModel cloneAndRemoveApplication(com.yahoo.config.provision.ApplicationId)",
- "public com.yahoo.config.model.api.SuperModel cloneAsComplete()",
- "public java.util.Set getApplicationIds()"
- ],
- "fields": []
- },
- "com.yahoo.config.model.api.SuperModelListener": {
- "superClass": "java.lang.Object",
- "interfaces": [],
- "attributes": [
- "public",
- "interface",
- "abstract"
- ],
- "methods": [
- "public abstract void applicationActivated(com.yahoo.config.model.api.SuperModel, com.yahoo.config.model.api.ApplicationInfo)",
- "public abstract void applicationRemoved(com.yahoo.config.model.api.SuperModel, com.yahoo.config.provision.ApplicationId)",
- "public abstract void notifyOfCompleteness(com.yahoo.config.model.api.SuperModel)"
- ],
- "fields": []
- },
- "com.yahoo.config.model.api.SuperModelProvider": {
- "superClass": "java.lang.Object",
- "interfaces": [],
- "attributes": [
- "public",
- "interface",
- "abstract"
- ],
- "methods": [
- "public abstract void registerListener(com.yahoo.config.model.api.SuperModelListener)",
- "public abstract com.yahoo.config.model.api.SuperModel getSuperModel()"
- ],
- "fields": []
- },
- "com.yahoo.config.model.api.TlsSecrets": {
- "superClass": "java.lang.Object",
- "interfaces": [],
- "attributes": [
- "public"
- ],
- "methods": [
- "public void <init>(java.lang.String, java.lang.String)",
- "public void <init>(com.yahoo.config.model.api.EndpointCertificateSecrets)",
- "public java.lang.String certificate()",
- "public java.lang.String key()",
- "public boolean isMissing()"
- ],
- "fields": [
- "public static final com.yahoo.config.model.api.TlsSecrets MISSING"
- ]
- },
- "com.yahoo.config.model.api.ValidationParameters$CheckRouting": {
- "superClass": "java.lang.Enum",
- "interfaces": [],
- "attributes": [
- "public",
- "final",
- "enum"
- ],
- "methods": [
- "public static com.yahoo.config.model.api.ValidationParameters$CheckRouting[] values()",
- "public static com.yahoo.config.model.api.ValidationParameters$CheckRouting valueOf(java.lang.String)"
- ],
- "fields": [
- "public static final enum com.yahoo.config.model.api.ValidationParameters$CheckRouting TRUE",
- "public static final enum com.yahoo.config.model.api.ValidationParameters$CheckRouting FALSE"
- ]
- },
- "com.yahoo.config.model.api.ValidationParameters$FailOnIncompatibleChange": {
- "superClass": "java.lang.Enum",
- "interfaces": [],
- "attributes": [
- "public",
- "final",
- "enum"
- ],
- "methods": [
- "public static com.yahoo.config.model.api.ValidationParameters$FailOnIncompatibleChange[] values()",
- "public static com.yahoo.config.model.api.ValidationParameters$FailOnIncompatibleChange valueOf(java.lang.String)"
- ],
- "fields": [
- "public static final enum com.yahoo.config.model.api.ValidationParameters$FailOnIncompatibleChange TRUE",
- "public static final enum com.yahoo.config.model.api.ValidationParameters$FailOnIncompatibleChange FALSE"
- ]
- },
- "com.yahoo.config.model.api.ValidationParameters$IgnoreValidationErrors": {
- "superClass": "java.lang.Enum",
- "interfaces": [],
- "attributes": [
- "public",
- "final",
- "enum"
- ],
- "methods": [
- "public static com.yahoo.config.model.api.ValidationParameters$IgnoreValidationErrors[] values()",
- "public static com.yahoo.config.model.api.ValidationParameters$IgnoreValidationErrors valueOf(java.lang.String)"
- ],
- "fields": [
- "public static final enum com.yahoo.config.model.api.ValidationParameters$IgnoreValidationErrors TRUE",
- "public static final enum com.yahoo.config.model.api.ValidationParameters$IgnoreValidationErrors FALSE"
- ]
- },
- "com.yahoo.config.model.api.ValidationParameters": {
- "superClass": "java.lang.Object",
- "interfaces": [],
- "attributes": [
- "public"
- ],
- "methods": [
- "public void <init>()",
- "public void <init>(com.yahoo.config.model.api.ValidationParameters$IgnoreValidationErrors)",
- "public void <init>(com.yahoo.config.model.api.ValidationParameters$CheckRouting)",
- "public void <init>(com.yahoo.config.model.api.ValidationParameters$IgnoreValidationErrors, com.yahoo.config.model.api.ValidationParameters$FailOnIncompatibleChange, com.yahoo.config.model.api.ValidationParameters$CheckRouting)",
- "public boolean ignoreValidationErrors()",
- "public boolean failOnIncompatibleChanges()",
- "public boolean checkRouting()"
- ],
- "fields": []
}
} \ No newline at end of file
diff --git a/config-model-api/src/main/java/com/yahoo/config/model/api/HostProvisioner.java b/config-model-api/src/main/java/com/yahoo/config/model/api/HostProvisioner.java
index bf58000dd36..4edf3c455d0 100644
--- a/config-model-api/src/main/java/com/yahoo/config/model/api/HostProvisioner.java
+++ b/config-model-api/src/main/java/com/yahoo/config/model/api/HostProvisioner.java
@@ -18,15 +18,17 @@ public interface HostProvisioner {
// TODO: Remove
HostSpec allocateHost(String alias);
+ @Deprecated // TODO: Remove after April 2020
+ List<HostSpec> prepare(ClusterSpec cluster, Capacity capacity, int groups, ProvisionLogger logger);
+
/**
* Prepares allocation of a set of hosts with a given type, common id and the amount.
*
* @param cluster the cluster to allocate nodes to
* @param capacity the capacity describing the capacity requested
- * @param groups the number of groups to divide the nodes into
* @param logger a logger to which messages to the deployer may be written
* @return the specification of the allocated hosts
*/
- List<HostSpec> prepare(ClusterSpec cluster, Capacity capacity, int groups, ProvisionLogger logger);
+ List<HostSpec> prepare(ClusterSpec cluster, Capacity capacity, ProvisionLogger logger);
}
diff --git a/config-model-api/src/main/java/com/yahoo/config/model/api/package-info.java b/config-model-api/src/main/java/com/yahoo/config/model/api/package-info.java
index a3478026520..689e2524dde 100644
--- a/config-model-api/src/main/java/com/yahoo/config/model/api/package-info.java
+++ b/config-model-api/src/main/java/com/yahoo/config/model/api/package-info.java
@@ -1,6 +1,5 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
@ExportPackage
-@PublicApi // Not really "public", only annotated as such to enable the ABI checker plugin
package com.yahoo.config.model.api;
import com.yahoo.osgi.annotation.ExportPackage;
diff --git a/config-model/src/main/java/com/yahoo/config/model/provision/HostsXmlProvisioner.java b/config-model/src/main/java/com/yahoo/config/model/provision/HostsXmlProvisioner.java
index f909f3864da..201b69c1aae 100644
--- a/config-model/src/main/java/com/yahoo/config/model/provision/HostsXmlProvisioner.java
+++ b/config-model/src/main/java/com/yahoo/config/model/provision/HostsXmlProvisioner.java
@@ -45,10 +45,16 @@ public class HostsXmlProvisioner implements HostProvisioner {
}
@Override
+ @Deprecated // TODO: Remove after April 2020
public List<HostSpec> prepare(ClusterSpec cluster, Capacity quantity, int groups, ProvisionLogger logger) {
throw new UnsupportedOperationException("Prepare on an XML host provisioner is not supported");
}
+ @Override
+ public List<HostSpec> prepare(ClusterSpec cluster, Capacity quantity, ProvisionLogger logger) {
+ throw new UnsupportedOperationException("Prepare on an XML host provisioner is not supported");
+ }
+
private HostSpec host2HostSpec(Host host) {
return new HostSpec(host.hostname(), host.aliases());
}
diff --git a/config-model/src/main/java/com/yahoo/config/model/provision/InMemoryProvisioner.java b/config-model/src/main/java/com/yahoo/config/model/provision/InMemoryProvisioner.java
index 6047b6a9818..9b19c8590e5 100644
--- a/config-model/src/main/java/com/yahoo/config/model/provision/InMemoryProvisioner.java
+++ b/config-model/src/main/java/com/yahoo/config/model/provision/InMemoryProvisioner.java
@@ -113,18 +113,20 @@ public class InMemoryProvisioner implements HostProvisioner {
}
@Override
+ @Deprecated // TODO: Remove after April 2020
public List<HostSpec> prepare(ClusterSpec cluster, Capacity requestedCapacity, int groups, ProvisionLogger logger) {
- if (cluster.group().isPresent() && groups > 1)
+ return prepare(cluster, requestedCapacity.withGroups(groups), logger);
+ }
+
+ @Override
+ public List<HostSpec> prepare(ClusterSpec cluster, Capacity requestedCapacity, ProvisionLogger logger) {
+ if (cluster.group().isPresent() && requestedCapacity.groups() > 1)
throw new IllegalArgumentException("Cannot both be specifying a group and ask for groups to be created");
- if (requestedCapacity.nodeCount() % groups != 0)
- throw new IllegalArgumentException("Requested " + requestedCapacity.nodeCount() + " nodes in " +
- groups + " groups, but the node count is not divisible into this number of groups");
int capacity = failOnOutOfCapacity || requestedCapacity.isRequired()
- ? requestedCapacity.nodeCount()
- : Math.min(requestedCapacity.nodeCount(), freeNodes.get(defaultResources).size() + totalAllocatedTo(cluster));
- if (groups > capacity)
- groups = capacity;
+ ? requestedCapacity.nodes()
+ : Math.min(requestedCapacity.nodes(), freeNodes.get(defaultResources).size() + totalAllocatedTo(cluster));
+ int groups = requestedCapacity.groups() > capacity ? capacity : requestedCapacity.groups();
List<HostSpec> allocation = new ArrayList<>();
if (groups == 1) {
diff --git a/config-model/src/main/java/com/yahoo/config/model/provision/SingleNodeProvisioner.java b/config-model/src/main/java/com/yahoo/config/model/provision/SingleNodeProvisioner.java
index 7d9b78719ea..8945223447f 100644
--- a/config-model/src/main/java/com/yahoo/config/model/provision/SingleNodeProvisioner.java
+++ b/config-model/src/main/java/com/yahoo/config/model/provision/SingleNodeProvisioner.java
@@ -42,7 +42,14 @@ public class SingleNodeProvisioner implements HostProvisioner {
}
@Override
- public List<HostSpec> prepare(ClusterSpec cluster, Capacity capacity, int groups, ProvisionLogger logger) { // TODO: This should fail if capacity requested is more than 1
+ @Deprecated // TODO: Remove after April 2020
+ public List<HostSpec> prepare(ClusterSpec cluster, Capacity capacity, int groups, ProvisionLogger logger) {
+ return prepare(cluster, capacity.withGroups(groups), logger);
+ }
+
+ @Override
+ public List<HostSpec> prepare(ClusterSpec cluster, Capacity capacity, ProvisionLogger logger) {
+ // TODO: This should fail if capacity requested is more than 1
List<HostSpec> hosts = new ArrayList<>();
hosts.add(new HostSpec(host.hostname(), host.aliases(), ClusterMembership.from(cluster, counter++)));
return hosts;
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/HostSystem.java b/config-model/src/main/java/com/yahoo/vespa/model/HostSystem.java
index 3765e683b18..557a61ec211 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/HostSystem.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/HostSystem.java
@@ -111,8 +111,8 @@ public class HostSystem extends AbstractConfigProducer<Host> {
}
}
- public Map<HostResource, ClusterMembership> allocateHosts(ClusterSpec cluster, Capacity capacity, int groups, DeployLogger logger) {
- List<HostSpec> allocatedHosts = provisioner.prepare(cluster, capacity, groups, new ProvisionDeployLogger(logger));
+ public Map<HostResource, ClusterMembership> allocateHosts(ClusterSpec cluster, Capacity capacity, DeployLogger logger) {
+ List<HostSpec> allocatedHosts = provisioner.prepare(cluster, capacity, new ProvisionDeployLogger(logger));
// TODO: Even if HostResource owns a set of memberships, we need to return a map because the caller needs the current membership.
Map<HostResource, ClusterMembership> retAllocatedHosts = new LinkedHashMap<>();
for (HostSpec spec : allocatedHosts) {
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecification.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecification.java
index 384d891003e..f3f53538ddc 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecification.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/NodesSpecification.java
@@ -201,7 +201,7 @@ public class NodesSpecification {
.combinedId(combinedId.map(ClusterSpec.Id::from))
.dockerImageRepo(dockerImageRepo)
.build();
- return hostSystem.allocateHosts(cluster, Capacity.fromCount(count, resources, required, canFail), groups, logger);
+ return hostSystem.allocateHosts(cluster, Capacity.fromCount(count, groups, resources, required, canFail), logger);
}
private static Optional<NodeResources> getResources(ModelElement nodesElement) {
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java
index c1f793e255d..1670cc46fef 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java
@@ -673,10 +673,11 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
.dockerImageRepo(deployState.getWantedDockerImageRepo())
.build();
Capacity capacity = Capacity.fromCount(1,
+ 1,
Optional.empty(),
false,
! deployState.getProperties().isBootstrap());
- HostResource host = hostSystem.allocateHosts(clusterSpec, capacity, 1, log).keySet().iterator().next();
+ HostResource host = hostSystem.allocateHosts(clusterSpec, capacity, log).keySet().iterator().next();
return singleHostContainerCluster(cluster, host, context);
}
}
@@ -688,10 +689,11 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
.build();
int nodeCount = deployState.zone().environment().isProduction() ? 2 : 1;
Capacity capacity = Capacity.fromCount(nodeCount,
+ 1,
Optional.empty(),
false,
!deployState.getProperties().isBootstrap());
- var hosts = hostSystem.allocateHosts(clusterSpec, capacity, 1, log);
+ var hosts = hostSystem.allocateHosts(clusterSpec, capacity, log);
return createNodesFromHosts(log, hosts, cluster);
}
return singleHostContainerCluster(cluster, hostSystem.getHost(Container.SINGLENODE_CONTAINER_SERVICESPEC), context);
@@ -721,7 +723,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
.build();
Map<HostResource, ClusterMembership> hosts =
cluster.getRoot().hostSystem().allocateHosts(clusterSpec,
- Capacity.fromRequiredNodeType(type), 1, log);
+ Capacity.fromRequiredNodeType(type), log);
return createNodesFromHosts(context.getDeployLogger(), hosts, cluster);
}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/VespaModelFactoryTest.java b/config-model/src/test/java/com/yahoo/vespa/model/VespaModelFactoryTest.java
index 4b7f727ff63..cf1ae637cf9 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/VespaModelFactoryTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/VespaModelFactoryTest.java
@@ -109,7 +109,13 @@ public class VespaModelFactoryTest {
}
@Override
+ @Deprecated // TODO: Remove after April 2020
public List<HostSpec> prepare(ClusterSpec cluster, Capacity capacity, int groups, ProvisionLogger logger) {
+ return prepare(cluster, capacity.withGroups(groups), logger);
+ }
+
+ @Override
+ public List<HostSpec> prepare(ClusterSpec cluster, Capacity capacity, ProvisionLogger logger) {
return List.of(new HostSpec(hostName,
List.of(),
ClusterMembership.from(ClusterSpec.request(ClusterSpec.Type.container, new ClusterSpec.Id(routingClusterName)).vespaVersion("6.42").build(),
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/Capacity.java b/config-provisioning/src/main/java/com/yahoo/config/provision/Capacity.java
index 59d6ec8feb8..a37f315be9d 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/Capacity.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/Capacity.java
@@ -11,7 +11,8 @@ import java.util.Optional;
*/
public final class Capacity {
- private final int nodeCount;
+ private final int nodes;
+ private final int groups;
private final boolean required;
@@ -21,8 +22,12 @@ public final class Capacity {
private final NodeType type;
- private Capacity(int nodeCount, Optional<NodeResources> nodeResources, boolean required, boolean canFail, NodeType type) {
- this.nodeCount = nodeCount;
+ private Capacity(int nodes, int groups, Optional<NodeResources> nodeResources, boolean required, boolean canFail, NodeType type) {
+ if (nodes > 0 && groups > 0 && nodes % groups != 0)
+ throw new IllegalArgumentException("The number of nodes (" + nodes +
+ ") must be divisible by the number of groups (" + groups + ")");
+ this.nodes = nodes;
+ this.groups = groups;
this.required = required;
this.canFail = canFail;
this.nodeResources = nodeResources;
@@ -30,7 +35,14 @@ public final class Capacity {
}
/** Returns the number of nodes requested */
- public int nodeCount() { return nodeCount; }
+ @Deprecated // TODO: Remove after April 2020
+ public int nodeCount() { return nodes; }
+
+ /** Returns the number of nodes requested (across all groups), or 0 if not specified */
+ public int nodes() { return nodes; }
+
+ /** Returns the number of groups requested, or 0 if not specified */
+ public int groups() { return groups; }
/**
* The node flavor requested, or empty if no legacy flavor name has been used.
@@ -38,7 +50,7 @@ public final class Capacity {
*
* @deprecated use nodeResources instead
*/
- @Deprecated
+ @Deprecated // TODO: Remove after March 2020
public Optional<String> flavor() {
if (nodeResources().isEmpty()) return Optional.empty();
return nodeResources.map(n -> n.toString());
@@ -64,32 +76,49 @@ public final class Capacity {
*/
public NodeType type() { return type; }
+ public Capacity withGroups(int groups) {
+ return new Capacity(nodes, groups, nodeResources, required, canFail, type);
+ }
+
@Override
public String toString() {
- return nodeCount + " nodes " + (nodeResources.isPresent() ? nodeResources.get() : "with default resources" );
+ return nodes + " nodes " +
+ (groups > 1 ? "(in " + groups + " groups) " : "") +
+ (nodeResources.isPresent() ? nodeResources.get() : "with default resources" );
+ }
+
+ /** Create a non-required, failable capacity request */
+ public static Capacity fromCount(int nodes, int groups, NodeResources resources) {
+ return fromCount(nodes, groups, resources, false, true);
+ }
+
+ public static Capacity fromCount(int nodes, int groups, NodeResources resources, boolean required, boolean canFail) {
+ return new Capacity(nodes, groups, Optional.of(resources), required, canFail, NodeType.tenant);
}
- /** Creates this from a desired node count: The request may be satisfied with a smaller number of nodes. */
- public static Capacity fromNodeCount(int capacity) {
- return fromCount(capacity, Optional.empty(), false, true);
+ public static Capacity fromCount(int nodes, int groups, Optional<NodeResources> resources, boolean required, boolean canFail) {
+ return new Capacity(nodes, groups, resources, required, canFail, NodeType.tenant);
}
/** Create a non-required, failable capacity request */
- public static Capacity fromCount(int nodeCount, NodeResources resources) {
- return fromCount(nodeCount, resources, false, true);
+ @Deprecated // TODO: Remove after April 2020
+ public static Capacity fromCount(int nodes, NodeResources resources) {
+ return fromCount(nodes, 0, resources, false, true);
}
- public static Capacity fromCount(int nodeCount, NodeResources resources, boolean required, boolean canFail) {
- return new Capacity(nodeCount, Optional.of(resources), required, canFail, NodeType.tenant);
+ @Deprecated // TODO: Remove after April 2020
+ public static Capacity fromCount(int nodes, NodeResources resources, boolean required, boolean canFail) {
+ return new Capacity(nodes, 0, Optional.of(resources), required, canFail, NodeType.tenant);
}
- public static Capacity fromCount(int nodeCount, Optional<NodeResources> resources, boolean required, boolean canFail) {
- return new Capacity(nodeCount, resources, required, canFail, NodeType.tenant);
+ @Deprecated // TODO: Remove after April 2020
+ public static Capacity fromCount(int nodes, Optional<NodeResources> resources, boolean required, boolean canFail) {
+ return new Capacity(nodes, 0, resources, required, canFail, NodeType.tenant);
}
/** Creates this from a node type */
public static Capacity fromRequiredNodeType(NodeType type) {
- return new Capacity(0, Optional.empty(), true, false, type);
+ return new Capacity(0, 0, Optional.empty(), true, false, type);
}
}
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/Provisioner.java b/config-provisioning/src/main/java/com/yahoo/config/provision/Provisioner.java
index 6be1d49ebd3..e308d631442 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/Provisioner.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/Provisioner.java
@@ -19,10 +19,12 @@ public interface Provisioner {
* @param applicationId the application requesting hosts
* @param cluster the specification of the cluster to allocate nodes for
* @param capacity the capacity requested
- * @param groups the number of node groups to divide the requested capacity into
* @param logger a logger which receives messages which are returned to the requestor
* @return the specification of the hosts allocated
*/
+ List<HostSpec> prepare(ApplicationId applicationId, ClusterSpec cluster, Capacity capacity, ProvisionLogger logger);
+
+ @Deprecated // TODO: Remove after April 2020
List<HostSpec> prepare(ApplicationId applicationId, ClusterSpec cluster, Capacity capacity, int groups, ProvisionLogger logger);
/**
@@ -40,7 +42,6 @@ public interface Provisioner {
* @param transaction Transaction with operations to commit together with any operations done within the provisioner.
* @param application the application to remove
*/
- @SuppressWarnings("deprecation")
void remove(NestedTransaction transaction, ApplicationId application);
/**
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/provision/ProvisionerAdapter.java b/configserver/src/main/java/com/yahoo/vespa/config/server/provision/ProvisionerAdapter.java
index ee4cc4a3043..daacdf9fd50 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/provision/ProvisionerAdapter.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/provision/ProvisionerAdapter.java
@@ -36,8 +36,14 @@ public class ProvisionerAdapter implements HostProvisioner {
}
@Override
+ @Deprecated // TODO: Remove after April 2020
public List<HostSpec> prepare(ClusterSpec cluster, Capacity capacity, int groups, ProvisionLogger logger) {
- return provisioner.prepare(applicationId, cluster, capacity, groups, logger);
+ return provisioner.prepare(applicationId, cluster, capacity.withGroups(groups), logger);
+ }
+
+ @Override
+ public List<HostSpec> prepare(ClusterSpec cluster, Capacity capacity, ProvisionLogger logger) {
+ return provisioner.prepare(applicationId, cluster, capacity, logger);
}
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/provision/StaticProvisioner.java b/configserver/src/main/java/com/yahoo/vespa/config/server/provision/StaticProvisioner.java
index 26d322665f0..8ddfb1e8b09 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/provision/StaticProvisioner.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/provision/StaticProvisioner.java
@@ -33,8 +33,15 @@ public class StaticProvisioner implements HostProvisioner {
throw new UnsupportedOperationException("Allocating a single host from provisioning info is not supported");
}
+
@Override
+ @Deprecated // TODO: Remove after April 2020
public List<HostSpec> prepare(ClusterSpec cluster, Capacity capacity, int groups, ProvisionLogger logger) {
+ return prepare(cluster, capacity.withGroups(groups), logger);
+ }
+
+ @Override
+ public List<HostSpec> prepare(ClusterSpec cluster, Capacity capacity, ProvisionLogger logger) {
List<HostSpec> hostsAlreadyAllocatedToCluster =
allocatedHosts.getHosts().stream()
.filter(host -> host.membership().isPresent() && matches(host.membership().get().cluster(), cluster))
@@ -42,7 +49,7 @@ public class StaticProvisioner implements HostProvisioner {
if ( ! hostsAlreadyAllocatedToCluster.isEmpty())
return hostsAlreadyAllocatedToCluster;
else
- return fallback.prepare(cluster, capacity, groups, logger);
+ return fallback.prepare(cluster, capacity, logger);
}
private boolean matches(ClusterSpec nodeCluster, ClusterSpec requestedCluster) {
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java
index 85f07da0325..41712be07f0 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/deploy/DeployTester.java
@@ -299,8 +299,14 @@ public class DeployTester {
}
@Override
+ @Deprecated // TODO: Remove after April 2020
public List<HostSpec> prepare(ApplicationId applicationId, ClusterSpec cluster, Capacity capacity, int groups, ProvisionLogger logger) {
- return hostProvisioner.prepare(cluster, capacity, groups, logger);
+ return hostProvisioner.prepare(cluster, capacity.withGroups(groups), logger);
+ }
+
+ @Override
+ public List<HostSpec> prepare(ApplicationId applicationId, ClusterSpec cluster, Capacity capacity, ProvisionLogger logger) {
+ return hostProvisioner.prepare(cluster, capacity, logger);
}
@Override
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/SessionHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/SessionHandlerTest.java
index 70bba674778..5b0bb7885d8 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/SessionHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/SessionHandlerTest.java
@@ -237,11 +237,17 @@ public class SessionHandlerTest {
public Collection<HostSpec> lastHosts;
@Override
+ @Deprecated // TODO: Remove after April 2020
public List<HostSpec> prepare(ApplicationId applicationId, ClusterSpec cluster, Capacity capacity, int groups, ProvisionLogger logger) {
throw new UnsupportedOperationException();
}
@Override
+ public List<HostSpec> prepare(ApplicationId applicationId, ClusterSpec cluster, Capacity capacity, ProvisionLogger logger) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
public void activate(NestedTransaction transaction, ApplicationId application, Collection<HostSpec> hosts) {
activated = true;
lastApplicationId = application;
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java
index 40115170b69..a3b0f3ec44a 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionPreparerTest.java
@@ -342,11 +342,17 @@ public class SessionPreparerTest {
private static class FailWithTransientExceptionProvisioner implements Provisioner {
@Override
+ @Deprecated // TODO: Remove after April 2020
public List<HostSpec> prepare(ApplicationId applicationId, ClusterSpec cluster, Capacity capacity, int groups, ProvisionLogger logger) {
throw new LoadBalancerServiceException("Unable to create load balancer", new Exception("some internal exception"));
}
@Override
+ public List<HostSpec> prepare(ApplicationId applicationId, ClusterSpec cluster, Capacity capacity, ProvisionLogger logger) {
+ throw new LoadBalancerServiceException("Unable to create load balancer", new Exception("some internal exception"));
+ }
+
+ @Override
public void activate(NestedTransaction transaction, ApplicationId application, Collection<HostSpec> hosts) { }
@Override
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java
index 94f8fb29b9a..c8fe626dc72 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java
@@ -32,7 +32,7 @@ public class CapacityPolicies {
}
public int decideSize(Capacity capacity, ClusterSpec cluster, ApplicationId application) {
- int requestedNodes = capacity.nodeCount();
+ int requestedNodes = capacity.nodes();
if (application.instance().isTester()) return 1;
@@ -42,7 +42,7 @@ public class CapacityPolicies {
switch(zone.environment()) {
case dev : case test : return 1;
- case perf : return Math.min(capacity.nodeCount(), 3);
+ case perf : return Math.min(capacity.nodes(), 3);
case staging: return requestedNodes <= 1 ? requestedNodes : Math.max(2, requestedNodes / 10);
case prod : return requestedNodes;
default : throw new IllegalArgumentException("Unsupported environment " + zone.environment());
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImpl.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImpl.java
index 1086a3a7cd9..fb83385920c 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImpl.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImpl.java
@@ -86,12 +86,10 @@ public class InfraDeployerImpl implements InfraDeployer {
try (Mutex lock = nodeRepository.lock(application.getApplicationId())) {
NodeType nodeType = application.getCapacity().type();
Version targetVersion = infrastructureVersions.getTargetVersionFor(nodeType);
- hostSpecs = provisioner.prepare(
- application.getApplicationId(),
- application.getClusterSpecWithVersion(targetVersion),
- application.getCapacity(),
- 1, // groups
- logger::log);
+ hostSpecs = provisioner.prepare(application.getApplicationId(),
+ application.getClusterSpecWithVersion(targetVersion),
+ application.getCapacity(),
+ logger::log);
prepared = true;
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java
index 73061acd9c1..cc59984e9d6 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java
@@ -70,38 +70,47 @@ public class NodeRepositoryProvisioner implements Provisioner {
this.activator = new Activator(nodeRepository, loadBalancerProvisioner);
}
+
/**
* Returns a list of nodes in the prepared or active state, matching the given constraints.
* The nodes are ordered by increasing index number.
*/
+ @Deprecated // TODO: Remove after April 2020
@Override
- public List<HostSpec> prepare(ApplicationId application, ClusterSpec cluster, Capacity requestedCapacity,
+ public List<HostSpec> prepare(ApplicationId application, ClusterSpec cluster, Capacity requestedCapacity,
int wantedGroups, ProvisionLogger logger) {
+ return prepare(application, cluster, requestedCapacity.withGroups(wantedGroups), logger);
+ }
+
+ /**
+ * Returns a list of nodes in the prepared or active state, matching the given constraints.
+ * The nodes are ordered by increasing index number.
+ */
+ @Override
+ public List<HostSpec> prepare(ApplicationId application, ClusterSpec cluster, Capacity requestedCapacity,
+ ProvisionLogger logger) {
if (cluster.group().isPresent()) throw new IllegalArgumentException("Node requests cannot specify a group");
- if (requestedCapacity.nodeCount() > 0 && requestedCapacity.nodeCount() % wantedGroups != 0)
- throw new IllegalArgumentException("Requested " + requestedCapacity.nodeCount() + " nodes in " + wantedGroups + " groups, " +
- "which doesn't allow the nodes to be divided evenly into groups");
log.log(zone.system().isCd() ? Level.INFO : LogLevel.DEBUG,
- () -> "Received deploy prepare request for " + requestedCapacity + " in " +
- wantedGroups + " groups for application " + application + ", cluster " + cluster);
+ () -> "Received deploy prepare request for " + requestedCapacity +
+ " for application " + application + ", cluster " + cluster);
int effectiveGroups;
NodeSpec requestedNodes;
Optional<NodeResources> resources = requestedCapacity.nodeResources();
if ( requestedCapacity.type() == NodeType.tenant) {
int nodeCount = capacityPolicies.decideSize(requestedCapacity, cluster, application);
- if (zone.environment().isManuallyDeployed() && nodeCount < requestedCapacity.nodeCount())
- logger.log(Level.INFO, "Requested " + requestedCapacity.nodeCount() + " nodes for " + cluster +
+ if (zone.environment().isManuallyDeployed() && nodeCount < requestedCapacity.nodes())
+ logger.log(Level.INFO, "Requested " + requestedCapacity.nodes() + " nodes for " + cluster +
", downscaling to " + nodeCount + " nodes in " + zone.environment());
resources = Optional.of(capacityPolicies.decideNodeResources(requestedCapacity, cluster));
boolean exclusive = capacityPolicies.decideExclusivity(cluster.isExclusive());
- effectiveGroups = Math.min(wantedGroups, nodeCount); // cannot have more groups than nodes
+ effectiveGroups = Math.min(requestedCapacity.groups(), nodeCount); // cannot have more groups than nodes
requestedNodes = NodeSpec.from(nodeCount, resources.get(), exclusive, requestedCapacity.canFail());
if ( ! hasQuota(application, nodeCount))
throw new IllegalArgumentException(requestedCapacity + " requested for " + cluster +
- (requestedCapacity.nodeCount() != nodeCount ? " resolved to " + nodeCount + " nodes" : "") +
+ (requestedCapacity.nodes() != nodeCount ? " resolved to " + nodeCount + " nodes" : "") +
" exceeds your quota. Resolve this at https://cloud.vespa.ai/quota");
}
else {
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockDeployer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockDeployer.java
index 7ab42093bab..5ec5c2c08e8 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockDeployer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockDeployer.java
@@ -146,8 +146,8 @@ public class MockDeployer implements Deployer {
this.clusterContexts = clusterContexts;
}
- public ApplicationContext(ApplicationId id, ClusterSpec cluster, Capacity capacity, int groups) {
- this(id, List.of(new ClusterContext(id, cluster, capacity, groups)));
+ public ApplicationContext(ApplicationId id, ClusterSpec cluster, Capacity capacity) {
+ this(id, List.of(new ClusterContext(id, cluster, capacity)));
}
public ApplicationId id() { return id; }
@@ -169,13 +169,11 @@ public class MockDeployer implements Deployer {
private final ApplicationId id;
private final ClusterSpec cluster;
private final Capacity capacity;
- private final int groups;
- public ClusterContext(ApplicationId id, ClusterSpec cluster, Capacity capacity, int groups) {
+ public ClusterContext(ApplicationId id, ClusterSpec cluster, Capacity capacity) {
this.id = id;
this.cluster = cluster;
this.capacity = capacity;
- this.groups = groups;
}
public ApplicationId id() { return id; }
@@ -183,7 +181,7 @@ public class MockDeployer implements Deployer {
public ClusterSpec cluster() { return cluster; }
private List<HostSpec> prepare(NodeRepositoryProvisioner provisioner) {
- return provisioner.prepare(id, cluster, capacity, groups, null);
+ return provisioner.prepare(id, cluster, capacity, null);
}
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java
index 4f72864b087..22c37d935a5 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java
@@ -139,19 +139,19 @@ public class MockNodeRepository extends NodeRepository {
ApplicationId zoneApp = ApplicationId.from(TenantName.from("zoneapp"), ApplicationName.from("zoneapp"), InstanceName.from("zoneapp"));
ClusterSpec zoneCluster = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("node-admin")).vespaVersion("6.42").build();
- activate(provisioner.prepare(zoneApp, zoneCluster, Capacity.fromRequiredNodeType(NodeType.host), 1, null), zoneApp, provisioner);
+ activate(provisioner.prepare(zoneApp, zoneCluster, Capacity.fromRequiredNodeType(NodeType.host), null), zoneApp, provisioner);
ApplicationId app1 = ApplicationId.from(TenantName.from("tenant1"), ApplicationName.from("application1"), InstanceName.from("instance1"));
ClusterSpec cluster1 = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("id1")).vespaVersion("6.42").build();
- provisioner.prepare(app1, cluster1, Capacity.fromCount(2, new NodeResources(2, 8, 50, 1)), 1, null);
+ provisioner.prepare(app1, cluster1, Capacity.fromCount(2, 1, new NodeResources(2, 8, 50, 1)), null);
ApplicationId app2 = ApplicationId.from(TenantName.from("tenant2"), ApplicationName.from("application2"), InstanceName.from("instance2"));
ClusterSpec cluster2 = ClusterSpec.request(ClusterSpec.Type.content, ClusterSpec.Id.from("id2")).vespaVersion("6.42").build();
- activate(provisioner.prepare(app2, cluster2, Capacity.fromCount(2, new NodeResources(2, 8, 50, 1)), 1, null), app2, provisioner);
+ activate(provisioner.prepare(app2, cluster2, Capacity.fromCount(2, 1, new NodeResources(2, 8, 50, 1)), null), app2, provisioner);
ApplicationId app3 = ApplicationId.from(TenantName.from("tenant3"), ApplicationName.from("application3"), InstanceName.from("instance3"));
ClusterSpec cluster3 = ClusterSpec.request(ClusterSpec.Type.content, ClusterSpec.Id.from("id3")).vespaVersion("6.42").build();
- activate(provisioner.prepare(app3, cluster3, Capacity.fromCount(2, new NodeResources(1, 4, 100, 1), false, true), 1, null), app3, provisioner);
+ activate(provisioner.prepare(app3, cluster3, Capacity.fromCount(2, 1, new NodeResources(1, 4, 100, 1), false, true), null), app3, provisioner);
List<Node> largeNodes = new ArrayList<>();
largeNodes.add(createNode("node13", "host13.yahoo.com", ipConfig(13), Optional.empty(),
@@ -162,7 +162,7 @@ public class MockNodeRepository extends NodeRepository {
setReady(largeNodes, Agent.system, getClass().getSimpleName());
ApplicationId app4 = ApplicationId.from(TenantName.from("tenant4"), ApplicationName.from("application4"), InstanceName.from("instance4"));
ClusterSpec cluster4 = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("id4")).vespaVersion("6.42").build();
- activate(provisioner.prepare(app4, cluster4, Capacity.fromCount(2, new NodeResources(10, 48, 500, 1), false, true), 1, null), app4, provisioner);
+ activate(provisioner.prepare(app4, cluster4, Capacity.fromCount(2, 1, new NodeResources(10, 48, 500, 1), false, true), null), app4, provisioner);
}
private void activate(List<HostSpec> hosts, ApplicationId application, NodeRepositoryProvisioner provisioner) {
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockProvisioner.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockProvisioner.java
index 3915ae41d6e..045d0cad1ad 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockProvisioner.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockProvisioner.java
@@ -20,11 +20,17 @@ import java.util.List;
public class MockProvisioner implements Provisioner {
@Override
+ @Deprecated // TODO: Remove after April 2020
public List<HostSpec> prepare(ApplicationId applicationId, ClusterSpec cluster, Capacity capacity, int groups, ProvisionLogger logger) {
return Collections.emptyList();
}
@Override
+ public List<HostSpec> prepare(ApplicationId applicationId, ClusterSpec cluster, Capacity capacity, ProvisionLogger logger) {
+ return Collections.emptyList();
+ }
+
+ @Override
public void activate(NestedTransaction transaction, ApplicationId application, Collection<HostSpec> hosts) {
}
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 3ba230f9ccd..90188525c81 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
@@ -82,7 +82,7 @@ class AutoscalingTester {
}
public List<HostSpec> deploy(ApplicationId application, ClusterSpec cluster, int nodes, int groups, NodeResources resources) {
- List<HostSpec> hosts = provisioningTester.prepare(application, cluster, Capacity.fromCount(nodes, resources), groups);
+ List<HostSpec> hosts = provisioningTester.prepare(application, cluster, Capacity.fromCount(nodes, groups, resources));
for (HostSpec host : hosts)
makeReady(host.hostname());
provisioningTester.deployZoneApp();
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/NodeMetricsFetcherTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/NodeMetricsFetcherTest.java
index 8c1a27f2fd1..42e366143e4 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/NodeMetricsFetcherTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/NodeMetricsFetcherTest.java
@@ -29,8 +29,8 @@ public class NodeMetricsFetcherTest {
ApplicationId application1 = tester.makeApplicationId();
ApplicationId application2 = tester.makeApplicationId();
- tester.deploy(application1, Capacity.fromCount(2, resources)); // host-1.yahoo.com, host-2.yahoo.com
- tester.deploy(application2, Capacity.fromCount(2, resources)); // host-4.yahoo.com, host-3.yahoo.com
+ tester.deploy(application1, Capacity.fromCount(2, 1, resources)); // host-1.yahoo.com, host-2.yahoo.com
+ tester.deploy(application2, Capacity.fromCount(2, 1, resources)); // host-4.yahoo.com, host-3.yahoo.com
orchestrator.suspend(new HostName("host-4.yahoo.com"));
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirerTest.java
index e8b9813a8a2..1ac5525d817 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirerTest.java
@@ -322,12 +322,12 @@ public class FailedExpirerTest {
public FailureScenario allocate(ClusterSpec.Type clusterType, NodeResources flavor, String... hostname) {
ClusterSpec clusterSpec = ClusterSpec.request(clusterType, ClusterSpec.Id.from("test")).vespaVersion("6.42").build();
- Capacity capacity = Capacity.fromCount(hostname.length, Optional.of(flavor), false, true);
+ Capacity capacity = Capacity.fromCount(hostname.length, 1, Optional.of(flavor), false, true);
return allocate(applicationId, clusterSpec, capacity);
}
public FailureScenario allocate(ApplicationId applicationId, ClusterSpec clusterSpec, Capacity capacity) {
- List<HostSpec> preparedNodes = provisioner.prepare(applicationId, clusterSpec, capacity, 1, null);
+ List<HostSpec> preparedNodes = provisioner.prepare(applicationId, clusterSpec, capacity, null);
NestedTransaction transaction = new NestedTransaction().add(new CuratorTransaction(curator));
provisioner.activate(transaction, applicationId, Set.copyOf(preparedNodes));
transaction.commit();
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/InactiveAndFailedExpirerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/InactiveAndFailedExpirerTest.java
index 17d8b702269..cd359c9aa5f 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/InactiveAndFailedExpirerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/InactiveAndFailedExpirerTest.java
@@ -54,7 +54,7 @@ public class InactiveAndFailedExpirerTest {
// Allocate then deallocate 2 nodes
ClusterSpec cluster = ClusterSpec.request(ClusterSpec.Type.content, ClusterSpec.Id.from("test")).vespaVersion("6.42").build();
- List<HostSpec> preparedNodes = tester.prepare(applicationId, cluster, Capacity.fromCount(2, nodeResources), 1);
+ List<HostSpec> preparedNodes = tester.prepare(applicationId, cluster, Capacity.fromCount(2, 1, nodeResources));
tester.activate(applicationId, new HashSet<>(preparedNodes));
assertEquals(2, tester.getNodes(applicationId, Node.State.active).size());
tester.deactivate(applicationId);
@@ -92,7 +92,7 @@ public class InactiveAndFailedExpirerTest {
// Allocate and deallocate a single node
ClusterSpec cluster = ClusterSpec.request(ClusterSpec.Type.content, ClusterSpec.Id.from("test")).vespaVersion("6.42").build();
- List<HostSpec> preparedNodes = tester.prepare(applicationId, cluster, Capacity.fromCount(2, nodeResources), 1);
+ List<HostSpec> preparedNodes = tester.prepare(applicationId, cluster, Capacity.fromCount(2, 1, nodeResources));
tester.activate(applicationId, new HashSet<>(preparedNodes));
assertEquals(2, tester.getNodes(applicationId, Node.State.active).size());
tester.deactivate(applicationId);
@@ -124,8 +124,7 @@ public class InactiveAndFailedExpirerTest {
{
List<HostSpec> hostSpecs = tester.prepare(applicationId,
cluster,
- Capacity.fromCount(2, nodeResources),
- 1);
+ Capacity.fromCount(2, 1, nodeResources));
tester.activate(applicationId, new HashSet<>(hostSpecs));
assertEquals(2, tester.getNodes(applicationId, Node.State.active).size());
}
@@ -134,7 +133,7 @@ public class InactiveAndFailedExpirerTest {
{
Node toRetire = tester.getNodes(applicationId, Node.State.active).asList().get(0);
tester.patchNode(toRetire.withWantToRetire(true, Agent.operator, tester.clock().instant()));
- List<HostSpec> hostSpecs = tester.prepare(applicationId, cluster, Capacity.fromCount(2, nodeResources), 1);
+ List<HostSpec> hostSpecs = tester.prepare(applicationId, cluster, Capacity.fromCount(2, 1, nodeResources));
tester.activate(applicationId, new HashSet<>(hostSpecs));
}
@@ -147,9 +146,9 @@ public class InactiveAndFailedExpirerTest {
applicationId,
new MockDeployer.ApplicationContext(applicationId, cluster,
Capacity.fromCount(2,
+ 1,
nodeResources,
- false, true),
- 1)
+ false, true))
)
);
Orchestrator orchestrator = mock(Orchestrator.class);
@@ -174,7 +173,7 @@ public class InactiveAndFailedExpirerTest {
ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Environment.prod, RegionName.from("us-east"))).build();
tester.makeReadyNodes(1, nodeResources);
ClusterSpec cluster = ClusterSpec.request(ClusterSpec.Type.content, ClusterSpec.Id.from("test")).vespaVersion("6.42").build();
- List<HostSpec> preparedNodes = tester.prepare(testerId, cluster, Capacity.fromCount(2, nodeResources), 1);
+ List<HostSpec> preparedNodes = tester.prepare(testerId, cluster, Capacity.fromCount(2, 1, nodeResources));
tester.activate(testerId, new HashSet<>(preparedNodes));
assertEquals(1, tester.getNodes(testerId, Node.State.active).size());
tester.deactivate(testerId);
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java
index 0efca6ef826..24284031c92 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailTester.java
@@ -89,17 +89,17 @@ public class NodeFailTester {
// Create applications
ClusterSpec clusterApp1 = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("test")).vespaVersion("6.42").build();
ClusterSpec clusterApp2 = ClusterSpec.request(ClusterSpec.Type.content, ClusterSpec.Id.from("test")).vespaVersion("6.42").build();
- Capacity capacity1 = Capacity.fromCount(5, nodeResources, false, true);
- Capacity capacity2 = Capacity.fromCount(7, nodeResources, false, true);
+ Capacity capacity1 = Capacity.fromCount(5, 1, nodeResources, false, true);
+ Capacity capacity2 = Capacity.fromCount(7, 1, nodeResources, false, true);
tester.activate(app1, clusterApp1, capacity1);
tester.activate(app2, clusterApp2, capacity2);
- assertEquals(capacity1.nodeCount(), tester.nodeRepository.getNodes(app1, Node.State.active).size());
- assertEquals(capacity2.nodeCount(), tester.nodeRepository.getNodes(app2, Node.State.active).size());
+ assertEquals(capacity1.nodes(), tester.nodeRepository.getNodes(app1, Node.State.active).size());
+ assertEquals(capacity2.nodes(), tester.nodeRepository.getNodes(app2, Node.State.active).size());
Map<ApplicationId, MockDeployer.ApplicationContext> apps = Map.of(
- app1, new MockDeployer.ApplicationContext(app1, clusterApp1, capacity1, 1),
- app2, new MockDeployer.ApplicationContext(app2, clusterApp2, capacity2, 1));
+ app1, new MockDeployer.ApplicationContext(app1, clusterApp1, capacity1),
+ app2, new MockDeployer.ApplicationContext(app2, clusterApp2, capacity2));
tester.deployer = new MockDeployer(tester.provisioner, tester.clock(), apps);
tester.serviceMonitor = new ServiceMonitorStub(apps, tester.nodeRepository);
tester.metric = new MetricsReporterTest.TestMetric();
@@ -122,20 +122,20 @@ public class NodeFailTester {
ClusterSpec clusterApp1 = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("test")).vespaVersion("6.75.0").build();
ClusterSpec clusterApp2 = ClusterSpec.request(ClusterSpec.Type.content, ClusterSpec.Id.from("test")).vespaVersion("6.75.0").build();
Capacity allHosts = Capacity.fromRequiredNodeType(NodeType.host);
- Capacity capacity1 = Capacity.fromCount(3, new NodeResources(1, 4, 10, 0.3), false, true);
- Capacity capacity2 = Capacity.fromCount(5, new NodeResources(1, 4, 10, 0.3), false, true);
+ Capacity capacity1 = Capacity.fromCount(3, 1, new NodeResources(1, 4, 10, 0.3), false, true);
+ Capacity capacity2 = Capacity.fromCount(5, 1, new NodeResources(1, 4, 10, 0.3), false, true);
tester.activate(tenantHostApp, clusterNodeAdminApp, allHosts);
tester.activate(app1, clusterApp1, capacity1);
tester.activate(app2, clusterApp2, capacity2);
assertEquals(Set.of(tester.nodeRepository.getNodes(NodeType.host)),
Set.of(tester.nodeRepository.getNodes(tenantHostApp, Node.State.active)));
- assertEquals(capacity1.nodeCount(), tester.nodeRepository.getNodes(app1, Node.State.active).size());
- assertEquals(capacity2.nodeCount(), tester.nodeRepository.getNodes(app2, Node.State.active).size());
+ assertEquals(capacity1.nodes(), tester.nodeRepository.getNodes(app1, Node.State.active).size());
+ assertEquals(capacity2.nodes(), tester.nodeRepository.getNodes(app2, Node.State.active).size());
Map<ApplicationId, MockDeployer.ApplicationContext> apps = Map.of(
- tenantHostApp, new MockDeployer.ApplicationContext(tenantHostApp, clusterNodeAdminApp, allHosts, 1),
- app1, new MockDeployer.ApplicationContext(app1, clusterApp1, capacity1, 1),
- app2, new MockDeployer.ApplicationContext(app2, clusterApp2, capacity2, 1));
+ tenantHostApp, new MockDeployer.ApplicationContext(tenantHostApp, clusterNodeAdminApp, allHosts),
+ app1, new MockDeployer.ApplicationContext(app1, clusterApp1, capacity1),
+ app2, new MockDeployer.ApplicationContext(app2, clusterApp2, capacity2));
tester.deployer = new MockDeployer(tester.provisioner, tester.clock(), apps);
tester.serviceMonitor = new ServiceMonitorStub(apps, tester.nodeRepository);
tester.metric = new MetricsReporterTest.TestMetric();
@@ -154,7 +154,7 @@ public class NodeFailTester {
assertEquals(count, tester.nodeRepository.getNodes(nodeType, Node.State.active).size());
Map<ApplicationId, MockDeployer.ApplicationContext> apps = Map.of(
- app1, new MockDeployer.ApplicationContext(app1, clusterApp1, allNodes, 1));
+ app1, new MockDeployer.ApplicationContext(app1, clusterApp1, allNodes));
tester.deployer = new MockDeployer(tester.provisioner, tester.clock(), apps);
tester.serviceMonitor = new ServiceMonitorStub(apps, tester.nodeRepository);
tester.metric = new MetricsReporterTest.TestMetric();
@@ -252,7 +252,7 @@ public class NodeFailTester {
}
private void activate(ApplicationId applicationId, ClusterSpec cluster, Capacity capacity) {
- List<HostSpec> hosts = provisioner.prepare(applicationId, cluster, capacity, 1, null);
+ List<HostSpec> hosts = provisioner.prepare(applicationId, cluster, capacity, null);
NestedTransaction transaction = new NestedTransaction().add(new CuratorTransaction(curator));
provisioner.activate(transaction, applicationId, hosts);
transaction.commit();
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OperatorChangeApplicationMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OperatorChangeApplicationMaintainerTest.java
index cf93e8ecf6e..067d578a440 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OperatorChangeApplicationMaintainerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/OperatorChangeApplicationMaintainerTest.java
@@ -148,9 +148,9 @@ public class OperatorChangeApplicationMaintainerTest {
new InMemoryFlagSource());
Map<ApplicationId, MockDeployer.ApplicationContext> apps = Map.of(
- app1, new MockDeployer.ApplicationContext(app1, clusterApp1, Capacity.fromCount(wantedNodesApp1, nodeResources), 1),
- app2, new MockDeployer.ApplicationContext(app2, clusterApp2, Capacity.fromCount(wantedNodesApp2, nodeResources), 1),
- app3, new MockDeployer.ApplicationContext(app3, clusterApp3, Capacity.fromRequiredNodeType(NodeType.proxy), 0)) ;
+ app1, new MockDeployer.ApplicationContext(app1, clusterApp1, Capacity.fromCount(wantedNodesApp1, 1, nodeResources)),
+ app2, new MockDeployer.ApplicationContext(app2, clusterApp2, Capacity.fromCount(wantedNodesApp2, 1, nodeResources)),
+ app3, new MockDeployer.ApplicationContext(app3, clusterApp3, Capacity.fromRequiredNodeType(NodeType.proxy))) ;
this.deployer = new MockDeployer(provisioner, nodeRepository.clock(), apps);
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainerTest.java
index 4ca88c10bfe..18d023400f8 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/PeriodicApplicationMaintainerTest.java
@@ -258,8 +258,8 @@ public class PeriodicApplicationMaintainerTest {
new InMemoryFlagSource());
Map<ApplicationId, MockDeployer.ApplicationContext> apps = Map.of(
- app1, new MockDeployer.ApplicationContext(app1, clusterApp1, Capacity.fromCount(wantedNodesApp1, nodeResources), 1),
- app2, new MockDeployer.ApplicationContext(app2, clusterApp2, Capacity.fromCount(wantedNodesApp2, nodeResources), 1));
+ app1, new MockDeployer.ApplicationContext(app1, clusterApp1, Capacity.fromCount(wantedNodesApp1, 1, nodeResources)),
+ app2, new MockDeployer.ApplicationContext(app2, clusterApp2, Capacity.fromCount(wantedNodesApp2, 1, nodeResources)));
this.deployer = new MockDeployer(provisioner, nodeRepository.clock(), apps);
this.maintainer = new TestablePeriodicApplicationMaintainer(deployer, nodeRepository, Duration.ofDays(1), // Long duration to prevent scheduled runs during test
Duration.ofMinutes(30));
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RebalancerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RebalancerTest.java
index b4e713ae492..f0b0beff696 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RebalancerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RebalancerTest.java
@@ -48,8 +48,8 @@ public class RebalancerTest {
MetricsReporterTest.TestMetric metric = new MetricsReporterTest.TestMetric();
Map<ApplicationId, MockDeployer.ApplicationContext> apps = Map.of(
- cpuApp, new MockDeployer.ApplicationContext(cpuApp, clusterSpec("c"), Capacity.fromCount(1, cpuResources), 1),
- memApp, new MockDeployer.ApplicationContext(memApp, clusterSpec("c"), Capacity.fromCount(1, memResources), 1));
+ cpuApp, new MockDeployer.ApplicationContext(cpuApp, clusterSpec("c"), Capacity.fromCount(1, 1, cpuResources)),
+ memApp, new MockDeployer.ApplicationContext(memApp, clusterSpec("c"), Capacity.fromCount(1, 1, memResources)));
MockDeployer deployer = new MockDeployer(tester.provisioner(), tester.clock(), apps);
Rebalancer rebalancer = new Rebalancer(deployer,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ReservationExpirerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ReservationExpirerTest.java
index b4f55c437cd..8aacf0cf067 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ReservationExpirerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/ReservationExpirerTest.java
@@ -61,7 +61,7 @@ public class ReservationExpirerTest {
nodeRepository.setReady(nodes, Agent.system, getClass().getSimpleName());
ApplicationId applicationId = new ApplicationId.Builder().tenant("foo").applicationName("bar").instanceName("fuz").build();
ClusterSpec cluster = ClusterSpec.request(ClusterSpec.Type.content, ClusterSpec.Id.from("test")).vespaVersion("6.42").build();
- provisioner.prepare(applicationId, cluster, Capacity.fromCount(2, new NodeResources(2, 8, 50, 1)), 1, null);
+ provisioner.prepare(applicationId, cluster, Capacity.fromCount(2, 1, new NodeResources(2, 8, 50, 1)), null);
assertEquals(2, nodeRepository.getNodes(NodeType.tenant, Node.State.reserved).size());
// Reservation times out
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RetiredExpirerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RetiredExpirerTest.java
index 78600d360c9..2f2adde1ab2 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RetiredExpirerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/RetiredExpirerTest.java
@@ -98,7 +98,7 @@ public class RetiredExpirerTest {
MockDeployer deployer =
new MockDeployer(provisioner,
clock,
- Collections.singletonMap(applicationId, new MockDeployer.ApplicationContext(applicationId, cluster, Capacity.fromCount(wantedNodes, nodeResources), 1)));
+ Collections.singletonMap(applicationId, new MockDeployer.ApplicationContext(applicationId, cluster, Capacity.fromCount(wantedNodes, 1, nodeResources))));
createRetiredExpirer(deployer).run();
assertEquals(3, nodeRepository.getNodes(applicationId, Node.State.active).size());
assertEquals(4, nodeRepository.getNodes(applicationId, Node.State.inactive).size());
@@ -127,7 +127,7 @@ public class RetiredExpirerTest {
MockDeployer deployer =
new MockDeployer(provisioner,
clock,
- Collections.singletonMap(applicationId, new MockDeployer.ApplicationContext(applicationId, cluster, Capacity.fromCount(2, nodeResources), 1)));
+ Collections.singletonMap(applicationId, new MockDeployer.ApplicationContext(applicationId, cluster, Capacity.fromCount(2, 1, nodeResources))));
createRetiredExpirer(deployer).run();
assertEquals(2, nodeRepository.getNodes(applicationId, Node.State.active).size());
assertEquals(6, nodeRepository.getNodes(applicationId, Node.State.inactive).size());
@@ -161,7 +161,7 @@ public class RetiredExpirerTest {
clock,
Collections.singletonMap(
applicationId,
- new MockDeployer.ApplicationContext(applicationId, cluster, Capacity.fromCount(wantedNodes, nodeResources), 1)));
+ new MockDeployer.ApplicationContext(applicationId, cluster, Capacity.fromCount(wantedNodes, 1, nodeResources))));
// Allow the 1st and 3rd retired nodes permission to inactivate
doNothing()
@@ -197,7 +197,7 @@ public class RetiredExpirerTest {
}
private void activate(ApplicationId applicationId, ClusterSpec cluster, int nodes, int groups, NodeRepositoryProvisioner provisioner) {
- List<HostSpec> hosts = provisioner.prepare(applicationId, cluster, Capacity.fromCount(nodes, nodeResources), groups, null);
+ List<HostSpec> hosts = provisioner.prepare(applicationId, cluster, Capacity.fromCount(nodes, groups, nodeResources), null);
NestedTransaction transaction = new NestedTransaction().add(new CuratorTransaction(curator));
provisioner.activate(transaction, applicationId, hosts);
transaction.commit();
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AclProvisioningTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AclProvisioningTest.java
index 1d028f13340..b4169cfa1a8 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AclProvisioningTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AclProvisioningTest.java
@@ -45,7 +45,7 @@ public class AclProvisioningTest {
// Allocate 2 nodes
ApplicationId application = tester.makeApplicationId();
- List<Node> activeNodes = tester.deploy(application, Capacity.fromCount(2, new NodeResources(1, 4, 10, 1), false, true));
+ List<Node> activeNodes = tester.deploy(application, Capacity.fromCount(2, 1, new NodeResources(1, 4, 10, 1), false, true));
assertEquals(2, activeNodes.size());
// Get trusted nodes for the first active node
@@ -210,7 +210,7 @@ public class AclProvisioningTest {
}
private List<Node> deploy(ApplicationId application, int nodeCount) {
- return tester.deploy(application, Capacity.fromCount(nodeCount, nodeResources));
+ return tester.deploy(application, Capacity.fromCount(nodeCount, 1, nodeResources));
}
private static void assertAcls(List<List<Node>> expected, NodeAcl actual) {
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DockerProvisioningTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DockerProvisioningTest.java
index 7c315a83ddc..13068f81527 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DockerProvisioningTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DockerProvisioningTest.java
@@ -95,7 +95,7 @@ public class DockerProvisioningTest {
// Activate the zone-app, thereby allocating the parents
List<HostSpec> hosts = tester.prepare(zoneApplication,
ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("zone-app")).vespaVersion(wantedVespaVersion).build(),
- Capacity.fromRequiredNodeType(NodeType.host), 1);
+ Capacity.fromRequiredNodeType(NodeType.host));
tester.activate(zoneApplication, hosts);
// Try allocating tenants again
@@ -298,8 +298,7 @@ public class DockerProvisioningTest {
private void prepareAndActivate(ApplicationId application, int nodeCount, boolean exclusive, ProvisioningTester tester) {
Set<HostSpec> hosts = new HashSet<>(tester.prepare(application,
ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("myContainer")).vespaVersion("6.39").exclusive(exclusive).build(),
- Capacity.fromCount(nodeCount, Optional.of(dockerFlavor), false, true),
- 1));
+ Capacity.fromCount(nodeCount, 1, Optional.of(dockerFlavor), false, true)));
tester.activate(application, hosts);
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerAllocationTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerAllocationTest.java
index 661f379f271..4a6f23eabb7 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerAllocationTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerAllocationTest.java
@@ -401,11 +401,11 @@ public class DynamicDockerAllocationTest {
ApplicationId application = tester.makeApplicationId();
ClusterSpec cluster = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("test")).vespaVersion("1").build();
- List<HostSpec> hosts1 = tester.prepare(application, cluster, Capacity.fromCount(2, Optional.of(NodeResources.fromLegacyName("d-2-8-50")), false, true), 1);
+ List<HostSpec> hosts1 = tester.prepare(application, cluster, Capacity.fromCount(2, 1, Optional.of(NodeResources.fromLegacyName("d-2-8-50")), false, true));
tester.activate(application, hosts1);
NodeResources resources = new NodeResources(1.5, 8, 50, 0.3);
- List<HostSpec> hosts2 = tester.prepare(application, cluster, Capacity.fromCount(2, resources), 1);
+ List<HostSpec> hosts2 = tester.prepare(application, cluster, Capacity.fromCount(2, 1, resources));
tester.activate(application, hosts2);
assertEquals(hosts1, hosts2);
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java
index 273fc6bbb2d..c99f7bfd9ee 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java
@@ -154,7 +154,7 @@ public class LoadBalancerProvisionerTest {
@Test
public void provision_load_balancers_with_dynamic_node_provisioning() {
- var nodes = prepare(app1, Capacity.fromCount(2, new NodeResources(1, 4, 10, 0.3), false, true),
+ var nodes = prepare(app1, Capacity.fromCount(2, 1, new NodeResources(1, 4, 10, 0.3), false, true),
true,
clusterRequest(ClusterSpec.Type.container, ClusterSpec.Id.from("qrs")));
Supplier<LoadBalancer> lb = () -> tester.nodeRepository().loadBalancers(app1).asList().get(0);
@@ -172,7 +172,7 @@ public class LoadBalancerProvisionerTest {
assertSame("Load balancer is deactivated", LoadBalancer.State.inactive, lb.get().state());
// Application is redeployed
- nodes = prepare(app1, Capacity.fromCount(2, new NodeResources(1, 4, 10, 0.3), false, true),
+ nodes = prepare(app1, Capacity.fromCount(2, 1, new NodeResources(1, 4, 10, 0.3), false, true),
true,
clusterRequest(ClusterSpec.Type.container, ClusterSpec.Id.from("qrs")));
assertTrue("Load balancer is reconfigured with empty reals", tester.loadBalancerService().instances().get(lb.get().id()).reals().isEmpty());
@@ -229,7 +229,7 @@ public class LoadBalancerProvisionerTest {
}
private Set<HostSpec> prepare(ApplicationId application, ClusterSpec... specs) {
- return prepare(application, Capacity.fromCount(2, new NodeResources(1, 4, 10, 0.3), false, true), false, specs);
+ return prepare(application, Capacity.fromCount(2, 1, new NodeResources(1, 4, 10, 0.3), false, true), false, specs);
}
private Set<HostSpec> prepare(ApplicationId application, Capacity capacity, boolean dynamicDockerNodes, ClusterSpec... specs) {
@@ -240,7 +240,7 @@ public class LoadBalancerProvisionerTest {
}
Set<HostSpec> allNodes = new LinkedHashSet<>();
for (ClusterSpec spec : specs) {
- allNodes.addAll(tester.prepare(application, spec, capacity, 1, false));
+ allNodes.addAll(tester.prepare(application, spec, capacity, false));
}
return allNodes;
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/MultigroupProvisioningTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/MultigroupProvisioningTest.java
index cb5116b541e..7d3056c953b 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/MultigroupProvisioningTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/MultigroupProvisioningTest.java
@@ -103,8 +103,8 @@ public class MultigroupProvisioningTest {
tester.makeReadyNodes(10, small);
- deploy(application1, Capacity.fromCount(1, Optional.of(small), true, true), 1, tester);
- deploy(application1, Capacity.fromCount(2, Optional.of(small), true, true), 2, tester);
+ deploy(application1, Capacity.fromCount(1, 1, Optional.of(small), true, true), tester);
+ deploy(application1, Capacity.fromCount(2, 2, Optional.of(small), true, true), tester);
}
@Test
@@ -116,8 +116,8 @@ public class MultigroupProvisioningTest {
tester.makeReadyNodes(10, small);
tester.makeReadyNodes(10, large);
- deploy(application1, Capacity.fromCount(1, Optional.of(small), true, true), 1, tester);
- deploy(application1, Capacity.fromCount(2, Optional.of(large), true, true), 2, tester);
+ deploy(application1, Capacity.fromCount(1, 1, Optional.of(small), true, true), tester);
+ deploy(application1, Capacity.fromCount(2, 2, Optional.of(large), true, true), tester);
}
@Test
@@ -139,7 +139,7 @@ public class MultigroupProvisioningTest {
tester.clock(),
Collections.singletonMap(application1,
new MockDeployer.ApplicationContext(application1, cluster(),
- Capacity.fromCount(8, Optional.of(large), false, true), 1)));
+ Capacity.fromCount(8, 1, Optional.of(large), false, true))));
new RetiredExpirer(tester.nodeRepository(), tester.orchestrator(), deployer, tester.clock(), Duration.ofDays(30),
Duration.ofHours(12)).run();
@@ -148,21 +148,21 @@ public class MultigroupProvisioningTest {
}
private void deploy(ApplicationId application, int nodeCount, int groupCount, NodeResources resources, ProvisioningTester tester) {
- deploy(application, Capacity.fromCount(nodeCount, Optional.of(resources), false, true), groupCount, tester);
+ deploy(application, Capacity.fromCount(nodeCount, groupCount, Optional.of(resources), false, true), tester);
}
private void deploy(ApplicationId application, int nodeCount, int groupCount, ProvisioningTester tester) {
- deploy(application, Capacity.fromCount(nodeCount, Optional.of(large), false, true), groupCount, tester);
+ deploy(application, Capacity.fromCount(nodeCount, groupCount, Optional.of(large), false, true), tester);
}
- private void deploy(ApplicationId application, Capacity capacity, int wantedGroups, ProvisioningTester tester) {
- int nodeCount = capacity.nodeCount();
+ private void deploy(ApplicationId application, Capacity capacity, ProvisioningTester tester) {
+ int nodeCount = capacity.nodes();
NodeResources nodeResources = capacity.nodeResources().get();
int previousActiveNodeCount = tester.getNodes(application, Node.State.active).resources(nodeResources).size();
- tester.activate(application, prepare(application, capacity, wantedGroups, tester));
+ tester.activate(application, prepare(application, capacity, tester));
assertEquals("Superfluous nodes are retired, but no others - went from " + previousActiveNodeCount + " to " + nodeCount + " nodes",
- Math.max(0, previousActiveNodeCount - capacity.nodeCount()),
+ Math.max(0, previousActiveNodeCount - capacity.nodes()),
tester.getNodes(application, Node.State.active).retired().resources(nodeResources).size());
assertEquals("Other flavors are retired",
0, tester.getNodes(application, Node.State.active).not().retired().not().resources(nodeResources).size());
@@ -187,26 +187,26 @@ public class MultigroupProvisioningTest {
ClusterSpec.Group group = node.allocation().get().membership().cluster().group().get();
nonretiredGroups.put(group, nonretiredGroups.getOrDefault(group, 0) + 1);
- if (wantedGroups > 1)
- assertTrue("Group indexes are always in [0, wantedGroups>", group.index() < wantedGroups);
+ if (capacity.groups() > 1)
+ assertTrue("Group indexes are always in [0, wantedGroups>", group.index() < capacity.groups());
}
assertEquals("Total nonretired nodes", nodeCount, indexes.size());
- assertEquals("Total nonretired groups", wantedGroups, nonretiredGroups.size());
+ assertEquals("Total nonretired groups", capacity.groups(), nonretiredGroups.size());
for (Integer groupSize : nonretiredGroups.values())
- assertEquals("Group size", (long)nodeCount / wantedGroups, (long)groupSize);
+ assertEquals("Group size", (long)nodeCount / capacity.groups(), (long)groupSize);
Map<ClusterSpec.Group, Integer> allGroups = new HashMap<>();
for (Node node : tester.getNodes(application, Node.State.active).resources(nodeResources)) {
ClusterSpec.Group group = node.allocation().get().membership().cluster().group().get();
allGroups.put(group, nonretiredGroups.getOrDefault(group, 0) + 1);
}
- assertEquals("No additional groups are retained containing retired nodes", wantedGroups, allGroups.size());
+ assertEquals("No additional groups are retained containing retired nodes", capacity.groups(), allGroups.size());
}
private ClusterSpec cluster() { return ClusterSpec.request(ClusterSpec.Type.content, ClusterSpec.Id.from("test")).vespaVersion("6.42").build(); }
- private Set<HostSpec> prepare(ApplicationId application, Capacity capacity, int groupCount, ProvisioningTester tester) {
- return new HashSet<>(tester.prepare(application, cluster(), capacity, groupCount));
+ private Set<HostSpec> prepare(ApplicationId application, Capacity capacity, ProvisioningTester tester) {
+ return new HashSet<>(tester.prepare(application, cluster(), capacity));
}
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/NodeTypeProvisioningTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/NodeTypeProvisioningTest.java
index f4a65244e6f..8420bdeacfe 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/NodeTypeProvisioningTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/NodeTypeProvisioningTest.java
@@ -93,7 +93,7 @@ public class NodeTypeProvisioningTest {
tester.provisioner(),
tester.clock(),
Collections.singletonMap(
- application, new MockDeployer.ApplicationContext(application, clusterSpec, capacity, 1)));
+ application, new MockDeployer.ApplicationContext(application, clusterSpec, capacity)));
RetiredExpirer retiredExpirer = new RetiredExpirer(tester.nodeRepository(), tester.orchestrator(), deployer,
tester.clock(), Duration.ofDays(30), Duration.ofMinutes(10));
@@ -157,7 +157,7 @@ public class NodeTypeProvisioningTest {
MockDeployer deployer = new MockDeployer(tester.provisioner(),
tester.clock(),
Collections.singletonMap(application,
- new MockDeployer.ApplicationContext(application, clusterSpec, capacity, 1)));
+ new MockDeployer.ApplicationContext(application, clusterSpec, capacity)));
RetiredExpirer retiredExpirer = new RetiredExpirer(tester.nodeRepository(),
tester.orchestrator(),
deployer,
@@ -263,7 +263,7 @@ public class NodeTypeProvisioningTest {
}
private List<HostSpec> deployProxies(ApplicationId application, ProvisioningTester tester) {
- return tester.prepare(application, clusterSpec, capacity, 1);
+ return tester.prepare(application, clusterSpec, capacity);
}
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java
index 931d87a3265..89fcba83bd0 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java
@@ -514,7 +514,7 @@ public class ProvisioningTest {
tester.makeReadyNodes(4, defaultResources);
ApplicationId application = tester.makeApplicationId();
ClusterSpec cluster = ClusterSpec.request(ClusterSpec.Type.content, ClusterSpec.Id.from("music")).vespaVersion("4.5.6").build();
- tester.prepare(application, cluster, Capacity.fromCount(5, Optional.empty(), false, false), 1);
+ tester.prepare(application, cluster, Capacity.fromCount(5, 1, Optional.empty(), false, false));
// No exception; Success
}
@@ -537,8 +537,8 @@ public class ProvisioningTest {
@Test
public void want_to_retire_but_cannot_fail() {
- Capacity capacity = Capacity.fromCount(5, Optional.of(defaultResources), false, true);
- Capacity capacityFORCED = Capacity.fromCount(5, Optional.of(defaultResources), false, false);
+ Capacity capacity = Capacity.fromCount(5, 1, Optional.of(defaultResources), false, true);
+ Capacity capacityFORCED = Capacity.fromCount(5, 1, Optional.of(defaultResources), false, false);
ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Environment.prod, RegionName.from("us-east"))).build();
@@ -548,14 +548,14 @@ public class ProvisioningTest {
tester.makeReadyNodes(10, defaultResources);
// Allocate 5 nodes
ClusterSpec cluster = ClusterSpec.request(ClusterSpec.Type.content, ClusterSpec.Id.from("music")).vespaVersion("4.5.6").build();
- tester.activate(application, tester.prepare(application, cluster, capacity, 1));
+ tester.activate(application, tester.prepare(application, cluster, capacity));
assertEquals(5, NodeList.copyOf(tester.nodeRepository().getNodes(application, Node.State.active)).not().retired().size());
assertEquals(0, NodeList.copyOf(tester.nodeRepository().getNodes(application, Node.State.active)).retired().size());
// Mark the nodes as want to retire
tester.nodeRepository().getNodes(application, Node.State.active).forEach(node -> tester.patchNode(node.with(node.status().withWantToRetire(true))));
// redeploy without allow failing
- tester.activate(application, tester.prepare(application, cluster, capacityFORCED, 1));
+ tester.activate(application, tester.prepare(application, cluster, capacityFORCED));
// Nodes are not retired since that is unsafe when we cannot fail
assertEquals(5, NodeList.copyOf(tester.nodeRepository().getNodes(application, Node.State.active)).not().retired().size());
@@ -564,7 +564,7 @@ public class ProvisioningTest {
tester.nodeRepository().getNodes(application, Node.State.active).forEach(node -> assertTrue(node.status().wantToRetire()));
// redeploy with allowing failing
- tester.activate(application, tester.prepare(application, cluster, capacity, 1));
+ tester.activate(application, tester.prepare(application, cluster, capacity));
// ... old nodes are now retired
assertEquals(5, NodeList.copyOf(tester.nodeRepository().getNodes(application, Node.State.active)).not().retired().size());
assertEquals(5, NodeList.copyOf(tester.nodeRepository().getNodes(application, Node.State.active)).retired().size());
@@ -718,14 +718,12 @@ public class ProvisioningTest {
// Application allocates two content nodes initially, with cluster type content
ClusterSpec cluster = ClusterSpec.request(ClusterSpec.Type.content, ClusterSpec.Id.from("music")).vespaVersion("1.2.3").build();
var initialNodes = tester.activate(application, tester.prepare(application, cluster,
- Capacity.fromCount(2, defaultResources, false, false),
- 1));
+ Capacity.fromCount(2, 1, defaultResources, false, false)));
// Application is redeployed with cluster type combined
cluster = ClusterSpec.request(ClusterSpec.Type.combined, ClusterSpec.Id.from("music")).vespaVersion("1.2.3").build();
var newNodes = tester.activate(application, tester.prepare(application, cluster,
- Capacity.fromCount(2, defaultResources, false, false),
- 1));
+ Capacity.fromCount(2, 1, defaultResources, false, false)));
assertEquals("Node allocation remains the same", initialNodes, newNodes);
assertEquals("Cluster type is updated",
@@ -735,8 +733,7 @@ public class ProvisioningTest {
// Application is redeployed with cluster type content again
cluster = ClusterSpec.request(ClusterSpec.Type.content, ClusterSpec.Id.from("music")).vespaVersion("1.2.3").build();
newNodes = tester.activate(application, tester.prepare(application, cluster,
- Capacity.fromCount(2, defaultResources, false, false),
- 1));
+ Capacity.fromCount(2, 1, defaultResources, false, false)));
assertEquals("Node allocation remains the same", initialNodes, newNodes);
assertEquals("Cluster type is updated",
Set.of(ClusterSpec.Type.content),
@@ -773,7 +770,7 @@ public class ProvisioningTest {
allHosts.addAll(content0);
allHosts.addAll(content1);
- Function<Integer, Capacity> capacity = count -> Capacity.fromCount(count, Optional.empty(), required, true);
+ Function<Integer, Capacity> capacity = count -> Capacity.fromCount(count, 1, Optional.empty(), required, true);
int expectedContainer0Size = tester.capacityPolicies().decideSize(capacity.apply(container0Size), containerCluster0, application);
int expectedContainer1Size = tester.capacityPolicies().decideSize(capacity.apply(container1Size), containerCluster1, application);
int expectedContent0Size = tester.capacityPolicies().decideSize(capacity.apply(content0Size), contentCluster0, application);
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java
index c0ab137066c..4119a32cd60 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java
@@ -127,19 +127,19 @@ public class ProvisioningTester {
}
public List<HostSpec> prepare(ApplicationId application, ClusterSpec cluster, int nodeCount, int groups, boolean required, NodeResources resources) {
- return prepare(application, cluster, Capacity.fromCount(nodeCount, Optional.ofNullable(resources), required, true), groups);
+ return prepare(application, cluster, Capacity.fromCount(nodeCount, groups, Optional.ofNullable(resources), required, true));
}
- public List<HostSpec> prepare(ApplicationId application, ClusterSpec cluster, Capacity capacity, int groups) {
- return prepare(application, cluster, capacity, groups, true);
+ public List<HostSpec> prepare(ApplicationId application, ClusterSpec cluster, Capacity capacity) {
+ return prepare(application, cluster, capacity, true);
}
- public List<HostSpec> prepare(ApplicationId application, ClusterSpec cluster, Capacity capacity, int groups, boolean idempotentPrepare) {
+ public List<HostSpec> prepare(ApplicationId application, ClusterSpec cluster, Capacity capacity, boolean idempotentPrepare) {
Set<String> reservedBefore = toHostNames(nodeRepository.getNodes(application, Node.State.reserved));
Set<String> inactiveBefore = toHostNames(nodeRepository.getNodes(application, Node.State.inactive));
- List<HostSpec> hosts1 = provisioner.prepare(application, cluster, capacity, groups, provisionLogger);
+ List<HostSpec> hosts1 = provisioner.prepare(application, cluster, capacity, provisionLogger);
if (idempotentPrepare) { // prepare twice to ensure idempotence
- List<HostSpec> hosts2 = provisioner.prepare(application, cluster, capacity, groups, provisionLogger);
+ List<HostSpec> hosts2 = provisioner.prepare(application, cluster, capacity, provisionLogger);
assertEquals(hosts1, hosts2);
}
Set<String> newlyActivated = toHostNames(nodeRepository.getNodes(application, Node.State.reserved));
@@ -160,7 +160,7 @@ public class ProvisioningTester {
public void prepareAndActivateInfraApplication(ApplicationId application, NodeType nodeType, Version version) {
ClusterSpec cluster = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from(nodeType.toString())).vespaVersion(version).build();
Capacity capacity = Capacity.fromRequiredNodeType(nodeType);
- List<HostSpec> hostSpecs = prepare(application, cluster, capacity, 1, true);
+ List<HostSpec> hostSpecs = prepare(application, cluster, capacity, true);
activate(application, hostSpecs);
}
@@ -333,11 +333,9 @@ public class ProvisioningTester {
nodeRepository.setReady(nodes, Agent.system, getClass().getSimpleName());
ConfigServerApplication application = new ConfigServerApplication();
- List<HostSpec> hosts = prepare(
- application.getApplicationId(),
- application.getClusterSpecWithVersion(configServersVersion),
- application.getCapacity(),
- 1);
+ List<HostSpec> hosts = prepare(application.getApplicationId(),
+ application.getClusterSpecWithVersion(configServersVersion),
+ application.getCapacity());
activate(application.getApplicationId(), new HashSet<>(hosts));
return nodeRepository.getNodes(application.getApplicationId(), Node.State.active);
}
@@ -409,9 +407,8 @@ public class ProvisioningTester {
public void deployZoneApp() {
ApplicationId applicationId = makeApplicationId();
List<HostSpec> list = prepare(applicationId,
- ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("node-admin")).vespaVersion("6.42").build(),
- Capacity.fromRequiredNodeType(NodeType.host),
- 1);
+ ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("node-admin")).vespaVersion("6.42").build(),
+ Capacity.fromRequiredNodeType(NodeType.host));
activate(applicationId, Set.copyOf(list));
}
@@ -420,7 +417,7 @@ public class ProvisioningTester {
}
public List<Node> deploy(ApplicationId application, Capacity capacity) {
- List<HostSpec> prepared = prepare(application, clusterSpec(), capacity, 1);
+ List<HostSpec> prepared = prepare(application, clusterSpec(), capacity);
activate(application, Set.copyOf(prepared));
return getNodes(application, Node.State.active).asList();
}
diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/duper/InfraApplication.java b/service-monitor/src/main/java/com/yahoo/vespa/service/duper/InfraApplication.java
index 299ea47b257..d113b34f3c6 100644
--- a/service-monitor/src/main/java/com/yahoo/vespa/service/duper/InfraApplication.java
+++ b/service-monitor/src/main/java/com/yahoo/vespa/service/duper/InfraApplication.java
@@ -32,6 +32,7 @@ import java.util.stream.Collectors;
* @author freva
*/
public abstract class InfraApplication implements InfraApplicationApi {
+
private static final TenantName TENANT_NAME = TenantName.from("hosted-vespa");
private final ApplicationId applicationId;
diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/InfraApplicationApi.java b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/InfraApplicationApi.java
index b4b61682a33..4e7a557ffc7 100644
--- a/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/InfraApplicationApi.java
+++ b/service-monitor/src/main/java/com/yahoo/vespa/service/monitor/InfraApplicationApi.java
@@ -14,7 +14,9 @@ import java.util.Optional;
* @author hakonhall
*/
public interface InfraApplicationApi {
+
ApplicationId getApplicationId();
Capacity getCapacity();
ClusterSpec getClusterSpecWithVersion(Version version);
+
}