summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationId.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesApiHandler.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java22
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/README.md2
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java5
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/application1.json56
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/application2.json32
7 files changed, 114 insertions, 7 deletions
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationId.java b/config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationId.java
index ef89c1d7525..692c941877b 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationId.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/ApplicationId.java
@@ -48,7 +48,7 @@ public final class ApplicationId implements Comparable<ApplicationId> {
}
public static ApplicationId fromFullString(String idString) {
- String[] parts = idString.split(".");
+ String[] parts = idString.split("\\.");
if (parts.length < 3)
throw new IllegalArgumentException("Application ids must be on the form tenant.application.instance, but was " + idString);
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesApiHandler.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesApiHandler.java
index 1a73d1b77e7..6799b68daae 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesApiHandler.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesApiHandler.java
@@ -119,7 +119,7 @@ public class NodesApiHandler extends LoggingRequestHandler {
if (pathS.startsWith("/nodes/v2/capacity")) return new HostCapacityResponse(nodeRepository, request);
if (path.matches("/nodes/v2/application")) return applicationList(request.getUri());
if (path.matches("/nodes/v2/application/{applicationId}")) return application(path.get("applicationId"), request.getUri());
- throw new NotFoundException("Nothing at path '" + path + "'");
+ throw new NotFoundException("Nothing at " + path);
}
private HttpResponse handlePUT(HttpRequest request) {
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java
index 8ff17a8e5a3..0cafe35ee52 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java
@@ -16,11 +16,14 @@ import com.yahoo.config.provision.NodeResources;
import com.yahoo.config.provision.NodeType;
import com.yahoo.config.provision.TenantName;
import com.yahoo.config.provision.Zone;
+import com.yahoo.transaction.Mutex;
import com.yahoo.transaction.NestedTransaction;
import com.yahoo.vespa.curator.mock.MockCurator;
import com.yahoo.vespa.flags.InMemoryFlagSource;
import com.yahoo.vespa.hosted.provision.Node;
import com.yahoo.vespa.hosted.provision.NodeRepository;
+import com.yahoo.vespa.hosted.provision.applications.Application;
+import com.yahoo.vespa.hosted.provision.applications.Cluster;
import com.yahoo.vespa.hosted.provision.node.Agent;
import com.yahoo.vespa.hosted.provision.node.IP;
import com.yahoo.vespa.hosted.provision.node.Status;
@@ -142,9 +145,22 @@ public class MockNodeRepository extends NodeRepository {
ClusterSpec zoneCluster = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("node-admin")).vespaVersion("6.42").build();
activate(provisioner.prepare(zoneApp, zoneCluster, Capacity.fromRequiredNodeType(NodeType.host), null), zoneApp, provisioner);
- ApplicationId app1 = ApplicationId.from(TenantName.from("tenant1"), ApplicationName.from("application1"), InstanceName.from("instance1"));
- ClusterSpec cluster1 = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("id1")).vespaVersion("6.42").build();
- provisioner.prepare(app1, cluster1, Capacity.from(new ClusterResources(2, 1, new NodeResources(2, 8, 50, 1))), null);
+ ApplicationId app1Id = ApplicationId.from(TenantName.from("tenant1"), ApplicationName.from("application1"), InstanceName.from("instance1"));
+ ClusterSpec cluster1Id = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("id1")).vespaVersion("6.42").build();
+ provisioner.prepare(app1Id,
+ cluster1Id,
+ Capacity.from(new ClusterResources(2, 1, new NodeResources(2, 8, 50, 1)),
+ new ClusterResources(8, 2, new NodeResources(4, 16, 1000, 1)), false, true),
+ null);
+ Application app1 = applications().get(app1Id).get();
+ Cluster cluster1 = app1.cluster(cluster1Id.id()).get();
+ cluster1 = cluster1.withSuggested(new ClusterResources(6, 2,
+ new NodeResources(3, 20, 100, 1)));
+ cluster1 = cluster1.withTarget(new ClusterResources(4, 1,
+ new NodeResources(3, 16, 100, 1)));
+ try (Mutex lock = lock(app1Id)) {
+ applications().put(app1.with(cluster1), lock);
+ }
ApplicationId app2 = ApplicationId.from(TenantName.from("tenant2"), ApplicationName.from("application2"), InstanceName.from("instance2"));
ClusterSpec cluster2 = ClusterSpec.request(ClusterSpec.Type.content, ClusterSpec.Id.from("id2")).vespaVersion("6.42").build();
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/README.md b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/README.md
index bbb2ec7080b..f7421bf07c9 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/README.md
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/README.md
@@ -1,5 +1,5 @@
<!-- Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -->
-The test resources are used by both NoadAdmin and NodeRepository
+The test resources are used by both NodeAdmin and NodeRepository
tests to verify APIs. So when modifying this test data
remember to check tests for both NodeAdmin and NodeRepository.
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java
index 01719450e2b..838a39ba01e 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java
@@ -233,8 +233,11 @@ public class RestApiTest {
@Test
public void test_application_requests() throws Exception {
-
assertFile(new Request("http://localhost:8080/nodes/v2/application/"), "applications.json");
+ assertFile(new Request("http://localhost:8080/nodes/v2/application/tenant1.application1.instance1"),
+ "application1.json");
+ assertFile(new Request("http://localhost:8080/nodes/v2/application/tenant2.application2.instance2"),
+ "application2.json");
}
@Test
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/application1.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/application1.json
new file mode 100644
index 00000000000..ce2309e4d6c
--- /dev/null
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/application1.json
@@ -0,0 +1,56 @@
+{
+ "url" : "http://localhost:8080/nodes/v2/applications/tenant1.application1.instance1",
+ "id" : "tenant1.application1.instance1",
+ "clusters" : {
+ "id1" : {
+ "min" : {
+ "nodes" : 2,
+ "groups" : 1,
+ "resources" : {
+ "vcpu" : 2.0,
+ "memoryGb" : 8.0,
+ "diskGb" : 50.0,
+ "bandwidthGbps" : 1.0,
+ "diskSpeed" : "fast",
+ "storageType" : "any"
+ }
+ },
+ "max" : {
+ "nodes" : 8,
+ "groups" : 2,
+ "resources" : {
+ "vcpu" : 4.0,
+ "memoryGb" : 16.0,
+ "diskGb" : 1000.0,
+ "bandwidthGbps" : 1.0,
+ "diskSpeed" : "fast",
+ "storageType" : "any"
+ }
+ },
+ "suggested" : {
+ "nodes" : 6,
+ "groups" : 2,
+ "resources" : {
+ "vcpu" : 3.0,
+ "memoryGb" : 20.0,
+ "diskGb" : 100.0,
+ "bandwidthGbps" : 1.0,
+ "diskSpeed" : "fast",
+ "storageType" : "any"
+ }
+ },
+ "target" : {
+ "nodes" : 4,
+ "groups" : 1,
+ "resources" : {
+ "vcpu" : 3.0,
+ "memoryGb" : 16.0,
+ "diskGb" : 100.0,
+ "bandwidthGbps" : 1.0,
+ "diskSpeed" : "fast",
+ "storageType" : "any"
+ }
+ }
+ }
+ }
+}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/application2.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/application2.json
new file mode 100644
index 00000000000..75af5d4a328
--- /dev/null
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/application2.json
@@ -0,0 +1,32 @@
+{
+ "url": "http://localhost:8080/nodes/v2/applications/tenant2.application2.instance2",
+ "id": "tenant2.application2.instance2",
+ "clusters": {
+ "id2": {
+ "min": {
+ "nodes": 2,
+ "groups": 1,
+ "resources": {
+ "vcpu": 2.0,
+ "memoryGb": 8.0,
+ "diskGb": 50.0,
+ "bandwidthGbps": 1.0,
+ "diskSpeed": "fast",
+ "storageType": "any"
+ }
+ },
+ "max": {
+ "nodes": 2,
+ "groups": 1,
+ "resources": {
+ "vcpu": 2.0,
+ "memoryGb": 8.0,
+ "diskGb": 50.0,
+ "bandwidthGbps": 1.0,
+ "diskSpeed": "fast",
+ "storageType": "any"
+ }
+ }
+ }
+ }
+}