From ed92ab61f0976057a4c1bb4239729ddab07cb725 Mon Sep 17 00:00:00 2001 From: pwgit-create Date: Sat, 23 May 2026 12:53:46 +0200 Subject: [PATCH 1/3] Upgrade algorithm-hash-extraction to 1.2.9 and implement parallel hash computation * Upgraded the dependency algorithm-hash-extraction from version 1.2.8 to 1.2.9 * Added ParallelFileHashHandler for parallel hash computation of large files * Updated FileHashComputer to use parallel processing when computing hashes * Modified ScanServiceImpl to initialize and shutdown parallel hash processors * Added debugging log level for lib.pwss.hash.file_hash_handler.parallel package This change improves performance by utilizing parallel processing for file hash computations, especially for larger files. --- File-Integrity-Scanner/pom.xml | 2 +- .../scan/FileHashComputer.java | 40 ++++++++++++++++--- .../scan/ScanServiceImpl.java | 7 ++-- .../src/main/resources/logback.xml | 1 + 4 files changed, 40 insertions(+), 10 deletions(-) diff --git a/File-Integrity-Scanner/pom.xml b/File-Integrity-Scanner/pom.xml index 66412d7..ba3753f 100644 --- a/File-Integrity-Scanner/pom.xml +++ b/File-Integrity-Scanner/pom.xml @@ -140,7 +140,7 @@ io.github.pwssorg algorithm-hash-extraction - 1.2.8 + 1.2.9 diff --git a/File-Integrity-Scanner/src/main/java/org/pwss/file_integrity_scanner/dsr/service/file_integrity_scanner/scan/FileHashComputer.java b/File-Integrity-Scanner/src/main/java/org/pwss/file_integrity_scanner/dsr/service/file_integrity_scanner/scan/FileHashComputer.java index ca1ad0f..83702f7 100644 --- a/File-Integrity-Scanner/src/main/java/org/pwss/file_integrity_scanner/dsr/service/file_integrity_scanner/scan/FileHashComputer.java +++ b/File-Integrity-Scanner/src/main/java/org/pwss/file_integrity_scanner/dsr/service/file_integrity_scanner/scan/FileHashComputer.java @@ -2,7 +2,9 @@ import lib.pwss.hash.file_hash_handler.BigFileHashHandler; import lib.pwss.hash.file_hash_handler.FileHashHandler; +import lib.pwss.hash.file_hash_handler.parallel.ParallelFileHashHandler; import lib.pwss.hash.FileHash; +import lib.pwss.hash.ParallelFileHash; import lib.pwss.hash.compare.util.HashCompareUtil; import lib.pwss.hash.model.HashForFilesOutput; @@ -29,12 +31,21 @@ final class FileHashComputer { private final org.slf4j.Logger log; - // Instance of FileHashHandler for computing hashes of smaller files + /** + * Instance of FileHashHandler for computing hashes of smaller files + */ private final FileHash fileHashHandler; - // Instance of BigFileHashHandler for computing hashes of larger files + /** + * Instance of BigFileHashHandler for computing hashes of larger files + */ private final BigFileHashHandler bigFileHashHandler; + /** + * Handles parallel hash computation for files during scans. + */ + private ParallelFileHashHandler parallelFileHashHandler; + FileHashComputer() { this.log = org.slf4j.LoggerFactory.getLogger(FileHashComputer.class); this.fileHashHandler = new FileHashHandler(); @@ -54,13 +65,13 @@ Optional computeHashes(File file) { try { if (file.length() > MEMORY_STRATEGY_LIMIT) - return Optional.of(bigFileHashHandler.GetAllHashes(file)); + return Optional.of(parallelFileHashHandler.GetAllHashesInParallel(file)); else return Optional.of(fileHashHandler.GetAllHashes(file)); } catch (OutOfMemoryError outOfMemoryError) { - log.debug("OutOfMemoryError occurred, switching to BigFileHashHandler for file: {}", file.getPath()); - return Optional.of(bigFileHashHandler.GetAllHashes(file)); + log.debug("OutOfMemoryError occurred, switching to ParallelFileHashHandler for file: {}", file.getPath()); + return Optional.of(parallelFileHashHandler.GetAllHashesInParallel(file)); } catch (NullPointerException nullPointerException) { @@ -101,7 +112,24 @@ boolean compareHashes(Checksum first, Checksum second) { * user. */ final void setUserDefinedMaxLimitInHashComputer(long userDefinedMaxLimit) { - bigFileHashHandler.setUserDefinedMaxLimit(userDefinedMaxLimit); + this.bigFileHashHandler.setUserDefinedMaxLimit(userDefinedMaxLimit); + } + + /** + * Shuts down resources used for parallel hash computation. + */ + final void shutdownParallelHashProcessor() { + + this.parallelFileHashHandler.shutdownThreadPool(); + } + + /** + * Initializes resources required for parallel hash computation + * before starting a scan operation. + */ + final void initializeParallelHashing() { + + this.parallelFileHashHandler = new ParallelFileHashHandler(bigFileHashHandler); } } diff --git a/File-Integrity-Scanner/src/main/java/org/pwss/file_integrity_scanner/dsr/service/file_integrity_scanner/scan/ScanServiceImpl.java b/File-Integrity-Scanner/src/main/java/org/pwss/file_integrity_scanner/dsr/service/file_integrity_scanner/scan/ScanServiceImpl.java index a7e3bdb..65485c7 100644 --- a/File-Integrity-Scanner/src/main/java/org/pwss/file_integrity_scanner/dsr/service/file_integrity_scanner/scan/ScanServiceImpl.java +++ b/File-Integrity-Scanner/src/main/java/org/pwss/file_integrity_scanner/dsr/service/file_integrity_scanner/scan/ScanServiceImpl.java @@ -268,7 +268,7 @@ public void scanAllDirectories(StartAllRequest request) Scan scan = new Scan(time, ScanStatus.IN_PROGRESS.toString(), dir, note, isBaseLineScan); repository.save(scan); - + fileHashComputer.initializeParallelHashing(); fileTraverser = new FileTraverserImpl(); Future> futureFiles; @@ -353,7 +353,7 @@ public void scanSingleDirectory(StartScanByIdRequest request) this.isScanRunning = true; log.debug("Scan is running - {}", isScanRunning); - + fileHashComputer.initializeParallelHashing(); fileTraverser = new FileTraverserImpl(); final Time time = new Time(OffsetDateTime.now(), OffsetDateTime.now()); @@ -594,7 +594,8 @@ private boolean finalizeScanTask(Scan scanInstance, List files) { // Shutdown the file traverser thread pool fileTraverser.shutdownThreadPool(); - + // Shutdown the parallel hash calculation thread pool + fileHashComputer.shutdownParallelHashProcessor(); // Set state boolean to false so this method can be ran again this.isScanRunning = false; } diff --git a/File-Integrity-Scanner/src/main/resources/logback.xml b/File-Integrity-Scanner/src/main/resources/logback.xml index bf3feae..d454954 100644 --- a/File-Integrity-Scanner/src/main/resources/logback.xml +++ b/File-Integrity-Scanner/src/main/resources/logback.xml @@ -17,6 +17,7 @@ + From cd4474d31b0155a48dabebb512b3e71c729491aa Mon Sep 17 00:00:00 2001 From: pwgit-create Date: Sat, 23 May 2026 13:05:13 +0200 Subject: [PATCH 2/3] Bump version to 1.9 and adjust logging levels * Updated project version from 1.8.5 to 1.9 in pom.xml * Changed log level for lib.pwss.hash.file_hash_handler.parallel package from DEBUG to ERROR in logback.xml This change prepares the project for a new release with improved logging configuration. --- File-Integrity-Scanner/pom.xml | 2 +- File-Integrity-Scanner/src/main/resources/logback.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/File-Integrity-Scanner/pom.xml b/File-Integrity-Scanner/pom.xml index ba3753f..ca40466 100644 --- a/File-Integrity-Scanner/pom.xml +++ b/File-Integrity-Scanner/pom.xml @@ -7,7 +7,7 @@ org.pwss File-Integrity-Scanner - 1.8.5 + 1.9 jar A File Integrity Scanner diff --git a/File-Integrity-Scanner/src/main/resources/logback.xml b/File-Integrity-Scanner/src/main/resources/logback.xml index d454954..ff4803e 100644 --- a/File-Integrity-Scanner/src/main/resources/logback.xml +++ b/File-Integrity-Scanner/src/main/resources/logback.xml @@ -17,7 +17,7 @@ - + From 40431d5b26f7b092f5a1a5e5122e56fced524b84 Mon Sep 17 00:00:00 2001 From: pwgit-create Date: Sat, 23 May 2026 13:08:01 +0200 Subject: [PATCH 3/3] Remove unnecessary ParallelFileHash import * Removed unused `import lib.pwss.hash.ParallelFileHash;` in FileHashComputer.java This cleanup removes an unnecessary import to keep the codebase tidy and improve maintainability. --- .../service/file_integrity_scanner/scan/FileHashComputer.java | 1 - 1 file changed, 1 deletion(-) diff --git a/File-Integrity-Scanner/src/main/java/org/pwss/file_integrity_scanner/dsr/service/file_integrity_scanner/scan/FileHashComputer.java b/File-Integrity-Scanner/src/main/java/org/pwss/file_integrity_scanner/dsr/service/file_integrity_scanner/scan/FileHashComputer.java index 83702f7..3331071 100644 --- a/File-Integrity-Scanner/src/main/java/org/pwss/file_integrity_scanner/dsr/service/file_integrity_scanner/scan/FileHashComputer.java +++ b/File-Integrity-Scanner/src/main/java/org/pwss/file_integrity_scanner/dsr/service/file_integrity_scanner/scan/FileHashComputer.java @@ -4,7 +4,6 @@ import lib.pwss.hash.file_hash_handler.FileHashHandler; import lib.pwss.hash.file_hash_handler.parallel.ParallelFileHashHandler; import lib.pwss.hash.FileHash; -import lib.pwss.hash.ParallelFileHash; import lib.pwss.hash.compare.util.HashCompareUtil; import lib.pwss.hash.model.HashForFilesOutput;