Fix large reorgs
This commit is contained in:
parent
afc32c5eea
commit
e11b2ce4c6
2 changed files with 7 additions and 6 deletions
|
@ -10,7 +10,7 @@ touch "$DATADIR/regtest/debug.log"
|
||||||
tail -q -n 1 -F "$DATADIR/regtest/debug.log" | grep -m 1 -q "Done loading" &
|
tail -q -n 1 -F "$DATADIR/regtest/debug.log" | grep -m 1 -q "Done loading" &
|
||||||
WAITER=$!
|
WAITER=$!
|
||||||
PORT=`expr 10000 + $$ % 55536`
|
PORT=`expr 10000 + $$ % 55536`
|
||||||
"@abs_top_builddir@/src/bitcoind@EXEEXT@" -connect=0.0.0.0 -datadir="$DATADIR" -rpcuser=user -rpcpassword=pass -listen -keypool=3 -debug -debug=net -logtimestamps -port=$PORT -whitelist=127.0.0.1 -regtest -rpcport=`expr $PORT + 1` &
|
"@abs_top_builddir@/src/bitcoind@EXEEXT@" -connect=0.0.0.0 -datadir="$DATADIR" -rpcuser=user -rpcpassword=pass -listen -keypool=3 -debug -debug=net -logtimestamps -checkmempool=0 -port=$PORT -whitelist=127.0.0.1 -regtest -rpcport=`expr $PORT + 1` &
|
||||||
BITCOIND=$!
|
BITCOIND=$!
|
||||||
|
|
||||||
#Install a watchdog.
|
#Install a watchdog.
|
||||||
|
|
11
src/main.cpp
11
src/main.cpp
|
@ -385,10 +385,11 @@ void FindNextBlocksToDownload(NodeId nodeid, unsigned int count, std::vector<CBl
|
||||||
|
|
||||||
std::vector<CBlockIndex*> vToFetch;
|
std::vector<CBlockIndex*> vToFetch;
|
||||||
CBlockIndex *pindexWalk = state->pindexLastCommonBlock;
|
CBlockIndex *pindexWalk = state->pindexLastCommonBlock;
|
||||||
// Never fetch further than the best block we know the peer has, or more than BLOCK_DOWNLOAD_WINDOW + 1 beyond our
|
// Never fetch further than the best block we know the peer has, or more than BLOCK_DOWNLOAD_WINDOW + 1 beyond the last
|
||||||
// current tip. The +1 is so we can detect stalling, namely if we would be able to download that next block if the
|
// linked block we have in common with this peer. The +1 is so we can detect stalling, namely if we would be able to
|
||||||
// window were 1 larger.
|
// download that next block if the window were 1 larger.
|
||||||
int nMaxHeight = std::min<int>(state->pindexBestKnownBlock->nHeight, chainActive.Height() + BLOCK_DOWNLOAD_WINDOW + 1);
|
int nWindowEnd = state->pindexLastCommonBlock->nHeight + BLOCK_DOWNLOAD_WINDOW;
|
||||||
|
int nMaxHeight = std::min<int>(state->pindexBestKnownBlock->nHeight, nWindowEnd + 1);
|
||||||
NodeId waitingfor = -1;
|
NodeId waitingfor = -1;
|
||||||
while (pindexWalk->nHeight < nMaxHeight) {
|
while (pindexWalk->nHeight < nMaxHeight) {
|
||||||
// Read up to 128 (or more, if more blocks than that are needed) successors of pindexWalk (towards
|
// Read up to 128 (or more, if more blocks than that are needed) successors of pindexWalk (towards
|
||||||
|
@ -411,7 +412,7 @@ void FindNextBlocksToDownload(NodeId nodeid, unsigned int count, std::vector<CBl
|
||||||
state->pindexLastCommonBlock = pindex;
|
state->pindexLastCommonBlock = pindex;
|
||||||
} else if (mapBlocksInFlight.count(pindex->GetBlockHash()) == 0) {
|
} else if (mapBlocksInFlight.count(pindex->GetBlockHash()) == 0) {
|
||||||
// The block is not already downloaded, and not yet in flight.
|
// The block is not already downloaded, and not yet in flight.
|
||||||
if (pindex->nHeight > chainActive.Height() + (int)BLOCK_DOWNLOAD_WINDOW) {
|
if (pindex->nHeight > nWindowEnd) {
|
||||||
// We reached the end of the window.
|
// We reached the end of the window.
|
||||||
if (vBlocks.size() == 0 && waitingfor != nodeid) {
|
if (vBlocks.size() == 0 && waitingfor != nodeid) {
|
||||||
// We aren't able to fetch anything, but we would be if the download window was one larger.
|
// We aren't able to fetch anything, but we would be if the download window was one larger.
|
||||||
|
|
Loading…
Reference in a new issue