summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2018-02-20 14:59:55 +0100
committerMartin Polden <mpolden@mpolden.no>2018-03-02 09:15:42 +0100
commit5e98f0c0068ea14b1b4562e92dab08b573027a7f (patch)
tree32d701f01d6c145afa03fb9c2e0c1e0bd10ef1d1
parent49de666014dcda2581484bebb922d8ac4587f373 (diff)
Expose change blockers in application API
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java14
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerTester.java20
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java1
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application-without-change-multiple-deployments.json1
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application.json25
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application1-recursive.json25
6 files changed, 79 insertions, 7 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
index d3edd1c0ca5..368fd323fb0 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
@@ -89,6 +89,7 @@ import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.security.Principal;
+import java.time.DayOfWeek;
import java.time.Duration;
import java.util.Collections;
import java.util.List;
@@ -375,6 +376,19 @@ public class ApplicationApiHandler extends LoggingRequestHandler {
job.lastSuccess().ifPresent(jobRun -> toSlime(jobRun, jobObject.setObject("lastSuccess")));
}
+ // Change blockers
+ Cursor changeBlockers = object.setArray("changeBlockers");
+ application.deploymentSpec().changeBlocker().forEach(changeBlocker -> {
+ Cursor changeBlockerObject = changeBlockers.addObject();
+ changeBlockerObject.setBool("versions", changeBlocker.blocksVersions());
+ changeBlockerObject.setBool("revisions", changeBlocker.blocksRevisions());
+ changeBlockerObject.setString("timeZone", changeBlocker.window().zone().getId());
+ Cursor days = changeBlockerObject.setArray("days");
+ changeBlocker.window().days().stream().map(DayOfWeek::getValue).forEach(days::addLong);
+ Cursor hours = changeBlockerObject.setArray("hours");
+ changeBlocker.window().hours().forEach(hours::addLong);
+ });
+
// Compile version. The version that should be used when building an application
object.setString("compileVersion", application.oldestDeployedVersion().orElse(controller.systemVersion()).toFullString());
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerTester.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerTester.java
index be987e84cd8..c3dc80c65df 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerTester.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerTester.java
@@ -14,7 +14,6 @@ import com.yahoo.jdisc.http.filter.SecurityRequestFilterChain;
import com.yahoo.slime.ArrayTraverser;
import com.yahoo.slime.Inspector;
import com.yahoo.slime.Slime;
-import com.yahoo.slime.Type;
import com.yahoo.vespa.config.SlimeUtils;
import com.yahoo.vespa.hosted.controller.Controller;
import com.yahoo.vespa.hosted.controller.versions.VersionStatus;
@@ -152,12 +151,19 @@ public class ContainerTester {
if ( ! fieldsToCensor.contains(fieldName)) return;
String fromString;
- if ( fieldValue.type().equals(Type.STRING))
- fromString = "\"" + fieldName + "\":\"" + fieldValue.asString() + "\"";
- else if ( fieldValue.type().equals(Type.LONG))
- fromString = "\"" + fieldName + "\":" + fieldValue.asLong();
- else
- throw new IllegalArgumentException("Can only censor strings and longs");
+ switch (fieldValue.type()) {
+ case STRING:
+ fromString = "\"" + fieldName + "\":\"" + fieldValue.asString() + "\"";
+ break;
+ case LONG:
+ fromString = "\"" + fieldName + "\":" + fieldValue.asLong();
+ break;
+ case BOOL:
+ fromString = "\"" + fieldName + "\":" + fieldValue.asBool();
+ break;
+ default:
+ throw new IllegalArgumentException("Can only censor strings, longs and booleans");
+ }
String toString = "\"" + fieldName + "\":\"(ignore)\"";
replaceStrings.add(new Pair<>(fromString, toString));
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java
index 4a263bf1fbd..4b59e57fd5a 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java
@@ -87,6 +87,7 @@ public class ApplicationApiTest extends ControllerContainerTest {
.region("corp-us-east-1")
.region("us-east-3")
.region("us-west-1")
+ .blockChange(false, true, "mon-fri", "0-8", "UTC")
.build();
private static final AthenzDomain ATHENZ_TENANT_DOMAIN = new AthenzDomain("domain1");
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application-without-change-multiple-deployments.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application-without-change-multiple-deployments.json
index d3b765551f0..9cd9329e36f 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application-without-change-multiple-deployments.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application-without-change-multiple-deployments.json
@@ -219,6 +219,7 @@
}
}
],
+ "changeBlockers": [],
"compileVersion": "(ignore)",
"globalRotations": [
"http://application1.tenant1.global.vespa.yahooapis.com:4080/",
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application.json
index 155166dea4c..29d23034053 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application.json
@@ -183,6 +183,31 @@
}
}
],
+ "changeBlockers": [
+ {
+ "versions": true,
+ "revisions": false,
+ "timeZone": "UTC",
+ "days": [
+ 1,
+ 2,
+ 3,
+ 4,
+ 5
+ ],
+ "hours": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8
+ ]
+ }
+ ],
"compileVersion": "(ignore)",
"globalRotations": [
"http://application1.tenant1.global.vespa.yahooapis.com:4080/",
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application1-recursive.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application1-recursive.json
index 35124adbf68..a1414fa3511 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application1-recursive.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application1-recursive.json
@@ -183,6 +183,31 @@
}
}
],
+ "changeBlockers": [
+ {
+ "versions": true,
+ "revisions": false,
+ "timeZone": "UTC",
+ "days": [
+ 1,
+ 2,
+ 3,
+ 4,
+ 5
+ ],
+ "hours": [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8
+ ]
+ }
+ ],
"compileVersion": "(ignore)",
"globalRotations": [
"http://application1.tenant1.global.vespa.yahooapis.com:4080/",