summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorValerij Fredriksen <freva@users.noreply.github.com>2019-03-10 09:54:27 +0100
committerGitHub <noreply@github.com>2019-03-10 09:54:27 +0100
commit28e361815076bc959a639bf0ecb601cc3b43aab8 (patch)
tree26dbcb0884fc74ebae434617902f00bf655875c4
parent523213c7eb64adccc09a3efb05a8d51fb5dbcd37 (diff)
Revert "Flavor interface"
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/content/StorageNode.java4
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/search/NodeFlavorTuning.java24
-rw-r--r--config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java12
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/content/StorageClusterTest.java24
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/search/NodeFlavorTuningTest.java32
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java2
-rw-r--r--config-provisioning/abi-spec.json111
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/AllocatedHosts.java2
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/Flavor.java174
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/NodeFlavors.java72
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/internal/ConfigFlavor.java172
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/internal/ConfigNodeFlavors.java83
-rw-r--r--config-provisioning/src/main/resources/configdefinitions/flavors.def21
-rw-r--r--config-provisioning/src/test/java/com/yahoo/config/provision/NodeFlavorsTest.java (renamed from config-provisioning/src/test/java/com/yahoo/config/provision/internal/ConfigNodeFlavorsTest.java)11
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelRequestHandlerTest.java14
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/zookeeper/ZKApplicationPackageTest.java35
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/NodeRepositoryNode.java13
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java1
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeList.java4
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java10
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirer.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java5
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRebooter.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRetirer.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/retire/RetireIPv4OnlyNodes.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeHostFilter.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java5
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java7
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/FlavorConfigBuilder.java41
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/FlavorSpareCount.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeAllocation.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeSpec.java4
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/ResourceCapacity.java8
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesResponse.java16
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeFlavors.java20
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTester.java9
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirerTest.java2
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailerTest.java4
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRetirerTester.java9
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/retire/RetireIPv4OnlyNodesTest.java7
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/SerializationTest.java2
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AllocationSimulator.java21
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AllocationVisualizer.java13
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerAllocationTest.java18
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/FlavorSpareCountTest.java8
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizerTest.java9
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java28
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java25
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ResourceCapacityTest.java33
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/filter/NodeIdentifierTest.java5
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/cfg1.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/cfg2.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/controller1.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-container1.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node1-os-upgrade-complete.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node1-os-upgrade.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node1.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node2.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node3.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node4.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node5.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/dockerhost1-with-firmware-data.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node1.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node10.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node11.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node2.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node3.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4-after-changes.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5-after-changes.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55-after-changes.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6-after-changes.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6-reports-2.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6-reports-3.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6-reports.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node7.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node8.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node9.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/parent1.json1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/parent2.json1
84 files changed, 520 insertions, 649 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/StorageNode.java b/config-model/src/main/java/com/yahoo/vespa/model/content/StorageNode.java
index 5b8b5c816de..9ea92048f3b 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/content/StorageNode.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/content/StorageNode.java
@@ -2,11 +2,11 @@
package com.yahoo.vespa.model.content;
import com.yahoo.config.model.deploy.DeployState;
-import com.yahoo.config.model.producer.AbstractConfigProducer;
import com.yahoo.config.provision.Flavor;
import com.yahoo.vespa.config.content.StorFilestorConfig;
import com.yahoo.vespa.config.content.core.StorBucketmoverConfig;
import com.yahoo.vespa.config.content.core.StorServerConfig;
+import com.yahoo.config.model.producer.AbstractConfigProducer;
import com.yahoo.vespa.defaults.Defaults;
import com.yahoo.vespa.model.application.validation.RestartConfigs;
import com.yahoo.vespa.model.builder.xml.dom.ModelElement;
@@ -88,7 +88,7 @@ public class StorageNode extends ContentNode implements StorServerConfig.Produce
public void getConfig(StorFilestorConfig.Builder builder) {
if (getHostResource() != null && getHostResource().getFlavor().isPresent()) {
Flavor nodeFlavor = getHostResource().getFlavor().get();
- builder.num_threads(Math.max(4, (int)nodeFlavor.cpu().cores()));
+ builder.num_threads(Math.max(4, (int)nodeFlavor.getMinCpuCores()));
}
cluster.getConfig(builder);
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/search/NodeFlavorTuning.java b/config-model/src/main/java/com/yahoo/vespa/model/search/NodeFlavorTuning.java
index 0c332f3e164..da193a17801 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/search/NodeFlavorTuning.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/search/NodeFlavorTuning.java
@@ -39,31 +39,31 @@ public class NodeFlavorTuning implements ProtonConfig.Producer {
private void getConfig(ProtonConfig.Documentdb.Builder builder) {
ProtonConfig.Documentdb dbCfg = builder.build();
if (dbCfg.mode() != ProtonConfig.Documentdb.Mode.Enum.INDEX) {
- long numDocs = (long)nodeFlavor.memory().sizeInGb()*GB/64L;
+ long numDocs = (long)nodeFlavor.getMinMainMemoryAvailableGb()*GB/64L;
builder.allocation.initialnumdocs(numDocs);
}
}
private void tuneSummaryCache(ProtonConfig.Summary.Cache.Builder builder) {
- long memoryLimitBytes = (long) ((nodeFlavor.memory().sizeInGb() * 0.05) * GB);
+ long memoryLimitBytes = (long) ((nodeFlavor.getMinMainMemoryAvailableGb() * 0.05) * GB);
builder.maxbytes(memoryLimitBytes);
}
private void setHwInfo(ProtonConfig.Builder builder) {
- builder.hwinfo.disk.size((long)nodeFlavor.disk().sizeInBase10Gb() * GB);
- builder.hwinfo.disk.shared(nodeFlavor.environment().equals(Flavor.Environment.DOCKER_CONTAINER));
- builder.hwinfo.memory.size((long)nodeFlavor.memory().sizeInGb() * GB);
- builder.hwinfo.cpu.cores((int)nodeFlavor.cpu().cores());
+ builder.hwinfo.disk.size((long)nodeFlavor.getMinDiskAvailableGb() * GB);
+ builder.hwinfo.disk.shared(nodeFlavor.getType().equals(Flavor.Type.DOCKER_CONTAINER));
+ builder.hwinfo.memory.size((long)nodeFlavor.getMinMainMemoryAvailableGb() * GB);
+ builder.hwinfo.cpu.cores((int)nodeFlavor.getMinCpuCores());
}
private void tuneDiskWriteSpeed(ProtonConfig.Builder builder) {
- if (!nodeFlavor.disk().isFast()) {
+ if (!nodeFlavor.hasFastDisk()) {
builder.hwinfo.disk.writespeed(40);
}
}
private void tuneDocumentStoreMaxFileSize(ProtonConfig.Summary.Log.Builder builder) {
- double memoryGb = nodeFlavor.memory().sizeInGb();
+ double memoryGb = nodeFlavor.getMinMainMemoryAvailableGb();
long fileSizeBytes = 4 * GB;
if (memoryGb <= 12.0) {
fileSizeBytes = 256 * MB;
@@ -76,25 +76,25 @@ public class NodeFlavorTuning implements ProtonConfig.Producer {
}
private void tuneFlushStrategyMemoryLimits(ProtonConfig.Flush.Memory.Builder builder) {
- long memoryLimitBytes = (long) ((nodeFlavor.memory().sizeInGb() / 8) * GB);
+ long memoryLimitBytes = (long) ((nodeFlavor.getMinMainMemoryAvailableGb() / 8) * GB);
builder.maxmemory(memoryLimitBytes);
builder.each.maxmemory(memoryLimitBytes);
}
private void tuneFlushStrategyTlsSize(ProtonConfig.Flush.Memory.Builder builder) {
- long tlsSizeBytes = (long) ((nodeFlavor.disk().sizeInBase10Gb() * 0.07) * GB);
+ long tlsSizeBytes = (long) ((nodeFlavor.getMinDiskAvailableGb() * 0.07) * GB);
tlsSizeBytes = min(tlsSizeBytes, 100 * GB);
builder.maxtlssize(tlsSizeBytes);
}
private void tuneSummaryReadIo(ProtonConfig.Summary.Read.Builder builder) {
- if (nodeFlavor.disk().isFast()) {
+ if (nodeFlavor.hasFastDisk()) {
builder.io(ProtonConfig.Summary.Read.Io.DIRECTIO);
}
}
private void tuneSearchReadIo(ProtonConfig.Search.Mmap.Builder builder) {
- if (nodeFlavor.disk().isFast()) {
+ if (nodeFlavor.hasFastDisk()) {
builder.advise(ProtonConfig.Search.Mmap.Advise.RANDOM);
}
}
diff --git a/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java b/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java
index dea4d13d16e..588a722d476 100644
--- a/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java
+++ b/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java
@@ -9,7 +9,6 @@ import com.yahoo.config.model.deploy.TestProperties;
import com.yahoo.config.provision.ClusterMembership;
import com.yahoo.config.provision.Flavor;
import com.yahoo.config.provision.Zone;
-import com.yahoo.config.provision.internal.ConfigFlavor;
import com.yahoo.config.provisioning.FlavorsConfig;
import com.yahoo.container.core.ApplicationMetadataConfig;
import com.yahoo.search.config.QrStartConfig;
@@ -1741,9 +1740,8 @@ public class ModelProvisioningTest {
}
private static Flavor createFlavorFromDiskSetting(String name, boolean fastDisk) {
- return new ConfigFlavor(new FlavorsConfig.Flavor(new FlavorsConfig.Flavor.Builder()
- .name(name)
- .disk(new FlavorsConfig.Flavor.Disk.Builder().fast(fastDisk))));
+ return new Flavor(new FlavorsConfig.Flavor(new FlavorsConfig.Flavor.Builder().
+ name(name).fastDisk(fastDisk)));
}
private static ProtonConfig getProtonConfig(ContentSearchCluster cluster, int searchNodeIdx) {
@@ -1798,10 +1796,8 @@ public class ModelProvisioningTest {
private static long GB = 1024 * 1024 * 1024;
private static Flavor createFlavorFromMemoryAndDisk(String name, int memoryGb, int diskGb) {
- return new ConfigFlavor(new FlavorsConfig.Flavor(new FlavorsConfig.Flavor.Builder()
- .name(name)
- .memory(new FlavorsConfig.Flavor.Memory.Builder().sizeInGb(memoryGb))
- .disk(new FlavorsConfig.Flavor.Disk.Builder().sizeInGb(diskGb))));
+ return new Flavor(new FlavorsConfig.Flavor(new FlavorsConfig.Flavor.Builder().
+ name(name).minMainMemoryAvailableGb(memoryGb).minDiskAvailableGb(diskGb)));
}
private static ProtonConfig getProtonConfig(VespaModel model, String configId) {
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/content/StorageClusterTest.java b/config-model/src/test/java/com/yahoo/vespa/model/content/StorageClusterTest.java
index 35f7e72907e..27f5af52b6c 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/content/StorageClusterTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/content/StorageClusterTest.java
@@ -3,22 +3,22 @@ package com.yahoo.vespa.model.content;
import com.yahoo.config.model.provision.SingleNodeProvisioner;
import com.yahoo.config.model.test.MockApplicationPackage;
-import com.yahoo.config.model.test.MockRoot;
import com.yahoo.config.provision.Flavor;
-import com.yahoo.config.provision.internal.ConfigFlavor;
import com.yahoo.config.provisioning.FlavorsConfig;
-import com.yahoo.documentmodel.NewDocumentType;
-import com.yahoo.vespa.config.content.PersistenceConfig;
-import com.yahoo.vespa.config.content.StorFilestorConfig;
import com.yahoo.vespa.config.content.core.StorIntegritycheckerConfig;
-import com.yahoo.vespa.config.content.core.StorServerConfig;
import com.yahoo.vespa.config.content.core.StorVisitorConfig;
+import com.yahoo.vespa.config.content.StorFilestorConfig;
+import com.yahoo.vespa.config.content.core.StorServerConfig;
+import com.yahoo.vespa.config.content.PersistenceConfig;
+import com.yahoo.config.model.test.MockRoot;
+import com.yahoo.documentmodel.NewDocumentType;
+import static com.yahoo.vespa.defaults.Defaults.getDefaults;
import com.yahoo.vespa.model.content.cluster.ContentCluster;
import com.yahoo.vespa.model.content.storagecluster.StorageCluster;
import com.yahoo.vespa.model.content.utils.ContentClusterUtils;
import org.junit.Test;
-import static com.yahoo.vespa.defaults.Defaults.getDefaults;
+
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
@@ -122,10 +122,7 @@ public class StorageClusterTest {
" <node distribution-key=\"0\" hostalias=\"mockhost\"/>" +
" </group>" +
"</cluster>",
- new ConfigFlavor(new FlavorsConfig.Flavor.Builder()
- .name("test-flavor")
- .cpu(new FlavorsConfig.Flavor.Cpu.Builder().cores(9))
- .build())
+ new Flavor(new FlavorsConfig.Flavor.Builder().name("test-flavor").minCpuCores(9).build())
);
{
@@ -157,10 +154,7 @@ public class StorageClusterTest {
" <node distribution-key=\"0\" hostalias=\"mockhost\"/>" +
" </group>" +
"</cluster>",
- new ConfigFlavor(new FlavorsConfig.Flavor.Builder()
- .name("test-flavor")
- .cpu(new FlavorsConfig.Flavor.Cpu.Builder().cores(9))
- .build())
+ new Flavor(new FlavorsConfig.Flavor.Builder().name("test-flavor").minCpuCores(9).build())
);
{
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/search/NodeFlavorTuningTest.java b/config-model/src/test/java/com/yahoo/vespa/model/search/NodeFlavorTuningTest.java
index 4036a9a1d78..7aadca4a1af 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/search/NodeFlavorTuningTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/search/NodeFlavorTuningTest.java
@@ -2,7 +2,7 @@
package com.yahoo.vespa.model.search;
import com.yahoo.collections.Pair;
-import com.yahoo.config.provision.internal.ConfigFlavor;
+import com.yahoo.config.provision.Flavor;
import com.yahoo.config.provisioning.FlavorsConfig;
import com.yahoo.vespa.config.search.core.ProtonConfig;
import org.junit.Test;
@@ -10,9 +10,10 @@ import org.junit.Test;
import java.util.Arrays;
import java.util.List;
-import static com.yahoo.vespa.model.search.NodeFlavorTuning.GB;
-import static com.yahoo.vespa.model.search.NodeFlavorTuning.MB;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static com.yahoo.vespa.model.search.NodeFlavorTuning.MB;
+import static com.yahoo.vespa.model.search.NodeFlavorTuning.GB;
/**
* @author geirst
@@ -156,45 +157,44 @@ public class NodeFlavorTuningTest {
}
private static ProtonConfig configFromDiskSetting(boolean fastDisk) {
- return getConfig(new FlavorsConfig.Flavor.Builder()
- .disk(new FlavorsConfig.Flavor.Disk.Builder().fast(fastDisk)));
+ return getConfig(new FlavorsConfig.Flavor.Builder().
+ fastDisk(fastDisk));
}
private static ProtonConfig configFromDiskSetting(int diskGb) {
- return getConfig(new FlavorsConfig.Flavor.Builder()
- .disk(new FlavorsConfig.Flavor.Disk.Builder().sizeInGb(diskGb)));
+ return getConfig(new FlavorsConfig.Flavor.Builder().
+ minDiskAvailableGb(diskGb));
}
private static ProtonConfig configFromMemorySetting(int memoryGb) {
- return getConfig(new FlavorsConfig.Flavor.Builder()
- .memory(new FlavorsConfig.Flavor.Memory.Builder().sizeInGb(memoryGb)));
+ return getConfig(new FlavorsConfig.Flavor.Builder().
+ minMainMemoryAvailableGb(memoryGb));
}
private static ProtonConfig configFromMemorySetting(int memoryGb, ProtonConfig.Builder builder) {
- return getConfig(new FlavorsConfig.Flavor.Builder()
- .memory(new FlavorsConfig.Flavor.Memory.Builder().sizeInGb(memoryGb)), builder);
+ return getConfig(new FlavorsConfig.Flavor.Builder().
+ minMainMemoryAvailableGb(memoryGb), builder);
}
private static ProtonConfig configFromNumCoresSetting(double numCores) {
- return getConfig(new FlavorsConfig.Flavor.Builder()
- .cpu(new FlavorsConfig.Flavor.Cpu.Builder().cores(numCores)));
+ return getConfig(new FlavorsConfig.Flavor.Builder().minCpuCores(numCores));
}
private static ProtonConfig configFromEnvironmentType(boolean docker) {
- String environment = (docker ? "DOCKER_CONTAINER" : "BARE_METAL");
+ String environment = (docker ? "DOCKER_CONTAINER" : "undefined");
return getConfig(new FlavorsConfig.Flavor.Builder().environment(environment));
}
private static ProtonConfig getConfig(FlavorsConfig.Flavor.Builder flavorBuilder) {
getConfig(flavorBuilder, new ProtonConfig.Builder());
flavorBuilder.name("my_flavor");
- NodeFlavorTuning tuning = new NodeFlavorTuning(new ConfigFlavor(new FlavorsConfig.Flavor(flavorBuilder)));
+ NodeFlavorTuning tuning = new NodeFlavorTuning(new Flavor(new FlavorsConfig.Flavor(flavorBuilder)));
ProtonConfig.Builder protonBuilder = new ProtonConfig.Builder();
tuning.getConfig(protonBuilder);
return new ProtonConfig(protonBuilder);
}
private static ProtonConfig getConfig(FlavorsConfig.Flavor.Builder flavorBuilder, ProtonConfig.Builder protonBuilder) {
flavorBuilder.name("my_flavor");
- NodeFlavorTuning tuning = new NodeFlavorTuning(new ConfigFlavor(new FlavorsConfig.Flavor(flavorBuilder)));
+ NodeFlavorTuning tuning = new NodeFlavorTuning(new Flavor(new FlavorsConfig.Flavor(flavorBuilder)));
tuning.getConfig(protonBuilder);
return new ProtonConfig(protonBuilder);
}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java b/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java
index 010ff41ad1b..672e2932ab6 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java
@@ -65,7 +65,7 @@ public class VespaModelTester {
}
public void addHosts(Flavor flavor, int count) {
- addHosts(Optional.of(flavor), flavor.flavorName(), count);
+ addHosts(Optional.of(flavor), flavor.name(), count);
}
private Hosts addHosts(Optional<Flavor> flavor, String flavorName, int count) {
diff --git a/config-provisioning/abi-spec.json b/config-provisioning/abi-spec.json
index 32027a9e48c..af61fb46e50 100644
--- a/config-provisioning/abi-spec.json
+++ b/config-provisioning/abi-spec.json
@@ -343,48 +343,7 @@
"public static final enum com.yahoo.config.provision.Environment perf"
]
},
- "com.yahoo.config.provision.Flavor$Bandwidth": {
- "superClass": "java.lang.Object",
- "interfaces": [],
- "attributes": [
- "public",
- "interface",
- "abstract"
- ],
- "methods": [
- "public abstract double mbits()"
- ],
- "fields": []
- },
- "com.yahoo.config.provision.Flavor$Cpu": {
- "superClass": "java.lang.Object",
- "interfaces": [],
- "attributes": [
- "public",
- "interface",
- "abstract"
- ],
- "methods": [
- "public abstract double cores()"
- ],
- "fields": []
- },
- "com.yahoo.config.provision.Flavor$Disk": {
- "superClass": "java.lang.Object",
- "interfaces": [],
- "attributes": [
- "public",
- "interface",
- "abstract"
- ],
- "methods": [
- "public abstract double sizeInBase10Gb()",
- "public double sizeInBase2Gb()",
- "public abstract boolean isFast()"
- ],
- "fields": []
- },
- "com.yahoo.config.provision.Flavor$Environment": {
+ "com.yahoo.config.provision.Flavor$Type": {
"superClass": "java.lang.Enum",
"interfaces": [],
"attributes": [
@@ -393,49 +352,46 @@
"enum"
],
"methods": [
- "public static com.yahoo.config.provision.Flavor$Environment[] values()",
- "public static com.yahoo.config.provision.Flavor$Environment valueOf(java.lang.String)"
+ "public static com.yahoo.config.provision.Flavor$Type[] values()",
+ "public static com.yahoo.config.provision.Flavor$Type valueOf(java.lang.String)"
],
"fields": [
- "public static final enum com.yahoo.config.provision.Flavor$Environment BARE_METAL",
- "public static final enum com.yahoo.config.provision.Flavor$Environment VIRTUAL_MACHINE",
- "public static final enum com.yahoo.config.provision.Flavor$Environment DOCKER_CONTAINER"
+ "public static final enum com.yahoo.config.provision.Flavor$Type undefined",
+ "public static final enum com.yahoo.config.provision.Flavor$Type BARE_METAL",
+ "public static final enum com.yahoo.config.provision.Flavor$Type VIRTUAL_MACHINE",
+ "public static final enum com.yahoo.config.provision.Flavor$Type DOCKER_CONTAINER"
]
},
- "com.yahoo.config.provision.Flavor$Memory": {
- "superClass": "java.lang.Object",
- "interfaces": [],
- "attributes": [
- "public",
- "interface",
- "abstract"
- ],
- "methods": [
- "public abstract double sizeInGb()"
- ],
- "fields": []
- },
"com.yahoo.config.provision.Flavor": {
"superClass": "java.lang.Object",
"interfaces": [],
"attributes": [
- "public",
- "interface",
- "abstract"
+ "public"
],
"methods": [
- "public abstract java.lang.String flavorName()",
+ "public void <init>(com.yahoo.config.provisioning.FlavorsConfig$Flavor)",
+ "public java.lang.String name()",
+ "public int cost()",
+ "public boolean isStock()",
+ "public double getMinMainMemoryAvailableGb()",
+ "public double getMinDiskAvailableGb()",
+ "public boolean hasFastDisk()",
+ "public double getBandwidth()",
+ "public double getMinCpuCores()",
+ "public java.lang.String getDescription()",
+ "public boolean isRetired()",
+ "public com.yahoo.config.provision.Flavor$Type getType()",
+ "public boolean isDocker()",
+ "public int getIdealHeadroom()",
"public java.lang.String canonicalName()",
- "public abstract int cost()",
- "public abstract boolean isStock()",
- "public abstract boolean isRetired()",
+ "public boolean isCanonical()",
+ "public java.util.List replaces()",
"public boolean satisfies(com.yahoo.config.provision.Flavor)",
- "public abstract com.yahoo.config.provision.Flavor$Cpu cpu()",
- "public abstract com.yahoo.config.provision.Flavor$Memory memory()",
- "public abstract com.yahoo.config.provision.Flavor$Disk disk()",
- "public abstract com.yahoo.config.provision.Flavor$Bandwidth bandwidth()",
- "public abstract com.yahoo.config.provision.Flavor$Environment environment()",
- "public abstract java.util.List replaces()"
+ "public void freeze()",
+ "public boolean isLargerThan(com.yahoo.config.provision.Flavor)",
+ "public int hashCode()",
+ "public boolean equals(java.lang.Object)",
+ "public java.lang.String toString()"
],
"fields": []
},
@@ -591,13 +547,12 @@
"superClass": "java.lang.Object",
"interfaces": [],
"attributes": [
- "public",
- "interface",
- "abstract"
+ "public"
],
"methods": [
- "public abstract java.util.List getFlavors()",
- "public abstract java.util.Optional getFlavor(java.lang.String)",
+ "public void <init>(com.yahoo.config.provisioning.FlavorsConfig)",
+ "public java.util.List getFlavors()",
+ "public java.util.Optional getFlavor(java.lang.String)",
"public com.yahoo.config.provision.Flavor getFlavorOrThrow(java.lang.String)"
],
"fields": []
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/AllocatedHosts.java b/config-provisioning/src/main/java/com/yahoo/config/provision/AllocatedHosts.java
index 8cb72a36e7a..e2b2933ede3 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/AllocatedHosts.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/AllocatedHosts.java
@@ -59,7 +59,7 @@ public class AllocatedHosts {
cursor.setString(hostSpecMembership, membership.stringValue());
cursor.setString(hostSpecVespaVersion, membership.cluster().vespaVersion().toFullString());
});
- host.flavor().ifPresent(flavor -> cursor.setString(hostSpecFlavor, flavor.flavorName()));
+ host.flavor().ifPresent(flavor -> cursor.setString(hostSpecFlavor, flavor.name()));
host.version().ifPresent(version -> cursor.setString(hostSpecCurrentVespaVersion, version.toFullString()));
host.networkPorts().ifPresent(ports -> NetworkPortsSerializer.toSlime(ports, cursor.setArray(hostSpecNetworkPorts)));
}
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/Flavor.java b/config-provisioning/src/main/java/com/yahoo/config/provision/Flavor.java
index e2c39d6efda..79a17c23dd7 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/Flavor.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/Flavor.java
@@ -1,17 +1,93 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.config.provision;
+import com.google.common.collect.ImmutableList;
+import com.yahoo.config.provisioning.FlavorsConfig;
+
+import java.util.ArrayList;
import java.util.List;
/**
- * A host flavor (type).
+ * A host flavor (type). This is a value object where the identity is the name.
+ * Use {@link NodeFlavors} to create a flavor.
*
* @author bratseth
*/
-public interface Flavor {
+public class Flavor {
+
+ private final String name;
+ private final int cost;
+ private final boolean isStock;
+ private final Type type;
+ private final double minCpuCores;
+ private final double minMainMemoryAvailableGb;
+ private final double minDiskAvailableGb;
+ private final boolean fastDisk;
+ private final double bandwidth;
+ private final String description;
+ private final boolean retired;
+ private List<Flavor> replacesFlavors;
+ private int idealHeadroom; // Note: Not used after Vespa 6.282
+
+ /**
+ * Creates a Flavor, but does not set the replacesFlavors.
+ * @param flavorConfig config to be used for Flavor.
+ */
+ public Flavor(FlavorsConfig.Flavor flavorConfig) {
+ this.name = flavorConfig.name();
+ this.replacesFlavors = new ArrayList<>();
+ this.cost = flavorConfig.cost();
+ this.isStock = flavorConfig.stock();
+ this.type = Type.valueOf(flavorConfig.environment());
+ this.minCpuCores = flavorConfig.minCpuCores();
+ this.minMainMemoryAvailableGb = flavorConfig.minMainMemoryAvailableGb();
+ this.minDiskAvailableGb = flavorConfig.minDiskAvailableGb();
+ this.fastDisk = flavorConfig.fastDisk();
+ this.bandwidth = flavorConfig.bandwidth();
+ this.description = flavorConfig.description();
+ this.retired = flavorConfig.retired();
+ this.idealHeadroom = flavorConfig.idealHeadroom();
+ }
+
+ /** Returns the unique identity of this flavor */
+ public String name() { return name; }
+
+ /**
+ * Get the monthly cost (total cost of ownership) in USD for this flavor, typically total cost
+ * divided by 36 months.
+ *
+ * @return monthly cost in USD
+ */
+ public int cost() { return cost; }
+
+ public boolean isStock() { return isStock; }
+
+ public double getMinMainMemoryAvailableGb() { return minMainMemoryAvailableGb; }
- /** @return the unique identity of this flavor */
- String flavorName();
+ public double getMinDiskAvailableGb() { return minDiskAvailableGb; }
+
+ public boolean hasFastDisk() { return fastDisk; }
+
+ public double getBandwidth() { return bandwidth; }
+
+ public double getMinCpuCores() { return minCpuCores; }
+
+ public String getDescription() { return description; }
+
+ /** Returns whether the flavor is retired */
+ public boolean isRetired() {
+ return retired;
+ }
+
+ public Type getType() { return type; }
+
+ /** Convenience, returns getType() == Type.DOCKER_CONTAINER */
+ public boolean isDocker() { return type == Type.DOCKER_CONTAINER; }
+
+ /** The free capacity we would like to preserve for this flavor */
+ public int getIdealHeadroom() {
+ return idealHeadroom;
+ }
/**
* Returns the canonical name of this flavor - which is the name which should be used as an interface to users.
@@ -26,85 +102,69 @@ public interface Flavor {
* replace the canonical name we want. However, if a node replaces multiple names, we have no basis for choosing one
* of them as the canonical, so we return the current as canonical.
*/
- default String canonicalName() {
- return replaces().size() != 1 ? flavorName() : replaces().get(0).canonicalName();
+ public String canonicalName() {
+ return isCanonical() ? name : replacesFlavors.get(0).canonicalName();
+ }
+
+ /** Returns whether this is a canonical flavor */
+ public boolean isCanonical() {
+ return replacesFlavors.size() != 1;
}
-
- /** @return the cost associated with usage of this flavor */
- int cost();
/**
- * A stock flavor is any flavor we expect more of in the future.
- * Stock flavors are assigned to applications by cost priority.
- *
- * Non-stock flavors are used for nodes for which a fixed amount has already been added
- * to the system for some historical reason. These nodes are assigned to applications
- * when available by exact match and ignoring cost.
+ * The flavors this (directly) replaces.
+ * This is immutable if this is frozen, and a mutable list otherwise.
*/
- boolean isStock();
-
- /** Returns whether the flavor is retired (should no longer be allocated) */
- boolean isRetired();
+ public List<Flavor> replaces() { return replacesFlavors; }
/**
* Returns whether this flavor satisfies the requested flavor, either directly
* (by being the same), or by directly or indirectly replacing it
*/
- default boolean satisfies(Flavor flavor) {
- if (equals(flavor)) {
+ public boolean satisfies(Flavor flavor) {
+ if (this.equals(flavor)) {
return true;
}
- if (isRetired()) {
+ if (this.retired) {
return false;
}
- for (Flavor replaces : replaces())
+ for (Flavor replaces : replacesFlavors)
if (replaces.satisfies(flavor))
return true;
return false;
}
- Cpu cpu();
-
- Memory memory();
-
- Disk disk();
-
- Bandwidth bandwidth();
-
- Environment environment();
-
- /** The flavors this (directly) replaces. */
- List<Flavor> replaces();
-
-
- interface Disk {
-
- /** @return Disk size in GB in base 10 (1GB = 10^9 bytes) */
- double sizeInBase10Gb();
-
- /** @return Disk size in GB in base 2, also known as GiB (1GiB = 2^30 bytes), rounded to nearest integer value */
- default double sizeInBase2Gb() {
- return Math.round(sizeInBase10Gb() / Math.pow(1.024, 3));
- }
-
- boolean isFast();
+ /** Irreversibly freezes the content of this */
+ public void freeze() {
+ replacesFlavors = ImmutableList.copyOf(replacesFlavors);
}
-
- interface Memory {
- double sizeInGb();
+
+ /** Returns whether this flavor has at least as much as each hardware resource as the given flavor */
+ public boolean isLargerThan(Flavor other) {
+ return this.minCpuCores >= other.minCpuCores &&
+ this.minDiskAvailableGb >= other.minDiskAvailableGb &&
+ this.minMainMemoryAvailableGb >= other.minMainMemoryAvailableGb &&
+ this.fastDisk || ! other.fastDisk;
}
- interface Cpu {
- double cores();
- }
+ @Override
+ public int hashCode() { return name.hashCode(); }
- interface Bandwidth {
- double mbits();
+ @Override
+ public boolean equals(Object other) {
+ if (other == this) return true;
+ if ( ! (other instanceof Flavor)) return false;
+ return ((Flavor)other).name.equals(this.name);
}
- enum Environment {
+ @Override
+ public String toString() { return "flavor '" + name + "'"; }
+
+ public enum Type {
+ undefined, // Default value in config (flavors.def)
BARE_METAL,
VIRTUAL_MACHINE,
DOCKER_CONTAINER
}
+
}
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/NodeFlavors.java b/config-provisioning/src/main/java/com/yahoo/config/provision/NodeFlavors.java
index 43ef5602d8a..e64028e216f 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/NodeFlavors.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/NodeFlavors.java
@@ -1,30 +1,88 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.config.provision;
+import com.google.common.collect.ImmutableMap;
+import com.google.inject.Inject;
+import com.yahoo.config.provisioning.FlavorsConfig;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* All the available node flavors.
*
- * @author freva
+ * @author bratseth
*/
-public interface NodeFlavors {
+public class NodeFlavors {
+
+ /** Flavors <b>which are configured</b> in this zone */
+ private final ImmutableMap<String, Flavor> flavors;
+
+ @Inject
+ public NodeFlavors(FlavorsConfig config) {
+ ImmutableMap.Builder<String, Flavor> b = new ImmutableMap.Builder<>();
+ for (Flavor flavor : toFlavors(config))
+ b.put(flavor.name(), flavor);
+ this.flavors = b.build();
+ }
- /** Returns list of all available flavors in the system */
- List<Flavor> getFlavors();
+ public List<Flavor> getFlavors() {
+ return new ArrayList<>(flavors.values());
+ }
/** Returns a flavor by name, or empty if there is no flavor with this name. */
- Optional<Flavor> getFlavor(String name);
+ public Optional<Flavor> getFlavor(String name) {
+ return Optional.ofNullable(flavors.get(name));
+ }
/** Returns the flavor with the given name or throws an IllegalArgumentException if it does not exist */
- default Flavor getFlavorOrThrow(String flavorName) {
+ public Flavor getFlavorOrThrow(String flavorName) {
return getFlavor(flavorName).orElseThrow(() -> new IllegalArgumentException("Unknown flavor '" + flavorName +
"'. Flavors are " + canonicalFlavorNames()));
}
private List<String> canonicalFlavorNames() {
- return getFlavors().stream().map(Flavor::canonicalName).distinct().sorted().collect(Collectors.toList());
+ return flavors.values().stream().map(Flavor::canonicalName).distinct().sorted().collect(Collectors.toList());
}
+
+ private static Collection<Flavor> toFlavors(FlavorsConfig config) {
+ Map<String, Flavor> flavors = new HashMap<>();
+ // First pass, create all flavors, but do not include flavorReplacesConfig.
+ for (FlavorsConfig.Flavor flavorConfig : config.flavor()) {
+ flavors.put(flavorConfig.name(), new Flavor(flavorConfig));
+ }
+ // Second pass, set flavorReplacesConfig to point to correct flavor.
+ for (FlavorsConfig.Flavor flavorConfig : config.flavor()) {
+ Flavor flavor = flavors.get(flavorConfig.name());
+ for (FlavorsConfig.Flavor.Replaces flavorReplacesConfig : flavorConfig.replaces()) {
+ if (! flavors.containsKey(flavorReplacesConfig.name())) {
+ throw new IllegalStateException("Replaces for " + flavor.name() +
+ " pointing to a non existing flavor: " + flavorReplacesConfig.name());
+ }
+ flavor.replaces().add(flavors.get(flavorReplacesConfig.name()));
+ }
+ flavor.freeze();
+ }
+ // Third pass, ensure that retired flavors have a replacement
+ for (Flavor flavor : flavors.values()) {
+ if (flavor.isRetired() && !hasReplacement(flavors.values(), flavor)) {
+ throw new IllegalStateException(
+ String.format("Flavor '%s' is retired, but has no replacement", flavor.name())
+ );
+ }
+ }
+ return flavors.values();
+ }
+
+ private static boolean hasReplacement(Collection<Flavor> flavors, Flavor flavor) {
+ return flavors.stream()
+ .filter(f -> !f.equals(flavor))
+ .anyMatch(f -> f.satisfies(flavor));
+ }
+
}
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/internal/ConfigFlavor.java b/config-provisioning/src/main/java/com/yahoo/config/provision/internal/ConfigFlavor.java
deleted file mode 100644
index e70476455cd..00000000000
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/internal/ConfigFlavor.java
+++ /dev/null
@@ -1,172 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.config.provision.internal;
-
-import com.google.common.collect.ImmutableList;
-import com.yahoo.config.provision.Flavor;
-import com.yahoo.config.provisioning.FlavorsConfig;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * A {@link Flavor} generated from config.
- *
- * @author freva
- */
-public class ConfigFlavor implements Flavor {
-
- private final String name;
- private final int cost;
- private final boolean isStock;
- private final Environment environment;
- private final Cpu cpu;
- private final Memory memory;
- private final Disk disk;
- private final Bandwidth bandwidth;
- private final boolean retired;
- private List<Flavor> replacesFlavors;
-
- /**
- * Creates a Flavor, but does not set the replacesFlavors.
- * @param flavorConfig config to be used for Flavor.
- */
- public ConfigFlavor(FlavorsConfig.Flavor flavorConfig) {
- this.name = flavorConfig.name();
- this.replacesFlavors = new ArrayList<>();
- this.cost = flavorConfig.cost();
- this.isStock = flavorConfig.stock();
- this.environment = Environment.valueOf(flavorConfig.environment());
- this.cpu = new ConfigCpu(flavorConfig.cpu());
- this.memory = new ConfigMemory(flavorConfig.memory());
- this.disk = new ConfigDisk(flavorConfig.disk());
- this.bandwidth = new ConfigBandwidth(flavorConfig.bandwidth());
- this.retired = flavorConfig.retired();
- }
-
- @Override
- public String flavorName() {
- return name;
- }
-
- @Override
- public int cost() {
- return cost;
- }
-
- @Override
- public boolean isStock() {
- return isStock;
- }
-
- @Override
- public boolean isRetired() {
- return retired;
- }
-
- @Override
- public Cpu cpu() {
- return cpu;
- }
-
- @Override
- public Memory memory() {
- return memory;
- }
-
- @Override
- public Disk disk() {
- return disk;
- }
-
- @Override
- public Bandwidth bandwidth() {
- return bandwidth;
- }
-
- @Override
- public Environment environment() {
- return environment;
- }
-
- @Override
- public List<Flavor> replaces() {
- return replacesFlavors;
- }
-
- /** Irreversibly freezes the content of this */
- public void freeze() {
- replacesFlavors = ImmutableList.copyOf(replacesFlavors);
- }
-
- @Override
- public int hashCode() { return name.hashCode(); }
-
- @Override
- public boolean equals(Object other) {
- if (other == this) return true;
- if ( ! (other instanceof ConfigFlavor)) return false;
- return ((ConfigFlavor)other).name.equals(this.name);
- }
-
- @Override
- public String toString() { return "flavor '" + name + "'"; }
-
- private class ConfigCpu implements Flavor.Cpu {
- private final double cores;
-
- private ConfigCpu(FlavorsConfig.Flavor.Cpu cpu) {
- this.cores = cpu.cores();
- }
-
- @Override
- public double cores() {
- return cores;
- }
- }
-
- private class ConfigMemory implements Flavor.Memory {
- private final double sizeInGb;
-
- private ConfigMemory(FlavorsConfig.Flavor.Memory memory) {
- this.sizeInGb = memory.sizeInGb();
- }
-
- @Override
- public double sizeInGb() {
- return sizeInGb;
- }
- }
-
- private class ConfigDisk implements Flavor.Disk {
- private final double sizeInBase10;
- private final boolean isFast;
-
- private ConfigDisk(FlavorsConfig.Flavor.Disk disk) {
- this.sizeInBase10 = disk.sizeInGb();
- this.isFast = disk.fast();
- }
-
- @Override
- public double sizeInBase10Gb() {
- return sizeInBase10;
- }
-
- @Override
- public boolean isFast() {
- return isFast;
- }
- }
-
- private class ConfigBandwidth implements Flavor.Bandwidth {
- private final double mbits;
-
- private ConfigBandwidth(FlavorsConfig.Flavor.Bandwidth bandwidth) {
- this.mbits = bandwidth.mbits();
- }
-
- @Override
- public double mbits() {
- return mbits;
- }
- }
-}
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/internal/ConfigNodeFlavors.java b/config-provisioning/src/main/java/com/yahoo/config/provision/internal/ConfigNodeFlavors.java
deleted file mode 100644
index c67a3faf36f..00000000000
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/internal/ConfigNodeFlavors.java
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.config.provision.internal;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.inject.Inject;
-import com.yahoo.config.provision.Flavor;
-import com.yahoo.config.provision.NodeFlavors;
-import com.yahoo.config.provisioning.FlavorsConfig;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-
-/**
- * {@link NodeFlavors} generated from config
- *
- * @author bratseth
- */
-public class ConfigNodeFlavors implements NodeFlavors {
-
- /** Flavors <b>which are configured</b> in this zone */
- private final Map<String, Flavor> flavors;
-
- @Inject
- public ConfigNodeFlavors(FlavorsConfig config) {
- this(toFlavors(config));
- }
-
- public ConfigNodeFlavors(Collection<Flavor> flavors) {
- ImmutableMap.Builder<String, Flavor> b = new ImmutableMap.Builder<>();
- for (Flavor flavor : flavors)
- b.put(flavor.flavorName(), flavor);
- this.flavors = b.build();
- }
-
- public List<Flavor> getFlavors() {
- return new ArrayList<>(flavors.values());
- }
-
- /** Returns a flavor by name, or empty if there is no flavor with this name. */
- public Optional<Flavor> getFlavor(String name) {
- return Optional.ofNullable(flavors.get(name));
- }
-
- private static Collection<Flavor> toFlavors(FlavorsConfig config) {
- Map<String, Flavor> flavors = new HashMap<>();
- // First pass, create all flavors, but do not include flavorReplacesConfig.
- for (FlavorsConfig.Flavor flavorConfig : config.flavor()) {
- flavors.put(flavorConfig.name(), new ConfigFlavor(flavorConfig));
- }
- // Second pass, set flavorReplacesConfig to point to correct flavor.
- for (FlavorsConfig.Flavor flavorConfig : config.flavor()) {
- Flavor flavor = flavors.get(flavorConfig.name());
- for (FlavorsConfig.Flavor.Replaces flavorReplacesConfig : flavorConfig.replaces()) {
- if (! flavors.containsKey(flavorReplacesConfig.name())) {
- throw new IllegalStateException("Replaces for " + flavor.flavorName() +
- " pointing to a non existing flavor: " + flavorReplacesConfig.name());
- }
- flavor.replaces().add(flavors.get(flavorReplacesConfig.name()));
- }
- ((ConfigFlavor) flavor).freeze();
- }
- // Third pass, ensure that retired flavors have a replacement
- for (Flavor flavor : flavors.values()) {
- if (flavor.isRetired() && !hasReplacement(flavors.values(), flavor)) {
- throw new IllegalStateException(
- String.format("Flavor '%s' is retired, but has no replacement", flavor.flavorName())
- );
- }
- }
- return flavors.values();
- }
-
- private static boolean hasReplacement(Collection<Flavor> flavors, Flavor flavor) {
- return flavors.stream()
- .filter(f -> !f.equals(flavor))
- .anyMatch(f -> f.satisfies(flavor));
- }
-
-}
diff --git a/config-provisioning/src/main/resources/configdefinitions/flavors.def b/config-provisioning/src/main/resources/configdefinitions/flavors.def
index d46f49b728d..1e40f6f8f36 100644
--- a/config-provisioning/src/main/resources/configdefinitions/flavors.def
+++ b/config-provisioning/src/main/resources/configdefinitions/flavors.def
@@ -26,22 +26,29 @@ flavor[].cost int default=0
flavor[].stock bool default=true
# The type of node: BARE_METAL, VIRTUAL_MACHINE or DOCKER_CONTAINER
-flavor[].environment string default="BARE_METAL"
+flavor[].environment string default="undefined"
# The minimum number of CPU cores available.
-flavor[].cpu.cores double default=0.0
+flavor[].minCpuCores double default=0.0
# The minimum amount of main memory available.
-flavor[].memory.sizeInGb double default=0.0
+flavor[].minMainMemoryAvailableGb double default=0.0
-# The minimum amount of disk available in GB in base 10 (1GB = 10^9 bytes)
-flavor[].disk.sizeInGb double default=0.0
+# The minimum amount of disk available.
+flavor[].minDiskAvailableGb double default=0.0
# Whether the disk is fast (typically SSD) or slow (typically spinning HDD).
-flavor[].disk.fast bool default=true
+flavor[].fastDisk bool default=true
# Expected network interface bandwidth available for this flavor, in Mbit/s.
-flavor[].bandwidth.mbits double default=0.0
+flavor[].bandwidth double default=0.0
+
+# Human readable free text for description of node.
+flavor[].description string default=""
# The flavor is retired and should no longer be used.
flavor[].retired bool default=false
+
+# The free capacity we would like to preserve for this flavor
+# Note: Not used after Vespa 6.282
+flavor[].idealHeadroom int default=0
diff --git a/config-provisioning/src/test/java/com/yahoo/config/provision/internal/ConfigNodeFlavorsTest.java b/config-provisioning/src/test/java/com/yahoo/config/provision/NodeFlavorsTest.java
index 715493a353a..55ffa821e26 100644
--- a/config-provisioning/src/test/java/com/yahoo/config/provision/internal/ConfigNodeFlavorsTest.java
+++ b/config-provisioning/src/test/java/com/yahoo/config/provision/NodeFlavorsTest.java
@@ -1,7 +1,6 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.config.provision.internal;
+package com.yahoo.config.provision;
-import com.yahoo.config.provision.NodeFlavors;
import com.yahoo.config.provisioning.FlavorsConfig;
import org.junit.Rule;
import org.junit.Test;
@@ -14,7 +13,7 @@ import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
-public class ConfigNodeFlavorsTest {
+public class NodeFlavorsTest {
@Rule
public final ExpectedException exception = ExpectedException.none();
@@ -32,7 +31,7 @@ public class ConfigNodeFlavorsTest {
FlavorsConfig config = new FlavorsConfig(builder);
exception.expect(IllegalStateException.class);
exception.expectMessage("Replaces for strawberry pointing to a non existing flavor: non-existing-config");
- new ConfigNodeFlavors(config);
+ new NodeFlavors(config);
}
@Test
@@ -53,7 +52,7 @@ public class ConfigNodeFlavorsTest {
}
builder.flavor(flavorBuilderList);
FlavorsConfig config = new FlavorsConfig(builder);
- NodeFlavors nodeFlavors = new ConfigNodeFlavors(config);
+ NodeFlavors nodeFlavors = new NodeFlavors(config);
assertThat(nodeFlavors.getFlavor("banana").get().cost(), is(3));
}
@@ -75,7 +74,7 @@ public class ConfigNodeFlavorsTest {
FlavorsConfig config = new FlavorsConfig(builder);
exception.expect(IllegalStateException.class);
exception.expectMessage("Flavor 'retired' is retired, but has no replacement");
- new ConfigNodeFlavors(config);
+ new NodeFlavors(config);
}
}
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelRequestHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelRequestHandlerTest.java
index bfceab782ba..3288b418bb1 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelRequestHandlerTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelRequestHandlerTest.java
@@ -2,17 +2,17 @@
package com.yahoo.vespa.config.server;
import com.yahoo.cloud.config.ConfigserverConfig;
-import com.yahoo.component.Version;
import com.yahoo.config.model.application.provider.FilesApplicationPackage;
-import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.NodeFlavors;
-import com.yahoo.config.provision.internal.ConfigNodeFlavors;
+import com.yahoo.component.Version;
import com.yahoo.config.provisioning.FlavorsConfig;
import com.yahoo.vespa.config.server.application.Application;
+import com.yahoo.config.provision.ApplicationId;
import com.yahoo.vespa.config.server.application.ApplicationSet;
import com.yahoo.vespa.config.server.monitoring.MetricUpdater;
import com.yahoo.vespa.curator.mock.MockCurator;
import com.yahoo.vespa.model.VespaModel;
+
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -26,11 +26,7 @@ import java.util.Arrays;
import java.util.Optional;
import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
/**
* @author Ulf Lilleengen
@@ -134,7 +130,7 @@ public class SuperModelRequestHandlerTest {
}
public static NodeFlavors emptyNodeFlavors() {
- return new ConfigNodeFlavors(new FlavorsConfig(new FlavorsConfig.Builder()));
+ return new NodeFlavors(new FlavorsConfig(new FlavorsConfig.Builder()));
}
private ApplicationId applicationId(String tenantName, String applicationName) {
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/zookeeper/ZKApplicationPackageTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/zookeeper/ZKApplicationPackageTest.java
index b381ba580bc..e8e2dd07756 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/zookeeper/ZKApplicationPackageTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/zookeeper/ZKApplicationPackageTest.java
@@ -1,15 +1,27 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.config.server.zookeeper;
-import com.yahoo.component.Version;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertThat;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.Reader;
+import java.util.Collections;
+import java.util.Optional;
+import java.util.regex.Pattern;
+
import com.yahoo.config.application.api.DeploymentSpec;
import com.yahoo.config.model.deploy.DeployState;
-import com.yahoo.config.provision.AllocatedHosts;
import com.yahoo.config.provision.Flavor;
import com.yahoo.config.provision.HostSpec;
-import com.yahoo.config.provision.internal.ConfigNodeFlavors;
+import com.yahoo.config.provision.NodeFlavors;
+import com.yahoo.config.provision.AllocatedHosts;
+import com.yahoo.component.Version;
import com.yahoo.config.provisioning.FlavorsConfig;
-import com.yahoo.io.IOUtils;
import com.yahoo.path.Path;
import com.yahoo.text.Utf8;
import com.yahoo.vespa.curator.mock.MockCurator;
@@ -18,18 +30,7 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
-import java.io.File;
-import java.io.IOException;
-import java.io.Reader;
-import java.util.Collections;
-import java.util.Optional;
-import java.util.regex.Pattern;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
+import com.yahoo.io.IOUtils;
public class ZKApplicationPackageTest {
@@ -92,7 +93,7 @@ public class ZKApplicationPackageTest {
zk.putData("/0/" + ZKApplicationPackage.allocatedHostsNode, ALLOCATED_HOSTS.toJson());
}
- private static class MockNodeFlavors extends ConfigNodeFlavors {
+ private static class MockNodeFlavors extends NodeFlavors{
MockNodeFlavors() { super(flavorsConfig()); }
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/NodeRepositoryNode.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/NodeRepositoryNode.java
index 1df901940db..17c09e19fe2 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/NodeRepositoryNode.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/noderepository/NodeRepositoryNode.java
@@ -82,6 +82,8 @@ public class NodeRepositoryNode {
private Integer cost;
@JsonProperty("minCpuCores")
private Double minCpuCores;
+ @JsonProperty("description")
+ private String description;
@JsonProperty("history")
private NodeHistory[] history;
@JsonProperty("allowedToBeDown")
@@ -345,6 +347,14 @@ public class NodeRepositoryNode {
this.minCpuCores = minCpuCores;
}
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
public NodeHistory[] getHistory() {
return history;
}
@@ -426,9 +436,10 @@ public class NodeRepositoryNode {
", minMainMemoryAvailableGb=" + minMainMemoryAvailableGb +
", cost=" + cost +
", minCpuCores=" + minCpuCores +
+ ", description='" + description + '\'' +
", history=" + Arrays.toString(history) +
", allowedToBeDown=" + allowedToBeDown +
- ", reports=" + reports +
+ ", reports=" + reports +
", modelName=" + modelName +
'}';
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java
index 18ff2700b21..7dc2aff18dc 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java
@@ -5,6 +5,7 @@ import com.google.common.collect.ImmutableSet;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.ClusterMembership;
import com.yahoo.config.provision.Flavor;
+import com.yahoo.config.provision.NetworkPorts;
import com.yahoo.config.provision.NodeType;
import com.yahoo.vespa.hosted.provision.node.Agent;
import com.yahoo.vespa.hosted.provision.node.Allocation;
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeList.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeList.java
index 50995887982..bfb7bfe9dae 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeList.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeList.java
@@ -46,12 +46,12 @@ public class NodeList implements Iterable<Node> {
/** Returns the subset of nodes of the given flavor */
public NodeList flavor(String flavor) {
- return filter(node -> node.flavor().flavorName().equals(flavor));
+ return filter(node -> node.flavor().name().equals(flavor));
}
/** Returns the subset of nodes which does not have the given flavor */
public NodeList notFlavor(String flavor) {
- return filter(node -> ! node.flavor().flavorName().equals(flavor));
+ return filter(node -> ! node.flavor().name().equals(flavor));
}
/** Returns the subset of nodes assigned to the given cluster type */
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java
index 08fea05bb7a..b048dca99a3 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java
@@ -17,8 +17,8 @@ import com.yahoo.transaction.NestedTransaction;
import com.yahoo.vespa.curator.Curator;
import com.yahoo.vespa.hosted.provision.flag.Flags;
import com.yahoo.vespa.hosted.provision.lb.LoadBalancer;
-import com.yahoo.vespa.hosted.provision.lb.LoadBalancerInstance;
import com.yahoo.vespa.hosted.provision.lb.LoadBalancerList;
+import com.yahoo.vespa.hosted.provision.lb.LoadBalancerInstance;
import com.yahoo.vespa.hosted.provision.maintenance.PeriodicApplicationMaintainer;
import com.yahoo.vespa.hosted.provision.node.Agent;
import com.yahoo.vespa.hosted.provision.node.NodeAcl;
@@ -309,7 +309,7 @@ public class NodeRepository extends AbstractComponent {
// the nodes list was computed
public List<Node> addDockerNodes(List<Node> nodes, Mutex allocationLock) {
for (Node node : nodes) {
- if (!node.flavor().environment().equals(Flavor.Environment.DOCKER_CONTAINER)) {
+ if (!node.flavor().getType().equals(Flavor.Type.DOCKER_CONTAINER)) {
throw new IllegalArgumentException("Cannot add " + node.hostname() + ": This is not a docker node");
}
if (!node.allocation().isPresent()) {
@@ -538,7 +538,7 @@ public class NodeRepository extends AbstractComponent {
*/
public Node markNodeAvailableForNewAllocation(String hostname, Agent agent, String reason) {
Node node = getNode(hostname).orElseThrow(() -> new NotFoundException("No node with hostname '" + hostname + "'"));
- if (node.flavor().environment() == Flavor.Environment.DOCKER_CONTAINER && node.type() == NodeType.tenant) {
+ if (node.flavor().getType() == Flavor.Type.DOCKER_CONTAINER && node.type() == NodeType.tenant) {
if (node.state() != Node.State.dirty) {
throw new IllegalArgumentException(
"Cannot make " + hostname + " available for new allocation, must be in state dirty, but was in " + node.state());
@@ -592,13 +592,13 @@ public class NodeRepository extends AbstractComponent {
throw new IllegalArgumentException("Node is currently allocated and cannot be removed: " +
node.allocation().get());
}
- if (node.flavor().environment() == Flavor.Environment.DOCKER_CONTAINER && !deletingAsChild) {
+ if (node.flavor().getType() == Flavor.Type.DOCKER_CONTAINER && !deletingAsChild) {
if (node.state() != Node.State.ready) {
throw new IllegalArgumentException(
String.format("Docker container %s can only be removed when in ready state", node.hostname()));
}
- } else if (node.flavor().environment() == Flavor.Environment.DOCKER_CONTAINER) {
+ } else if (node.flavor().getType() == Flavor.Type.DOCKER_CONTAINER) {
Set<Node.State> legalStates = EnumSet.of(Node.State.provisioned, Node.State.failed, Node.State.parked,
Node.State.ready);
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirer.java
index 1b0a0b22a94..1b18dfc46c1 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/FailedExpirer.java
@@ -123,7 +123,7 @@ public class FailedExpirer extends Maintainer {
/** Returns whether the current node fail count should be used as an indicator of hardware issue */
private boolean failCountIndicatesHardwareIssue(Node node) {
- if (node.flavor().environment() == Flavor.Environment.DOCKER_CONTAINER) return false;
+ if (node.flavor().getType() == Flavor.Type.DOCKER_CONTAINER) return false;
return (zone.environment() == Environment.prod || zone.environment() == Environment.staging) &&
node.status().failCount() >= maxAllowedFailures;
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java
index 012f1b881bd..42dbcdf7a86 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/MetricsReporter.java
@@ -14,6 +14,7 @@ import com.yahoo.vespa.hosted.provision.NodeRepository;
import com.yahoo.vespa.hosted.provision.node.Allocation;
import com.yahoo.vespa.hosted.provision.node.History;
import com.yahoo.vespa.hosted.provision.provisioning.DockerHostCapacity;
+import com.yahoo.vespa.orchestrator.HostNameNotFoundException;
import com.yahoo.vespa.orchestrator.Orchestrator;
import com.yahoo.vespa.orchestrator.status.HostStatus;
import com.yahoo.vespa.service.monitor.ServiceMonitor;
@@ -225,10 +226,10 @@ public class MetricsReporter extends Maintainer {
metric.set("hostedVespa.docker.freeCapacityDisk", capacity.getFreeCapacityTotal().getDisk(), null);
List<Flavor> dockerFlavors = nodeRepository().getAvailableFlavors().getFlavors().stream()
- .filter(f -> f.environment().equals(Flavor.Environment.DOCKER_CONTAINER))
+ .filter(f -> f.getType().equals(Flavor.Type.DOCKER_CONTAINER))
.collect(Collectors.toList());
for (Flavor flavor : dockerFlavors) {
- Metric.Context context = getContextAt("flavor", flavor.flavorName());
+ Metric.Context context = getContextAt("flavor", flavor.name());
metric.set("hostedVespa.docker.freeCapacityFlavor", capacity.freeCapacityInFlavorEquivalence(flavor), context);
metric.set("hostedVespa.docker.hostsAvailableFlavor", capacity.getNofHostsAvailableFor(flavor), context);
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRebooter.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRebooter.java
index b5bbf045cf0..8f30394a239 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRebooter.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRebooter.java
@@ -40,7 +40,7 @@ public class NodeRebooter extends Maintainer {
EnumSet<Node.State> targetStates = EnumSet.of(Node.State.active, Node.State.ready);
List<Node> nodesToReboot = nodeRepository().getNodes().stream()
.filter(node -> targetStates.contains(node.state()))
- .filter(node -> node.flavor().environment() != Flavor.Environment.DOCKER_CONTAINER)
+ .filter(node -> node.flavor().getType() != Flavor.Type.DOCKER_CONTAINER)
.filter(this::shouldReboot)
.collect(Collectors.toList());
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRetirer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRetirer.java
index 56d175126ed..3113aaf45cc 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRetirer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRetirer.java
@@ -154,7 +154,7 @@ public class NodeRetirer extends Maintainer {
nodesToRetire.forEach(node ->
retirementPolicy.shouldRetire(node).ifPresent(reason -> {
log.info("Setting wantToRetire and wantToDeprovision for host " + node.hostname() +
- " with flavor " + node.flavor().flavorName() +
+ " with flavor " + node.flavor().name() +
" allocated to " + node.allocation().get().owner() + ". Reason: " + reason);
Node updatedNode = node.with(node.status()
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/retire/RetireIPv4OnlyNodes.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/retire/RetireIPv4OnlyNodes.java
index d6981cbd7f2..6562a89c2d6 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/retire/RetireIPv4OnlyNodes.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/retire/RetireIPv4OnlyNodes.java
@@ -51,7 +51,7 @@ public class RetireIPv4OnlyNodes implements RetirementPolicy {
@Override
public Optional<String> shouldRetire(Node node) {
- if (node.flavor().environment() == Flavor.Environment.VIRTUAL_MACHINE) return Optional.empty();
+ if (node.flavor().getType() == Flavor.Type.VIRTUAL_MACHINE) return Optional.empty();
boolean shouldRetire = node.ipAddresses().stream()
.map(InetAddresses::forString)
.allMatch(address -> address instanceof Inet4Address);
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeHostFilter.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeHostFilter.java
index e9f69abf81b..ed66d085972 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeHostFilter.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/NodeHostFilter.java
@@ -25,7 +25,7 @@ public class NodeHostFilter extends NodeFilter {
@Override
public boolean matches(Node node) {
- if ( ! filter.matches(node.hostname(), node.flavor().flavorName(), membership(node))) return false;
+ if ( ! filter.matches(node.hostname(), node.flavor().name(), membership(node))) return false;
return nextMatches(node);
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java
index 9f32517db41..bb4dab3b97b 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java
@@ -8,9 +8,10 @@ import com.yahoo.config.provision.ApplicationName;
import com.yahoo.config.provision.ClusterMembership;
import com.yahoo.config.provision.Flavor;
import com.yahoo.config.provision.InstanceName;
-import com.yahoo.config.provision.NetworkPortsSerializer;
import com.yahoo.config.provision.NodeFlavors;
import com.yahoo.config.provision.NodeType;
+import com.yahoo.config.provision.NetworkPorts;
+import com.yahoo.config.provision.NetworkPortsSerializer;
import com.yahoo.config.provision.TenantName;
import com.yahoo.slime.ArrayTraverser;
import com.yahoo.slime.Cursor;
@@ -112,7 +113,7 @@ public class NodeSerializer {
toSlime(node.ipAddressPool().asSet(), object.setArray(ipAddressPoolKey), IP::requireAddressPool);
object.setString(idKey, node.id());
node.parentHostname().ifPresent(hostname -> object.setString(parentHostnameKey, hostname));
- object.setString(flavorKey, node.flavor().flavorName());
+ object.setString(flavorKey, node.flavor().name());
object.setLong(rebootGenerationKey, node.status().reboot().wanted());
object.setLong(currentRebootGenerationKey, node.status().reboot().current());
node.status().vespaVersion().ifPresent(version -> object.setString(vespaVersionKey, version.toString()));
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 29bab6e73e7..e437badf0dc 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
@@ -4,11 +4,12 @@ package com.yahoo.vespa.hosted.provision.provisioning;
import com.yahoo.config.provision.Capacity;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.Environment;
-import com.yahoo.config.provision.Flavor;
-import com.yahoo.config.provision.NodeFlavors;
import com.yahoo.config.provision.SystemName;
import com.yahoo.config.provision.Zone;
+import com.yahoo.config.provision.Flavor;
+import com.yahoo.config.provision.NodeFlavors;
+
import java.util.Arrays;
import java.util.Optional;
@@ -44,7 +45,7 @@ public class CapacityPolicies {
// for now, always use the requested flavor if a docker flavor is requested
Optional<String> requestedFlavor = requestedCapacity.flavor();
if (requestedFlavor.isPresent() &&
- flavors.getFlavorOrThrow(requestedFlavor.get()).environment() == Flavor.Environment.DOCKER_CONTAINER)
+ flavors.getFlavorOrThrow(requestedFlavor.get()).getType() == Flavor.Type.DOCKER_CONTAINER)
return flavors.getFlavorOrThrow(requestedFlavor.get());
String defaultFlavorName = zone.defaultFlavor(cluster.type());
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/FlavorConfigBuilder.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/FlavorConfigBuilder.java
index c306ff6514c..cff62508ec6 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/FlavorConfigBuilder.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/FlavorConfigBuilder.java
@@ -1,10 +1,9 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.provision.provisioning;
+import com.yahoo.config.provisioning.FlavorsConfig;
import com.yahoo.config.provision.Flavor;
import com.yahoo.config.provision.NodeFlavors;
-import com.yahoo.config.provision.internal.ConfigNodeFlavors;
-import com.yahoo.config.provisioning.FlavorsConfig;
/**
* Simplifies creation of a node-repository config containing flavors.
@@ -20,13 +19,27 @@ public class FlavorConfigBuilder {
return new FlavorsConfig(builder);
}
- public FlavorsConfig.Flavor.Builder addFlavor(String flavorName, double cpu, double mem, double disk, Flavor.Environment environment) {
- FlavorsConfig.Flavor.Builder flavor = new FlavorsConfig.Flavor.Builder()
- .name(flavorName)
- .disk(new FlavorsConfig.Flavor.Disk.Builder().sizeInGb(disk))
- .cpu(new FlavorsConfig.Flavor.Cpu.Builder().cores(cpu))
- .memory(new FlavorsConfig.Flavor.Memory.Builder().sizeInGb(mem))
- .environment(environment.name());
+ public FlavorsConfig.Flavor.Builder addFlavor(String flavorName, double cpu, double mem, double disk, Flavor.Type type) {
+ FlavorsConfig.Flavor.Builder flavor = new FlavorsConfig.Flavor.Builder();
+ flavor.name(flavorName);
+ flavor.description("Flavor-name-is-" + flavorName);
+ flavor.minDiskAvailableGb(disk);
+ flavor.minCpuCores(cpu);
+ flavor.minMainMemoryAvailableGb(mem);
+ flavor.environment(type.name());
+ builder.flavor(flavor);
+ return flavor;
+ }
+
+ public FlavorsConfig.Flavor.Builder addNonStockFlavor(String flavorName, double cpu, double mem, double disk, Flavor.Type type) {
+ FlavorsConfig.Flavor.Builder flavor = new FlavorsConfig.Flavor.Builder();
+ flavor.name(flavorName);
+ flavor.description("Flavor-name-is-" + flavorName);
+ flavor.minDiskAvailableGb(disk);
+ flavor.minCpuCores(cpu);
+ flavor.minMainMemoryAvailableGb(mem);
+ flavor.stock(false);
+ flavor.environment(type.name());
builder.flavor(flavor);
return flavor;
}
@@ -47,14 +60,14 @@ public class FlavorConfigBuilder {
FlavorConfigBuilder flavorConfigBuilder = new FlavorConfigBuilder();
for (String flavorName : flavors) {
if (flavorName.equals("docker"))
- flavorConfigBuilder.addFlavor(flavorName, 1. /* cpu*/, 3. /* mem GB*/, 2. /*disk GB*/, Flavor.Environment.DOCKER_CONTAINER);
+ flavorConfigBuilder.addFlavor(flavorName, 1. /* cpu*/, 3. /* mem GB*/, 2. /*disk GB*/, Flavor.Type.DOCKER_CONTAINER);
else if (flavorName.equals("docker2"))
- flavorConfigBuilder.addFlavor(flavorName, 2. /* cpu*/, 4. /* mem GB*/, 4. /*disk GB*/, Flavor.Environment.DOCKER_CONTAINER);
+ flavorConfigBuilder.addFlavor(flavorName, 2. /* cpu*/, 4. /* mem GB*/, 4. /*disk GB*/, Flavor.Type.DOCKER_CONTAINER);
else if (flavorName.equals("host"))
- flavorConfigBuilder.addFlavor(flavorName, 7. /* cpu*/, 10. /* mem GB*/, 12. /*disk GB*/, Flavor.Environment.BARE_METAL);
+ flavorConfigBuilder.addFlavor(flavorName, 7. /* cpu*/, 10. /* mem GB*/, 12. /*disk GB*/, Flavor.Type.BARE_METAL);
else
- flavorConfigBuilder.addFlavor(flavorName, 1. /* cpu*/, 3. /* mem GB*/, 2. /*disk GB*/, Flavor.Environment.BARE_METAL);
+ flavorConfigBuilder.addFlavor(flavorName, 1. /* cpu*/, 3. /* mem GB*/, 2. /*disk GB*/, Flavor.Type.BARE_METAL);
}
- return new ConfigNodeFlavors(flavorConfigBuilder.build());
+ return new NodeFlavors(flavorConfigBuilder.build());
}
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/FlavorSpareCount.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/FlavorSpareCount.java
index dd8b84e350d..217f4999bfb 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/FlavorSpareCount.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/FlavorSpareCount.java
@@ -98,6 +98,6 @@ public class FlavorSpareCount {
@Override
public String toString() {
- return flavor.flavorName() + " has " + numReady + " ready nodes and " + numActive + " active nodes";
+ return flavor.name() + " has " + numReady + " ready nodes and " + numActive + " active nodes";
}
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeAllocation.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeAllocation.java
index f9093575784..dcc3c4a0ef8 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeAllocation.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeAllocation.java
@@ -285,7 +285,7 @@ class NodeAllocation {
.filter(NodeSpec.CountNodeSpec.class::isInstance)
.map(NodeSpec.CountNodeSpec.class::cast)
.map(spec -> new FlavorCount(spec.getFlavor(), spec.fulfilledDeficitCount(acceptedOfRequestedFlavor)))
- .filter(flavorCount -> flavorCount.getFlavor().environment() == Flavor.Environment.DOCKER_CONTAINER)
+ .filter(flavorCount -> flavorCount.getFlavor().getType() == Flavor.Type.DOCKER_CONTAINER)
.filter(flavorCount -> flavorCount.getCount() > 0);
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java
index 820c0d2914b..861e1062d66 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizer.java
@@ -248,7 +248,7 @@ class NodePrioritizer {
private boolean isDocker() {
Flavor flavor = getFlavor(requestedNodes);
- return (flavor != null) && flavor.environment().equals(Flavor.Environment.DOCKER_CONTAINER);
+ return (flavor != null) && flavor.getType().equals(Flavor.Type.DOCKER_CONTAINER);
}
private static int compareForRelocation(Node a, Node b) {
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeSpec.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeSpec.java
index 0d49b036acb..e033d994f24 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeSpec.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeSpec.java
@@ -1,8 +1,8 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.provision.provisioning;
-import com.yahoo.config.provision.Flavor;
import com.yahoo.config.provision.NodeType;
+import com.yahoo.config.provision.Flavor;
import com.yahoo.vespa.hosted.provision.Node;
import java.util.Objects;
@@ -142,7 +142,7 @@ public interface NodeSpec {
private boolean requestedFlavorCanBeAchievedByResizing(Flavor flavor) {
// TODO: Enable this when we can do it safely
// Then also re-enable ProvisioningTest.application_deployment_with_inplace_downsize()
- // return flavor.isDockerContainer() && requestedFlavor.isDockerContainer() && flavor.isLargerThan(requestedFlavor);
+ // return flavor.isDocker() && requestedFlavor.isDocker() && flavor.isLargerThan(requestedFlavor);
return false;
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/ResourceCapacity.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/ResourceCapacity.java
index 4262bda7824..903951ef93b 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/ResourceCapacity.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/ResourceCapacity.java
@@ -28,7 +28,7 @@ public class ResourceCapacity {
static ResourceCapacity of(Flavor flavor) {
return new ResourceCapacity(
- flavor.memory().sizeInGb(), flavor.cpu().cores(), flavor.disk().sizeInBase10Gb());
+ flavor.getMinMainMemoryAvailableGb(), flavor.getMinCpuCores(), flavor.getMinDiskAvailableGb());
}
static ResourceCapacity of(Node node) {
@@ -72,9 +72,9 @@ public class ResourceCapacity {
int freeCapacityInFlavorEquivalence(Flavor flavor) {
if (!hasCapacityFor(ResourceCapacity.of(flavor))) return 0;
- double memoryFactor = Math.floor(memory/flavor.memory().sizeInGb());
- double cpuFactor = Math.floor(cpu/flavor.cpu().cores());
- double diskFactor = Math.floor(disk/flavor.disk().sizeInBase10Gb());
+ double memoryFactor = Math.floor(memory/flavor.getMinMainMemoryAvailableGb());
+ double cpuFactor = Math.floor(cpu/flavor.getMinCpuCores());
+ double diskFactor = Math.floor(disk/flavor.getMinDiskAvailableGb());
return (int) Math.min(Math.min(memoryFactor, cpuFactor), diskFactor);
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesResponse.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesResponse.java
index 5e9f7a78a10..1254664eb78 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesResponse.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesResponse.java
@@ -142,16 +142,18 @@ class NodesResponse extends HttpResponse {
object.setString("parentHostname", node.parentHostname().get());
}
object.setString("openStackId", node.id());
- object.setString("flavor", node.flavor().flavorName());
+ object.setString("flavor", node.flavor().name());
object.setString("canonicalFlavor", node.flavor().canonicalName());
- object.setDouble("minDiskAvailableGb", node.flavor().disk().sizeInBase10Gb());
- object.setDouble("minMainMemoryAvailableGb", node.flavor().memory().sizeInGb());
- object.setDouble("minCpuCores", node.flavor().cpu().cores());
+ object.setDouble("minDiskAvailableGb", node.flavor().getMinDiskAvailableGb());
+ object.setDouble("minMainMemoryAvailableGb", node.flavor().getMinMainMemoryAvailableGb());
+ if (node.flavor().getDescription() != null && ! node.flavor().getDescription().isEmpty())
+ object.setString("description", node.flavor().getDescription());
+ object.setDouble("minCpuCores", node.flavor().getMinCpuCores());
if (node.flavor().cost() > 0)
object.setLong("cost", node.flavor().cost());
- object.setBool("fastDisk", node.flavor().disk().isFast());
- object.setDouble("bandwidth", node.flavor().bandwidth().mbits());
- object.setString("environment", node.flavor().environment().name());
+ object.setBool("fastDisk", node.flavor().hasFastDisk());
+ object.setDouble("bandwidth", node.flavor().getBandwidth());
+ object.setString("environment", node.flavor().getType().name());
node.allocation().ifPresent(allocation -> {
toSlime(allocation.owner(), object.setObject("owner"));
toSlime(allocation.membership(), object.setObject("membership"));
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeFlavors.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeFlavors.java
index 8e456fe4703..241a797cd1b 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeFlavors.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeFlavors.java
@@ -1,16 +1,16 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.hosted.provision.testutils;
-import com.yahoo.config.provision.Flavor;
-import com.yahoo.config.provision.internal.ConfigNodeFlavors;
import com.yahoo.config.provisioning.FlavorsConfig;
+import com.yahoo.config.provision.Flavor;
+import com.yahoo.config.provision.NodeFlavors;
import com.yahoo.vespa.hosted.provision.provisioning.FlavorConfigBuilder;
/**
* A mock repository prepopulated with flavors, to avoid having config.
* Instantiated by DI from application package above.
*/
-public class MockNodeFlavors extends ConfigNodeFlavors {
+public class MockNodeFlavors extends NodeFlavors {
public MockNodeFlavors() {
super(createConfig());
@@ -18,14 +18,14 @@ public class MockNodeFlavors extends ConfigNodeFlavors {
private static FlavorsConfig createConfig() {
FlavorConfigBuilder b = new FlavorConfigBuilder();
- b.addFlavor("default", 2., 16., 400, Flavor.Environment.BARE_METAL);
- b.addFlavor("medium-disk", 6., 12., 56, Flavor.Environment.BARE_METAL);
- b.addFlavor("large", 4., 32., 1600, Flavor.Environment.BARE_METAL);
- b.addFlavor("docker", 0.2, 0.5, 100, Flavor.Environment.DOCKER_CONTAINER);
- b.addFlavor("v-4-8-100", 4.0, 8.0, 100, Flavor.Environment.VIRTUAL_MACHINE);
- FlavorsConfig.Flavor.Builder largeVariant = b.addFlavor("large-variant", 64, 128, 2000, Flavor.Environment.BARE_METAL);
+ b.addFlavor("default", 2., 16., 400, Flavor.Type.BARE_METAL);
+ b.addFlavor("medium-disk", 6., 12., 56, Flavor.Type.BARE_METAL);
+ b.addFlavor("large", 4., 32., 1600, Flavor.Type.BARE_METAL);
+ b.addFlavor("docker", 0.2, 0.5, 100, Flavor.Type.DOCKER_CONTAINER);
+ b.addFlavor("v-4-8-100", 4.0, 8.0, 100, Flavor.Type.VIRTUAL_MACHINE);
+ FlavorsConfig.Flavor.Builder largeVariant = b.addFlavor("large-variant", 64, 128, 2000, Flavor.Type.BARE_METAL);
b.addReplaces("large", largeVariant);
- FlavorsConfig.Flavor.Builder expensiveFlavor = b.addFlavor("expensive", 6, 12, 500, Flavor.Environment.BARE_METAL);
+ FlavorsConfig.Flavor.Builder expensiveFlavor = b.addFlavor("expensive", 6, 12, 500, Flavor.Type.BARE_METAL);
b.addReplaces("default", expensiveFlavor);
b.addCost(200, expensiveFlavor);
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTester.java
index d599973ecde..03ada1e7951 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTester.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTester.java
@@ -6,7 +6,6 @@ import com.yahoo.config.provision.Flavor;
import com.yahoo.config.provision.NodeFlavors;
import com.yahoo.config.provision.NodeType;
import com.yahoo.config.provision.Zone;
-import com.yahoo.config.provision.internal.ConfigNodeFlavors;
import com.yahoo.config.provisioning.FlavorsConfig;
import com.yahoo.test.ManualClock;
import com.yahoo.vespa.curator.mock.MockCurator;
@@ -31,7 +30,7 @@ public class NodeRepositoryTester {
public NodeRepositoryTester() {
- nodeFlavors = new ConfigNodeFlavors(createConfig());
+ nodeFlavors = new NodeFlavors(createConfig());
clock = new ManualClock();
curator = new MockCurator();
curator.setZooKeeperEnsembleConnectionSpec("server1:1234,server2:5678");
@@ -72,9 +71,9 @@ public class NodeRepositoryTester {
private FlavorsConfig createConfig() {
FlavorConfigBuilder b = new FlavorConfigBuilder();
- b.addFlavor("default", 2., 4., 100, Flavor.Environment.BARE_METAL).cost(3);
- b.addFlavor("small", 1., 2., 50, Flavor.Environment.BARE_METAL).cost(2);
- b.addFlavor("docker", 1., 2., 50, Flavor.Environment.DOCKER_CONTAINER).cost(1);
+ b.addFlavor("default", 2., 4., 100, Flavor.Type.BARE_METAL).cost(3);
+ b.addFlavor("small", 1., 2., 50, Flavor.Type.BARE_METAL).cost(2);
+ b.addFlavor("docker", 1., 2., 50, Flavor.Type.DOCKER_CONTAINER).cost(1);
return b.build();
}
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 ab890b02315..9b44f93bc9f 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
@@ -323,7 +323,7 @@ public class FailedExpirerTest {
Version.fromString("6.42"),
false,
Collections.emptySet());
- Capacity capacity = Capacity.fromNodeCount(hostname.length, Optional.of(flavor.flavorName()), false, true);
+ Capacity capacity = Capacity.fromNodeCount(hostname.length, Optional.of(flavor.name()), false, true);
return allocate(applicationId, clusterSpec, capacity);
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailerTest.java
index 68780770821..965ce990c64 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeFailerTest.java
@@ -319,9 +319,9 @@ public class NodeFailerTest {
// Two ready nodes and a ready docker node die, but only 2 of those are failed out
tester.clock.advance(Duration.ofMinutes(180));
- Node dockerNode = ready.stream().filter(node -> node.flavor().environment() == Flavor.Environment.DOCKER_CONTAINER).findFirst().get();
+ Node dockerNode = ready.stream().filter(node -> node.flavor().getType() == Flavor.Type.DOCKER_CONTAINER).findFirst().get();
List<Node> otherNodes = ready.stream()
- .filter(node -> node.flavor().environment() != Flavor.Environment.DOCKER_CONTAINER)
+ .filter(node -> node.flavor().getType() != Flavor.Type.DOCKER_CONTAINER)
.collect(Collectors.toList());
tester.allNodesMakeAConfigRequestExcept(otherNodes.get(0), otherNodes.get(2), dockerNode);
tester.failer.run();
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRetirerTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRetirerTester.java
index 732badf9369..5e33e863df7 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRetirerTester.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/NodeRetirerTester.java
@@ -12,7 +12,6 @@ import com.yahoo.config.provision.NodeFlavors;
import com.yahoo.config.provision.NodeType;
import com.yahoo.config.provision.RegionName;
import com.yahoo.config.provision.Zone;
-import com.yahoo.config.provision.internal.ConfigNodeFlavors;
import com.yahoo.test.ManualClock;
import com.yahoo.vespa.curator.Curator;
import com.yahoo.vespa.curator.mock.MockCurator;
@@ -80,7 +79,7 @@ public class NodeRetirerTester {
jobControl = new JobControl(nodeRepository.database());
NodeRepositoryProvisioner provisioner = new NodeRepositoryProvisioner(nodeRepository, nodeFlavors, zone, new MockProvisionServiceProvider(), new InMemoryFlagSource());
deployer = new MockDeployer(provisioner, clock, apps);
- flavors = nodeFlavors.getFlavors().stream().sorted(Comparator.comparing(Flavor::flavorName)).collect(Collectors.toList());
+ flavors = nodeFlavors.getFlavors().stream().sorted(Comparator.comparing(Flavor::name)).collect(Collectors.toList());
try {
doThrow(new RuntimeException()).when(orchestrator).acquirePermissionToRemove(any());
@@ -116,7 +115,7 @@ public class NodeRetirerTester {
for (int i = 0; i < flavorIds.length; i++) {
Flavor flavor = flavors.get(flavorIds[i]);
ClusterSpec cluster = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("cluster-" + i), Version.fromString("6.99"), false, Collections.emptySet());
- Capacity capacity = Capacity.fromNodeCount(numNodes[i], Optional.of(flavor.flavorName()), false, true);
+ Capacity capacity = Capacity.fromNodeCount(numNodes[i], Optional.of(flavor.name()), false, true);
// If the number of node the app wants is divisible by 2, make it into 2 groups, otherwise as 1
int numGroups = numNodes[i] % 2 == 0 ? 2 : 1;
clusterContexts.add(new MockDeployer.ClusterContext(applicationId, cluster, capacity, numGroups));
@@ -207,8 +206,8 @@ public class NodeRetirerTester {
static NodeFlavors makeFlavors(int numFlavors) {
FlavorConfigBuilder flavorConfigBuilder = new FlavorConfigBuilder();
for (int i = 0; i < numFlavors; i++) {
- flavorConfigBuilder.addFlavor("flavor-" + i, 1. /* cpu*/, 3. /* mem GB*/, 2. /*disk GB*/, Flavor.Environment.BARE_METAL);
+ flavorConfigBuilder.addFlavor("flavor-" + i, 1. /* cpu*/, 3. /* mem GB*/, 2. /*disk GB*/, Flavor.Type.BARE_METAL);
}
- return new ConfigNodeFlavors(flavorConfigBuilder.build());
+ return new NodeFlavors(flavorConfigBuilder.build());
}
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/retire/RetireIPv4OnlyNodesTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/retire/RetireIPv4OnlyNodesTest.java
index ae22c211a79..b40d091b346 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/retire/RetireIPv4OnlyNodesTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/retire/RetireIPv4OnlyNodesTest.java
@@ -3,7 +3,6 @@ package com.yahoo.vespa.hosted.provision.maintenance.retire;
import com.yahoo.config.provision.Flavor;
import com.yahoo.config.provision.NodeType;
-import com.yahoo.config.provision.internal.ConfigFlavor;
import com.yahoo.vespa.hosted.provision.Node;
import com.yahoo.vespa.hosted.provision.provisioning.FlavorConfigBuilder;
import org.junit.Test;
@@ -81,8 +80,8 @@ public class RetireIPv4OnlyNodesTest {
private List<Flavor> initFlavors() {
FlavorConfigBuilder flavorConfigBuilder = new FlavorConfigBuilder();
- flavorConfigBuilder.addFlavor("default", 1. /* cpu*/, 3. /* mem GB*/, 2. /*disk GB*/, Flavor.Environment.BARE_METAL);
- flavorConfigBuilder.addFlavor("vm", 1. /* cpu*/, 3. /* mem GB*/, 2. /*disk GB*/, Flavor.Environment.VIRTUAL_MACHINE);
- return flavorConfigBuilder.build().flavor().stream().map(ConfigFlavor::new).collect(Collectors.toList());
+ flavorConfigBuilder.addFlavor("default", 1. /* cpu*/, 3. /* mem GB*/, 2. /*disk GB*/, Flavor.Type.BARE_METAL);
+ flavorConfigBuilder.addFlavor("vm", 1. /* cpu*/, 3. /* mem GB*/, 2. /*disk GB*/, Flavor.Type.VIRTUAL_MACHINE);
+ return flavorConfigBuilder.build().flavor().stream().map(Flavor::new).collect(Collectors.toList());
}
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/SerializationTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/SerializationTest.java
index 54ae4beb4cd..188dd5fcaee 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/SerializationTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/SerializationTest.java
@@ -94,7 +94,7 @@ public class SerializationTest {
assertEquals(2, copy.allocation().get().restartGeneration().current());
assertEquals(3, copy.status().reboot().wanted());
assertEquals(4, copy.status().reboot().current());
- assertEquals("large", copy.flavor().flavorName());
+ assertEquals("large", copy.flavor().name());
assertEquals("1.2.3", copy.status().vespaVersion().get().toString());
assertEquals(2, copy.status().failCount());
assertEquals("memory_mcelog", copy.status().hardwareFailureDescription().get());
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AllocationSimulator.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AllocationSimulator.java
index 1bf4ff381e8..78fbca554f0 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AllocationSimulator.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AllocationSimulator.java
@@ -8,7 +8,6 @@ import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.Flavor;
import com.yahoo.config.provision.NodeFlavors;
import com.yahoo.config.provision.NodeType;
-import com.yahoo.config.provision.internal.ConfigNodeFlavors;
import com.yahoo.vespa.hosted.provision.Node;
import com.yahoo.vespa.hosted.provision.NodeList;
import com.yahoo.vespa.hosted.provision.node.Allocation;
@@ -17,7 +16,7 @@ import com.yahoo.vespa.hosted.provision.node.History;
import com.yahoo.vespa.hosted.provision.node.Reports;
import com.yahoo.vespa.hosted.provision.node.Status;
-import javax.swing.*;
+import javax.swing.JFrame;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
@@ -44,15 +43,15 @@ public class AllocationSimulator {
// Setup flavors
//
FlavorConfigBuilder b = new FlavorConfigBuilder();
- b.addFlavor("host-large", 8., 8., 8, Flavor.Environment.BARE_METAL);
- b.addFlavor("host-small", 5., 5., 5, Flavor.Environment.BARE_METAL);
- b.addFlavor("d-1", 1, 1., 1, Flavor.Environment.DOCKER_CONTAINER);
- b.addFlavor("d-2", 2, 2., 2, Flavor.Environment.DOCKER_CONTAINER);
- b.addFlavor("d-3", 3, 3., 3, Flavor.Environment.DOCKER_CONTAINER);
- b.addFlavor("d-3-disk", 3, 3., 5, Flavor.Environment.DOCKER_CONTAINER);
- b.addFlavor("d-3-mem", 3, 5., 3, Flavor.Environment.DOCKER_CONTAINER);
- b.addFlavor("d-3-cpu", 5, 3., 3, Flavor.Environment.DOCKER_CONTAINER);
- flavors = new ConfigNodeFlavors(b.build());
+ b.addFlavor("host-large", 8., 8., 8, Flavor.Type.BARE_METAL);
+ b.addFlavor("host-small", 5., 5., 5, Flavor.Type.BARE_METAL);
+ b.addFlavor("d-1", 1, 1., 1, Flavor.Type.DOCKER_CONTAINER);
+ b.addFlavor("d-2", 2, 2., 2, Flavor.Type.DOCKER_CONTAINER);
+ b.addFlavor("d-3", 3, 3., 3, Flavor.Type.DOCKER_CONTAINER);
+ b.addFlavor("d-3-disk", 3, 3., 5, Flavor.Type.DOCKER_CONTAINER);
+ b.addFlavor("d-3-mem", 3, 5., 3, Flavor.Type.DOCKER_CONTAINER);
+ b.addFlavor("d-3-cpu", 5, 3., 3, Flavor.Type.DOCKER_CONTAINER);
+ flavors = new NodeFlavors(b.build());
//
// Initiate nodes in system
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AllocationVisualizer.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AllocationVisualizer.java
index 726927c25f2..61e14be53d8 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AllocationVisualizer.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/AllocationVisualizer.java
@@ -5,8 +5,13 @@ import com.yahoo.config.provision.NodeType;
import com.yahoo.vespa.hosted.provision.Node;
import com.yahoo.vespa.hosted.provision.NodeList;
-import javax.swing.*;
-import java.awt.*;
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.Graphics;
import java.util.ArrayList;
import java.util.List;
@@ -98,13 +103,13 @@ public class AllocationVisualizer extends JPanel {
if (isHost) {
g.setColor(Color.GRAY);
- for (int i = 0; i < node.flavor().memory().sizeInGb(); i++) {
+ for (int i = 0; i < node.flavor().getMinMainMemoryAvailableGb(); i++) {
g.fillRect(x, y - nodeHeight, nodeWidth, nodeHeight);
y = y - (nodeHeight + 2);
}
} else {
g.setColor(Color.YELLOW);
- int multi = (int) node.flavor().memory().sizeInGb();
+ int multi = (int) node.flavor().getMinMainMemoryAvailableGb();
int height = multi * nodeHeight + ((multi - 1) * 2);
g.fillRect(x, y - height, nodeWidth, height);
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 2d21c6bfe7f..74541677714 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
@@ -314,15 +314,15 @@ public class DynamicDockerAllocationTest {
private FlavorsConfig flavorsConfig() {
FlavorConfigBuilder b = new FlavorConfigBuilder();
- b.addFlavor("host-large", 6., 6., 6, Flavor.Environment.BARE_METAL);
- b.addFlavor("host-small", 3., 3., 3, Flavor.Environment.BARE_METAL);
- b.addFlavor("host-medium", 4., 4., 4, Flavor.Environment.BARE_METAL);
- b.addFlavor("d-1", 1, 1., 1, Flavor.Environment.DOCKER_CONTAINER);
- b.addFlavor("d-2", 2, 2., 2, Flavor.Environment.DOCKER_CONTAINER);
- b.addFlavor("d-3", 3, 3., 3, Flavor.Environment.DOCKER_CONTAINER);
- b.addFlavor("d-3-disk", 3, 3., 5, Flavor.Environment.DOCKER_CONTAINER);
- b.addFlavor("d-3-mem", 3, 5., 3, Flavor.Environment.DOCKER_CONTAINER);
- b.addFlavor("d-3-cpu", 5, 3., 3, Flavor.Environment.DOCKER_CONTAINER);
+ b.addFlavor("host-large", 6., 6., 6, Flavor.Type.BARE_METAL);
+ b.addFlavor("host-small", 3., 3., 3, Flavor.Type.BARE_METAL);
+ b.addFlavor("host-medium", 4., 4., 4, Flavor.Type.BARE_METAL);
+ b.addFlavor("d-1", 1, 1., 1, Flavor.Type.DOCKER_CONTAINER);
+ b.addFlavor("d-2", 2, 2., 2, Flavor.Type.DOCKER_CONTAINER);
+ b.addFlavor("d-3", 3, 3., 3, Flavor.Type.DOCKER_CONTAINER);
+ b.addFlavor("d-3-disk", 3, 3., 5, Flavor.Type.DOCKER_CONTAINER);
+ b.addFlavor("d-3-mem", 3, 5., 3, Flavor.Type.DOCKER_CONTAINER);
+ b.addFlavor("d-3-cpu", 5, 3., 3, Flavor.Type.DOCKER_CONTAINER);
return b.build();
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/FlavorSpareCountTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/FlavorSpareCountTest.java
index 32d03c156f7..cb9c5c02c65 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/FlavorSpareCountTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/FlavorSpareCountTest.java
@@ -2,7 +2,7 @@
package com.yahoo.vespa.hosted.provision.provisioning;
import com.yahoo.config.provision.Flavor;
-import com.yahoo.config.provision.internal.ConfigNodeFlavors;
+import com.yahoo.config.provision.NodeFlavors;
import com.yahoo.config.provisioning.FlavorsConfig;
import org.junit.Test;
@@ -107,15 +107,15 @@ public class FlavorSpareCountTest {
FlavorConfigBuilder flavorConfigBuilder = new FlavorConfigBuilder();
for (int i = 0; i < replaces.length; i++) {
FlavorsConfig.Flavor.Builder builder = flavorConfigBuilder
- .addFlavor("flavor-" + i, 1. /* cpu*/, 3. /* mem GB*/, 2. /*disk GB*/, Flavor.Environment.BARE_METAL);
+ .addFlavor("flavor-" + i, 1. /* cpu*/, 3. /* mem GB*/, 2. /*disk GB*/, Flavor.Type.BARE_METAL);
for (Integer replacesId : replaces[i]) {
flavorConfigBuilder.addReplaces("flavor-" + replacesId, builder);
}
}
- return new ConfigNodeFlavors(flavorConfigBuilder.build())
+ return new NodeFlavors(flavorConfigBuilder.build())
.getFlavors().stream()
- .sorted(Comparator.comparing(Flavor::flavorName))
+ .sorted(Comparator.comparing(Flavor::name))
.collect(Collectors.toList());
}
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizerTest.java
index bdd1ea7e113..f7caea060ad 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/NodePrioritizerTest.java
@@ -8,7 +8,6 @@ import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.Flavor;
import com.yahoo.config.provision.NodeFlavors;
import com.yahoo.config.provision.NodeType;
-import com.yahoo.config.provision.internal.ConfigNodeFlavors;
import com.yahoo.config.provisioning.FlavorsConfig;
import com.yahoo.vespa.hosted.provision.Node;
import org.junit.Assert;
@@ -26,7 +25,7 @@ import java.util.Optional;
*/
public class NodePrioritizerTest {
- private static NodeFlavors flavors = new ConfigNodeFlavors(flavorsConfig());
+ private static NodeFlavors flavors = new NodeFlavors(flavorsConfig());
@Test
public void relocated_nodes_are_preferred() {
@@ -80,9 +79,9 @@ public class NodePrioritizerTest {
private static FlavorsConfig flavorsConfig() {
FlavorConfigBuilder b = new FlavorConfigBuilder();
- b.addFlavor("host-large", 6., 6., 6, Flavor.Environment.BARE_METAL);
- b.addFlavor("d1", 1, 1., 1, Flavor.Environment.DOCKER_CONTAINER);
- b.addFlavor("d2", 2, 2., 2, Flavor.Environment.DOCKER_CONTAINER);
+ b.addFlavor("host-large", 6., 6., 6, Flavor.Type.BARE_METAL);
+ b.addFlavor("d1", 1, 1., 1, Flavor.Type.DOCKER_CONTAINER);
+ b.addFlavor("d2", 2, 2., 2, Flavor.Type.DOCKER_CONTAINER);
return b.build();
}
}
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 dd04f5daab1..0eca5e25d85 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
@@ -13,11 +13,11 @@ import com.yahoo.config.provision.Flavor;
import com.yahoo.config.provision.HostFilter;
import com.yahoo.config.provision.HostSpec;
import com.yahoo.config.provision.InstanceName;
+import com.yahoo.config.provision.NodeFlavors;
import com.yahoo.config.provision.OutOfCapacityException;
import com.yahoo.config.provision.RegionName;
import com.yahoo.config.provision.TenantName;
import com.yahoo.config.provision.Zone;
-import com.yahoo.config.provision.internal.ConfigNodeFlavors;
import com.yahoo.config.provisioning.FlavorsConfig;
import com.yahoo.transaction.NestedTransaction;
import com.yahoo.vespa.curator.Curator;
@@ -281,7 +281,7 @@ public class ProvisioningTest {
assertEquals(12, tester.getNodes(application1, Node.State.active).size());
for (Node node : tester.getNodes(application1, Node.State.active))
- assertEquals("Node changed flavor in place", "dockerSmall", node.flavor().flavorName());
+ assertEquals("Node changed flavor in place", "dockerSmall", node.flavor().name());
assertEquals("No nodes are retired",
0, tester.getNodes(application1, Node.State.active).retired().size());
}
@@ -295,7 +295,7 @@ public class ProvisioningTest {
config.defaultContainerFlavor("small");
config.defaultContentFlavor("large");
ProvisioningTester tester = new ProvisioningTester.Builder()
- .zone(new Zone(new ConfigserverConfig(config), new ConfigNodeFlavors(new FlavorsConfig.Builder().build()))).build();
+ .zone(new Zone(new ConfigserverConfig(config), new NodeFlavors(new FlavorsConfig.Builder().build()))).build();
ApplicationId application1 = tester.makeApplicationId();
@@ -528,9 +528,9 @@ public class ProvisioningTest {
String replacementFlavor = "new-default";
FlavorConfigBuilder b = new FlavorConfigBuilder();
- b.addFlavor(flavorToRetire, 1., 1., 10, Flavor.Environment.BARE_METAL).cost(2).retired(true);
+ b.addFlavor(flavorToRetire, 1., 1., 10, Flavor.Type.BARE_METAL).cost(2).retired(true);
FlavorsConfig.Flavor.Builder newDefault = b.addFlavor(replacementFlavor, 2., 2., 20,
- Flavor.Environment.BARE_METAL).cost(2);
+ Flavor.Type.BARE_METAL).cost(2);
b.addReplaces(flavorToRetire, newDefault);
ProvisioningTester tester = new ProvisioningTester.Builder()
@@ -630,7 +630,7 @@ public class ProvisioningTest {
// Deploy with flavor that will eventually be retired
{
FlavorConfigBuilder b = new FlavorConfigBuilder();
- b.addFlavor(flavorToRetire, 1., 1., 10, Flavor.Environment.BARE_METAL).cost(2);
+ b.addFlavor(flavorToRetire, 1., 1., 10, Flavor.Type.BARE_METAL).cost(2);
ProvisioningTester tester = new ProvisioningTester.Builder()
.flavorsConfig(b.build()).curator(curator).nameResolver(nameResolver).build();
@@ -644,9 +644,9 @@ public class ProvisioningTest {
{
// Retire "default" flavor and add "new-default" as replacement
FlavorConfigBuilder b = new FlavorConfigBuilder();
- b.addFlavor(flavorToRetire, 1., 1., 10, Flavor.Environment.BARE_METAL).cost(2).retired(true);
+ b.addFlavor(flavorToRetire, 1., 1., 10, Flavor.Type.BARE_METAL).cost(2).retired(true);
FlavorsConfig.Flavor.Builder newDefault = b.addFlavor(replacementFlavor, 2., 2., 20,
- Flavor.Environment.BARE_METAL).cost(2);
+ Flavor.Type.BARE_METAL).cost(2);
b.addReplaces(flavorToRetire, newDefault);
ProvisioningTester tester = new ProvisioningTester.Builder()
@@ -673,9 +673,9 @@ public class ProvisioningTest {
String replacementFlavor = "new-default";
FlavorConfigBuilder b = new FlavorConfigBuilder();
- b.addFlavor(flavorToRetire, 1., 1., 10, Flavor.Environment.BARE_METAL).cost(2).retired(true);
+ b.addFlavor(flavorToRetire, 1., 1., 10, Flavor.Type.BARE_METAL).cost(2).retired(true);
FlavorsConfig.Flavor.Builder newDefault = b.addFlavor(replacementFlavor, 2., 2., 20,
- Flavor.Environment.BARE_METAL).cost(2);
+ Flavor.Type.BARE_METAL).cost(2);
b.addReplaces(flavorToRetire, newDefault);
ProvisioningTester tester = new ProvisioningTester.Builder()
@@ -693,7 +693,7 @@ public class ProvisioningTest {
List<Node> nodes = tester.getNodes(application).asList();
assertTrue("Allocated nodes have flavor " + replacementFlavor,
- nodes.stream().allMatch(n -> n.flavor().flavorName().equals(replacementFlavor)));
+ nodes.stream().allMatch(n -> n.flavor().name().equals(replacementFlavor)));
}
@Test
@@ -781,10 +781,10 @@ public class ProvisioningTest {
private void assertCorrectFlavorPreferences(boolean largeIsStock) {
FlavorConfigBuilder b = new FlavorConfigBuilder();
- b.addFlavor("large", 4., 8., 100, Flavor.Environment.BARE_METAL).cost(10).stock(largeIsStock);
- FlavorsConfig.Flavor.Builder largeVariant = b.addFlavor("large-variant", 3., 9., 101, Flavor.Environment.BARE_METAL).cost(9);
+ b.addFlavor("large", 4., 8., 100, Flavor.Type.BARE_METAL).cost(10).stock(largeIsStock);
+ FlavorsConfig.Flavor.Builder largeVariant = b.addFlavor("large-variant", 3., 9., 101, Flavor.Type.BARE_METAL).cost(9);
b.addReplaces("large", largeVariant);
- FlavorsConfig.Flavor.Builder largeVariantVariant = b.addFlavor("large-variant-variant", 4., 9., 101, Flavor.Environment.BARE_METAL).cost(11);
+ FlavorsConfig.Flavor.Builder largeVariantVariant = b.addFlavor("large-variant-variant", 4., 9., 101, Flavor.Type.BARE_METAL).cost(11);
b.addReplaces("large-variant", largeVariantVariant);
ProvisioningTester tester = new ProvisioningTester.Builder()
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 163660dcb2f..aaae6cf09a1 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
@@ -16,7 +16,6 @@ import com.yahoo.config.provision.NodeType;
import com.yahoo.config.provision.ProvisionLogger;
import com.yahoo.config.provision.TenantName;
import com.yahoo.config.provision.Zone;
-import com.yahoo.config.provision.internal.ConfigNodeFlavors;
import com.yahoo.config.provisioning.FlavorsConfig;
import com.yahoo.test.ManualClock;
import com.yahoo.transaction.NestedTransaction;
@@ -98,19 +97,19 @@ public class ProvisioningTester {
public static FlavorsConfig createConfig() {
FlavorConfigBuilder b = new FlavorConfigBuilder();
- b.addFlavor("default", 2., 4., 100, Flavor.Environment.BARE_METAL).cost(3);
- b.addFlavor("small", 1., 2., 50, Flavor.Environment.BARE_METAL).cost(2);
- b.addFlavor("dockerSmall", 1., 1., 10, Flavor.Environment.DOCKER_CONTAINER).cost(1);
- b.addFlavor("dockerLarge", 2., 1., 20, Flavor.Environment.DOCKER_CONTAINER).cost(3);
- b.addFlavor("v-4-8-100", 4., 8., 100, Flavor.Environment.VIRTUAL_MACHINE).cost(4);
- b.addFlavor("old-large1", 2., 4., 100, Flavor.Environment.BARE_METAL).cost(6);
- b.addFlavor("old-large2", 2., 5., 100, Flavor.Environment.BARE_METAL).cost(14);
- FlavorsConfig.Flavor.Builder large = b.addFlavor("large", 4., 8., 100, Flavor.Environment.BARE_METAL).cost(10);
+ b.addFlavor("default", 2., 4., 100, Flavor.Type.BARE_METAL).cost(3);
+ b.addFlavor("small", 1., 2., 50, Flavor.Type.BARE_METAL).cost(2);
+ b.addFlavor("dockerSmall", 1., 1., 10, Flavor.Type.DOCKER_CONTAINER).cost(1);
+ b.addFlavor("dockerLarge", 2., 1., 20, Flavor.Type.DOCKER_CONTAINER).cost(3);
+ b.addFlavor("v-4-8-100", 4., 8., 100, Flavor.Type.VIRTUAL_MACHINE).cost(4);
+ b.addFlavor("old-large1", 2., 4., 100, Flavor.Type.BARE_METAL).cost(6);
+ b.addFlavor("old-large2", 2., 5., 100, Flavor.Type.BARE_METAL).cost(14);
+ FlavorsConfig.Flavor.Builder large = b.addFlavor("large", 4., 8., 100, Flavor.Type.BARE_METAL).cost(10);
b.addReplaces("old-large1", large);
b.addReplaces("old-large2", large);
- FlavorsConfig.Flavor.Builder largeVariant = b.addFlavor("large-variant", 3., 9., 101, Flavor.Environment.BARE_METAL).cost(9);
+ FlavorsConfig.Flavor.Builder largeVariant = b.addFlavor("large-variant", 3., 9., 101, Flavor.Type.BARE_METAL).cost(9);
b.addReplaces("large", largeVariant);
- FlavorsConfig.Flavor.Builder largeVariantVariant = b.addFlavor("large-variant-variant", 4., 9., 101, Flavor.Environment.BARE_METAL).cost(11);
+ FlavorsConfig.Flavor.Builder largeVariantVariant = b.addFlavor("large-variant-variant", 4., 9., 101, Flavor.Type.BARE_METAL).cost(11);
b.addReplaces("large-variant", largeVariantVariant);
return b.build();
}
@@ -376,7 +375,7 @@ public class ProvisioningTester {
long actualNodesWithFlavor = hostSpecs.stream()
.map(HostSpec::hostname)
.map(this::getNodeFlavor)
- .map(Flavor::flavorName)
+ .map(Flavor::name)
.filter(name -> name.equals(flavor))
.count();
assertEquals(expectedCount, actualNodesWithFlavor);
@@ -450,7 +449,7 @@ public class ProvisioningTester {
return new ProvisioningTester(
Optional.ofNullable(curator).orElseGet(MockCurator::new),
- new ConfigNodeFlavors(Optional.ofNullable(flavorsConfig).orElseGet(ProvisioningTester::createConfig)),
+ new NodeFlavors(Optional.ofNullable(flavorsConfig).orElseGet(ProvisioningTester::createConfig)),
Optional.ofNullable(zone).orElseGet(Zone::defaultZone),
Optional.ofNullable(nameResolver).orElseGet(() -> new MockNameResolver().mockAnyLookup()),
orchestrator,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ResourceCapacityTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ResourceCapacityTest.java
index 0355aecfe03..7883d9e58ed 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ResourceCapacityTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ResourceCapacityTest.java
@@ -2,7 +2,6 @@
package com.yahoo.vespa.hosted.provision.provisioning;
import com.yahoo.config.provision.Flavor;
-import com.yahoo.config.provision.internal.ConfigFlavor;
import com.yahoo.config.provisioning.FlavorsConfig;
import org.junit.Test;
@@ -18,24 +17,24 @@ public class ResourceCapacityTest {
@Test
public void basic_capacity_and_compare_operations() {
FlavorConfigBuilder b = new FlavorConfigBuilder();
- b.addFlavor("host-large", 6., 6., 6, Flavor.Environment.BARE_METAL);
- b.addFlavor("host-small", 3., 3., 3, Flavor.Environment.BARE_METAL);
- b.addFlavor("d-1", 1, 1., 1, Flavor.Environment.DOCKER_CONTAINER);
- b.addFlavor("d-2", 2, 2., 2, Flavor.Environment.DOCKER_CONTAINER);
- b.addFlavor("d-3", 3, 3., 3, Flavor.Environment.DOCKER_CONTAINER);
- b.addFlavor("d-3-disk", 3, 3., 5, Flavor.Environment.DOCKER_CONTAINER);
- b.addFlavor("d-3-mem", 3, 5., 3, Flavor.Environment.DOCKER_CONTAINER);
- b.addFlavor("d-3-cpu", 5, 3., 3, Flavor.Environment.DOCKER_CONTAINER);
+ b.addFlavor("host-large", 6., 6., 6, Flavor.Type.BARE_METAL);
+ b.addFlavor("host-small", 3., 3., 3, Flavor.Type.BARE_METAL);
+ b.addFlavor("d-1", 1, 1., 1, Flavor.Type.DOCKER_CONTAINER);
+ b.addFlavor("d-2", 2, 2., 2, Flavor.Type.DOCKER_CONTAINER);
+ b.addFlavor("d-3", 3, 3., 3, Flavor.Type.DOCKER_CONTAINER);
+ b.addFlavor("d-3-disk", 3, 3., 5, Flavor.Type.DOCKER_CONTAINER);
+ b.addFlavor("d-3-mem", 3, 5., 3, Flavor.Type.DOCKER_CONTAINER);
+ b.addFlavor("d-3-cpu", 5, 3., 3, Flavor.Type.DOCKER_CONTAINER);
FlavorsConfig flavors = b.build();
- Flavor hostLargeFlavor = new ConfigFlavor(flavors.flavor(0));
- Flavor hostSmallFlavor = new ConfigFlavor(flavors.flavor(1));
- Flavor d1Flavor = new ConfigFlavor(flavors.flavor(2));
- Flavor d2Flavor = new ConfigFlavor(flavors.flavor(3));
- Flavor d3Flavor = new ConfigFlavor(flavors.flavor(4));
- Flavor d3DiskFlavor = new ConfigFlavor(flavors.flavor(5));
- Flavor d3MemFlavor = new ConfigFlavor(flavors.flavor(6));
- Flavor d3CPUFlavor = new ConfigFlavor(flavors.flavor(7));
+ Flavor hostLargeFlavor = new Flavor(flavors.flavor(0));
+ Flavor hostSmallFlavor = new Flavor(flavors.flavor(1));
+ Flavor d1Flavor = new Flavor(flavors.flavor(2));
+ Flavor d2Flavor = new Flavor(flavors.flavor(3));
+ Flavor d3Flavor = new Flavor(flavors.flavor(4));
+ Flavor d3DiskFlavor = new Flavor(flavors.flavor(5));
+ Flavor d3MemFlavor = new Flavor(flavors.flavor(6));
+ Flavor d3CPUFlavor = new Flavor(flavors.flavor(7));
ResourceCapacity capacityOfHostSmall = ResourceCapacity.of(hostSmallFlavor);
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/filter/NodeIdentifierTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/filter/NodeIdentifierTest.java
index e5d64d54d1e..cc23be4ddb4 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/filter/NodeIdentifierTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/filter/NodeIdentifierTest.java
@@ -11,7 +11,6 @@ import com.yahoo.config.provision.NodeType;
import com.yahoo.config.provision.RegionName;
import com.yahoo.config.provision.SystemName;
import com.yahoo.config.provision.Zone;
-import com.yahoo.config.provision.internal.ConfigFlavor;
import com.yahoo.config.provisioning.FlavorsConfig;
import com.yahoo.security.KeyUtils;
import com.yahoo.security.Pkcs10Csr;
@@ -235,7 +234,7 @@ public class NodeIdentifierTest {
emptySet(),
HOSTNAME,
Optional.of("parenthost"),
- new ConfigFlavor(createFlavourConfig().flavor(0)),
+ new Flavor(createFlavourConfig().flavor(0)),
NodeType.tenant)
.with(
new Allocation(
@@ -265,7 +264,7 @@ public class NodeIdentifierTest {
private static FlavorsConfig createFlavourConfig() {
FlavorConfigBuilder b = new FlavorConfigBuilder();
- b.addFlavor("docker", 1., 2., 50, Flavor.Environment.DOCKER_CONTAINER).cost(1);
+ b.addFlavor("docker", 1., 2., 50, Flavor.Type.DOCKER_CONTAINER).cost(1);
return b.build();
}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/cfg1.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/cfg1.json
index 8e15913ac0d..f57f40ea171 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/cfg1.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/cfg1.json
@@ -9,6 +9,7 @@
"canonicalFlavor": "default",
"minDiskAvailableGb": 400.0,
"minMainMemoryAvailableGb": 16.0,
+ "description": "Flavor-name-is-default",
"minCpuCores": 2.0,
"fastDisk": true,
"bandwidth":0.0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/cfg2.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/cfg2.json
index bb4f11b7153..54cf3269b09 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/cfg2.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/cfg2.json
@@ -9,6 +9,7 @@
"canonicalFlavor": "default",
"minDiskAvailableGb": 400.0,
"minMainMemoryAvailableGb": 16.0,
+ "description": "Flavor-name-is-default",
"minCpuCores": 2.0,
"fastDisk": true,
"bandwidth":0.0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/controller1.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/controller1.json
index bfa34bc0517..a5d2a7a37dd 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/controller1.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/controller1.json
@@ -9,6 +9,7 @@
"canonicalFlavor": "default",
"minDiskAvailableGb": 400.0,
"minMainMemoryAvailableGb": 16.0,
+ "description": "Flavor-name-is-default",
"minCpuCores": 2.0,
"fastDisk": true,
"bandwidth":0.0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-container1.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-container1.json
index b4944cd5591..c98fbb46ff8 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-container1.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-container1.json
@@ -10,6 +10,7 @@
"canonicalFlavor": "docker",
"minDiskAvailableGb": 100.0,
"minMainMemoryAvailableGb": 0.5,
+ "description": "Flavor-name-is-docker",
"minCpuCores": 0.2,
"fastDisk": true,
"bandwidth":0.0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node1-os-upgrade-complete.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node1-os-upgrade-complete.json
index da5cf6613da..e01264a0c9d 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node1-os-upgrade-complete.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node1-os-upgrade-complete.json
@@ -9,6 +9,7 @@
"canonicalFlavor": "large",
"minDiskAvailableGb": 1600.0,
"minMainMemoryAvailableGb": 32.0,
+ "description": "Flavor-name-is-large",
"minCpuCores": 4.0,
"fastDisk": true,
"bandwidth":0.0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node1-os-upgrade.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node1-os-upgrade.json
index 639fa954817..5eebea57890 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node1-os-upgrade.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node1-os-upgrade.json
@@ -9,6 +9,7 @@
"canonicalFlavor": "large",
"minDiskAvailableGb": 1600.0,
"minMainMemoryAvailableGb": 32.0,
+ "description": "Flavor-name-is-large",
"minCpuCores": 4.0,
"fastDisk": true,
"bandwidth":0.0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node1.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node1.json
index 76cfb64940e..213ebc5440f 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node1.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node1.json
@@ -9,6 +9,7 @@
"canonicalFlavor": "large",
"minDiskAvailableGb": 1600.0,
"minMainMemoryAvailableGb": 32.0,
+ "description": "Flavor-name-is-large",
"minCpuCores": 4.0,
"fastDisk": true,
"bandwidth":0.0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node2.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node2.json
index 84cd2e3e749..eb0dc65e61b 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node2.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node2.json
@@ -9,6 +9,7 @@
"canonicalFlavor": "large",
"minDiskAvailableGb": 1600.0,
"minMainMemoryAvailableGb": 32.0,
+ "description": "Flavor-name-is-large",
"minCpuCores": 4.0,
"fastDisk": true,
"bandwidth":0.0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node3.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node3.json
index 786666835aa..326476f783a 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node3.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node3.json
@@ -9,6 +9,7 @@
"canonicalFlavor": "large",
"minDiskAvailableGb": 1600.0,
"minMainMemoryAvailableGb": 32.0,
+ "description": "Flavor-name-is-large",
"minCpuCores": 4.0,
"fastDisk": true,
"bandwidth":0.0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node4.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node4.json
index 4188d42a8f4..c202376af9b 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node4.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node4.json
@@ -9,6 +9,7 @@
"canonicalFlavor": "large",
"minDiskAvailableGb": 1600.0,
"minMainMemoryAvailableGb": 32.0,
+ "description": "Flavor-name-is-large",
"minCpuCores": 4.0,
"fastDisk": true,
"bandwidth":0.0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node5.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node5.json
index b9340df35da..3149a39ef32 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node5.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/docker-node5.json
@@ -9,6 +9,7 @@
"canonicalFlavor": "large",
"minDiskAvailableGb": 1600.0,
"minMainMemoryAvailableGb": 32.0,
+ "description": "Flavor-name-is-large",
"minCpuCores": 4.0,
"fastDisk": true,
"bandwidth":0.0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/dockerhost1-with-firmware-data.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/dockerhost1-with-firmware-data.json
index 175ee0b1a48..7d3e0b43b53 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/dockerhost1-with-firmware-data.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/dockerhost1-with-firmware-data.json
@@ -9,6 +9,7 @@
"canonicalFlavor": "large",
"minDiskAvailableGb": 1600.0,
"minMainMemoryAvailableGb": 32.0,
+ "description": "Flavor-name-is-large",
"minCpuCores": 4.0,
"fastDisk": true,
"bandwidth": 0.0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node1.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node1.json
index c7b71c7372c..7d979676173 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node1.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node1.json
@@ -9,6 +9,7 @@
"canonicalFlavor": "default",
"minDiskAvailableGb": 400.0,
"minMainMemoryAvailableGb": 16.0,
+ "description": "Flavor-name-is-default",
"minCpuCores": 2.0,
"fastDisk": true,
"bandwidth":0.0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node10.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node10.json
index 7b029ec266c..847fbd47bb7 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node10.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node10.json
@@ -10,6 +10,7 @@
"canonicalFlavor": "default",
"minDiskAvailableGb": 400.0,
"minMainMemoryAvailableGb": 16.0,
+ "description": "Flavor-name-is-default",
"minCpuCores": 2.0,
"fastDisk": true,
"bandwidth":0.0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node11.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node11.json
index 3fd2e60ec9b..b1329eebb2d 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node11.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node11.json
@@ -10,6 +10,7 @@
"canonicalFlavor": "docker",
"minDiskAvailableGb": 100.0,
"minMainMemoryAvailableGb": 0.5,
+ "description": "Flavor-name-is-docker",
"minCpuCores": 0.2,
"fastDisk": true,
"bandwidth":0.0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node2.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node2.json
index bea421e14da..64b64888bcd 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node2.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node2.json
@@ -9,6 +9,7 @@
"canonicalFlavor": "default",
"minDiskAvailableGb": 400.0,
"minMainMemoryAvailableGb": 16.0,
+ "description": "Flavor-name-is-default",
"minCpuCores": 2.0,
"fastDisk": true,
"bandwidth":0.0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node3.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node3.json
index b911318563e..66fa0179c35 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node3.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node3.json
@@ -9,6 +9,7 @@
"canonicalFlavor": "default",
"minDiskAvailableGb": 500.0,
"minMainMemoryAvailableGb": 12.0,
+ "description": "Flavor-name-is-expensive",
"minCpuCores": 6.0,
"cost": 200,
"fastDisk": true,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4-after-changes.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4-after-changes.json
index fd81049f5ed..14c1201f1de 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4-after-changes.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4-after-changes.json
@@ -10,6 +10,7 @@
"canonicalFlavor": "medium-disk",
"minDiskAvailableGb": 56.0,
"minMainMemoryAvailableGb": 12.0,
+ "description": "Flavor-name-is-medium-disk",
"minCpuCores": 6.0,
"fastDisk": true,
"bandwidth":0.0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4.json
index 55e3280e831..a02035efd88 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4.json
@@ -10,6 +10,7 @@
"canonicalFlavor": "docker",
"minDiskAvailableGb": 100.0,
"minMainMemoryAvailableGb": 0.5,
+ "description": "Flavor-name-is-docker",
"minCpuCores": 0.2,
"fastDisk": true,
"bandwidth":0.0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5-after-changes.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5-after-changes.json
index a7313204d36..8eb3a74ce2a 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5-after-changes.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5-after-changes.json
@@ -10,6 +10,7 @@
"canonicalFlavor": "docker",
"minDiskAvailableGb": 100.0,
"minMainMemoryAvailableGb": 0.5,
+ "description": "Flavor-name-is-docker",
"minCpuCores": 0.2,
"fastDisk": true,
"bandwidth":0.0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5.json
index 9c1ae62be2e..a14443e096d 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5.json
@@ -10,6 +10,7 @@
"canonicalFlavor": "docker",
"minDiskAvailableGb": 100.0,
"minMainMemoryAvailableGb": 0.5,
+ "description": "Flavor-name-is-docker",
"minCpuCores": 0.2,
"fastDisk": true,
"bandwidth":0.0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55-after-changes.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55-after-changes.json
index 0b9c687a203..16ec6fe4a99 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55-after-changes.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55-after-changes.json
@@ -9,6 +9,7 @@
"canonicalFlavor": "default",
"minDiskAvailableGb": 400.0,
"minMainMemoryAvailableGb": 16.0,
+ "description": "Flavor-name-is-default",
"minCpuCores": 2.0,
"fastDisk": true,
"bandwidth":0.0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55.json
index f0ff68d784d..aca7875db31 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55.json
@@ -9,6 +9,7 @@
"canonicalFlavor": "default",
"minDiskAvailableGb": 400.0,
"minMainMemoryAvailableGb": 16.0,
+ "description": "Flavor-name-is-default",
"minCpuCores": 2.0,
"fastDisk": true,
"bandwidth":0.0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6-after-changes.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6-after-changes.json
index 800a686c4e1..a15b62a6dd4 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6-after-changes.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6-after-changes.json
@@ -9,6 +9,7 @@
"canonicalFlavor": "default",
"minDiskAvailableGb":400.0,
"minMainMemoryAvailableGb":16.0,
+ "description":"Flavor-name-is-default",
"minCpuCores":2.0,
"fastDisk":true,
"bandwidth":0.0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6-reports-2.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6-reports-2.json
index 2722b348a03..c1b05045ff1 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6-reports-2.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6-reports-2.json
@@ -9,6 +9,7 @@
"canonicalFlavor": "default",
"minDiskAvailableGb": 400.0,
"minMainMemoryAvailableGb": 16.0,
+ "description": "Flavor-name-is-default",
"minCpuCores": 2.0,
"fastDisk": true,
"bandwidth":0.0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6-reports-3.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6-reports-3.json
index d6452720168..ac34074c4fd 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6-reports-3.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6-reports-3.json
@@ -9,6 +9,7 @@
"canonicalFlavor": "default",
"minDiskAvailableGb": 400.0,
"minMainMemoryAvailableGb": 16.0,
+ "description": "Flavor-name-is-default",
"minCpuCores": 2.0,
"fastDisk": true,
"bandwidth":0.0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6-reports.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6-reports.json
index e5385790d44..cfe361549c7 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6-reports.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6-reports.json
@@ -9,6 +9,7 @@
"canonicalFlavor": "default",
"minDiskAvailableGb": 400.0,
"minMainMemoryAvailableGb": 16.0,
+ "description": "Flavor-name-is-default",
"minCpuCores": 2.0,
"fastDisk": true,
"bandwidth":0.0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6.json
index 3d3f6c60ba4..c1321aa113a 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6.json
@@ -9,6 +9,7 @@
"canonicalFlavor": "default",
"minDiskAvailableGb": 400.0,
"minMainMemoryAvailableGb": 16.0,
+ "description": "Flavor-name-is-default",
"minCpuCores": 2.0,
"fastDisk": true,
"bandwidth":0.0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node7.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node7.json
index d5496828767..e6e06c74cdc 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node7.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node7.json
@@ -9,6 +9,7 @@
"canonicalFlavor": "default",
"minDiskAvailableGb": 400.0,
"minMainMemoryAvailableGb": 16.0,
+ "description": "Flavor-name-is-default",
"minCpuCores": 2.0,
"fastDisk": true,
"bandwidth":0.0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node8.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node8.json
index 62386e05980..a768cf73dda 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node8.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node8.json
@@ -9,6 +9,7 @@
"canonicalFlavor": "default",
"minDiskAvailableGb": 400.0,
"minMainMemoryAvailableGb": 16.0,
+ "description": "Flavor-name-is-default",
"minCpuCores": 2.0,
"fastDisk": true,
"bandwidth":0.0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node9.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node9.json
index 9818e97b80d..019eef8c1f2 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node9.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node9.json
@@ -9,6 +9,7 @@
"canonicalFlavor": "large",
"minDiskAvailableGb": 2000.0,
"minMainMemoryAvailableGb": 128.0,
+ "description": "Flavor-name-is-large-variant",
"minCpuCores": 64.0,
"fastDisk": true,
"bandwidth":0.0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/parent1.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/parent1.json
index 3477d71c735..afe0fc5f2e1 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/parent1.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/parent1.json
@@ -9,6 +9,7 @@
"canonicalFlavor": "default",
"minDiskAvailableGb": 400.0,
"minMainMemoryAvailableGb": 16.0,
+ "description": "Flavor-name-is-default",
"minCpuCores": 2.0,
"fastDisk":true,
"bandwidth":0.0,
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/parent2.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/parent2.json
index 18f1a31be69..45668ca341d 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/parent2.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/parent2.json
@@ -9,6 +9,7 @@
"canonicalFlavor": "large",
"minDiskAvailableGb": 2000.0,
"minMainMemoryAvailableGb": 128.0,
+ "description": "Flavor-name-is-large-variant",
"minCpuCores": 64.0,
"fastDisk":true,
"bandwidth":0.0,