diff --git a/launchable/jar/exe_deploy.jar b/launchable/jar/exe_deploy.jar index 5800a9055..e8a21538b 100755 Binary files a/launchable/jar/exe_deploy.jar and b/launchable/jar/exe_deploy.jar differ diff --git a/src/main/java/com/launchableinc/ingest/commits/FileChunkStreamer.java b/src/main/java/com/launchableinc/ingest/commits/FileChunkStreamer.java index 698c69438..d8534504e 100644 --- a/src/main/java/com/launchableinc/ingest/commits/FileChunkStreamer.java +++ b/src/main/java/com/launchableinc/ingest/commits/FileChunkStreamer.java @@ -6,6 +6,7 @@ import java.io.IOException; import java.io.OutputStream; +import java.util.Comparator; import java.util.List; import static org.apache.commons.compress.archivers.tar.TarArchiveOutputStream.*; @@ -20,6 +21,9 @@ final class FileChunkStreamer extends ChunkStreamer { @Override protected void writeTo(List files, OutputStream os) throws IOException { + // to help the server side deal efficiently with concurrent updates, stream files in a consistent order + files.sort(Comparator.comparing(VirtualFile::path)); + try (TarArchiveOutputStream tar = new TarArchiveOutputStream(os, "UTF-8")) { tar.setLongFileMode(LONGFILE_POSIX); diff --git a/src/test/java/com/launchableinc/ingest/commits/FileChunkStreamerTest.java b/src/test/java/com/launchableinc/ingest/commits/FileChunkStreamerTest.java index 3d9cc7e70..51112812b 100644 --- a/src/test/java/com/launchableinc/ingest/commits/FileChunkStreamerTest.java +++ b/src/test/java/com/launchableinc/ingest/commits/FileChunkStreamerTest.java @@ -31,10 +31,10 @@ public void basics() throws Exception { try (FileChunkStreamer fs = new FileChunkStreamer(content -> { switch(count[0]++) { case 0: - assertThat(readEntries(content)).containsExactly("foo.txt", "bar.txt").inOrder(); + assertThat(readEntries(content)).containsExactly("foo.txt", "bar.txt"); break; case 1: - assertThat(readEntries(content)).containsExactly("zot.txt").inOrder(); + assertThat(readEntries(content)).containsExactly("zot.txt"); break; default: fail();