Skip to content

Commit 9938d95

Browse files
committed
eth: rework tx fetcher to use O(1) ops + manage network requests
1 parent 049e171 commit 9938d95

File tree

128 files changed

+2852
-856
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

128 files changed

+2852
-856
lines changed

core/tx_pool.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ package core
1818

1919
import (
2020
"errors"
21-
"fmt"
2221
"math"
2322
"math/big"
2423
"sort"
@@ -53,6 +52,10 @@ const (
5352
)
5453

5554
var (
55+
// ErrAlreadyKnown is returned if the transactions is already contained
56+
// within the pool.
57+
ErrAlreadyKnown = errors.New("already known")
58+
5659
// ErrInvalidSender is returned if the transaction contains an invalid signature.
5760
ErrInvalidSender = errors.New("invalid sender")
5861

@@ -579,7 +582,7 @@ func (pool *TxPool) add(tx *types.Transaction, local bool) (replaced bool, err e
579582
if pool.all.Get(hash) != nil {
580583
log.Trace("Discarding already known transaction", "hash", hash)
581584
knownTxMeter.Mark(1)
582-
return false, fmt.Errorf("known transaction: %x", hash)
585+
return false, ErrAlreadyKnown
583586
}
584587
// If the transaction fails basic validation, discard it
585588
if err := pool.validateTx(tx, local); err != nil {
@@ -786,7 +789,7 @@ func (pool *TxPool) addTxs(txs []*types.Transaction, local, sync bool) []error {
786789
for i, tx := range txs {
787790
// If the transaction is known, pre-set the error slot
788791
if pool.all.Get(tx.Hash()) != nil {
789-
errs[i] = fmt.Errorf("known transaction: %x", tx.Hash())
792+
errs[i] = ErrAlreadyKnown
790793
knownTxMeter.Mark(1)
791794
continue
792795
}

eth/fetcher/block_fetcher.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
"github.com/ethereum/go-ethereum/consensus"
2828
"github.com/ethereum/go-ethereum/core/types"
2929
"github.com/ethereum/go-ethereum/log"
30+
"github.com/ethereum/go-ethereum/metrics"
3031
)
3132

3233
const (
@@ -42,6 +43,26 @@ const (
4243
blockLimit = 64 // Maximum number of unique blocks a peer may have delivered
4344
)
4445

46+
var (
47+
blockAnnounceInMeter = metrics.NewRegisteredMeter("eth/fetcher/block/announces/in", nil)
48+
blockAnnounceOutTimer = metrics.NewRegisteredTimer("eth/fetcher/block/announces/out", nil)
49+
blockAnnounceDropMeter = metrics.NewRegisteredMeter("eth/fetcher/block/announces/drop", nil)
50+
blockAnnounceDOSMeter = metrics.NewRegisteredMeter("eth/fetcher/block/announces/dos", nil)
51+
52+
blockBroadcastInMeter = metrics.NewRegisteredMeter("eth/fetcher/block/broadcasts/in", nil)
53+
blockBroadcastOutTimer = metrics.NewRegisteredTimer("eth/fetcher/block/broadcasts/out", nil)
54+
blockBroadcastDropMeter = metrics.NewRegisteredMeter("eth/fetcher/block/broadcasts/drop", nil)
55+
blockBroadcastDOSMeter = metrics.NewRegisteredMeter("eth/fetcher/block/broadcasts/dos", nil)
56+
57+
headerFetchMeter = metrics.NewRegisteredMeter("eth/fetcher/block/headers", nil)
58+
bodyFetchMeter = metrics.NewRegisteredMeter("eth/fetcher/block/bodies", nil)
59+
60+
headerFilterInMeter = metrics.NewRegisteredMeter("eth/fetcher/block/filter/headers/in", nil)
61+
headerFilterOutMeter = metrics.NewRegisteredMeter("eth/fetcher/block/filter/headers/out", nil)
62+
bodyFilterInMeter = metrics.NewRegisteredMeter("eth/fetcher/block/filter/bodies/in", nil)
63+
bodyFilterOutMeter = metrics.NewRegisteredMeter("eth/fetcher/block/filter/bodies/out", nil)
64+
)
65+
4566
var (
4667
errTerminated = errors.New("terminated")
4768
)

eth/fetcher/metrics.go

Lines changed: 0 additions & 54 deletions
This file was deleted.

0 commit comments

Comments
 (0)