mirror of
https://github.com/bitcoinj/bitcoinj.git
synced 2025-02-24 06:47:54 +01:00
PeerGroup: Don't immediately select a download peer in startBlockChainDownload(). Wait for enough peers to be connected.
This commit is contained in:
parent
98f8c42140
commit
8d983649d3
2 changed files with 6 additions and 10 deletions
|
@ -1394,7 +1394,7 @@ public class PeerGroup implements TransactionBroadcaster {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Start downloading the blockchain from the first available peer.</p>
|
* <p>Start downloading the blockchain.</p>
|
||||||
*
|
*
|
||||||
* <p>If no peers are currently connected, the download will be started once a peer starts. If the peer dies,
|
* <p>If no peers are currently connected, the download will be started once a peer starts. If the peer dies,
|
||||||
* the download will resume with another peer.</p>
|
* the download will resume with another peer.</p>
|
||||||
|
@ -1413,12 +1413,6 @@ public class PeerGroup implements TransactionBroadcaster {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.downloadListener = listener;
|
this.downloadListener = listener;
|
||||||
// TODO: be more nuanced about which peer to download from. We can also try
|
|
||||||
// downloading from multiple peers and handle the case when a new peer comes along
|
|
||||||
// with a longer chain after we thought we were done.
|
|
||||||
if (!peers.isEmpty()) {
|
|
||||||
startBlockChainDownloadFromPeer(peers.iterator().next()); // Will add the new download listener
|
|
||||||
}
|
|
||||||
} finally {
|
} finally {
|
||||||
lock.unlock();
|
lock.unlock();
|
||||||
}
|
}
|
||||||
|
@ -1859,7 +1853,8 @@ public class PeerGroup implements TransactionBroadcaster {
|
||||||
}
|
}
|
||||||
@Nullable private ChainDownloadSpeedCalculator chainDownloadSpeedCalculator;
|
@Nullable private ChainDownloadSpeedCalculator chainDownloadSpeedCalculator;
|
||||||
|
|
||||||
private void startBlockChainDownloadFromPeer(Peer peer) {
|
@VisibleForTesting
|
||||||
|
void startBlockChainDownloadFromPeer(Peer peer) {
|
||||||
lock.lock();
|
lock.lock();
|
||||||
try {
|
try {
|
||||||
setDownloadPeer(peer);
|
setDownloadPeer(peer);
|
||||||
|
|
|
@ -326,8 +326,8 @@ public class PeerGroupTest extends TestWithPeerGroup {
|
||||||
Block b3 = FakeTxBuilder.makeSolvedTestBlock(b2);
|
Block b3 = FakeTxBuilder.makeSolvedTestBlock(b2);
|
||||||
|
|
||||||
// Expect a zero hash getblocks on p1. This is how the process starts.
|
// Expect a zero hash getblocks on p1. This is how the process starts.
|
||||||
peerGroup.startBlockChainDownload(new AbstractPeerDataEventListener() {
|
peerGroup.startBlockChainDownload(new AbstractPeerDataEventListener() {});
|
||||||
});
|
peerGroup.startBlockChainDownloadFromPeer(peerGroup.getConnectedPeers().iterator().next());
|
||||||
GetBlocksMessage getblocks = (GetBlocksMessage) outbound(p1);
|
GetBlocksMessage getblocks = (GetBlocksMessage) outbound(p1);
|
||||||
assertEquals(Sha256Hash.ZERO_HASH, getblocks.getStopHash());
|
assertEquals(Sha256Hash.ZERO_HASH, getblocks.getStopHash());
|
||||||
// We give back an inv with some blocks in it.
|
// We give back an inv with some blocks in it.
|
||||||
|
@ -804,6 +804,7 @@ public class PeerGroupTest extends TestWithPeerGroup {
|
||||||
assertTrue(p1.lastReceivedFilter.contains(keys.get(5).getPubKeyHash()));
|
assertTrue(p1.lastReceivedFilter.contains(keys.get(5).getPubKeyHash()));
|
||||||
assertFalse(p1.lastReceivedFilter.contains(keys.get(keys.size() - 1).getPubKey()));
|
assertFalse(p1.lastReceivedFilter.contains(keys.get(keys.size() - 1).getPubKey()));
|
||||||
peerGroup.startBlockChainDownload(null);
|
peerGroup.startBlockChainDownload(null);
|
||||||
|
peerGroup.startBlockChainDownloadFromPeer(peerGroup.getConnectedPeers().iterator().next());
|
||||||
assertNextMessageIs(p1, GetBlocksMessage.class);
|
assertNextMessageIs(p1, GetBlocksMessage.class);
|
||||||
|
|
||||||
// Make some transactions and blocks that send money to the wallet thus using up all the keys.
|
// Make some transactions and blocks that send money to the wallet thus using up all the keys.
|
||||||
|
|
Loading…
Add table
Reference in a new issue