summaryrefslogtreecommitdiffstats
path: root/controller-api
diff options
context:
space:
mode:
Diffstat (limited to 'controller-api')
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationStore.java8
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/JobId.java44
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/RunId.java29
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/PathGroup.java1
4 files changed, 64 insertions, 18 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationStore.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationStore.java
index 5cd29fcd48e..44db38c3ec2 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationStore.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationStore.java
@@ -6,6 +6,8 @@ import com.yahoo.config.provision.ApplicationName;
import com.yahoo.config.provision.TenantName;
import com.yahoo.config.provision.zone.ZoneId;
+import java.util.Optional;
+
/**
* Store for the application and tester packages.
*
@@ -19,6 +21,12 @@ public interface ApplicationStore {
/** Returns the tenant application package of the given version. */
byte[] get(TenantName tenant, ApplicationName application, ApplicationVersion applicationVersion);
+ /** Find application package by given build number */
+ default Optional<byte[]> find(TenantName tenant, ApplicationName application, long buildNumber) {
+ // TODO(mpolden): Remove default once all implemenations catch up
+ return Optional.empty();
+ }
+
/** Stores the given tenant application package of the given version. */
void put(TenantName tenant, ApplicationName application, ApplicationVersion applicationVersion, byte[] applicationPackage);
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/JobId.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/JobId.java
new file mode 100644
index 00000000000..76d848e3d1c
--- /dev/null
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/JobId.java
@@ -0,0 +1,44 @@
+package com.yahoo.vespa.hosted.controller.api.integration.deployment;
+
+import com.yahoo.config.provision.ApplicationId;
+
+import java.util.Objects;
+
+/**
+ * Immutable ID of a job that may be run.
+ *
+ * @author jonmv
+ */
+public class JobId {
+
+ private final ApplicationId application;
+ private final JobType type;
+
+ public JobId(ApplicationId application, JobType type) {
+ this.application = Objects.requireNonNull(application, "ApplicationId cannot be null!");
+ this.type = Objects.requireNonNull(type, "JobType cannot be null!");
+ }
+
+ public ApplicationId application() { return application; }
+ public JobType type() { return type; }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ JobId jobId = (JobId) o;
+ return application.equals(jobId.application) &&
+ type == jobId.type;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(application, type);
+ }
+
+ @Override
+ public String toString() {
+ return type.jobName() + " for " + application;
+ }
+
+}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/RunId.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/RunId.java
index b4c1876a311..506c0482bca 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/RunId.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/RunId.java
@@ -12,47 +12,40 @@ import java.util.Objects;
*/
public class RunId {
- private final ApplicationId application;
+ private final JobId jobId;
private final TesterId tester;
- private final JobType type;
private final long number;
public RunId(ApplicationId application, JobType type, long number) {
- this.application = Objects.requireNonNull(application, "ApplicationId cannot be null!");
+ this.jobId = new JobId(application, type);
this.tester = TesterId.of(application);
- this.type = Objects.requireNonNull(type, "JobType cannot be null!");
if (number <= 0) throw new IllegalArgumentException("Build number must be a positive integer!");
this.number = number;
}
- public ApplicationId application() { return application; }
+ public JobId job() { return jobId; }
+ public ApplicationId application() { return jobId.application(); }
public TesterId tester() { return tester; }
- public JobType type() { return type; }
+ public JobType type() { return jobId.type(); }
public long number() { return number; }
@Override
public boolean equals(Object o) {
if (this == o) return true;
- if ( ! (o instanceof RunId)) return false;
-
- RunId id = (RunId) o;
-
- if (number != id.number) return false;
- if ( ! application.equals(id.application)) return false;
- return type == id.type;
+ if (o == null || getClass() != o.getClass()) return false;
+ RunId runId = (RunId) o;
+ return number == runId.number &&
+ jobId.equals(runId.jobId);
}
@Override
public int hashCode() {
- int result = application.hashCode();
- result = 31 * result + type.hashCode();
- result = 31 * result + (int) (number ^ (number >>> 32));
- return result;
+ return Objects.hash(jobId, number);
}
@Override
public String toString() {
- return "run " + number + " of " + type.jobName() + " for " + application;
+ return "run " + number + " of " + type().jobName() + " for " + application();
}
}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/PathGroup.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/PathGroup.java
index 31caa192bda..89f0a3c3382 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/PathGroup.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/role/PathGroup.java
@@ -75,6 +75,7 @@ enum PathGroup {
applicationInfo(Matcher.tenant,
Matcher.application,
Optional.of("/api"),
+ "/application/v4/tenant/{tenant}/application/{application}/package",
"/application/v4/tenant/{tenant}/application/{application}/deploying/{*}",
"/application/v4/tenant/{tenant}/application/{application}/instance/{ignored}/deploying/{*}",
"/application/v4/tenant/{tenant}/application/{application}/instance/{ignored}/job/{*}",