@ -56,9 +56,6 @@ public class Synchronizer {
/** Maximum number of block signatures we ask from peer in one go */
private static final int MAXIMUM_REQUEST_SIZE = 200 ; // XXX move to Settings?
/** Maximum number of blocks we ask from peer in one go */
private static final int MAXIMUM_BLOCKS_REQUEST_SIZE = 1 ; // XXX move to Settings?
/** Number of retry attempts if a peer fails to respond with the requested data */
private static final int MAXIMUM_RETRIES = 1 ; // XXX move to Settings?
@ -380,13 +377,17 @@ public class Synchronizer {
if ( Settings . getInstance ( ) . isFastSyncEnabledWhenResolvingFork ( ) & & peer . getPeersVersion ( ) > = PEER_VERSION_150 ) {
// This peer supports syncing multiple blocks at once via GetBlocksMessage, and it is enabled in the settings
int numberBlocksRequired = additionalPeerBlocksAfterCommonBlock - peerBlocks . size ( ) ;
// Ensure that we don't request more blocks than specified in the settings
int maxBlocksPerRequest = Settings . getInstance ( ) . getMaxBlocksPerRequest ( ) ;
while ( numberBlocksRequired > 0 ) {
if ( Controller . isStopping ( ) )
return SynchronizationResult . SHUTTING_DOWN ;
byte [ ] latestPeerSignature = peerBlocks . isEmpty ( ) ? commonBlockSig : peerBlocks . get ( peerBlocks . size ( ) - 1 ) . getSignature ( ) ;
int lastPeerHeight = commonBlockHeight + peerBlocks . size ( ) ;
int numberOfBlocksToRequest = Math . min ( numberBlocksRequired , MAXIMUM_BLOCKS_REQUEST_SIZE ) ;
int numberOfBlocksToRequest = Math . min ( numberBlocksRequired , maxBlocksPerRequest ) ;
LOGGER . trace ( String . format ( "Requesting %d block%s after height %d, sig %.8s" ,
numberOfBlocksToRequest , ( numberOfBlocksToRequest ! = 1 ? "s" : "" ) , lastPeerHeight , Base58 . encode ( latestPeerSignature ) ) ) ;
@ -600,11 +601,14 @@ public class Synchronizer {
// Fetch, and apply, blocks from peer
int maxBatchHeight = commonBlockHeight + SYNC_BATCH_SIZE ;
// Ensure that we don't request more blocks than specified in the settings
int maxBlocksPerRequest = Settings . getInstance ( ) . getMaxBlocksPerRequest ( ) ;
while ( ourHeight < peerHeight & & ourHeight < maxBatchHeight ) {
if ( Controller . isStopping ( ) )
return SynchronizationResult . SHUTTING_DOWN ;
int numberRequested = Math . min ( maxBatchHeight - ourHeight , MAXIMUM_BLOCKS_REQUEST_SIZE ) ;
int numberRequested = Math . min ( maxBatchHeight - ourHeight , maxBlocksPerRequest ) ;
LOGGER . trace ( String . format ( "Fetching %d blocks after height %d, sig %.8s from %s" , numberRequested , ourHeight , Base58 . encode ( latestPeerSignature ) , peer ) ) ;
List < Block > blocks = this . fetchBlocks ( repository , peer , latestPeerSignature , numberRequested ) ;