aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Marius Venstad <jonmv@users.noreply.github.com>2024-06-05 12:13:06 +0200
committerGitHub <noreply@github.com>2024-06-05 12:13:06 +0200
commitf1dfcd8b4864d48eb76d7a58df5f2af75bc5c11d (patch)
treeb0677eff882fca282e6c0079253c0305a08b101e
parent867f21e10e4a538875588056b976543d3f9d72f8 (diff)
parent9663df190f421490fc9acfa3432a6c52ee30f982 (diff)
Merge pull request #31443 from vespa-engine/revert-31432-hmusum/preprocess-and-move-atomically-take-3
Revert "Preprocess application package in temp dir, then move atomically to d…"
-rw-r--r--config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java34
1 files changed, 10 insertions, 24 deletions
diff --git a/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java b/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java
index 664c5dcd076..28bf8e10a93 100644
--- a/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java
+++ b/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java
@@ -613,38 +613,24 @@ public class FilesApplicationPackage extends AbstractApplicationPackage {
@Override
public ApplicationPackage preprocess(Zone zone, DeployLogger logger) throws IOException {
- // Note: temp dir needs to be a directory on the same file system as appDir for 'move' to work,
- // so using parent dir to create a temp fir if possible. Standalone container does not have a writable
- // parent dir, so need to copy directly to preprocessedDir in that case.
- java.nio.file.Path parentPath = appDir.getParentFile().toPath();
- if (Files.isWritable(parentPath)) {
- var tempDir = Files.createTempDirectory(parentPath, "preprocess-tempdir");
- preprocess(appDir, tempDir.toFile(), zone);
- IOUtils.recursiveDeleteDir(preprocessedDir);
- // Move to make sure we do this atomically, important to avoid writing only partial content e.g. when shutting down
- Files.move(tempDir, preprocessedDir.toPath());
- } else {
- preprocess(appDir, preprocessedDir, zone);
- }
- FilesApplicationPackage preprocessedApp = fromFile(preprocessedDir, includeSourceFiles);
- preprocessedApp.copyUserDefsIntoApplication();
- return preprocessedApp;
- }
-
- private void preprocess(File appDir, File dir, Zone zone) throws IOException {
- validateServicesFile();
- IOUtils.copyDirectory(appDir, dir, - 1,
+ IOUtils.recursiveDeleteDir(preprocessedDir);
+ IOUtils.copyDirectory(appDir, preprocessedDir, -1,
(__, name) -> ! List.of(preprocessed, SERVICES, HOSTS, CONFIG_DEFINITIONS_DIR).contains(name));
- preprocessXML(applicationFile(dir, SERVICES), getServicesFile(), zone);
- preprocessXML(applicationFile(dir, HOSTS), getHostsFile(), zone);
+ File servicesFile = validateServicesFile();
+ preprocessXML(applicationFile(preprocessedDir, SERVICES), servicesFile, zone);
+ preprocessXML(applicationFile(preprocessedDir, HOSTS), getHostsFile(), zone);
+ FilesApplicationPackage preprocessed = fromFile(preprocessedDir, includeSourceFiles);
+ preprocessed.copyUserDefsIntoApplication();
+ return preprocessed;
}
- private void validateServicesFile() throws IOException {
+ private File validateServicesFile() throws IOException {
File servicesFile = getServicesFile();
if ( ! servicesFile.exists())
throw new IllegalArgumentException(SERVICES + " does not exist in application package");
if (IOUtils.readFile(servicesFile).isEmpty())
throw new IllegalArgumentException(SERVICES + " in application package is empty");
+ return servicesFile;
}
private void copyUserDefsIntoApplication() {