summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOla Aunrønning <olaa@verizonmedia.com>2022-01-27 18:45:04 +0100
committerOla Aunrønning <olaa@verizonmedia.com>2022-01-27 19:09:46 +0100
commit68c1ce17f179e428d41de19e8a9b160d6f2288bc (patch)
tree0cded612b3f16717d447aad5a366f5d10974189d
parent72e7534a3fdc7d4a535302ed77af37c7a0708086 (diff)
Keep one old version. Don't keep hash of entire package.
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationVersion.java19
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java12
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/pkg/ApplicationPackage.java4
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java3
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java4
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializer.java4
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java3
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializerTest.java1
8 files changed, 21 insertions, 29 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationVersion.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationVersion.java
index 984035645ed..8fd5c8cfdd7 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationVersion.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/ApplicationVersion.java
@@ -24,7 +24,7 @@ public class ApplicationVersion implements Comparable<ApplicationVersion> {
public static final ApplicationVersion unknown = new ApplicationVersion(Optional.empty(), OptionalLong.empty(),
Optional.empty(), Optional.empty(), Optional.empty(),
Optional.empty(), Optional.empty(), true,
- Optional.empty(), Optional.empty());
+ Optional.empty());
// This never changes and is only used to create a valid semantic version number, as required by application bundles
private static final String majorVersion = "1.0";
@@ -37,13 +37,12 @@ public class ApplicationVersion implements Comparable<ApplicationVersion> {
private final Optional<String> sourceUrl;
private final Optional<String> commit;
private final boolean deployedDirectly;
- private final Optional<String> applicationPackageHash;
private final Optional<String> bundleHash;
/** Public for serialisation only. */
public ApplicationVersion(Optional<SourceRevision> source, OptionalLong buildNumber, Optional<String> authorEmail,
Optional<Version> compileVersion, Optional<Instant> buildTime, Optional<String> sourceUrl,
- Optional<String> commit, boolean deployedDirectly, Optional<String> applicationPackageHash, Optional<String> bundleHash) {
+ Optional<String> commit, boolean deployedDirectly, Optional<String> bundleHash) {
if (buildNumber.isEmpty() && ( source.isPresent() || authorEmail.isPresent() || compileVersion.isPresent()
|| buildTime.isPresent() || sourceUrl.isPresent() || commit.isPresent()))
throw new IllegalArgumentException("Build number must be present if any other attribute is");
@@ -68,7 +67,6 @@ public class ApplicationVersion implements Comparable<ApplicationVersion> {
this.sourceUrl = Objects.requireNonNull(sourceUrl, "sourceUrl cannot be null");
this.commit = Objects.requireNonNull(commit, "commit cannot be null");
this.deployedDirectly = deployedDirectly;
- this.applicationPackageHash = applicationPackageHash;
this.bundleHash = bundleHash;
}
@@ -76,7 +74,7 @@ public class ApplicationVersion implements Comparable<ApplicationVersion> {
public static ApplicationVersion from(SourceRevision source, long buildNumber) {
return new ApplicationVersion(Optional.of(source), OptionalLong.of(buildNumber), Optional.empty(),
Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), false,
- Optional.empty(), Optional.empty());
+ Optional.empty());
}
/** Creates a version from a completed build, an author email, and build meta data. */
@@ -84,15 +82,15 @@ public class ApplicationVersion implements Comparable<ApplicationVersion> {
Version compileVersion, Instant buildTime) {
return new ApplicationVersion(Optional.of(source), OptionalLong.of(buildNumber), Optional.of(authorEmail),
Optional.of(compileVersion), Optional.of(buildTime), Optional.empty(), Optional.empty(), false,
- Optional.empty(), Optional.empty());
+ Optional.empty());
}
/** Creates a version from a completed build, an author email, and build meta data. */
public static ApplicationVersion from(Optional<SourceRevision> source, long buildNumber, Optional<String> authorEmail,
Optional<Version> compileVersion, Optional<Instant> buildTime,
Optional<String> sourceUrl, Optional<String> commit, boolean deployedDirectly,
- Optional<String> applicationPackageHash, Optional<String> bundleHash ) {
- return new ApplicationVersion(source, OptionalLong.of(buildNumber), authorEmail, compileVersion, buildTime, sourceUrl, commit, deployedDirectly, applicationPackageHash, bundleHash);
+ Optional<String> bundleHash) {
+ return new ApplicationVersion(source, OptionalLong.of(buildNumber), authorEmail, compileVersion, buildTime, sourceUrl, commit, deployedDirectly, bundleHash);
}
/** Returns a unique identifier for this version or "unknown" if version is not known */
@@ -123,11 +121,6 @@ public class ApplicationVersion implements Comparable<ApplicationVersion> {
/** Returns the time this package was built, if known. */
public Optional<Instant> buildTime() { return buildTime; }
- /** Returns the hash of entire application package */
- public Optional<String> applicationPackageHash() {
- return applicationPackageHash;
- }
-
/** Returns the hash of app package except deployment/build-meta data */
public Optional<String> bundleHash() {
return bundleHash;
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java
index f0c85e7eeb8..54027d93d77 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java
@@ -453,9 +453,15 @@ public class ApplicationController {
.map(Deployment::applicationVersion)
.collect(Collectors.toSet());
- // Remove any version not deployed anywhere
- for (ApplicationVersion version : application.get().versions()) {
- if (!existingVersions.contains(version)) application = application.withoutVersion(version);
+ var oldVersions = application.get().versions()
+ .stream()
+ .filter(version -> !existingVersions.contains(version))
+ .sorted()
+ .collect(Collectors.toList());
+
+ // Remove any version not deployed anywhere - but keep one
+ for (int i = 0; i < oldVersions.size() - 1; i++) {
+ application = application.withoutVersion(oldVersions.get(i));
}
store(application);
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/pkg/ApplicationPackage.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/pkg/ApplicationPackage.java
index 2ffe7e3ddee..f5910f2a98e 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/pkg/ApplicationPackage.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/pkg/ApplicationPackage.java
@@ -221,9 +221,9 @@ public class ApplicationPackage {
// Hashes all files that require a deployment to be forwarded to configservers
private String calculateBundleHash() {
- Predicate<String> entryMatcher = name -> !name.contains(deploymentFile) && !name.contains(buildMetaFile);
+ Predicate<String> entryMatcher = name -> !name.endsWith(deploymentFile) && !name.endsWith(buildMetaFile);
SortedMap<String, Long> entryCRCs = ZipStreamReader.getEntryCRCs(new ByteArrayInputStream(zippedContent), entryMatcher);
- return Hashing.sha1().hashInt(entryCRCs.hashCode()).toString();
+ return String.valueOf(entryCRCs.hashCode());
}
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 fb722ab7193..1051df2cd1c 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
@@ -440,7 +440,6 @@ public class JobController {
sourceUrl,
revision.map(SourceRevision::commit),
false,
- Optional.of(applicationPackage.hash()),
Optional.of(applicationPackage.bundleHash())));
byte[] diff = application.get().latestVersion()
.map(v -> v.buildNumber().getAsLong())
@@ -514,7 +513,7 @@ public class JobController {
long build = 1 + lastRun.map(run -> run.versions().targetApplication().buildNumber().orElse(0)).orElse(0L);
ApplicationVersion version = ApplicationVersion.from(Optional.empty(), build, Optional.empty(), Optional.empty(),
- Optional.empty(), Optional.empty(), Optional.empty(), true, Optional.empty(), Optional.empty());
+ Optional.empty(), Optional.empty(), Optional.empty(), true, Optional.empty());
byte[] diff = lastRun.map(run -> run.versions().targetApplication())
.map(prevVersion -> ApplicationPackageDiff.diff(new ApplicationPackage(controller.applications().applicationStore().get(deploymentId, prevVersion)), applicationPackage))
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 8e117876b5a..8fc28588662 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
@@ -113,7 +113,6 @@ public class ApplicationSerializer {
private static final String compileVersionField = "compileVersion";
private static final String buildTimeField = "buildTime";
private static final String sourceUrlField = "sourceUrl";
- private static final String applicationHashField = "applicationHash";
private static final String bundleHashField = "bundleHash";
private static final String lastQueriedField = "lastQueried";
private static final String lastWrittenField = "lastWritten";
@@ -443,10 +442,9 @@ public class ApplicationSerializer {
Optional<String> sourceUrl = SlimeUtils.optionalString(object.field(sourceUrlField));
Optional<String> commit = SlimeUtils.optionalString(object.field(commitField));
boolean deployedDirectly = object.field(deployedDirectlyField).asBool();
- Optional<String> applicationPackageHash = SlimeUtils.optionalString(object.field(applicationHashField));
Optional<String> bundleHash = SlimeUtils.optionalString(object.field(bundleHashField));
- return new ApplicationVersion(sourceRevision, applicationBuildNumber, authorEmail, compileVersion, buildTime, sourceUrl, commit, deployedDirectly, applicationPackageHash, bundleHash);
+ return new ApplicationVersion(sourceRevision, applicationBuildNumber, authorEmail, compileVersion, buildTime, sourceUrl, commit, deployedDirectly, bundleHash);
}
private Optional<SourceRevision> sourceRevisionFromSlime(Inspector object) {
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializer.java
index 657625c812c..cd55b689c3c 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializer.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializer.java
@@ -96,7 +96,6 @@ class RunSerializer {
private static final String sourceUrlField = "sourceUrl";
private static final String buildField = "build";
private static final String sourceField = "source";
- private static final String applicationHashField = "applicationHash";
private static final String bundleHashField = "bundleHash";
private static final String lastTestRecordField = "lastTestRecord";
private static final String lastVespaLogTimestampField = "lastVespaLogTimestamp";
@@ -181,11 +180,10 @@ class RunSerializer {
Optional<String> sourceUrl = SlimeUtils.optionalString(versionObject.field(sourceUrlField));
Optional<String> commit = SlimeUtils.optionalString(versionObject.field(commitField));
boolean deployedDirectly = versionObject.field(deployedDirectlyField).asBool();
- Optional<String> applicationPackageHash = SlimeUtils.optionalString(versionObject.field(applicationHashField));
Optional<String> bundleHash = SlimeUtils.optionalString(versionObject.field(bundleHashField));
return new ApplicationVersion(source, OptionalLong.of(buildNumber), authorEmail,
- compileVersion, buildTime, sourceUrl, commit, deployedDirectly, applicationPackageHash, bundleHash);
+ compileVersion, buildTime, sourceUrl, commit, deployedDirectly, bundleHash);
}
// Don't change this — introduce a separate array instead.
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 f2b38f57bff..dda0e219e7b 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
@@ -90,8 +90,7 @@ public class ApplicationSerializerTest {
Optional.empty(),
Optional.of("best commit"),
true,
- Optional.of("hash1"),
- Optional.of("hash2"));
+ Optional.of("hash1"));
List<ApplicationVersion> versions = List.of(applicationVersion1);
assertEquals("https://github/org/repo/tree/commit1", applicationVersion1.sourceUrl().get());
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializerTest.java
index 061b5e71396..f4f52b20325 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RunSerializerTest.java
@@ -92,7 +92,6 @@ public class RunSerializerTest {
Optional.empty(),
Optional.empty(),
true,
- Optional.empty(),
Optional.empty());
assertEquals(applicationVersion, run.versions().targetApplication());
assertEquals(applicationVersion.authorEmail(), run.versions().targetApplication().authorEmail());