From 43047b3727878f66e351555c7a49ec76b5b5a545 Mon Sep 17 00:00:00 2001 From: Manfred Karrer Date: Wed, 27 Jan 2016 22:48:19 +0100 Subject: [PATCH] Add shuffling to seednodes --- .../java/io/bitsquare/gui/main/MainViewModel.java | 14 ++++++++------ .../bitsquare/p2p/peers/PeerExchangeManager.java | 11 +++++++++-- .../io/bitsquare/p2p/peers/RequestDataManager.java | 3 +++ 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/gui/src/main/java/io/bitsquare/gui/main/MainViewModel.java b/gui/src/main/java/io/bitsquare/gui/main/MainViewModel.java index 3d43a54055..9489100ad6 100644 --- a/gui/src/main/java/io/bitsquare/gui/main/MainViewModel.java +++ b/gui/src/main/java/io/bitsquare/gui/main/MainViewModel.java @@ -392,13 +392,15 @@ public class MainViewModel implements ViewModel { preferences.setTacAccepted(true); if (preferences.getBitcoinNetwork() == BitcoinNetwork.MAINNET) UserThread.runAfter(() -> new Popup() - .warning("The application is still in alpha version.\n" + - "Please be aware that using Mainnet comes with the risk to lose funds in case of software bugs.\n" + - "To limit the possible losses the maximum allowed trading amount and the security deposit are " + - "reduced to 0.01 BTC for the alpha version on Mainnet.") + .warning("This software is still in alpha version.\n" + + "Please be aware that using Mainnet comes with the risk to lose funds " + + "in case of software bugs.\n" + + "To limit the possible losses the maximum allowed trading amount and the " + + "security deposit have been reduced to 0.01 BTC for the alpha version " + + "when using Mainnet.") .headLine("Important information!") - .actionButtonText("I understand and want to stick with Mainnet") - .closeButtonText("Restart and use Testnet") + .actionButtonText("I understand and want to use Mainnet") + .closeButtonText("Use Testnet and restart") .onClose(() -> { UserThread.execute(() -> preferences.setBitcoinNetwork(BitcoinNetwork.TESTNET)); UserThread.runAfter(BitsquareApp.shutDownHandler::run, 300, TimeUnit.MILLISECONDS); diff --git a/network/src/main/java/io/bitsquare/p2p/peers/PeerExchangeManager.java b/network/src/main/java/io/bitsquare/p2p/peers/PeerExchangeManager.java index 328b022322..c31bb60d63 100644 --- a/network/src/main/java/io/bitsquare/p2p/peers/PeerExchangeManager.java +++ b/network/src/main/java/io/bitsquare/p2p/peers/PeerExchangeManager.java @@ -63,6 +63,7 @@ public class PeerExchangeManager implements MessageListener, ConnectionListener checkNotNull(networkNode.getNodeAddress(), "My node address must not be null at requestReportedPeers"); ArrayList remainingNodeAddresses = new ArrayList<>(seedNodeAddresses); remainingNodeAddresses.remove(nodeAddress); + Collections.shuffle(remainingNodeAddresses); requestReportedPeers(nodeAddress, remainingNodeAddresses); int delay = new Random().nextInt(60) + 60 * 3; // 3-4 min @@ -180,8 +181,12 @@ public class PeerExchangeManager implements MessageListener, ConnectionListener long numberOfConnectedSeedNodes = confirmedConnections.stream() .filter(peerManager::isSeedNode) .count(); - if (numberOfConnectedSeedNodes == 0) - requestReportedPeersFromRandomPeer(new ArrayList<>(seedNodeAddresses)); + if (numberOfConnectedSeedNodes == 0) { + ArrayList nodeAddresses = new ArrayList<>(seedNodeAddresses); + Collections.shuffle(nodeAddresses); + requestReportedPeersFromRandomPeer(nodeAddresses); + } + // We try to get sufficient connections by connecting to reported and persisted peers if (numberOfConnectedSeedNodes == 0) { @@ -216,6 +221,8 @@ public class PeerExchangeManager implements MessageListener, ConnectionListener // 3. seenNodes List list = new ArrayList<>(getFilteredAndSortedList(peerManager.getReportedPeers(), new ArrayList<>())); list.addAll(getFilteredAndSortedList(peerManager.getPersistedPeers(), list)); + ArrayList seedNodeAddresses = new ArrayList<>(this.seedNodeAddresses); + Collections.shuffle(seedNodeAddresses); list.addAll(seedNodeAddresses.stream() .filter(e -> !list.contains(e) && !peerManager.isSelf(e) && diff --git a/network/src/main/java/io/bitsquare/p2p/peers/RequestDataManager.java b/network/src/main/java/io/bitsquare/p2p/peers/RequestDataManager.java index dd68552603..6eac9cb2a8 100644 --- a/network/src/main/java/io/bitsquare/p2p/peers/RequestDataManager.java +++ b/network/src/main/java/io/bitsquare/p2p/peers/RequestDataManager.java @@ -85,6 +85,7 @@ public class RequestDataManager implements MessageListener { public void requestPreliminaryData() { Log.traceCall(); ArrayList nodeAddresses = new ArrayList<>(seedNodeAddresses); + Collections.shuffle(nodeAddresses); NodeAddress nextCandidate = nodeAddresses.get(0); nodeAddresses.remove(nextCandidate); requestData(nextCandidate, nodeAddresses); @@ -95,6 +96,7 @@ public class RequestDataManager implements MessageListener { checkArgument(nodeOfPreliminaryDataRequest.isPresent(), "seedNodeOfPreliminaryDataRequest must be present"); dataUpdateRequested = true; List remainingNodeAddresses = new ArrayList<>(seedNodeAddresses); + Collections.shuffle(remainingNodeAddresses); NodeAddress candidate = nodeOfPreliminaryDataRequest.get(); remainingNodeAddresses.remove(candidate); requestData(candidate, remainingNodeAddresses); @@ -189,6 +191,7 @@ public class RequestDataManager implements MessageListener { // we got from the other seed node contacted but we still have not requested the initial // data set List list = new ArrayList<>(seedNodeAddresses); + Collections.shuffle(list); list.addAll(getFilteredAndSortedList(peerManager.getReportedPeers(), list)); list.addAll(getFilteredAndSortedList(peerManager.getPersistedPeers(), list)); log.trace("Sorted and filtered list: list=" + list);