Skip to content

Commit

Permalink
netsync: ignore tx invs when we're not current
Browse files Browse the repository at this point in the history
During ibd sometimes we may ban our sync peers because we're attempting
to fetch some txs that may already been confirmed and don't exist in the
mempool anymore.

Since we shouldn't be fetching txs anyways when we're not current, this
commit changes the handleInvMsg logic to ignore tx invs if the node is
not caught up to the tip.

Fixes #1984
  • Loading branch information
kcalvinalvin committed Nov 29, 2024
1 parent 24eb815 commit fedf34c
Showing 1 changed file with 15 additions and 5 deletions.
20 changes: 15 additions & 5 deletions netsync/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -1171,6 +1171,11 @@ func (sm *SyncManager) handleInvMsg(imsg *invMsg) {
peer.UpdateLastAnnouncedBlock(&invVects[lastBlock].Hash)
}

// Ignore inventory when we're in headers-first mode.
if sm.headersFirstMode {
return
}

// Ignore invs from peers that aren't the sync if we are not current.
// Helps prevent fetching a mass of orphans.
if peer != sm.syncPeer && !sm.current() {
Expand Down Expand Up @@ -1201,15 +1206,20 @@ func (sm *SyncManager) handleInvMsg(imsg *invMsg) {
continue
}

// Ignore txs when we're not current as we can't verify them
// and they'll just go in the orphan pool.
if iv.Type == wire.InvTypeWitnessTx ||
iv.Type == wire.InvTypeTx {

if !sm.current() {
continue
}
}

// Add the inventory to the cache of known inventory
// for the peer.
peer.AddKnownInventory(iv)

// Ignore inventory when we're in headers-first mode.
if sm.headersFirstMode {
continue
}

// Request the inventory if we don't already have it.
haveInv, err := sm.haveInventory(iv)
if err != nil {
Expand Down

0 comments on commit fedf34c

Please sign in to comment.