From d74b8bf4ba07ccff582d70ceac25470ca2c5e2a9 Mon Sep 17 00:00:00 2001 From: Viktor Seifert Date: Wed, 29 Mar 2023 18:36:48 +0200 Subject: [PATCH 1/5] RED-6497: Corrected handling of the stream, temp-file and exceptions. * Corrected the order of closing the steam and deleting the file. * Switched the output of exception to the WARN level, since the hint at potential problems. * Corrected the tests so that they clean-up resources. * Changed the tests to use an archiver that re-throws exceptions, so that problems are not swallowed in testing. --- .../utils/FileSystemBackedArchiver.java | 57 ++++++--- .../utils/FileSystemBackArchiverTest.java | 57 --------- .../utils/FileSystemBackedArchiverTest.java | 108 ++++++++++++++++++ 3 files changed, 152 insertions(+), 70 deletions(-) delete mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackArchiverTest.java create mode 100644 persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiverTest.java diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiver.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiver.java index 0f2ed0de2..86201315e 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiver.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiver.java @@ -6,6 +6,7 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.nio.file.Files; import java.util.Arrays; import java.util.HashSet; import java.util.List; @@ -21,14 +22,31 @@ import lombok.extern.slf4j.Slf4j; @Slf4j public class FileSystemBackedArchiver implements AutoCloseable { + private final boolean rethrowExceptions; private final Set createdFolders = new HashSet<>(); private final File tempFile; private final ZipOutputStream zipOutputStream; + private long tempFileLength = 0; + @SneakyThrows public FileSystemBackedArchiver() { + this(false); + + } + + + /** + * Controls whether exceptions are re-thrown. Mostly meant for testing. + * + * @param rethrowExceptions If true exceptions caught when handling streams and files will be re-thrown. + */ + @SneakyThrows + FileSystemBackedArchiver(boolean rethrowExceptions) { + + this.rethrowExceptions = rethrowExceptions; tempFile = FileUtils.createTempFile("archive", ".zip"); zipOutputStream = new ZipOutputStream(new FileOutputStream(tempFile)); } @@ -50,11 +68,7 @@ public class FileSystemBackedArchiver implements AutoCloseable { @SneakyThrows public InputStream toInputStream() { - try { - zipOutputStream.close(); - } catch (IOException e) { - log.debug(e.getMessage()); - } + closeStreamAndStoreTempFileLength(); return new BufferedInputStream(new FileInputStream(tempFile)); } @@ -80,26 +94,43 @@ public class FileSystemBackedArchiver implements AutoCloseable { @Override public void close() { + closeStreamAndStoreTempFileLength(); + try { - boolean res = tempFile.delete(); - if (!res) { - log.warn("Failed to delete temp file"); + Files.delete(tempFile.toPath()); + } catch (IOException e) { + log.warn("Failed to delete temp-file", e); + if (rethrowExceptions) { + throw new RuntimeException(e); } - zipOutputStream.close(); - } catch (Exception e) { - log.debug("Failed to close FileSystemBackedArchiver"); } + } public long getContentLength() { + closeStreamAndStoreTempFileLength(); + return tempFileLength; + } + + + private void closeStreamAndStoreTempFileLength() { + try { zipOutputStream.close(); } catch (IOException e) { - log.debug(e.getMessage()); + log.warn("Failed to close temp-file stream", e); + if (rethrowExceptions) { + throw new RuntimeException(e); + } + } + + if (tempFile.exists()) { + tempFileLength = tempFile.length(); + } else { + log.warn("The temp file {} was deleted before it was completely processed", tempFile); } - return tempFile.length(); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackArchiverTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackArchiverTest.java deleted file mode 100644 index 6ff5886e5..000000000 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackArchiverTest.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.iqser.red.service.peristence.v1.server.utils; - -import static org.assertj.core.api.Assertions.assertThat; - -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileOutputStream; -import java.io.ObjectOutputStream; -import java.util.SplittableRandom; - -import org.apache.commons.io.IOUtils; -import org.junit.Test; - -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; - -@Slf4j -public class FileSystemBackArchiverTest { - - @Test - @SneakyThrows - public void testFileSystemBackedArchiver() { - - try (var fsba = new FileSystemBackedArchiver()) { - - SplittableRandom sr = new SplittableRandom(); - - var data = sr.doubles().limit(1024 * 1024).toArray(); - for (int i = 0; i < 10; i++) { - log.info("At entry: {}, using {}MB of memory", i, (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / (1024 * 1024)); - - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - ObjectOutputStream oos = new ObjectOutputStream(bos); - oos.writeObject(data); - byte[] bytes = bos.toByteArray(); - bos.close(); - var entry = new FileSystemBackedArchiver.ArchiveModel("folder-" + i, "file-" + i, bytes); - fsba.addEntry(entry); - } - - File f = File.createTempFile("test", ".zip"); - - var contentSize = fsba.getContentLength(); - - try (FileOutputStream fos = new FileOutputStream(f)) { - IOUtils.copy(fsba.toInputStream(), fos); - log.info("File: {}", f.getAbsolutePath()); - - assertThat(f.length()).isEqualTo(contentSize); - } - - log.info("Total File Size: {}MB", f.length() / (1024 * 1024)); - - } - } - -} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiverTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiverTest.java new file mode 100644 index 000000000..3200eab36 --- /dev/null +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiverTest.java @@ -0,0 +1,108 @@ +package com.iqser.red.service.peristence.v1.server.utils; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.InputStream; +import java.io.ObjectOutputStream; +import java.nio.file.Files; +import java.nio.file.StandardCopyOption; +import java.util.SplittableRandom; + +import org.junit.jupiter.api.Test; + +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class FileSystemBackedArchiverTest { + + private final static byte[] dummyFileContent = new byte[]{1, 2}; + + + @Test + @SneakyThrows + public void testFileSystemBackedArchiver() { + + try (var fileSystemBackedArchiver = new FileSystemBackedArchiver(true)) { + + SplittableRandom sr = new SplittableRandom(); + + var data = sr.doubles().limit(1024 * 1024).toArray(); + for (int i = 0; i < 10; i++) { + log.info("At entry: {}, using {}MB of memory", i, (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / (1024 * 1024)); + + try (ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos)) { + oos.writeObject(data); + byte[] bytes = bos.toByteArray(); + var entry = new FileSystemBackedArchiver.ArchiveModel("folder-" + i, "file-" + i, bytes); + fileSystemBackedArchiver.addEntry(entry); + } + } + + File tempFile = File.createTempFile("test", ".zip"); + + var contentSize = fileSystemBackedArchiver.getContentLength(); + + try (InputStream inputStream = fileSystemBackedArchiver.toInputStream()) { + Files.copy(inputStream, tempFile.toPath(), StandardCopyOption.REPLACE_EXISTING); + log.info("File: {}", tempFile.getAbsolutePath()); + } + + assertThat(tempFile.length()).isEqualTo(contentSize); + + log.info("Total File Size: {}MB", tempFile.length() / (1024 * 1024)); + + Files.delete(tempFile.toPath()); + } + } + + + @Test + public void testContentLengthForTwoEntries() { + + try (var fileSystemBackedArchiver = new FileSystemBackedArchiver(true)) { + + fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Original", "original", dummyFileContent)); + fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Preview", "preview", dummyFileContent)); + + assertThat(fileSystemBackedArchiver.getContentLength()).isGreaterThan(0); + } + } + + + @Test + @SneakyThrows + public void testContentLengthForTwoEntriesAndStream() { + + try (var fileSystemBackedArchiver = new FileSystemBackedArchiver(true)) { + + fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Original", "original", dummyFileContent)); + fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Preview", "preview", dummyFileContent)); + + try (InputStream stream = fileSystemBackedArchiver.toInputStream()) { + // Dummy statement to just have the code do something with the stream + //noinspection ResultOfMethodCallIgnored + stream.getClass(); + } + + assertThat(fileSystemBackedArchiver.getContentLength()).isGreaterThan(0); + } + } + + + @Test + public void testContentLengthForTwoEntriesWithClosing() { + // deliberately do not use try-with-resources to see if the content-length is available after temp file deletion + var fileSystemBackedArchiver = new FileSystemBackedArchiver(true); + + fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Original", "original", dummyFileContent)); + fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Preview", "preview", dummyFileContent)); + + fileSystemBackedArchiver.close(); + + assertThat(fileSystemBackedArchiver.getContentLength()).isGreaterThan(0); + } + +} \ No newline at end of file From 65884ce42b78ff725f054272b0153085a1b7619a Mon Sep 17 00:00:00 2001 From: Viktor Seifert Date: Thu, 30 Mar 2023 14:20:55 +0200 Subject: [PATCH 2/5] RED-6497: Removed explicit variable initialization because its marked as a checkstyle violation. --- .../peristence/v1/server/utils/FileSystemBackedArchiver.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiver.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiver.java index 86201315e..7e9db615b 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiver.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiver.java @@ -27,7 +27,7 @@ public class FileSystemBackedArchiver implements AutoCloseable { private final File tempFile; private final ZipOutputStream zipOutputStream; - private long tempFileLength = 0; + private long tempFileLength; @SneakyThrows From 284738b59ead087ccecf1332aac2d96ff4322f7f Mon Sep 17 00:00:00 2001 From: Viktor Seifert Date: Thu, 30 Mar 2023 15:43:07 +0200 Subject: [PATCH 3/5] RED-6497: Changed code to use a different method of getting a file size to have better error reporting --- .../utils/FileSystemBackedArchiver.java | 20 ++++++++-- .../utils/FileSystemBackedArchiverTest.java | 37 +++++++++++++++++-- 2 files changed, 50 insertions(+), 7 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiver.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiver.java index 7e9db615b..7c48567d5 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiver.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiver.java @@ -7,6 +7,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; +import java.nio.file.attribute.BasicFileAttributes; import java.util.Arrays; import java.util.HashSet; import java.util.List; @@ -23,6 +24,7 @@ import lombok.extern.slf4j.Slf4j; public class FileSystemBackedArchiver implements AutoCloseable { private final boolean rethrowExceptions; + private final boolean useFileAttributes; private final Set createdFolders = new HashSet<>(); private final File tempFile; private final ZipOutputStream zipOutputStream; @@ -33,7 +35,7 @@ public class FileSystemBackedArchiver implements AutoCloseable { @SneakyThrows public FileSystemBackedArchiver() { - this(false); + this(false, true); } @@ -44,9 +46,10 @@ public class FileSystemBackedArchiver implements AutoCloseable { * @param rethrowExceptions If true exceptions caught when handling streams and files will be re-thrown. */ @SneakyThrows - FileSystemBackedArchiver(boolean rethrowExceptions) { + FileSystemBackedArchiver(boolean rethrowExceptions, boolean useFileAttributes) { this.rethrowExceptions = rethrowExceptions; + this.useFileAttributes = useFileAttributes; tempFile = FileUtils.createTempFile("archive", ".zip"); zipOutputStream = new ZipOutputStream(new FileOutputStream(tempFile)); } @@ -127,7 +130,18 @@ public class FileSystemBackedArchiver implements AutoCloseable { } if (tempFile.exists()) { - tempFileLength = tempFile.length(); + try { + if (useFileAttributes) { + var basicFileAttributes = Files.readAttributes(tempFile.toPath(), BasicFileAttributes.class); + tempFileLength = basicFileAttributes.size(); + } else { + tempFileLength = tempFile.length(); + } + } catch (IOException e) { + if (rethrowExceptions) { + throw new RuntimeException(e); + } + } } else { log.warn("The temp file {} was deleted before it was completely processed", tempFile); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiverTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiverTest.java index 3200eab36..3f75c8a85 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiverTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiverTest.java @@ -25,7 +25,7 @@ public class FileSystemBackedArchiverTest { @SneakyThrows public void testFileSystemBackedArchiver() { - try (var fileSystemBackedArchiver = new FileSystemBackedArchiver(true)) { + try (var fileSystemBackedArchiver = new FileSystemBackedArchiver(true, false)) { SplittableRandom sr = new SplittableRandom(); @@ -62,7 +62,7 @@ public class FileSystemBackedArchiverTest { @Test public void testContentLengthForTwoEntries() { - try (var fileSystemBackedArchiver = new FileSystemBackedArchiver(true)) { + try (var fileSystemBackedArchiver = new FileSystemBackedArchiver(true, false)) { fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Original", "original", dummyFileContent)); fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Preview", "preview", dummyFileContent)); @@ -72,11 +72,40 @@ public class FileSystemBackedArchiverTest { } + @Test + public void testContentLengthForTwoEntriesComparingFileSize() { + + long defaultFileLength; + try (var fileSystemBackedArchiver = new FileSystemBackedArchiver(true, false)) { + + fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Original", "original", dummyFileContent)); + fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Preview", "preview", dummyFileContent)); + + long contentLength = fileSystemBackedArchiver.getContentLength(); + assertThat(contentLength).isGreaterThan(0); + defaultFileLength = contentLength; + } + + long fileAttributesContentLength; + try (var fileSystemBackedArchiver = new FileSystemBackedArchiver(true, true)) { + + fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Original", "original", dummyFileContent)); + fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Preview", "preview", dummyFileContent)); + + long contentLength = fileSystemBackedArchiver.getContentLength(); + assertThat(contentLength).isGreaterThan(0); + fileAttributesContentLength = contentLength; + } + + assertThat(defaultFileLength).isEqualTo(fileAttributesContentLength); + } + + @Test @SneakyThrows public void testContentLengthForTwoEntriesAndStream() { - try (var fileSystemBackedArchiver = new FileSystemBackedArchiver(true)) { + try (var fileSystemBackedArchiver = new FileSystemBackedArchiver(true, false)) { fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Original", "original", dummyFileContent)); fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Preview", "preview", dummyFileContent)); @@ -95,7 +124,7 @@ public class FileSystemBackedArchiverTest { @Test public void testContentLengthForTwoEntriesWithClosing() { // deliberately do not use try-with-resources to see if the content-length is available after temp file deletion - var fileSystemBackedArchiver = new FileSystemBackedArchiver(true); + var fileSystemBackedArchiver = new FileSystemBackedArchiver(true, false); fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Original", "original", dummyFileContent)); fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Preview", "preview", dummyFileContent)); From 6f203f07e14db09085898b83746a3ada8f8a489c Mon Sep 17 00:00:00 2001 From: Viktor Seifert Date: Thu, 30 Mar 2023 17:30:16 +0200 Subject: [PATCH 4/5] RED-6497: Fixed issue where the file-size of download was saved incorrectly. * Changed the update to the DownloadStatusEntity to use the entity object instead of using a query on JPA-repo. This prevents values from the object being incorrectly inserted otherwise. * Extended the DownloadPreparationTest to check the resulting download state and file size. --- .../DownloadStatusPersistenceService.java | 6 +- .../repository/DownloadStatusRepository.java | 7 +- .../download/DownloadPreparationService.java | 5 +- .../export/DossierTemplateExportService.java | 2 +- .../tests/DownloadPreparationTest.java | 112 +++++++++++------- 5 files changed, 76 insertions(+), 56 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DownloadStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DownloadStatusPersistenceService.java index 2dc4fce91..90fb2a5bf 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DownloadStatusPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DownloadStatusPersistenceService.java @@ -73,9 +73,11 @@ public class DownloadStatusPersistenceService { @Transactional - public void updateStatus(String storageId, DownloadStatusValue status, long fileSize) { + public void updateStatus(DownloadStatusEntity entity, DownloadStatusValue statusValue, long fileSize) { - downloadStatusRepository.updateStatus(storageId, status, fileSize); + entity.setStatus(statusValue); + entity.setFileSize(fileSize); + downloadStatusRepository.save(entity); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DownloadStatusRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DownloadStatusRepository.java index a95c7991c..cad2e6787 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DownloadStatusRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DownloadStatusRepository.java @@ -18,12 +18,7 @@ public interface DownloadStatusRepository extends JpaRepository finalDownloadStatuses = downloadClient.getDownloadStatus(USER_ID); + assertThat(finalDownloadStatuses).hasSize(1); + DownloadStatus finalDownloadStatus = finalDownloadStatuses.get(0); + assertThat(finalDownloadStatus.getStatus()).isEqualTo(DownloadStatusValue.READY); + assertThat(finalDownloadStatus.getFileSize()).isGreaterThan(0); } @@ -167,4 +151,46 @@ public class DownloadPreparationTest extends AbstractPersistenceServerServiceTes storageService.storeObject(reportStorageId, new ByteArrayInputStream(new byte[]{1, 2, 3, 4})); } + + @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) + private class TestData { + + DossierTemplate dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + Dossier dossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate); + + FileModel file = fileTesterAndProvider.testAndProvideFile(dossier); + + List availableTemplates; + + + private TestData() { + + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossierTemplate.getId()) + .multiFileReport(true) + .fileName("test.docx") + .template(new byte[]{1, 2, 3, 4}) + .build()); + + availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isNotEmpty(); + + dossierClient.updateDossier(CreateOrUpdateDossierRequest.builder() + .dossierName(dossier.getDossierName()) + .description(dossier.getDescription()) + .ownerId(dossier.getOwnerId()) + .memberIds(dossier.getMemberIds()) + .approverIds(dossier.getApproverIds()) + .downloadFileTypes(dossier.getDownloadFileTypes()) + .watermarkId(dossier.getWatermarkId()) + .dueDate(dossier.getDueDate()) + .dossierTemplateId(dossier.getDossierTemplateId()) + .reportTemplateIds(availableTemplates.stream().map(ReportTemplate::getTemplateId).collect(Collectors.toList())) + .build(), dossier.getId()); + } + + } + } From 6a3db677ef7798897163a5917b40b05c9ec4687f Mon Sep 17 00:00:00 2001 From: Viktor Seifert Date: Thu, 30 Mar 2023 17:37:18 +0200 Subject: [PATCH 5/5] RED-6497: Removed alternate file size check because it offers less error reporting capabilities --- .../utils/FileSystemBackedArchiver.java | 14 ++----- .../utils/FileSystemBackedArchiverTest.java | 37 ++----------------- 2 files changed, 8 insertions(+), 43 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiver.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiver.java index 7c48567d5..9c3bfccf2 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiver.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiver.java @@ -24,7 +24,6 @@ import lombok.extern.slf4j.Slf4j; public class FileSystemBackedArchiver implements AutoCloseable { private final boolean rethrowExceptions; - private final boolean useFileAttributes; private final Set createdFolders = new HashSet<>(); private final File tempFile; private final ZipOutputStream zipOutputStream; @@ -35,7 +34,7 @@ public class FileSystemBackedArchiver implements AutoCloseable { @SneakyThrows public FileSystemBackedArchiver() { - this(false, true); + this(false); } @@ -46,10 +45,9 @@ public class FileSystemBackedArchiver implements AutoCloseable { * @param rethrowExceptions If true exceptions caught when handling streams and files will be re-thrown. */ @SneakyThrows - FileSystemBackedArchiver(boolean rethrowExceptions, boolean useFileAttributes) { + FileSystemBackedArchiver(boolean rethrowExceptions) { this.rethrowExceptions = rethrowExceptions; - this.useFileAttributes = useFileAttributes; tempFile = FileUtils.createTempFile("archive", ".zip"); zipOutputStream = new ZipOutputStream(new FileOutputStream(tempFile)); } @@ -131,12 +129,8 @@ public class FileSystemBackedArchiver implements AutoCloseable { if (tempFile.exists()) { try { - if (useFileAttributes) { - var basicFileAttributes = Files.readAttributes(tempFile.toPath(), BasicFileAttributes.class); - tempFileLength = basicFileAttributes.size(); - } else { - tempFileLength = tempFile.length(); - } + var basicFileAttributes = Files.readAttributes(tempFile.toPath(), BasicFileAttributes.class); + tempFileLength = basicFileAttributes.size(); } catch (IOException e) { if (rethrowExceptions) { throw new RuntimeException(e); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiverTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiverTest.java index 3f75c8a85..3200eab36 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiverTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/utils/FileSystemBackedArchiverTest.java @@ -25,7 +25,7 @@ public class FileSystemBackedArchiverTest { @SneakyThrows public void testFileSystemBackedArchiver() { - try (var fileSystemBackedArchiver = new FileSystemBackedArchiver(true, false)) { + try (var fileSystemBackedArchiver = new FileSystemBackedArchiver(true)) { SplittableRandom sr = new SplittableRandom(); @@ -62,7 +62,7 @@ public class FileSystemBackedArchiverTest { @Test public void testContentLengthForTwoEntries() { - try (var fileSystemBackedArchiver = new FileSystemBackedArchiver(true, false)) { + try (var fileSystemBackedArchiver = new FileSystemBackedArchiver(true)) { fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Original", "original", dummyFileContent)); fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Preview", "preview", dummyFileContent)); @@ -72,40 +72,11 @@ public class FileSystemBackedArchiverTest { } - @Test - public void testContentLengthForTwoEntriesComparingFileSize() { - - long defaultFileLength; - try (var fileSystemBackedArchiver = new FileSystemBackedArchiver(true, false)) { - - fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Original", "original", dummyFileContent)); - fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Preview", "preview", dummyFileContent)); - - long contentLength = fileSystemBackedArchiver.getContentLength(); - assertThat(contentLength).isGreaterThan(0); - defaultFileLength = contentLength; - } - - long fileAttributesContentLength; - try (var fileSystemBackedArchiver = new FileSystemBackedArchiver(true, true)) { - - fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Original", "original", dummyFileContent)); - fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Preview", "preview", dummyFileContent)); - - long contentLength = fileSystemBackedArchiver.getContentLength(); - assertThat(contentLength).isGreaterThan(0); - fileAttributesContentLength = contentLength; - } - - assertThat(defaultFileLength).isEqualTo(fileAttributesContentLength); - } - - @Test @SneakyThrows public void testContentLengthForTwoEntriesAndStream() { - try (var fileSystemBackedArchiver = new FileSystemBackedArchiver(true, false)) { + try (var fileSystemBackedArchiver = new FileSystemBackedArchiver(true)) { fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Original", "original", dummyFileContent)); fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Preview", "preview", dummyFileContent)); @@ -124,7 +95,7 @@ public class FileSystemBackedArchiverTest { @Test public void testContentLengthForTwoEntriesWithClosing() { // deliberately do not use try-with-resources to see if the content-length is available after temp file deletion - var fileSystemBackedArchiver = new FileSystemBackedArchiver(true, false); + var fileSystemBackedArchiver = new FileSystemBackedArchiver(true); fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Original", "original", dummyFileContent)); fileSystemBackedArchiver.addEntry(new FileSystemBackedArchiver.ArchiveModel("Preview", "preview", dummyFileContent));