From dca4b1e3bb7b424d84048f9e7aaf16bfae5659b2 Mon Sep 17 00:00:00 2001 From: io42630 Date: Sun, 14 Aug 2022 09:48:15 +0200 Subject: [PATCH] + add filename sets for insights / sanity check --- src/main/java/com/olexyn/ensync/Flow.java | 43 +++++++++++++------ .../com/olexyn/ensync/util/TraceUtil.java | 22 ++++++++++ 2 files changed, 53 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/olexyn/ensync/util/TraceUtil.java diff --git a/src/main/java/com/olexyn/ensync/Flow.java b/src/main/java/com/olexyn/ensync/Flow.java index 0c75587..07c4f6d 100644 --- a/src/main/java/com/olexyn/ensync/Flow.java +++ b/src/main/java/com/olexyn/ensync/Flow.java @@ -4,6 +4,7 @@ import com.olexyn.ensync.artifacts.DataRoot; import com.olexyn.ensync.artifacts.Record; import com.olexyn.ensync.artifacts.SyncDirectory; import com.olexyn.ensync.lock.LockKeeper; +import com.olexyn.ensync.util.TraceUtil; import com.olexyn.min.log.LogU; import java.util.concurrent.atomic.AtomicBoolean; @@ -65,20 +66,38 @@ public class Flow implements Runnable { record.getFiles().putAll(sDir.readRecord()); LogU.infoPlain("# Record: %s", record.getFiles().size()); - var listCreated = sDir.fillListOfLocallyCreatedFiles(listFileSystem, record); - var listDeleted = sDir.makeListOfLocallyDeletedFiles(listFileSystem, record); - var listModified = sDir.makeListOfLocallyModifiedFiles(listFileSystem, record); - Tools tools = new Tools(); - int newly = tools.setMinus(listCreated.keySet(), listDeleted.keySet()).size(); - LogU.infoPlain("# Created: %s\n thereof newly created (not mv) %s", listCreated.size(), newly); - LogU.infoPlain("# Deleted: %s", listDeleted.size()); - LogU.infoPlain("# Modified: %s", listModified.size()); + var mapCreated = sDir.fillListOfLocallyCreatedFiles(listFileSystem, record); + var mapDeleted = sDir.makeListOfLocallyDeletedFiles(listFileSystem, record); + var mapModified = sDir.makeListOfLocallyModifiedFiles(listFileSystem, record); + + var setCreatedNames = TraceUtil.fileNameSet(mapCreated); + var setDeletedNames = TraceUtil.fileNameSet(mapCreated); + var setCreatedNamesNew = Tools.setMinus(setCreatedNames, setDeletedNames); + var setDeletedNamesFinal = Tools.setMinus(setDeletedNames, setCreatedNames); + + LogU.infoPlain("# CREATED: %s", mapCreated.size()); + LogU.infoPlain(" thereof unique %s", setCreatedNames.size()); + LogU.infoPlain(" thereof new %s", setCreatedNamesNew.size()); + var createdByMove = setCreatedNames.size() - setCreatedNamesNew.size(); + LogU.infoPlain(" thereof by mv %s", createdByMove); + LogU.infoPlain("# DELETED: %s", mapDeleted.size()); + LogU.infoPlain(" thereof unique %s", setDeletedNames.size()); + LogU.infoPlain(" thereof finally %s", setDeletedNamesFinal.size()); + var deletedByMove = setDeletedNames.size() - setDeletedNamesFinal.size(); + LogU.infoPlain(" thereof by mv %s", deletedByMove); + LogU.infoPlain("# MODIFIED: %s", mapModified.size()); + if (createdByMove == deletedByMove) { + LogU.infoPlain("(created by mv == deleted by mv) -> EXECUTE OPS"); + sDir.doCreateOpsOnOtherSDs(mapCreated); + sDir.doDeleteOpsOnOtherSDs(mapDeleted); + sDir.doModifyOpsOnOtherSDs(mapModified); + sDir.writeRecord(record); + } else { + LogU.warnPlain("(created by mv != deleted by mv) -> ABORT"); + } + - sDir.doCreateOpsOnOtherSDs(listCreated); - sDir.doDeleteOpsOnOtherSDs(listDeleted); - sDir.doModifyOpsOnOtherSDs(listModified); - sDir.writeRecord(record); } /** diff --git a/src/main/java/com/olexyn/ensync/util/TraceUtil.java b/src/main/java/com/olexyn/ensync/util/TraceUtil.java new file mode 100644 index 0000000..6b09497 --- /dev/null +++ b/src/main/java/com/olexyn/ensync/util/TraceUtil.java @@ -0,0 +1,22 @@ +package com.olexyn.ensync.util; + +import com.olexyn.ensync.artifacts.SyncFile; + +import java.nio.file.Path; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +public class TraceUtil { + + public static Set fileNameSet(Map batchMap) { + return batchMap.keySet().stream() + .map(TraceUtil::fileName) + .collect(Collectors.toSet()); + } + + private static String fileName(String pathStr) { + return Path.of(pathStr).getFileName().toString(); + } + +}