summaryrefslogtreecommitdiffstats
path: root/configserver
diff options
context:
space:
mode:
authorHarald Musum <musum@yahooinc.com>2023-08-16 12:53:48 +0200
committerHarald Musum <musum@yahooinc.com>2023-08-16 12:53:48 +0200
commit02a790f7308470cd122cf095491022cf5a9341c1 (patch)
tree78d78aba9522b76dfd67f0bde32dcfff03518111 /configserver
parent20f24875033b855eab5fd61e822ccfddbb60e352 (diff)
Make application package file reference optional
Diffstat (limited to 'configserver')
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java6
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ApplicationPackageMaintainer.java8
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/Session.java6
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java7
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionZooKeeperClient.java7
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionZooKeeperClientTest.java2
6 files changed, 16 insertions, 20 deletions
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java
index a366d0bad7a..c7e4022c668 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java
@@ -697,10 +697,10 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye
Optional<String> applicationPackage = Optional.empty();
Optional<Session> session = getActiveSession(applicationId);
if (session.isPresent()) {
- FileReference applicationPackageReference = session.get().getApplicationPackageReference();
+ Optional<FileReference> applicationPackageReference = session.get().getApplicationPackageReference();
File downloadDirectory = new File(Defaults.getDefaults().underVespaHome(configserverConfig().fileReferencesDir()));
- if (applicationPackageReference != null && ! fileReferenceExistsOnDisk(downloadDirectory, applicationPackageReference))
- applicationPackage = Optional.of(applicationPackageReference.value());
+ if (applicationPackageReference.isPresent() && ! fileReferenceExistsOnDisk(downloadDirectory, applicationPackageReference.get()))
+ applicationPackage = Optional.of(applicationPackageReference.get().value());
}
return applicationPackage;
}
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ApplicationPackageMaintainer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ApplicationPackageMaintainer.java
index 22ef6cc2547..031574bec77 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ApplicationPackageMaintainer.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/maintenance/ApplicationPackageMaintainer.java
@@ -66,15 +66,15 @@ public class ApplicationPackageMaintainer extends ConfigServerMaintainer {
Optional<Session> session = applicationRepository.getActiveSession(applicationId);
if (session.isEmpty()) continue; // App might be deleted after call to listApplications() or not activated yet (bootstrap phase)
- FileReference appFileReference = session.get().getApplicationPackageReference();
- if (appFileReference != null) {
+ Optional<FileReference> appFileReference = session.get().getApplicationPackageReference();
+ if (appFileReference.isPresent()) {
long sessionId = session.get().getSessionId();
attempts++;
- if (!fileReferenceExistsOnDisk(downloadDirectory, appFileReference)) {
+ if (!fileReferenceExistsOnDisk(downloadDirectory, appFileReference.get())) {
log.fine(() -> "Downloading application package with file reference " + appFileReference +
" for " + applicationId + " (session " + sessionId + ")");
- FileReferenceDownload download = new FileReferenceDownload(appFileReference,
+ FileReferenceDownload download = new FileReferenceDownload(appFileReference.get(),
this.getClass().getSimpleName(),
false);
if (fileDownloader.getFile(download).isEmpty()) {
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/Session.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/Session.java
index b627fe9ba3b..2a0a3dfd1a2 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/Session.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/Session.java
@@ -120,8 +120,8 @@ public abstract class Session implements Comparable<Session> {
sessionZooKeeperClient.writeApplicationId(applicationId);
}
- void setApplicationPackageReference(FileReference applicationPackageReference) {
- sessionZooKeeperClient.writeApplicationPackageReference(Optional.ofNullable(applicationPackageReference));
+ void setApplicationPackageReference(Optional<FileReference> applicationPackageReference) {
+ sessionZooKeeperClient.writeApplicationPackageReference(applicationPackageReference);
}
public void setVespaVersion(Version version) {
@@ -168,7 +168,7 @@ public abstract class Session implements Comparable<Session> {
}
}
- public FileReference getApplicationPackageReference() {return sessionZooKeeperClient.readApplicationPackageReference(); }
+ public Optional<FileReference> getApplicationPackageReference() { return sessionZooKeeperClient.readApplicationPackageReference(); }
public Optional<DockerImage> getDockerImageRepository() { return sessionZooKeeperClient.readDockerImageRepository(); }
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java
index f82aa405380..6ace2f5b0b8 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionRepository.java
@@ -6,7 +6,6 @@ import com.google.common.collect.Multiset;
import com.yahoo.cloud.config.ConfigserverConfig;
import com.yahoo.concurrent.DaemonThreadFactory;
import com.yahoo.concurrent.StripedExecutor;
-import com.yahoo.config.FileReference;
import com.yahoo.config.application.api.ApplicationPackage;
import com.yahoo.config.application.api.DeployLogger;
import com.yahoo.config.model.api.ConfigDefinitionRepo;
@@ -854,14 +853,14 @@ public class SessionRepository {
}
SessionZooKeeperClient sessionZKClient = createSessionZooKeeperClient(sessionId);
- FileReference fileReference = sessionZKClient.readApplicationPackageReference();
+ var fileReference = sessionZKClient.readApplicationPackageReference();
log.log(Level.FINE, () -> "File reference for session id " + sessionId + ": " + fileReference);
- if (fileReference == null) return;
+ if (fileReference.isEmpty()) return;
File sessionDir;
FileDirectory fileDirectory = fileDistributionFactory.fileDirectory();
try {
- sessionDir = fileDirectory.getFile(fileReference);
+ sessionDir = fileDirectory.getFile(fileReference.get());
} catch (IllegalArgumentException e) {
// We cannot be guaranteed that the file reference exists (it could be that it has not
// been downloaded yet), and e.g. when bootstrapping we cannot throw an exception in that case
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionZooKeeperClient.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionZooKeeperClient.java
index 121fd9c3235..db4e7c2bb04 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionZooKeeperClient.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionZooKeeperClient.java
@@ -180,11 +180,8 @@ public class SessionZooKeeperClient {
reference -> curator.set(applicationPackageReferencePath(), Utf8.toBytes(reference.value())));
}
- FileReference readApplicationPackageReference() {
- Optional<byte[]> data = curator.getData(applicationPackageReferencePath());
- if (data.isEmpty()) return null; // This should not happen.
-
- return new FileReference(Utf8.toString(data.get()));
+ Optional<FileReference> readApplicationPackageReference() {
+ return curator.getData(applicationPackageReferencePath()).map(d -> new FileReference(Utf8.toString(d)));
}
private Path applicationPackageReferencePath() {
diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionZooKeeperClientTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionZooKeeperClientTest.java
index 63679d86cf3..a172bd57a54 100644
--- a/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionZooKeeperClientTest.java
+++ b/configserver/src/test/java/com/yahoo/vespa/config/server/session/SessionZooKeeperClientTest.java
@@ -139,7 +139,7 @@ public class SessionZooKeeperClientTest {
final FileReference testRef = new FileReference("test-ref");
SessionZooKeeperClient zkc = createSessionZKClient(3);
zkc.writeApplicationPackageReference(Optional.of(testRef));
- assertEquals(testRef, zkc.readApplicationPackageReference());
+ assertEquals(testRef, zkc.readApplicationPackageReference().get());
}
@Test