forked from cerc-io/plugeth
eth: enforce stricter known limits on idle peers
This commit is contained in:
parent
50e3795eef
commit
fc4fee8649
24
eth/peer.go
24
eth/peer.go
@ -196,9 +196,13 @@ func (p *peer) MarkTransaction(hash common.Hash) {
|
|||||||
// SendTransactions sends transactions to the peer and includes the hashes
|
// SendTransactions sends transactions to the peer and includes the hashes
|
||||||
// in its transaction hash set for future reference.
|
// in its transaction hash set for future reference.
|
||||||
func (p *peer) SendTransactions(txs types.Transactions) error {
|
func (p *peer) SendTransactions(txs types.Transactions) error {
|
||||||
|
// Mark all the transactions as known, but ensure we don't overflow our limits
|
||||||
for _, tx := range txs {
|
for _, tx := range txs {
|
||||||
p.knownTxs.Add(tx.Hash())
|
p.knownTxs.Add(tx.Hash())
|
||||||
}
|
}
|
||||||
|
for p.knownTxs.Cardinality() >= maxKnownTxs {
|
||||||
|
p.knownTxs.Pop()
|
||||||
|
}
|
||||||
return p2p.Send(p.rw, TxMsg, txs)
|
return p2p.Send(p.rw, TxMsg, txs)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -207,9 +211,13 @@ func (p *peer) SendTransactions(txs types.Transactions) error {
|
|||||||
func (p *peer) AsyncSendTransactions(txs []*types.Transaction) {
|
func (p *peer) AsyncSendTransactions(txs []*types.Transaction) {
|
||||||
select {
|
select {
|
||||||
case p.queuedTxs <- txs:
|
case p.queuedTxs <- txs:
|
||||||
|
// Mark all the transactions as known, but ensure we don't overflow our limits
|
||||||
for _, tx := range txs {
|
for _, tx := range txs {
|
||||||
p.knownTxs.Add(tx.Hash())
|
p.knownTxs.Add(tx.Hash())
|
||||||
}
|
}
|
||||||
|
for p.knownTxs.Cardinality() >= maxKnownTxs {
|
||||||
|
p.knownTxs.Pop()
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
p.Log().Debug("Dropping transaction propagation", "count", len(txs))
|
p.Log().Debug("Dropping transaction propagation", "count", len(txs))
|
||||||
}
|
}
|
||||||
@ -218,9 +226,13 @@ func (p *peer) AsyncSendTransactions(txs []*types.Transaction) {
|
|||||||
// SendNewBlockHashes announces the availability of a number of blocks through
|
// SendNewBlockHashes announces the availability of a number of blocks through
|
||||||
// a hash notification.
|
// a hash notification.
|
||||||
func (p *peer) SendNewBlockHashes(hashes []common.Hash, numbers []uint64) error {
|
func (p *peer) SendNewBlockHashes(hashes []common.Hash, numbers []uint64) error {
|
||||||
|
// Mark all the block hashes as known, but ensure we don't overflow our limits
|
||||||
for _, hash := range hashes {
|
for _, hash := range hashes {
|
||||||
p.knownBlocks.Add(hash)
|
p.knownBlocks.Add(hash)
|
||||||
}
|
}
|
||||||
|
for p.knownBlocks.Cardinality() >= maxKnownBlocks {
|
||||||
|
p.knownBlocks.Pop()
|
||||||
|
}
|
||||||
request := make(newBlockHashesData, len(hashes))
|
request := make(newBlockHashesData, len(hashes))
|
||||||
for i := 0; i < len(hashes); i++ {
|
for i := 0; i < len(hashes); i++ {
|
||||||
request[i].Hash = hashes[i]
|
request[i].Hash = hashes[i]
|
||||||
@ -235,7 +247,11 @@ func (p *peer) SendNewBlockHashes(hashes []common.Hash, numbers []uint64) error
|
|||||||
func (p *peer) AsyncSendNewBlockHash(block *types.Block) {
|
func (p *peer) AsyncSendNewBlockHash(block *types.Block) {
|
||||||
select {
|
select {
|
||||||
case p.queuedAnns <- block:
|
case p.queuedAnns <- block:
|
||||||
|
// Mark all the block hash as known, but ensure we don't overflow our limits
|
||||||
p.knownBlocks.Add(block.Hash())
|
p.knownBlocks.Add(block.Hash())
|
||||||
|
for p.knownBlocks.Cardinality() >= maxKnownBlocks {
|
||||||
|
p.knownBlocks.Pop()
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
p.Log().Debug("Dropping block announcement", "number", block.NumberU64(), "hash", block.Hash())
|
p.Log().Debug("Dropping block announcement", "number", block.NumberU64(), "hash", block.Hash())
|
||||||
}
|
}
|
||||||
@ -243,7 +259,11 @@ func (p *peer) AsyncSendNewBlockHash(block *types.Block) {
|
|||||||
|
|
||||||
// SendNewBlock propagates an entire block to a remote peer.
|
// SendNewBlock propagates an entire block to a remote peer.
|
||||||
func (p *peer) SendNewBlock(block *types.Block, td *big.Int) error {
|
func (p *peer) SendNewBlock(block *types.Block, td *big.Int) error {
|
||||||
|
// Mark all the block hash as known, but ensure we don't overflow our limits
|
||||||
p.knownBlocks.Add(block.Hash())
|
p.knownBlocks.Add(block.Hash())
|
||||||
|
for p.knownBlocks.Cardinality() >= maxKnownBlocks {
|
||||||
|
p.knownBlocks.Pop()
|
||||||
|
}
|
||||||
return p2p.Send(p.rw, NewBlockMsg, []interface{}{block, td})
|
return p2p.Send(p.rw, NewBlockMsg, []interface{}{block, td})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -252,7 +272,11 @@ func (p *peer) SendNewBlock(block *types.Block, td *big.Int) error {
|
|||||||
func (p *peer) AsyncSendNewBlock(block *types.Block, td *big.Int) {
|
func (p *peer) AsyncSendNewBlock(block *types.Block, td *big.Int) {
|
||||||
select {
|
select {
|
||||||
case p.queuedProps <- &propEvent{block: block, td: td}:
|
case p.queuedProps <- &propEvent{block: block, td: td}:
|
||||||
|
// Mark all the block hash as known, but ensure we don't overflow our limits
|
||||||
p.knownBlocks.Add(block.Hash())
|
p.knownBlocks.Add(block.Hash())
|
||||||
|
for p.knownBlocks.Cardinality() >= maxKnownBlocks {
|
||||||
|
p.knownBlocks.Pop()
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
p.Log().Debug("Dropping block propagation", "number", block.NumberU64(), "hash", block.Hash())
|
p.Log().Debug("Dropping block propagation", "number", block.NumberU64(), "hash", block.Hash())
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user