summaryrefslogtreecommitdiffstats
path: root/filedistribution
diff options
context:
space:
mode:
authorHarald Musum <musum@oath.com>2018-01-30 10:32:54 +0100
committerHarald Musum <musum@oath.com>2018-01-30 10:32:54 +0100
commit10ae09edd7270e07a184319edca2366a6be55066 (patch)
tree11dd0e0209081efbd79163c46717b2a1ff0894d6 /filedistribution
parentdcc500f98cc22892777a85edc2231f7163ee14c0 (diff)
Do not create dir when moving compressed data
Diffstat (limited to 'filedistribution')
-rw-r--r--filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReceiver.java14
-rw-r--r--filedistribution/src/test/java/com/yahoo/vespa/filedistribution/FileReceiverTest.java31
2 files changed, 37 insertions, 8 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 d9d1b4984eb..43a5eae90bf 100644
--- a/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReceiver.java
+++ b/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReceiver.java
@@ -75,17 +75,11 @@ public class FileReceiver {
currentHash = 0;
fileReferenceDir = new File(downloadDirectory, reference.value());
this.tmpDir = tmpDirectory;
- try {
- Files.createDirectories(fileReferenceDir.toPath());
- } catch (IOException e) {
- log.log(LogLevel.ERROR, "Failed creating directory(" + fileReferenceDir.toPath() + "): " + e.getMessage(), e);
- throw new RuntimeException("Failed creating directory(" + fileReferenceDir.toPath() + "): ", e);
- }
try {
inprogressFile = Files.createTempFile(tmpDirectory.toPath(), fileName, ".inprogress").toFile();
} catch (IOException e) {
- String msg = "Failed creating temp file for inprogress file for(" + fileName + ") in '" + fileReferenceDir.toPath() + "': ";
+ String msg = "Failed creating temp file for inprogress file for " + fileName + " in '" + tmpDirectory.toPath() + "': ";
log.log(LogLevel.ERROR, msg + e.getMessage(), e);
throw new RuntimeException(msg, e);
}
@@ -124,6 +118,12 @@ public class FileReceiver {
CompressedFileReference.decompress(inprogressFile, decompressedDir);
moveFileToDestination(decompressedDir, fileReferenceDir);
} else {
+ try {
+ Files.createDirectories(fileReferenceDir.toPath());
+ } catch (IOException e) {
+ log.log(LogLevel.ERROR, "Failed creating directory (" + fileReferenceDir.toPath() + "): " + e.getMessage(), e);
+ throw new RuntimeException("Failed creating directory (" + fileReferenceDir.toPath() + "): ", e);
+ }
log.log(LogLevel.DEBUG, "Uncompressed file, moving to " + file.getAbsolutePath());
moveFileToDestination(inprogressFile, file);
}
diff --git a/filedistribution/src/test/java/com/yahoo/vespa/filedistribution/FileReceiverTest.java b/filedistribution/src/test/java/com/yahoo/vespa/filedistribution/FileReceiverTest.java
index afa66f89efc..78fc094a9ef 100644
--- a/filedistribution/src/test/java/com/yahoo/vespa/filedistribution/FileReceiverTest.java
+++ b/filedistribution/src/test/java/com/yahoo/vespa/filedistribution/FileReceiverTest.java
@@ -2,6 +2,7 @@
package com.yahoo.vespa.filedistribution;
import com.yahoo.config.FileReference;
+import com.yahoo.io.IOUtils;
import com.yahoo.text.Utf8;
import net.jpountz.xxhash.XXHash64;
import net.jpountz.xxhash.XXHashFactory;
@@ -12,11 +13,15 @@ import org.junit.rules.TemporaryFolder;
import static org.junit.Assert.assertEquals;
-
import java.io.File;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.FileWriter;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
public class FileReceiverTest {
private File root;
@@ -48,6 +53,23 @@ public class FileReceiverTest {
transferPartsAndAssert(new FileReference("ref-a"), "myfile-3", all, 3);
}
+ @Test
+ public void receiveCompressedParts() throws IOException{
+ File dirWithFiles = temporaryFolder.newFolder("files");
+ FileWriter writerA = new FileWriter(new File(dirWithFiles, "a"));
+ writerA.write("1");
+ writerA.close();
+ FileWriter writerB = new FileWriter(new File(dirWithFiles, "b"));
+ writerB.write("2");
+ writerB.close();
+
+ byte[] data = CompressedFileReference.compress(dirWithFiles);
+ transferCompressedData(new FileReference("ref"), "a", data);
+ File downloadDir = new File(root, "ref");
+ assertEquals("1", IOUtils.readFile(new File(downloadDir, "a")));
+ assertEquals("2", IOUtils.readFile(new File(downloadDir, "b")));
+ }
+
private void transferPartsAndAssert(FileReference ref, String fileName, String all, int numParts) throws IOException {
byte [] allContent = Utf8.toBytes(all);
@@ -69,4 +91,11 @@ public class FileReceiverTest {
file.delete();
assertEquals(all, Utf8.toString(allReadBytes));
}
+
+ private void transferCompressedData(FileReference ref, String fileName, byte[] data) throws IOException {
+ FileReceiver.Session session =
+ new FileReceiver.Session(root, tempDir, 1, ref, FileReferenceData.Type.compressed, fileName, data.length);
+ session.addPart(0, data);
+ session.close(hasher.hash(ByteBuffer.wrap(data), 0));
+ }
}