aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Marius Venstad <jvenstad@yahoo-inc.com>2019-03-11 09:49:33 +0100
committerJon Marius Venstad <jvenstad@yahoo-inc.com>2019-03-11 09:49:33 +0100
commit4b60a0853b7840d1ed5eb14655c90c915a035fd7 (patch)
treef8518ce60a57dd3b9b8ca6ac7909feb88ecc477d
parentd3a6934b2fae1c7f04d7bd13e9c6a18b31098ede (diff)
Store pemDeployKey in Application
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Application.java12
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/LockedApplication.java82
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java8
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java4
4 files changed, 67 insertions, 39 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Application.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Application.java
index 4425eb93b52..ad30adee576 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Application.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Application.java
@@ -55,6 +55,7 @@ public class Application {
private final Optional<User> owner;
private final OptionalInt majorVersion;
private final ApplicationMetrics metrics;
+ private final Optional<String> pemDeployKey;
private final Optional<RotationId> rotation;
private final Map<HostName, RotationStatus> rotationStatus;
@@ -64,25 +65,25 @@ public class Application {
new DeploymentJobs(OptionalLong.empty(), Collections.emptyList(), Optional.empty(), false),
Change.empty(), Change.empty(), Optional.empty(), Optional.empty(), OptionalInt.empty(),
new ApplicationMetrics(0, 0),
- Optional.empty(), Collections.emptyMap());
+ Optional.empty(), Optional.empty(), Collections.emptyMap());
}
/** Used from persistence layer: Do not use */
public Application(ApplicationId id, Instant createdAt, DeploymentSpec deploymentSpec, ValidationOverrides validationOverrides,
List<Deployment> deployments, DeploymentJobs deploymentJobs, Change change,
Change outstandingChange, Optional<IssueId> ownershipIssueId, Optional<User> owner,
- OptionalInt majorVersion, ApplicationMetrics metrics,
+ OptionalInt majorVersion, ApplicationMetrics metrics, Optional<String> pemDeployKey,
Optional<RotationId> rotation, Map<HostName, RotationStatus> rotationStatus) {
this(id, createdAt, deploymentSpec, validationOverrides,
deployments.stream().collect(Collectors.toMap(Deployment::zone, Function.identity())),
deploymentJobs, change, outstandingChange, ownershipIssueId, owner, majorVersion,
- metrics, rotation, rotationStatus);
+ metrics, pemDeployKey, rotation, rotationStatus);
}
Application(ApplicationId id, Instant createdAt, DeploymentSpec deploymentSpec, ValidationOverrides validationOverrides,
Map<ZoneId, Deployment> deployments, DeploymentJobs deploymentJobs, Change change,
Change outstandingChange, Optional<IssueId> ownershipIssueId, Optional<User> owner,
- OptionalInt majorVersion, ApplicationMetrics metrics,
+ OptionalInt majorVersion, ApplicationMetrics metrics, Optional<String> pemDeployKey,
Optional<RotationId> rotation, Map<HostName, RotationStatus> rotationStatus) {
this.id = Objects.requireNonNull(id, "id cannot be null");
this.createdAt = Objects.requireNonNull(createdAt, "instant of creation cannot be null");
@@ -96,6 +97,7 @@ public class Application {
this.owner = Objects.requireNonNull(owner, "owner cannot be null");
this.majorVersion = Objects.requireNonNull(majorVersion, "majorVersion cannot be null");
this.metrics = Objects.requireNonNull(metrics, "metrics cannot be null");
+ this.pemDeployKey = pemDeployKey;
this.rotation = Objects.requireNonNull(rotation, "rotation cannot be null");
this.rotationStatus = ImmutableMap.copyOf(Objects.requireNonNull(rotationStatus, "rotationStatus cannot be null"));
}
@@ -202,6 +204,8 @@ public class Application {
return rotation.map(ignored -> new GlobalDnsName(id, system));
}
+ public Optional<String> pemDeployKey() { return pemDeployKey; }
+
/** Returns the status of the global rotation assigned to this. Wil be empty if this does not have a global rotation. */
public Map<HostName, RotationStatus> rotationStatus() {
return rotationStatus;
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/LockedApplication.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/LockedApplication.java
index e4b8a1d9e84..61c10abce14 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/LockedApplication.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/LockedApplication.java
@@ -54,6 +54,7 @@ public class LockedApplication {
private final Optional<User> owner;
private final OptionalInt majorVersion;
private final ApplicationMetrics metrics;
+ private final Optional<String> pemDeployKey;
private final Optional<RotationId> rotation;
private final Map<HostName, RotationStatus> rotationStatus;
@@ -69,14 +70,14 @@ public class LockedApplication {
application.deployments(),
application.deploymentJobs(), application.change(), application.outstandingChange(),
application.ownershipIssueId(), application.owner(), application.majorVersion(), application.metrics(),
- application.rotation(), application.rotationStatus());
+ application.pemDeployKey(), application.rotation(), application.rotationStatus());
}
private LockedApplication(Lock lock, ApplicationId id, Instant createdAt,
DeploymentSpec deploymentSpec, ValidationOverrides validationOverrides,
Map<ZoneId, Deployment> deployments, DeploymentJobs deploymentJobs, Change change,
Change outstandingChange, Optional<IssueId> ownershipIssueId, Optional<User> owner,
- OptionalInt majorVersion, ApplicationMetrics metrics,
+ OptionalInt majorVersion, ApplicationMetrics metrics, Optional<String> pemDeployKey,
Optional<RotationId> rotation, Map<HostName, RotationStatus> rotationStatus) {
this.lock = lock;
this.id = id;
@@ -91,6 +92,7 @@ public class LockedApplication {
this.owner = owner;
this.majorVersion = majorVersion;
this.metrics = metrics;
+ this.pemDeployKey = pemDeployKey;
this.rotation = rotation;
this.rotationStatus = rotationStatus;
}
@@ -98,44 +100,51 @@ public class LockedApplication {
/** Returns a read-only copy of this */
public Application get() {
return new Application(id, createdAt, deploymentSpec, validationOverrides, deployments, deploymentJobs, change,
- outstandingChange, ownershipIssueId, owner, majorVersion, metrics, rotation, rotationStatus);
+ outstandingChange, ownershipIssueId, owner, majorVersion, metrics, pemDeployKey,
+ rotation, rotationStatus);
}
public LockedApplication withBuiltInternally(boolean builtInternally) {
return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments,
deploymentJobs.withBuiltInternally(builtInternally), change, outstandingChange,
- ownershipIssueId, owner, majorVersion, metrics, rotation, rotationStatus);
+ ownershipIssueId, owner, majorVersion, metrics, pemDeployKey,
+ rotation, rotationStatus);
}
public LockedApplication withProjectId(OptionalLong projectId) {
return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments,
deploymentJobs.withProjectId(projectId), change, outstandingChange,
- ownershipIssueId, owner, majorVersion, metrics, rotation, rotationStatus);
+ ownershipIssueId, owner, majorVersion, metrics, pemDeployKey,
+ rotation, rotationStatus);
}
public LockedApplication withDeploymentIssueId(IssueId issueId) {
return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments,
deploymentJobs.with(issueId), change, outstandingChange,
- ownershipIssueId, owner, majorVersion, metrics, rotation, rotationStatus);
+ ownershipIssueId, owner, majorVersion, metrics, pemDeployKey,
+ rotation, rotationStatus);
}
public LockedApplication withJobPause(JobType jobType, OptionalLong pausedUntil) {
return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments,
deploymentJobs.withPause(jobType, pausedUntil), change, outstandingChange,
- ownershipIssueId, owner, majorVersion, metrics, rotation, rotationStatus);
+ ownershipIssueId, owner, majorVersion, metrics, pemDeployKey,
+ rotation, rotationStatus);
}
public LockedApplication withJobCompletion(long projectId, JobType jobType, JobStatus.JobRun completion,
Optional<DeploymentJobs.JobError> jobError) {
return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments,
deploymentJobs.withCompletion(projectId, jobType, completion, jobError),
- change, outstandingChange, ownershipIssueId, owner, majorVersion, metrics, rotation, rotationStatus);
+ change, outstandingChange, ownershipIssueId, owner, majorVersion, metrics,
+ pemDeployKey, rotation, rotationStatus);
}
public LockedApplication withJobTriggering(JobType jobType, JobStatus.JobRun job) {
return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments,
deploymentJobs.withTriggering(jobType, job), change, outstandingChange,
- ownershipIssueId, owner, majorVersion, metrics, rotation, rotationStatus);
+ ownershipIssueId, owner, majorVersion, metrics, pemDeployKey,
+ rotation, rotationStatus);
}
public LockedApplication withNewDeployment(ZoneId zone, ApplicationVersion applicationVersion, Version version,
@@ -185,69 +194,78 @@ public class LockedApplication {
public LockedApplication withoutDeploymentJob(JobType jobType) {
return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments,
deploymentJobs.without(jobType), change, outstandingChange,
- ownershipIssueId, owner, majorVersion, metrics, rotation, rotationStatus);
+ ownershipIssueId, owner, majorVersion, metrics, pemDeployKey,
+ rotation, rotationStatus);
}
public LockedApplication with(DeploymentSpec deploymentSpec) {
return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments,
deploymentJobs, change, outstandingChange,
- ownershipIssueId, owner, majorVersion, metrics, rotation, rotationStatus);
+ ownershipIssueId, owner, majorVersion, metrics, pemDeployKey,
+ rotation, rotationStatus);
}
public LockedApplication with(ValidationOverrides validationOverrides) {
return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments,
- deploymentJobs, change, outstandingChange,
- ownershipIssueId, owner, majorVersion, metrics, rotation, rotationStatus);
+ deploymentJobs, change, outstandingChange, ownershipIssueId, owner, majorVersion,
+ metrics, pemDeployKey, rotation, rotationStatus);
}
public LockedApplication withChange(Change change) {
return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments,
- deploymentJobs, change, outstandingChange,
- ownershipIssueId, owner, majorVersion, metrics, rotation, rotationStatus);
+ deploymentJobs, change, outstandingChange, ownershipIssueId, owner, majorVersion,
+ metrics, pemDeployKey, rotation, rotationStatus);
}
public LockedApplication withOutstandingChange(Change outstandingChange) {
return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments,
- deploymentJobs, change, outstandingChange,
- ownershipIssueId, owner, majorVersion, metrics, rotation, rotationStatus);
+ deploymentJobs, change, outstandingChange, ownershipIssueId, owner, majorVersion,
+ metrics, pemDeployKey, rotation, rotationStatus);
}
public LockedApplication withOwnershipIssueId(IssueId issueId) {
return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments,
- deploymentJobs, change, outstandingChange,
- Optional.ofNullable(issueId), owner, majorVersion, metrics, rotation, rotationStatus);
+ deploymentJobs, change, outstandingChange, Optional.ofNullable(issueId), owner,
+ majorVersion, metrics, pemDeployKey, rotation, rotationStatus);
}
public LockedApplication withOwner(User owner) {
return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments,
- deploymentJobs, change, outstandingChange,
- ownershipIssueId, Optional.ofNullable(owner), majorVersion, metrics, rotation, rotationStatus);
+ deploymentJobs, change, outstandingChange, ownershipIssueId,
+ Optional.ofNullable(owner), majorVersion, metrics, pemDeployKey,
+ rotation, rotationStatus);
}
/** Set a major version for this, or set to null to remove any major version override */
public LockedApplication withMajorVersion(Integer majorVersion) {
return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments,
- deploymentJobs, change, outstandingChange,
- ownershipIssueId, owner,
+ deploymentJobs, change, outstandingChange, ownershipIssueId, owner,
majorVersion == null ? OptionalInt.empty() : OptionalInt.of(majorVersion),
- metrics, rotation, rotationStatus);
+ metrics, pemDeployKey, rotation, rotationStatus);
}
public LockedApplication with(MetricsService.ApplicationMetrics metrics) {
return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments,
- deploymentJobs, change, outstandingChange,
- ownershipIssueId, owner, majorVersion, metrics, rotation, rotationStatus);
+ deploymentJobs, change, outstandingChange, ownershipIssueId, owner, majorVersion,
+ metrics, pemDeployKey, rotation, rotationStatus);
+ }
+
+ public LockedApplication withPemSubmissionKey(String pemDeployKey) {
+ return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments,
+ deploymentJobs, change, outstandingChange, ownershipIssueId, owner, majorVersion,
+ metrics, Optional.ofNullable(pemDeployKey), rotation, rotationStatus);
}
public LockedApplication with(RotationId rotation) {
return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments,
- deploymentJobs, change, outstandingChange,
- ownershipIssueId, owner, majorVersion, metrics, Optional.of(rotation), rotationStatus);
+ deploymentJobs, change, outstandingChange, ownershipIssueId, owner, majorVersion,
+ metrics, pemDeployKey, Optional.of(rotation), rotationStatus);
}
public LockedApplication withRotationStatus(Map<HostName, RotationStatus> rotationStatus) {
- return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments, deploymentJobs, change,
- outstandingChange, ownershipIssueId, owner, majorVersion, metrics, rotation, rotationStatus);
+ return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments,
+ deploymentJobs, change, outstandingChange, ownershipIssueId, owner, majorVersion,
+ metrics, pemDeployKey, rotation, rotationStatus);
}
/** Don't expose non-leaf sub-objects. */
@@ -259,8 +277,8 @@ public class LockedApplication {
private LockedApplication with(Map<ZoneId, Deployment> deployments) {
return new LockedApplication(lock, id, createdAt, deploymentSpec, validationOverrides, deployments,
- deploymentJobs, change, outstandingChange,
- ownershipIssueId, owner, majorVersion, metrics, rotation, rotationStatus);
+ deploymentJobs, change, outstandingChange, ownershipIssueId, owner, majorVersion,
+ metrics, pemDeployKey, rotation, rotationStatus);
}
@Override
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java
index 2242b3832de..0c79c5893c6 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java
@@ -68,6 +68,7 @@ public class ApplicationSerializer {
private final String majorVersionField = "majorVersion";
private final String writeQualityField = "writeQuality";
private final String queryQualityField = "queryQuality";
+ private final String pemDeployKeyField = "pemDeployKey";
private final String rotationField = "rotation";
private final String rotationStatusField = "rotationStatus";
@@ -158,6 +159,7 @@ public class ApplicationSerializer {
application.majorVersion().ifPresent(majorVersion -> root.setLong(majorVersionField, majorVersion));
root.setDouble(queryQualityField, application.metrics().queryServiceQuality());
root.setDouble(writeQualityField, application.metrics().writeServiceQuality());
+ application.pemDeployKey().ifPresent(pemDeployKey -> root.setString(pemDeployKeyField, pemDeployKey));
application.rotation().ifPresent(rotation -> root.setString(rotationField, rotation.asString()));
toSlime(application.rotationStatus(), root.setArray(rotationStatusField));
return slime;
@@ -320,11 +322,13 @@ public class ApplicationSerializer {
OptionalInt majorVersion = optionalInteger(root.field(majorVersionField));
ApplicationMetrics metrics = new ApplicationMetrics(root.field(queryQualityField).asDouble(),
root.field(writeQualityField).asDouble());
+ Optional<String> pemDeployKey = optionalString(root.field(pemDeployKeyField));
Optional<RotationId> rotation = rotationFromSlime(root.field(rotationField));
Map<HostName, RotationStatus> rotationStatus = rotationStatusFromSlime(root.field(rotationStatusField));
- return new Application(id, createdAt, deploymentSpec, validationOverrides, deployments, deploymentJobs, deploying,
- outstandingChange, ownershipIssueId, owner, majorVersion, metrics, rotation, rotationStatus);
+ return new Application(id, createdAt, deploymentSpec, validationOverrides, deployments, deploymentJobs,
+ deploying, outstandingChange, ownershipIssueId, owner, majorVersion, metrics,
+ pemDeployKey, rotation, rotationStatus);
}
private List<Deployment> deploymentsFromSlime(Inspector array) {
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java
index b07e983099a..0b680149bff 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java
@@ -112,6 +112,7 @@ public class ApplicationSerializerTest {
Optional.of(User.from("by-username")),
OptionalInt.of(7),
new MetricsService.ApplicationMetrics(0.5, 0.9),
+ Optional.of("---begin---\nKEY\n---end---"),
Optional.of(new RotationId("my-rotation")),
rotationStatus);
@@ -145,8 +146,9 @@ public class ApplicationSerializerTest {
assertEquals(original.ownershipIssueId(), serialized.ownershipIssueId());
assertEquals(original.owner(), serialized.owner());
assertEquals(original.majorVersion(), serialized.majorVersion());
-
assertEquals(original.change(), serialized.change());
+ assertEquals(original.pemDeployKey(), serialized.pemDeployKey());
+
assertEquals(original.rotation().get(), serialized.rotation().get());
assertEquals(original.rotationStatus(), serialized.rotationStatus());