diff --git a/File-Integrity-Scanner/pom.xml b/File-Integrity-Scanner/pom.xml
index 66412d7..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
@@ -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..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
@@ -2,6 +2,7 @@
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.compare.util.HashCompareUtil;
import lib.pwss.hash.model.HashForFilesOutput;
@@ -29,12 +30,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 +64,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 +111,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..ff4803e 100644
--- a/File-Integrity-Scanner/src/main/resources/logback.xml
+++ b/File-Integrity-Scanner/src/main/resources/logback.xml
@@ -17,6 +17,7 @@
+