summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorJon Marius Venstad <jvenstad@yahoo-inc.com>2018-06-22 12:14:32 +0200
committerJon Marius Venstad <jvenstad@yahoo-inc.com>2018-07-02 13:42:47 +0200
commit3dee94396f87eae9ec5c421a407333b01d1c7853 (patch)
treef8924579f056c98fe166929c64286fd17134150c /controller-server
parent39673be2199068018cd68b6cea2e055be56475b9 (diff)
Add setting for where to build stuff
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Application.java2
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/LockedApplication.java6
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/DeploymentJobs.java25
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java46
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java5
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/JobSerializer.java37
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java2
7 files changed, 88 insertions, 35 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 9208537dd98..677f2363c08 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
@@ -53,7 +53,7 @@ public class Application {
/** Creates an empty application */
public Application(ApplicationId id) {
this(id, DeploymentSpec.empty, ValidationOverrides.empty, Collections.emptyMap(),
- new DeploymentJobs(OptionalLong.empty(), Collections.emptyList(), Optional.empty()),
+ new DeploymentJobs(OptionalLong.empty(), Collections.emptyList(), Optional.empty(), false),
Change.empty(), Change.empty(), Optional.empty(), new ApplicationMetrics(0, 0),
Optional.empty());
}
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 79e7fa0295a..2209cdf3013 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
@@ -89,6 +89,12 @@ public class LockedApplication {
outstandingChange, ownershipIssueId, metrics, rotation);
}
+ public LockedApplication withBuiltInternally(boolean builtInternally) {
+ return new LockedApplication(lock, id, deploymentSpec, validationOverrides, deployments,
+ deploymentJobs.withBuiltInternally(builtInternally), change, outstandingChange,
+ ownershipIssueId, metrics, rotation);
+ }
+
public LockedApplication withProjectId(OptionalLong projectId) {
return new LockedApplication(lock, id, deploymentSpec, validationOverrides, deployments,
deploymentJobs.withProjectId(projectId), change, outstandingChange,
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/DeploymentJobs.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/DeploymentJobs.java
index 4968e161a35..65ba7e68d31 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/DeploymentJobs.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/DeploymentJobs.java
@@ -27,19 +27,22 @@ public class DeploymentJobs {
private final OptionalLong projectId;
private final ImmutableMap<JobType, JobStatus> status;
private final Optional<IssueId> issueId;
+ private final boolean builtInternally;
public DeploymentJobs(OptionalLong projectId, Collection<JobStatus> jobStatusEntries,
- Optional<IssueId> issueId) {
- this(projectId, asMap(jobStatusEntries), issueId);
+ Optional<IssueId> issueId, boolean builtInternally) {
+ this(projectId, asMap(jobStatusEntries), issueId, builtInternally);
}
- private DeploymentJobs(OptionalLong projectId, Map<JobType, JobStatus> status, Optional<IssueId> issueId) {
+ private DeploymentJobs(OptionalLong projectId, Map<JobType, JobStatus> status, Optional<IssueId> issueId,
+ boolean builtInternally) {
requireId(projectId, "projectId must be a positive integer");
Objects.requireNonNull(status, "status cannot be null");
Objects.requireNonNull(issueId, "issueId cannot be null");
this.projectId = projectId;
this.status = ImmutableMap.copyOf(status);
this.issueId = issueId;
+ this.builtInternally = builtInternally;
}
private static Map<JobType, JobStatus> asMap(Collection<JobStatus> jobStatusEntries) {
@@ -56,7 +59,7 @@ public class DeploymentJobs {
if (job == null) job = JobStatus.initial(jobType);
return job.withCompletion(completion, jobError);
});
- return new DeploymentJobs(OptionalLong.of(projectId), status, issueId);
+ return new DeploymentJobs(OptionalLong.of(projectId), status, issueId, builtInternally);
}
public DeploymentJobs withTriggering(JobType jobType, JobStatus.JobRun jobRun) {
@@ -65,21 +68,25 @@ public class DeploymentJobs {
if (job == null) job = JobStatus.initial(jobType);
return job.withTriggering(jobRun);
});
- return new DeploymentJobs(projectId, status, issueId);
+ return new DeploymentJobs(projectId, status, issueId, builtInternally);
}
public DeploymentJobs withProjectId(OptionalLong projectId) {
- return new DeploymentJobs(projectId, status, issueId);
+ return new DeploymentJobs(projectId, status, issueId, builtInternally);
}
public DeploymentJobs with(IssueId issueId) {
- return new DeploymentJobs(projectId, status, Optional.ofNullable(issueId));
+ return new DeploymentJobs(projectId, status, Optional.ofNullable(issueId), builtInternally);
}
public DeploymentJobs without(JobType job) {
Map<JobType, JobStatus> status = new HashMap<>(this.status);
status.remove(job);
- return new DeploymentJobs(projectId, status, issueId);
+ return new DeploymentJobs(projectId, status, issueId, builtInternally);
+ }
+
+ public DeploymentJobs withBuiltInternally(boolean builtInternally) {
+ return new DeploymentJobs(projectId, status, issueId, builtInternally);
}
/** Returns an immutable map of the status entries in this */
@@ -107,6 +114,8 @@ public class DeploymentJobs {
public Optional<IssueId> issueId() { return issueId; }
+ public boolean builtInternally() { return builtInternally; }
+
private static OptionalLong requireId(OptionalLong id, String message) {
Objects.requireNonNull(id, message);
if ( ! id.isPresent()) {
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java
index aff60191f7f..dc339dd9330 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java
@@ -28,11 +28,11 @@ public class JobController {
this.logs = logStore;
}
-
-// GET:
/** Returns whether the given application has registered with this build service. */
- boolean builds(ApplicationId application) {
- return false;
+ public boolean builds(ApplicationId id) {
+ return controller.applications().get(id)
+ .map(application -> application.deploymentJobs().builtInternally())
+ .orElse(false);
}
/** Returns a list of all application which have registered. */
@@ -41,58 +41,56 @@ public class JobController {
}
/** Returns all job types which have been run for the given application. */
- public List<JobType> jobs(ApplicationId application) {
+ public List<JobType> jobs(ApplicationId id) {
return null;
}
/** Returns a list of meta information about all known runs of the given job type. */
- public List<RunStatus> runs(ApplicationId application, JobType type) {
+ public List<RunStatus> runs(ApplicationId id, JobType type) {
return null;
}
/** Returns the current status of the given job. */
- public RunStatus status(RunId job) {
+ public RunStatus status(RunId id) {
return null;
}
/** Returns the details for the given job. */
- public RunDetails details(RunId job) {
+ public RunDetails details(RunId id) {
return null;
}
-
-// POST:
/** Registers the given application, such that it may have deployment jobs run here. */
- void register(ApplicationId application) {
- ;
+ void register(ApplicationId id) {
+ controller.applications().lockIfPresent(id, application ->
+ controller.applications().store(application.withBuiltInternally(true)));
}
/** Accepts and stores a new appliaction package and test jar pair, and returns the reference these will have. */
public ApplicationVersion submit(byte[] applicationPackage, byte[] applicationTestJar) {
+
+ // TODO jvenstad: Return versions with increasing numbers.
+
return ApplicationVersion.unknown;
}
/** Orders a run of the given type, and returns the id of the created job. */
- public RunId run(ApplicationId application, JobType type) {
+ public RunId run(ApplicationId id, JobType type) {
return null;
}
+ /** Unregisters the given application, and deletes all associated data. */
+ public void unregister(ApplicationId id) {
+ controller.applications().lockIfPresent(id, application -> {
-// PUT:
- /** Stores the given details for the given job. */
- public void store(RunDetails details, RunId job) {
- ;
- }
-
+ // TODO jvenstad: Clean out data for jobs.
-// DELETE:
- /** Unregisters the given application, and deletes all associated data. */
- public void unregister(ApplicationId application) {
- ;
+ controller.applications().store(application.withBuiltInternally(false));
+ });
}
/** Aborts the given job. */
- public void abort(RunId job) {
+ public void abort(RunId id) {
;
}
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 d804afdf98e..763d26834e6 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
@@ -80,6 +80,7 @@ public class ApplicationSerializer {
private final String projectIdField = "projectId";
private final String jobStatusField = "jobStatus";
private final String issueIdField = "jiraIssueId";
+ private final String builtInternallyField = "builtInternally";
// JobStatus field
private final String jobTypeField = "jobType";
@@ -227,6 +228,7 @@ public class ApplicationSerializer {
deploymentJobs.projectId().ifPresent(projectId -> cursor.setLong(projectIdField, projectId));
jobStatusToSlime(deploymentJobs.jobStatus().values(), cursor.setArray(jobStatusField));
deploymentJobs.issueId().ifPresent(jiraIssueId -> cursor.setString(issueIdField, jiraIssueId.value()));
+ cursor.setBool(builtInternallyField, deploymentJobs.builtInternally());
}
private void jobStatusToSlime(Collection<JobStatus> jobStatuses, Cursor jobStatusArray) {
@@ -374,8 +376,9 @@ public class ApplicationSerializer {
OptionalLong projectId = optionalLong(object.field(projectIdField));
List<JobStatus> jobStatusList = jobStatusListFromSlime(object.field(jobStatusField));
Optional<IssueId> issueId = optionalString(object.field(issueIdField)).map(IssueId::from);
+ boolean builtInternally = object.field(builtInternallyField).asBool();
- return new DeploymentJobs(projectId, jobStatusList, issueId);
+ return new DeploymentJobs(projectId, jobStatusList, issueId, builtInternally);
}
private Change changeFromSlime(Inspector object) {
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/JobSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/JobSerializer.java
new file mode 100644
index 00000000000..4b13c9acc20
--- /dev/null
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/JobSerializer.java
@@ -0,0 +1,37 @@
+package com.yahoo.vespa.hosted.controller.persistence;
+
+import com.yahoo.slime.ArrayTraverser;
+import com.yahoo.slime.Cursor;
+import com.yahoo.slime.Inspector;
+import com.yahoo.slime.Slime;
+import com.yahoo.vespa.hosted.controller.deployment.RunStatus;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class JobSerializer {
+
+ public List<RunStatus> fromSlime(Slime slime) {
+ List<RunStatus> runs = new ArrayList<>();
+ Inspector runArray = slime.get();
+ runArray.traverse((ArrayTraverser) (__, runObject) ->
+ runs.add(runFromSlime(runObject)));
+ return runs;
+ }
+
+ private RunStatus runFromSlime(Inspector runObject) {
+ throw new AssertionError();
+ }
+
+ public Slime toSlime(Iterable<RunStatus> runs) {
+ Slime slime = new Slime();
+ Cursor runArray = slime.setArray();
+ runs.forEach(run -> toSlime(run, runArray.addObject()));
+ return slime;
+ }
+
+ private Slime toSlime(RunStatus run, Cursor runObject) {
+ throw new AssertionError();
+ }
+
+}
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 e96d41f5b44..a17584f9bfa 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
@@ -87,7 +87,7 @@ public class ApplicationSerializerTest {
.withTriggering(Version.fromString("5.6.6"), ApplicationVersion.unknown, deployments.stream().findFirst(), "Test 3", Instant.ofEpochMilli(6))
.withCompletion(11, empty(), Instant.ofEpochMilli(7)));
- DeploymentJobs deploymentJobs = new DeploymentJobs(projectId, statusList, empty());
+ DeploymentJobs deploymentJobs = new DeploymentJobs(projectId, statusList, empty(), true);
Application original = new Application(ApplicationId.from("t1", "a1", "i1"),
deploymentSpec,