diff options
author | Ola Aunrønning <olaa@verizonmedia.com> | 2022-01-27 18:45:04 +0100 |
---|---|---|
committer | Ola Aunrønning <olaa@verizonmedia.com> | 2022-01-27 19:09:46 +0100 |
commit | 68c1ce17f179e428d41de19e8a9b160d6f2288bc (patch) | |
tree | 0cded612b3f16717d447aad5a366f5d10974189d | |
parent | 72e7534a3fdc7d4a535302ed77af37c7a0708086 (diff) |
Keep one old version. Don't keep hash of entire package.
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()); |