From a4b959df222c17533d325bc258f03ff7023a2b90 Mon Sep 17 00:00:00 2001 From: Manfred Karrer Date: Sun, 27 Dec 2015 21:27:07 +0100 Subject: [PATCH] Fix issue with not republishing data --- .../main/java/io/bitsquare/p2p/P2PService.java | 3 ++- .../java/io/bitsquare/p2p/peers/PeerGroup.java | 17 ++++++++++------- .../bitsquare/p2p/storage/P2PDataStorage.java | 7 +++++++ 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/network/src/main/java/io/bitsquare/p2p/P2PService.java b/network/src/main/java/io/bitsquare/p2p/P2PService.java index 52f805f1b9..1f8e37b8bb 100644 --- a/network/src/main/java/io/bitsquare/p2p/P2PService.java +++ b/network/src/main/java/io/bitsquare/p2p/P2PService.java @@ -132,6 +132,7 @@ public class P2PService implements SetupListener, MessageListener, ConnectionLis // peer group peerGroup = new PeerGroup(networkNode); + peerGroup.setSeedNodeAddresses(seedNodeAddresses); peerGroup.addAuthenticationListener(this); // P2P network data storage @@ -274,7 +275,7 @@ public class P2PService implements SetupListener, MessageListener, ConnectionLis private void authenticateSeedNode() { Log.traceCall(); checkNotNull(connectedSeedNode != null, "connectedSeedNode must not be null"); - peerGroup.authenticateToSeedNode(connectedSeedNode, seedNodeAddresses); + peerGroup.authenticateToSeedNode(connectedSeedNode); } diff --git a/network/src/main/java/io/bitsquare/p2p/peers/PeerGroup.java b/network/src/main/java/io/bitsquare/p2p/peers/PeerGroup.java index 187cef2b9d..66045d6d1c 100644 --- a/network/src/main/java/io/bitsquare/p2p/peers/PeerGroup.java +++ b/network/src/main/java/io/bitsquare/p2p/peers/PeerGroup.java @@ -37,8 +37,8 @@ public class PeerGroup implements MessageListener, ConnectionListener { public static void setMaxConnectionsLowPriority(int maxConnectionsLowPriority) { MAX_CONNECTIONS_LOW_PRIORITY = maxConnectionsLowPriority; - MAX_CONNECTIONS_NORMAL_PRIORITY = MAX_CONNECTIONS_LOW_PRIORITY + 4; - MAX_CONNECTIONS_HIGH_PRIORITY = MAX_CONNECTIONS_NORMAL_PRIORITY + 4; + MAX_CONNECTIONS_NORMAL_PRIORITY = MAX_CONNECTIONS_LOW_PRIORITY + 6; + MAX_CONNECTIONS_HIGH_PRIORITY = MAX_CONNECTIONS_NORMAL_PRIORITY + 6; } static { @@ -273,11 +273,16 @@ public class PeerGroup implements MessageListener, ConnectionListener { // Authentication to seed node /////////////////////////////////////////////////////////////////////////////////////////// - public void authenticateToSeedNode(Address peerAddress, Set
seedNodeAddresses) { - Log.traceCall(); + public void setSeedNodeAddresses(Set
seedNodeAddresses) { seedNodeAddressesOptional = Optional.of(seedNodeAddresses); + } + + public void authenticateToSeedNode(Address peerAddress) { + Log.traceCall(); + checkArgument(seedNodeAddressesOptional.isPresent(), + "seedNodeAddresses must be set before calling authenticateToSeedNode"); remainingSeedNodes.remove(peerAddress); - remainingSeedNodes.addAll(seedNodeAddresses); + remainingSeedNodes.addAll(seedNodeAddressesOptional.get()); authenticateToFirstSeedNode(peerAddress); } @@ -797,7 +802,6 @@ public class PeerGroup implements MessageListener, ConnectionListener { } private Optional getAndRemoveNotAuthenticatingReportedPeer() { - Log.traceCall(); Optional reportedPeer = Optional.empty(); List list = new ArrayList<>(reportedPeers); authenticationHandshakes.keySet().stream().forEach(e -> list.remove(new ReportedPeer(e))); @@ -815,7 +819,6 @@ public class PeerGroup implements MessageListener, ConnectionListener { private Optional
getAndRemoveNotAuthenticatingSeedNode() { - Log.traceCall(); Optional
seedNode = Optional.empty(); authenticationHandshakes.keySet().stream().forEach(e -> remainingSeedNodes.remove(e)); authenticatedPeers.keySet().stream().forEach(e -> remainingSeedNodes.remove(e)); diff --git a/network/src/main/java/io/bitsquare/p2p/storage/P2PDataStorage.java b/network/src/main/java/io/bitsquare/p2p/storage/P2PDataStorage.java index 21c7a9912a..f52f94938f 100644 --- a/network/src/main/java/io/bitsquare/p2p/storage/P2PDataStorage.java +++ b/network/src/main/java/io/bitsquare/p2p/storage/P2PDataStorage.java @@ -165,6 +165,13 @@ public class P2PDataStorage implements MessageListener { if (result) { map.put(hashOfPayload, protectedData); + + // Republished data have a larger sequence number. We set the rePublish flag to enable broadcasting + // even we had the data with the old seq nr. already + if (sequenceNumberMap.containsKey(hashOfPayload) && + protectedData.sequenceNumber > sequenceNumberMap.get(hashOfPayload)) + rePublish = true; + sequenceNumberMap.put(hashOfPayload, protectedData.sequenceNumber); storage.queueUpForSave(sequenceNumberMap);