mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-01-21 07:39:08 +01:00
Merge bitcoin/bitcoin#29122: test: adds outbound eviction functional tests, updates comment in ConsiderEviction
d53d848347test: adds outbound eviction tests for non outbound-full-relay peers (Sergi Delgado Segura)a8d9a0edc7test: adds outbound eviction functional tests, updates comment in ConsiderEviction (Sergi Delgado Segura) Pull request description: ## Motivation While checking the outbound eviction code I realized a case was not considered within the comments, which in turn made me realize we had no functional tests for the outbound eviction case (when I went to check/add the test case). This PR updates the aforementioned comment and adds functional tests to cover the outbound eviction logic, in addition to the existing unit tests found at `src/test/denialofservice_tests.cpp`. ACKs for top commit: davidgumberg: reACKd53d848347tdb3: Re ACK ford53d848347achow101: ACKd53d848347cbergqvist: ACKd53d848347Tree-SHA512: 633b84bb1229fe21e2f650c1beada33ca7f190b64eafd64df2266516d21175e5d652e019ff7114f00cb8bd19f5817dc19e65adf75767a88e24dc0842ce40c63e
This commit is contained in:
@@ -5441,16 +5441,19 @@ void PeerManagerImpl::ConsiderEviction(CNode& pto, Peer& peer, std::chrono::seco
|
||||
// unless it's invalid, in which case we should find that out and
|
||||
// disconnect from them elsewhere).
|
||||
if (state.pindexBestKnownBlock != nullptr && state.pindexBestKnownBlock->nChainWork >= m_chainman.ActiveChain().Tip()->nChainWork) {
|
||||
// The outbound peer has sent us a block with at least as much work as our current tip, so reset the timeout if it was set
|
||||
if (state.m_chain_sync.m_timeout != 0s) {
|
||||
state.m_chain_sync.m_timeout = 0s;
|
||||
state.m_chain_sync.m_work_header = nullptr;
|
||||
state.m_chain_sync.m_sent_getheaders = false;
|
||||
}
|
||||
} else if (state.m_chain_sync.m_timeout == 0s || (state.m_chain_sync.m_work_header != nullptr && state.pindexBestKnownBlock != nullptr && state.pindexBestKnownBlock->nChainWork >= state.m_chain_sync.m_work_header->nChainWork)) {
|
||||
// Our best block known by this peer is behind our tip, and we're either noticing
|
||||
// that for the first time, OR this peer was able to catch up to some earlier point
|
||||
// where we checked against our tip.
|
||||
// Either way, set a new timeout based on current tip.
|
||||
// At this point we know that the outbound peer has either never sent us a block/header or they have, but its tip is behind ours
|
||||
// AND
|
||||
// we are noticing this for the first time (m_timeout is 0)
|
||||
// OR we noticed this at some point within the last CHAIN_SYNC_TIMEOUT + HEADERS_RESPONSE_TIME seconds and set a timeout
|
||||
// for them, they caught up to our tip at the time of setting the timer but not to our current one (we've also advanced).
|
||||
// Either way, set a new timeout based on our current tip.
|
||||
state.m_chain_sync.m_timeout = time_in_seconds + CHAIN_SYNC_TIMEOUT;
|
||||
state.m_chain_sync.m_work_header = m_chainman.ActiveChain().Tip();
|
||||
state.m_chain_sync.m_sent_getheaders = false;
|
||||
|
||||
Reference in New Issue
Block a user