diff options
author | Harald Musum <musum@yahooinc.com> | 2022-03-02 11:44:17 +0100 |
---|---|---|
committer | Harald Musum <musum@yahooinc.com> | 2022-03-02 11:44:17 +0100 |
commit | eff5d9e71d62f9762cc254b01711999747298ade (patch) | |
tree | bf9c3e5c2dbd7d8ad12769a93773d978f46c7d66 | |
parent | 6dd5ec32de99b3ad560d9314db509f6dbe1929cd (diff) |
Ignore architecture when adding or subtracting NodeResources
Need to solve this long-term, but ignore for now as provisoning will
not work as this is now.
5 files changed, 20 insertions, 18 deletions
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/NodeResources.java b/config-provisioning/src/main/java/com/yahoo/config/provision/NodeResources.java index 7be4f7809d5..113b32fc571 100644 --- a/config-provisioning/src/main/java/com/yahoo/config/provision/NodeResources.java +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/NodeResources.java @@ -221,8 +221,7 @@ public class NodeResources { diskGb - other.diskGb, bandwidthGbps - other.bandwidthGbps, this.diskSpeed.combineWith(other.diskSpeed), - this.storageType.combineWith(other.storageType), - this.architecture.combineWith(other.architecture)); + this.storageType.combineWith(other.storageType)); } public NodeResources add(NodeResources other) { @@ -234,8 +233,7 @@ public class NodeResources { diskGb + other.diskGb, bandwidthGbps + other.bandwidthGbps, this.diskSpeed.combineWith(other.diskSpeed), - this.storageType.combineWith(other.storageType), - this.architecture.combineWith(other.architecture)); + this.storageType.combineWith(other.storageType)); } private boolean isInterchangeableWith(NodeResources other) { @@ -245,8 +243,6 @@ public class NodeResources { return false; if (this.storageType != StorageType.any && other.storageType != StorageType.any && this.storageType != other.storageType) return false; - if (this.architecture != other.architecture) - return false; return true; } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepoStats.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepoStats.java index 1d5c9f7a17d..ba8aa49d87c 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepoStats.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepoStats.java @@ -68,9 +68,6 @@ public class NodeRepoStats { NodeResources resources = node.get().resources(); - // TODO: Skip arm64 for now, add() does not work with mix of x86_64 and arm64 nodes - if (resources.architecture() == NodeResources.Architecture.arm64) continue; - load = load.add(snapshot.get().load().multiply(resources)); totalActiveResources = totalActiveResources.add(resources.justNumbers()); } @@ -78,9 +75,6 @@ public class NodeRepoStats { NodeResources totalHostResources = NodeResources.zero(); for (var host : allNodes.hosts()) { - // TODO: Skip arm64 for now, add() does not work with mix of x86_64 and arm64 nodes - if (host.resources().architecture() == NodeResources.Architecture.arm64) continue; - totalHostResources = totalHostResources.add(host.resources().justNumbers()); } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/GroupPreparer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/GroupPreparer.java index 9148a2165a5..763fe1cab6f 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/GroupPreparer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/GroupPreparer.java @@ -104,7 +104,8 @@ public class GroupPreparer { .map(deficit -> hostProvisioner.get().provisionHosts(allocation.provisionIndices(deficit.count()), hostType, deficit.resources(), - application, osVersion, + application, + osVersion, sharing, Optional.of(cluster.type()))) .orElseGet(List::of); 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 ba9da20b615..94822c85a03 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 @@ -3,7 +3,6 @@ package com.yahoo.vespa.hosted.provision.provisioning; import com.yahoo.component.Version; import com.yahoo.config.provision.ApplicationId; -import com.yahoo.config.provision.ApplicationTransaction; import com.yahoo.config.provision.Capacity; import com.yahoo.config.provision.ClusterMembership; import com.yahoo.config.provision.ClusterResources; @@ -13,15 +12,13 @@ import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.Flavor; import com.yahoo.config.provision.HostFilter; import com.yahoo.config.provision.HostSpec; +import com.yahoo.config.provision.NodeAllocationException; import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.NodeType; -import com.yahoo.config.provision.NodeAllocationException; import com.yahoo.config.provision.ParentHostUnavailableException; -import com.yahoo.config.provision.ProvisionLock; import com.yahoo.config.provision.RegionName; import com.yahoo.config.provision.SystemName; import com.yahoo.config.provision.Zone; -import com.yahoo.transaction.NestedTransaction; import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.NodeList; import com.yahoo.vespa.hosted.provision.NodeMutex; @@ -36,7 +33,6 @@ import com.yahoo.vespa.service.duper.InfraApplication; import org.junit.Test; import java.time.Duration; -import java.time.Instant; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; @@ -1010,6 +1006,20 @@ public class ProvisioningTest { stateAsserter.accept(new Zone(SystemName.cd, Environment.prod, RegionName.from("us-east")), Node.State.dirty); } + @Test + public void arm64_architecture() { + ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Environment.dev, RegionName.from("us-east"))).build(); + + NodeResources nodeResources = new NodeResources(1, 4, 10, 4, NodeResources.DiskSpeed.any, NodeResources.StorageType.any, NodeResources.Architecture.arm64); + tester.makeReadyHosts(4, nodeResources); + tester.prepareAndActivateInfraApplication(ProvisioningTester.applicationId(), NodeType.host); + + ApplicationId application = ProvisioningTester.applicationId(); + SystemState state = prepare(application, 1, 1, 1, 1, nodeResources, tester); + assertEquals(4, state.allHosts.size()); + tester.activate(application, state.allHosts); + } + private SystemState prepare(ApplicationId application, int container0Size, int container1Size, int content0Size, int content1Size, NodeResources flavor, ProvisioningTester tester) { return prepare(application, tester, container0Size, container1Size, content0Size, content1Size, flavor, "6.42"); 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 7b988f83c01..9f722507ba2 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 @@ -133,6 +133,7 @@ public class ProvisioningTester { b.addFlavor("dockerLarge", 2., 10., 20, 1, Flavor.Type.DOCKER_CONTAINER).cost(3); b.addFlavor("v-4-8-100", 4., 80., 100, 10, Flavor.Type.VIRTUAL_MACHINE).cost(4); b.addFlavor("large", 4., 80., 100, 10, Flavor.Type.BARE_METAL).cost(10); + b.addFlavor("arm64", 4., 80., 100, 10, Flavor.Type.BARE_METAL, NodeResources.Architecture.arm64).cost(15); return b.build(); } |