Skip to content

Commit 597488d

Browse files
committed
Merge #19871: doc: Clarify scope of eviction protection of outbound block-relay peers
d769254 [doc] Clarify semantic of peer's m_protect w.r.t to outbound eviction logics (Antoine Riard) ac71fe9 [doc] Clarify scope of eviction protection of outbound block-relay peers (Antoine Riard) Pull request description: Block-relay-only peers were introduced by #15759. According to its author, it was intented to make them only immune to outbound peer rotation-based eviction and not from all eviction as modified comment leans to think of. Clearly indicate that outbound block-relay peers aren't protected from eviction by the bad/lagging chain logic. Fix #19863 ACKs for top commit: naumenkogs: ACK d769254 jonatack: ACK d769254 Tree-SHA512: 597fbd62838a6e39276024165b11514cad20a2e9d33cf9202d261cbadcb62b2df427c858e0cb57e585840d4c1d4600104aa53916bb868541f2580e4eed9b4b52
2 parents df2129a + d769254 commit 597488d

File tree

1 file changed

+19
-8
lines changed

1 file changed

+19
-8
lines changed

src/net_processing.cpp

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -334,10 +334,17 @@ struct CNodeState {
334334
*/
335335
bool fSupportsDesiredCmpctVersion;
336336

337-
/** State used to enforce CHAIN_SYNC_TIMEOUT
338-
* Only in effect for outbound, non-manual, full-relay connections, with
339-
* m_protect == false
340-
* Algorithm: if a peer's best known block has less work than our tip,
337+
/** State used to enforce CHAIN_SYNC_TIMEOUT and EXTRA_PEER_CHECK_INTERVAL logic.
338+
*
339+
* Both are only in effect for outbound, non-manual, non-protected connections.
340+
* Any peer protected (m_protect = true) is not chosen for eviction. A peer is
341+
* marked as protected if all of these are true:
342+
* - its connection type is IsBlockOnlyConn() == false
343+
* - it gave us a valid connecting header
344+
* - we haven't reached MAX_OUTBOUND_PEERS_TO_PROTECT_FROM_DISCONNECT yet
345+
* - it has a better chain than we have
346+
*
347+
* CHAIN_SYNC_TIMEOUT: if a peer's best known block has less work than our tip,
341348
* set a timeout CHAIN_SYNC_TIMEOUT seconds in the future:
342349
* - If at timeout their best known block now has more work than our tip
343350
* when the timeout was set, then either reset the timeout or clear it
@@ -347,6 +354,9 @@ struct CNodeState {
347354
* and set a shorter timeout, HEADERS_RESPONSE_TIME seconds in future.
348355
* If their best known block is still behind when that new timeout is
349356
* reached, disconnect.
357+
*
358+
* EXTRA_PEER_CHECK_INTERVAL: after each interval, if we have too many outbound peers,
359+
* drop the outbound one that least recently announced us a new block.
350360
*/
351361
struct ChainSyncTimeoutState {
352362
//! A timeout used for checking whether our peer has sufficiently synced
@@ -2018,11 +2028,12 @@ void PeerManager::ProcessHeadersMessage(CNode& pfrom, const std::vector<CBlockHe
20182028
}
20192029
}
20202030

2031+
// If this is an outbound full-relay peer, check to see if we should protect
2032+
// it from the bad/lagging chain logic.
2033+
// Note that outbound block-relay peers are excluded from this protection, and
2034+
// thus always subject to eviction under the bad/lagging chain logic.
2035+
// See ChainSyncTimeoutState.
20212036
if (!pfrom.fDisconnect && pfrom.IsFullOutboundConn() && nodestate->pindexBestKnownBlock != nullptr) {
2022-
// If this is an outbound full-relay peer, check to see if we should protect
2023-
// it from the bad/lagging chain logic.
2024-
// Note that block-relay-only peers are already implicitly protected, so we
2025-
// only consider setting m_protect for the full-relay peers.
20262037
if (g_outbound_peers_with_protect_from_disconnect < MAX_OUTBOUND_PEERS_TO_PROTECT_FROM_DISCONNECT && nodestate->pindexBestKnownBlock->nChainWork >= ::ChainActive().Tip()->nChainWork && !nodestate->m_chain_sync.m_protect) {
20272038
LogPrint(BCLog::NET, "Protecting outbound peer=%d from eviction\n", pfrom.GetId());
20282039
nodestate->m_chain_sync.m_protect = true;

0 commit comments

Comments
 (0)