summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2021-03-03 19:31:32 +0100
committerGitHub <noreply@github.com>2021-03-03 19:31:32 +0100
commit0da803e5f75665ac6b283c7218569cf989e78b7c (patch)
treeb443062fa8b57b55037d8d2aa0fae6e79a750a3e
parent1e02dac914fe8acc5b80196616298d353f0535dd (diff)
Revert "Respect exclusive request when allocating by type"
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeAllocation.java4
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java3
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeSpec.java10
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockHostProvisioner.java6
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java11
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java1
6 files changed, 10 insertions, 25 deletions
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 b5943cedb9c..f6e0ede4e7d 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
@@ -436,9 +436,9 @@ class NodeAllocation {
}
private static Integer parseIndex(String hostname) {
- // Node index is the first number appearing in the hostname
+ // Node index is the first number appearing in the hostname, before the first dot
try {
- return Integer.parseInt(hostname.replaceFirst("^\\D+(\\d+).*", "$1"));
+ return Integer.parseInt(hostname.replaceFirst("^\\D+(\\d+)\\..*", "$1"));
} catch (NumberFormatException e) {
throw new IllegalArgumentException("Could not parse index from hostname '" + hostname + "'", e);
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java
index ec5444bfc98..22242e526f9 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/NodeRepositoryProvisioner.java
@@ -19,6 +19,7 @@ import com.yahoo.config.provision.Zone;
import com.yahoo.transaction.Mutex;
import com.yahoo.vespa.flags.FlagSource;
import com.yahoo.vespa.hosted.provision.Node;
+import com.yahoo.vespa.hosted.provision.NodeList;
import com.yahoo.vespa.hosted.provision.NodeRepository;
import com.yahoo.vespa.hosted.provision.applications.Application;
import com.yahoo.vespa.hosted.provision.autoscale.AllocatableClusterResources;
@@ -104,7 +105,7 @@ public class NodeRepositoryProvisioner implements Provisioner {
else {
groups = 1; // type request with multiple groups is not supported
resources = requested.minResources().nodeResources();
- nodeSpec = NodeSpec.from(requested.type(), cluster.isExclusive());
+ nodeSpec = NodeSpec.from(requested.type());
}
return asSortedHosts(preparer.prepare(application, cluster, nodeSpec, groups), resources);
}
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 9a111deeac3..c3cb805499c 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
@@ -77,8 +77,8 @@ public interface NodeSpec {
return new CountNodeSpec(nodeCount, resources, exclusive, canFail);
}
- static NodeSpec from(NodeType type, boolean exclusive) {
- return new TypeNodeSpec(type, exclusive);
+ static NodeSpec from(NodeType type) {
+ return new TypeNodeSpec(type);
}
/** A node spec specifying a node count and a flavor */
@@ -174,18 +174,16 @@ public interface NodeSpec {
private static final Map<NodeType, Integer> WANTED_NODE_COUNT = Map.of(NodeType.config, 3);
private final NodeType type;
- private final boolean exclusive;
- public TypeNodeSpec(NodeType type, boolean exclusive) {
+ public TypeNodeSpec(NodeType type) {
this.type = type;
- this.exclusive = exclusive;
}
@Override
public NodeType type() { return type; }
@Override
- public boolean isExclusive() { return exclusive; }
+ public boolean isExclusive() { return false; }
@Override
public boolean isCompatible(Flavor flavor, NodeFlavors flavors) { return true; }
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockHostProvisioner.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockHostProvisioner.java
index a7a0848e1c1..25e74df677b 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockHostProvisioner.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockHostProvisioner.java
@@ -58,10 +58,6 @@ public class MockHostProvisioner implements HostProvisioner {
Flavor hostFlavor = this.hostFlavor.orElseGet(() -> flavors.stream().filter(f -> compatible(f, resources))
.findFirst()
.orElseThrow(() -> new OutOfCapacityException("No host flavor matches " + resources)));
- Optional<ApplicationId> exclusiveTo = Optional.empty();
- if (sharing == HostSharing.exclusive) {
- exclusiveTo = Optional.of(applicationId);
- }
List<ProvisionedHost> hosts = new ArrayList<>();
for (int index : provisionIndices) {
String hostHostname = hostType == NodeType.host ? "hostname" + index : hostType.name() + index;
@@ -69,7 +65,7 @@ public class MockHostProvisioner implements HostProvisioner {
hostHostname,
hostFlavor,
hostType,
- exclusiveTo,
+ Optional.empty(),
createAddressesForHost(hostType, hostFlavor, index),
resources,
osVersion));
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java
index 6e979de2879..f47bcd0d550 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java
@@ -430,18 +430,13 @@ public class DynamicProvisioningMaintainerTest {
// Initial config server hosts are provisioned manually
ApplicationId hostApp = ApplicationId.from("hosted-vespa", "configserver-host", "default");
- ApplicationId configSrvApp = ApplicationId.from("hosted-vespa", "zone-config-servers", "default");
List<Node> provisionedHosts = tester.makeReadyNodes(3, "default", NodeType.confighost).stream()
.sorted(Comparator.comparing(Node::hostname))
.collect(Collectors.toList());
tester.prepareAndActivateInfraApplication(hostApp, NodeType.confighost);
- tester.patchNodes(provisionedHosts, (node) -> node.withExclusiveTo(configSrvApp));
- assertTrue("All hosts are exclusive", tester.nodeRepository().nodes().list()
- .nodeType(NodeType.confighost)
- .stream()
- .allMatch(node -> node.allocation().get().membership().cluster().isExclusive()));
// Provision config servers
+ ApplicationId configSrvApp = ApplicationId.from("hosted-vespa", "zone-config-servers", "default");
for (int i = 0; i < provisionedHosts.size(); i++) {
tester.makeReadyChildren(1, i + 1, NodeResources.unspecified(), NodeType.config,
provisionedHosts.get(i).hostname(), (nodeIndex) -> "cfg" + nodeIndex);
@@ -505,10 +500,6 @@ public class DynamicProvisioningMaintainerTest {
newNode = tester.nodeRepository().nodes().node(newNode.hostname()).get();
assertSame(Node.State.active, newNode.state());
assertEquals("Removed index is reused", removedIndex, newNode.allocation().get().membership().index());
- assertTrue("All nodes are exclusive", tester.nodeRepository().nodes().list()
- .nodeType(NodeType.config)
- .stream()
- .allMatch(node -> node.allocation().get().membership().cluster().isExclusive()));
// Next redeployment does nothing
NodeList nodesBefore = tester.nodeRepository().nodes().list().nodeType(NodeType.config);
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 df348fc1c48..eefbd03ce4e 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
@@ -230,7 +230,6 @@ public class ProvisioningTester {
ClusterSpec cluster = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from(nodeType.toString()))
.vespaVersion(version)
.stateful(nodeType == NodeType.config || nodeType == NodeType.controller)
- .exclusive(nodeType != NodeType.tenant)
.build();
Capacity capacity = Capacity.fromRequiredNodeType(nodeType);
List<HostSpec> hostSpecs = prepare(application, cluster, capacity);