From 73f5b9cdd964f596bfe13fcd670844b917952083 Mon Sep 17 00:00:00 2001 From: Stepan Usatiuk Date: Sun, 16 Feb 2025 21:45:51 +0100 Subject: [PATCH] slight cleanup --- dhfs-parent/kleppmanntree/pom.xml | 4 ++++ .../usatiuk/kleppmanntree/KleppmannTree.java | 20 +++++++------------ .../com/usatiuk/kleppmanntree/TreeNode.java | 6 ++++-- .../kleppmanntree/KleppmanTreeSimpleTest.java | 2 +- .../usatiuk/kleppmanntree/TestTreeNode.java | 10 +++++----- .../java/com/usatiuk/dhfs/objects/PeerId.java | 9 ++------- .../structs/JKleppmannTreeNode.java | 8 +++++--- .../repository/PersistentPeerDataService.java | 2 +- .../local/LocalPeerDiscoveryClient.java | 2 +- 9 files changed, 30 insertions(+), 33 deletions(-) diff --git a/dhfs-parent/kleppmanntree/pom.xml b/dhfs-parent/kleppmanntree/pom.xml index c6b78ae1..077abfd1 100644 --- a/dhfs-parent/kleppmanntree/pom.xml +++ b/dhfs-parent/kleppmanntree/pom.xml @@ -26,5 +26,9 @@ org.apache.commons commons-lang3 + + org.pcollections + pcollections + \ No newline at end of file diff --git a/dhfs-parent/kleppmanntree/src/main/java/com/usatiuk/kleppmanntree/KleppmannTree.java b/dhfs-parent/kleppmanntree/src/main/java/com/usatiuk/kleppmanntree/KleppmannTree.java index e92a1fa2..10fd6004 100644 --- a/dhfs-parent/kleppmanntree/src/main/java/com/usatiuk/kleppmanntree/KleppmannTree.java +++ b/dhfs-parent/kleppmanntree/src/main/java/com/usatiuk/kleppmanntree/KleppmannTree.java @@ -53,8 +53,7 @@ public class KleppmannTree, PeerIdT ex var node = _storage.getById(effect.childId()); var curParent = _storage.getById(effect.newParentId()); { - var newCurParentChildren = new HashMap<>(curParent.children()); - newCurParentChildren.remove(node.meta().getName()); + var newCurParentChildren = curParent.children().minus(node.meta().getName()); curParent = curParent.withChildren(newCurParentChildren); _storage.putNode(curParent); } @@ -65,8 +64,7 @@ public class KleppmannTree, PeerIdT ex // Needs to be read after changing curParent, as it might be the same node var oldParent = _storage.getById(effect.oldInfo().oldParent()); { - var newOldParentChildren = new HashMap<>(oldParent.children()); - newOldParentChildren.put(node.meta().getName(), node.key()); + var newOldParentChildren = oldParent.children().plus(node.meta().getName(), node.key()); oldParent = oldParent.withChildren(newOldParentChildren); _storage.putNode(oldParent); } @@ -79,8 +77,7 @@ public class KleppmannTree, PeerIdT ex var node = _storage.getById(effect.childId()); var curParent = _storage.getById(effect.newParentId()); { - var newCurParentChildren = new HashMap<>(curParent.children()); - newCurParentChildren.remove(node.meta().getName()); + var newCurParentChildren = curParent.children().minus(node.meta().getName()); curParent = curParent.withChildren(newCurParentChildren); _storage.putNode(curParent); } @@ -149,10 +146,9 @@ public class KleppmannTree, PeerIdT ex for (var n : inTrash) { var node = _storage.getById(n); { - var newTrashChildren = new HashMap<>(trash.children()); - if (newTrashChildren.remove(n.toString()) == null) + if (!trash.children().containsKey(n.toString())) LOGGER.severe("Node " + node.key() + " not found in trash but should be there"); - trash = trash.withChildren(newTrashChildren); + trash = trash.withChildren(trash.children().minus(n.toString())); _storage.putNode(trash); } _storage.removeNode(n); @@ -307,8 +303,7 @@ public class KleppmannTree, PeerIdT ex node = _storage.getById(effect.childId()); } if (oldParentNode != null) { - var newOldParentChildren = new HashMap<>(oldParentNode.children()); - newOldParentChildren.remove(effect.oldInfo().oldMeta().getName()); + var newOldParentChildren = oldParentNode.children().minus(effect.oldInfo().oldMeta().getName()); oldParentNode = oldParentNode.withChildren(newOldParentChildren); _storage.putNode(oldParentNode); } @@ -317,8 +312,7 @@ public class KleppmannTree, PeerIdT ex newParentNode = _storage.getById(effect.newParentId()); { - var newNewParentChildren = new HashMap<>(newParentNode.children()); - newNewParentChildren.put(effect.newMeta().getName(), effect.childId()); + var newNewParentChildren = newParentNode.children().plus(effect.newMeta().getName(), effect.childId()); newParentNode = newParentNode.withChildren(newNewParentChildren); _storage.putNode(newParentNode); } diff --git a/dhfs-parent/kleppmanntree/src/main/java/com/usatiuk/kleppmanntree/TreeNode.java b/dhfs-parent/kleppmanntree/src/main/java/com/usatiuk/kleppmanntree/TreeNode.java index 852c5870..f490bb9e 100644 --- a/dhfs-parent/kleppmanntree/src/main/java/com/usatiuk/kleppmanntree/TreeNode.java +++ b/dhfs-parent/kleppmanntree/src/main/java/com/usatiuk/kleppmanntree/TreeNode.java @@ -1,5 +1,7 @@ package com.usatiuk.kleppmanntree; +import org.pcollections.PMap; + import java.io.Serializable; import java.util.Map; @@ -12,7 +14,7 @@ public interface TreeNode, PeerIdT ext MetaT meta(); - Map children(); + PMap children(); TreeNode withParent(NodeIdT parent); @@ -20,5 +22,5 @@ public interface TreeNode, PeerIdT ext TreeNode withMeta(MetaT meta); - TreeNode withChildren(Map children); + TreeNode withChildren(PMap children); } diff --git a/dhfs-parent/kleppmanntree/src/test/java/com/usatiuk/kleppmanntree/KleppmanTreeSimpleTest.java b/dhfs-parent/kleppmanntree/src/test/java/com/usatiuk/kleppmanntree/KleppmanTreeSimpleTest.java index a52ce207..dfe99ebd 100644 --- a/dhfs-parent/kleppmanntree/src/test/java/com/usatiuk/kleppmanntree/KleppmanTreeSimpleTest.java +++ b/dhfs-parent/kleppmanntree/src/test/java/com/usatiuk/kleppmanntree/KleppmanTreeSimpleTest.java @@ -73,7 +73,7 @@ public class KleppmanTreeSimpleTest { // Second node wins as it has smaller timestamp Assertions.assertIterableEquals(List.of("Test2"), testNode1._storageInterface.getById(testNode2._storageInterface.getRootId()).children().keySet()); - Assertions.assertIterableEquals(List.of("Test1", "TestFile"), testNode1._storageInterface.getById(d2id).children().keySet()); + Assertions.assertIterableEquals(List.of("Test1", "TestFile"), testNode1._storageInterface.getById(d2id).children().keySet().stream().sorted().toList()); Assertions.assertEquals(d2id, testNode1._tree.traverse(List.of("Test2"))); Assertions.assertEquals(d1id, testNode1._tree.traverse(List.of("Test2", "Test1"))); Assertions.assertEquals(f1id, testNode1._tree.traverse(List.of("Test2", "TestFile"))); diff --git a/dhfs-parent/kleppmanntree/src/test/java/com/usatiuk/kleppmanntree/TestTreeNode.java b/dhfs-parent/kleppmanntree/src/test/java/com/usatiuk/kleppmanntree/TestTreeNode.java index a8da2c14..373eb580 100644 --- a/dhfs-parent/kleppmanntree/src/test/java/com/usatiuk/kleppmanntree/TestTreeNode.java +++ b/dhfs-parent/kleppmanntree/src/test/java/com/usatiuk/kleppmanntree/TestTreeNode.java @@ -1,14 +1,14 @@ package com.usatiuk.kleppmanntree; -import java.util.Collections; -import java.util.Map; +import org.pcollections.HashTreePMap; +import org.pcollections.PMap; public record TestTreeNode(Long key, Long parent, OpMove lastEffectiveOp, TestNodeMeta meta, - Map children) implements TreeNode { + PMap children) implements TreeNode { public TestTreeNode(Long id, Long parent, TestNodeMeta meta) { - this(id, parent, null, meta, Collections.emptyMap()); + this(id, parent, null, meta, HashTreePMap.empty()); } @Override @@ -27,7 +27,7 @@ public record TestTreeNode(Long key, Long parent, OpMove withChildren(Map children) { + public TreeNode withChildren(PMap children) { return new TestTreeNode(key, parent, lastEffectiveOp, meta, children); } } diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/objects/PeerId.java b/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/objects/PeerId.java index a85ae068..339f2a53 100644 --- a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/objects/PeerId.java +++ b/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/objects/PeerId.java @@ -1,15 +1,10 @@ package com.usatiuk.dhfs.objects; import java.io.Serializable; -import java.util.UUID; - -public record PeerId(UUID id) implements Serializable, Comparable { - public static PeerId of(UUID id) { - return new PeerId(id); - } +public record PeerId(JObjectKey id) implements Serializable, Comparable { public static PeerId of(String id) { - return new PeerId(UUID.fromString(id)); + return new PeerId(JObjectKey.of(id)); } @Override diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/objects/jkleppmanntree/structs/JKleppmannTreeNode.java b/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/objects/jkleppmanntree/structs/JKleppmannTreeNode.java index 1d1a4839..8b2afa28 100644 --- a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/objects/jkleppmanntree/structs/JKleppmannTreeNode.java +++ b/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/objects/jkleppmanntree/structs/JKleppmannTreeNode.java @@ -6,7 +6,9 @@ import com.usatiuk.dhfs.objects.PeerId; import com.usatiuk.dhfs.objects.repository.peersync.structs.JKleppmannTreeNodeMetaPeer; import com.usatiuk.kleppmanntree.OpMove; import com.usatiuk.kleppmanntree.TreeNode; +import org.pcollections.HashTreePMap; import org.pcollections.PCollection; +import org.pcollections.PMap; import org.pcollections.TreePSet; import java.io.Serializable; @@ -20,10 +22,10 @@ import java.util.stream.Stream; public record JKleppmannTreeNode(JObjectKey key, PCollection refsFrom, boolean frozen, JObjectKey parent, OpMove lastEffectiveOp, JKleppmannTreeNodeMeta meta, - Map children) implements TreeNode, JDataRefcounted, Serializable { + PMap children) implements TreeNode, JDataRefcounted, Serializable { public JKleppmannTreeNode(JObjectKey id, JObjectKey parent, JKleppmannTreeNodeMeta meta) { - this(id, TreePSet.empty(), false, parent, null, meta, Collections.emptyMap()); + this(id, TreePSet.empty(), false, parent, null, meta, HashTreePMap.empty()); } @Override @@ -42,7 +44,7 @@ public record JKleppmannTreeNode(JObjectKey key, PCollection refsFro } @Override - public JKleppmannTreeNode withChildren(Map children) { + public JKleppmannTreeNode withChildren(PMap children) { return new JKleppmannTreeNode(key, refsFrom, frozen, parent, lastEffectiveOp, meta, children); } diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/objects/repository/PersistentPeerDataService.java b/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/objects/repository/PersistentPeerDataService.java index 8d21c6ef..562b7809 100644 --- a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/objects/repository/PersistentPeerDataService.java +++ b/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/objects/repository/PersistentPeerDataService.java @@ -59,7 +59,7 @@ public class PersistentPeerDataService { return; } else { try { - _selfUuid = presetUuid.map(s -> PeerId.of(UUID.fromString(s))).orElseGet(() -> PeerId.of(UUID.randomUUID())); + _selfUuid = presetUuid.map(PeerId::of).orElseGet(() -> PeerId.of(UUID.randomUUID().toString())); Log.info("Generating a key pair, please wait"); _selfKeyPair = CertificateTools.generateKeyPair(); _selfCertificate = CertificateTools.generateCertificate(_selfKeyPair, _selfUuid.toString()); diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/objects/repository/peerdiscovery/local/LocalPeerDiscoveryClient.java b/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/objects/repository/peerdiscovery/local/LocalPeerDiscoveryClient.java index f5ce9d6b..9b505307 100644 --- a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/objects/repository/peerdiscovery/local/LocalPeerDiscoveryClient.java +++ b/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/objects/repository/peerdiscovery/local/LocalPeerDiscoveryClient.java @@ -72,7 +72,7 @@ public class LocalPeerDiscoveryClient { var got = PeerDiscoveryInfo.parseFrom(ByteBuffer.wrap(buf, 0, packet.getLength())); peerDiscoveryDirectory.notifyAddr( new IpPeerAddress( - PeerId.of(UUID.fromString(got.getUuid())), + PeerId.of(got.getUuid()), PeerAddressType.LAN, packet.getAddress(), got.getPort(),