aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-05-22 17:07:53 +0200
committerGitHub <noreply@github.com>2022-05-22 17:07:53 +0200
commit4e028fcd9b61381d19209808e7834ea3b1a7d6ac (patch)
treed8b083406c8a483a761ebabe0f304e752115a220
parentb9472b1b3525f3c0b200ab039c6e4373a513ee2b (diff)
parentff98082a143dc4b158d646f734518df51d061823 (diff)
Merge pull request #22699 from vespa-engine/hmusum/cleanup-4v7.588.57
Make sure to delete directory for decompressed files if something fails
-rw-r--r--filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReceiver.java21
-rw-r--r--filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceData.java21
2 files changed, 19 insertions, 23 deletions
diff --git a/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReceiver.java b/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReceiver.java
index a2c5fee1e51..748d9eb1003 100644
--- a/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReceiver.java
+++ b/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReceiver.java
@@ -1,5 +1,4 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-
package com.yahoo.vespa.filedistribution;
import com.yahoo.config.FileReference;
@@ -106,14 +105,15 @@ public class FileReceiver {
}
File close(long hash) {
- if (hasher.getValue() != hash) {
+ if (hasher.getValue() != hash)
throw new RuntimeException("xxhash from content (" + currentHash + ") is not equal to xxhash in request (" + hash + ")");
- }
+
File file = new File(fileReferenceDir, fileName);
+ File decompressedDir = null;
try {
// Unpack if necessary
if (fileType == FileReferenceData.Type.compressed) {
- File decompressedDir = Files.createTempDirectory(tmpDir.toPath(), "archive").toFile();
+ decompressedDir = Files.createTempDirectory(tmpDir.toPath(), "archive").toFile();
CompressedFileReference.decompress(inprogressFile, decompressedDir);
moveFileToDestination(decompressedDir, fileReferenceDir);
} else {
@@ -130,11 +130,8 @@ public class FileReceiver {
log.log(Level.SEVERE, "Failed writing file: " + e.getMessage(), e);
throw new RuntimeException("Failed writing file: ", e);
} finally {
- try {
- Files.deleteIfExists(inprogressFile.toPath());
- } catch (IOException e) {
- log.log(Level.SEVERE, "Failed deleting " + inprogressFile.getAbsolutePath() + ": " + e.getMessage(), e);
- }
+ deletePath(inprogressFile);
+ deletePath(decompressedDir);
}
return file;
}
@@ -196,12 +193,14 @@ public class FileReceiver {
log.log(Level.SEVERE, message, e);
throw new RuntimeException(message, e);
} finally {
- deleteFileOrDirectory(tempFile);
+ deletePath(tempFile);
}
}
- private static void deleteFileOrDirectory(File path) {
+ private static void deletePath(File path) {
+ if (path == null) return;
if ( ! path.exists()) return;
+
try {
if (path.isDirectory())
IOUtils.recursiveDeleteDir(path);
diff --git a/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceData.java b/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceData.java
index db6c4b70b83..03f8d184f94 100644
--- a/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceData.java
+++ b/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceData.java
@@ -5,7 +5,6 @@ import com.yahoo.config.FileReference;
import java.nio.ByteBuffer;
-
/**
* Utility class for a file reference with data and metadata
*
@@ -13,7 +12,7 @@ import java.nio.ByteBuffer;
*/
public abstract class FileReferenceData {
- public enum Type {file, compressed}
+ public enum Type { file, compressed }
private final FileReference fileReference;
private final String filename;
@@ -25,17 +24,11 @@ public abstract class FileReferenceData {
this.type = type;
}
- public FileReference fileReference() {
- return fileReference;
- }
+ public FileReference fileReference() {return fileReference;}
- public String filename() {
- return filename;
- }
+ public String filename() {return filename;}
- public Type type() {
- return type;
- }
+ public Type type() {return type;}
public ByteBuffer content() {
ByteBuffer bb = ByteBuffer.allocate((int)size());
@@ -54,7 +47,7 @@ public abstract class FileReferenceData {
/**
* Only guaranteed to be valid after all content has been consumed.
- * @return xx64hash of content
+ * @return xxhash64 of content
*/
public abstract long xxhash();
@@ -70,4 +63,8 @@ public abstract class FileReferenceData {
*
*/
public abstract void close();
+
+ @Override
+ public String toString() { return fileReference.value() + " (" + filename + "), " + type.name(); }
+
}