aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2019-06-12 18:07:56 +0800
committerGitHub <noreply@github.com>2019-06-12 18:07:56 +0800
commit3d7d7384ca51a6d1588312ebf17f2811ec4d0b25 (patch)
tree69371105cc370d80efbb065e4a70dff36d570122
parent50e3795eef884ce8c5ae41ee31c7a4fa40196755 (diff)
parentfc4fee8649f11e6ab500af3ee3a458d85fbd0867 (diff)
downloadgo-tangerine-3d7d7384ca51a6d1588312ebf17f2811ec4d0b25.tar
go-tangerine-3d7d7384ca51a6d1588312ebf17f2811ec4d0b25.tar.gz
go-tangerine-3d7d7384ca51a6d1588312ebf17f2811ec4d0b25.tar.bz2
go-tangerine-3d7d7384ca51a6d1588312ebf17f2811ec4d0b25.tar.lz
go-tangerine-3d7d7384ca51a6d1588312ebf17f2811ec4d0b25.tar.xz
go-tangerine-3d7d7384ca51a6d1588312ebf17f2811ec4d0b25.tar.zst
go-tangerine-3d7d7384ca51a6d1588312ebf17f2811ec4d0b25.zip
Merge pull request #19702 from karalabe/txprop-stricter-limiting
eth: enforce stricter known limits on idle peers
-rw-r--r--eth/peer.go24
1 files changed, 24 insertions, 0 deletions
diff --git a/eth/peer.go b/eth/peer.go
index 54c0ea0d5..208badc5e 100644
--- a/eth/peer.go
+++ b/eth/peer.go
@@ -196,9 +196,13 @@ func (p *peer) MarkTransaction(hash common.Hash) {
// SendTransactions sends transactions to the peer and includes the hashes
// in its transaction hash set for future reference.
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 {
p.knownTxs.Add(tx.Hash())
}
+ for p.knownTxs.Cardinality() >= maxKnownTxs {
+ p.knownTxs.Pop()
+ }
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) {
select {
case p.queuedTxs <- txs:
+ // Mark all the transactions as known, but ensure we don't overflow our limits
for _, tx := range txs {
p.knownTxs.Add(tx.Hash())
}
+ for p.knownTxs.Cardinality() >= maxKnownTxs {
+ p.knownTxs.Pop()
+ }
default:
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
// a hash notification.
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 {
p.knownBlocks.Add(hash)
}
+ for p.knownBlocks.Cardinality() >= maxKnownBlocks {
+ p.knownBlocks.Pop()
+ }
request := make(newBlockHashesData, len(hashes))
for i := 0; i < len(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) {
select {
case p.queuedAnns <- block:
+ // Mark all the block hash as known, but ensure we don't overflow our limits
p.knownBlocks.Add(block.Hash())
+ for p.knownBlocks.Cardinality() >= maxKnownBlocks {
+ p.knownBlocks.Pop()
+ }
default:
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.
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())
+ for p.knownBlocks.Cardinality() >= maxKnownBlocks {
+ p.knownBlocks.Pop()
+ }
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) {
select {
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())
+ for p.knownBlocks.Cardinality() >= maxKnownBlocks {
+ p.knownBlocks.Pop()
+ }
default:
p.Log().Debug("Dropping block propagation", "number", block.NumberU64(), "hash", block.Hash())
}