Skip to content

Commit 049e171

Browse files
rjl493456442karalabe
authored andcommitted
core, eth: implement eth/65 transaction fetcher
1 parent dcffb77 commit 049e171

15 files changed

+1345
-212
lines changed

core/tx_pool.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -864,6 +864,12 @@ func (pool *TxPool) Get(hash common.Hash) *types.Transaction {
864864
return pool.all.Get(hash)
865865
}
866866

867+
// Has returns an indicator whether txpool has a transaction cached with the
868+
// given hash.
869+
func (pool *TxPool) Has(hash common.Hash) bool {
870+
return pool.all.Get(hash) != nil
871+
}
872+
867873
// removeTx removes a single transaction from the queue, moving all subsequent
868874
// transactions back to the future queue.
869875
func (pool *TxPool) removeTx(hash common.Hash, outofbound bool) {

eth/downloader/peer.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -470,7 +470,7 @@ func (ps *peerSet) HeaderIdlePeers() ([]*peerConnection, int) {
470470
defer p.lock.RUnlock()
471471
return p.headerThroughput
472472
}
473-
return ps.idlePeers(62, 64, idle, throughput)
473+
return ps.idlePeers(62, 65, idle, throughput)
474474
}
475475

476476
// BodyIdlePeers retrieves a flat list of all the currently body-idle peers within
@@ -484,7 +484,7 @@ func (ps *peerSet) BodyIdlePeers() ([]*peerConnection, int) {
484484
defer p.lock.RUnlock()
485485
return p.blockThroughput
486486
}
487-
return ps.idlePeers(62, 64, idle, throughput)
487+
return ps.idlePeers(62, 65, idle, throughput)
488488
}
489489

490490
// ReceiptIdlePeers retrieves a flat list of all the currently receipt-idle peers
@@ -498,7 +498,7 @@ func (ps *peerSet) ReceiptIdlePeers() ([]*peerConnection, int) {
498498
defer p.lock.RUnlock()
499499
return p.receiptThroughput
500500
}
501-
return ps.idlePeers(63, 64, idle, throughput)
501+
return ps.idlePeers(63, 65, idle, throughput)
502502
}
503503

504504
// NodeDataIdlePeers retrieves a flat list of all the currently node-data-idle
@@ -512,7 +512,7 @@ func (ps *peerSet) NodeDataIdlePeers() ([]*peerConnection, int) {
512512
defer p.lock.RUnlock()
513513
return p.stateThroughput
514514
}
515-
return ps.idlePeers(63, 64, idle, throughput)
515+
return ps.idlePeers(63, 65, idle, throughput)
516516
}
517517

518518
// idlePeers retrieves a flat list of all currently idle peers satisfying the

eth/fetcher/fetcher.go renamed to eth/fetcher/block_fetcher.go

Lines changed: 66 additions & 63 deletions
Large diffs are not rendered by default.

eth/fetcher/fetcher_test.go renamed to eth/fetcher/block_fetcher_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ func makeChain(n int, seed byte, parent *types.Block) ([]common.Hash, map[common
7676

7777
// fetcherTester is a test simulator for mocking out local block chain.
7878
type fetcherTester struct {
79-
fetcher *Fetcher
79+
fetcher *BlockFetcher
8080

8181
hashes []common.Hash // Hash chain belonging to the tester
8282
blocks map[common.Hash]*types.Block // Blocks belonging to the tester
@@ -92,7 +92,7 @@ func newTester() *fetcherTester {
9292
blocks: map[common.Hash]*types.Block{genesis.Hash(): genesis},
9393
drops: make(map[string]bool),
9494
}
95-
tester.fetcher = New(tester.getBlock, tester.verifyHeader, tester.broadcastBlock, tester.chainHeight, tester.insertChain, tester.dropPeer)
95+
tester.fetcher = NewBlockFetcher(tester.getBlock, tester.verifyHeader, tester.broadcastBlock, tester.chainHeight, tester.insertChain, tester.dropPeer)
9696
tester.fetcher.Start()
9797

9898
return tester

eth/fetcher/metrics.go

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,15 @@ import (
2323
)
2424

2525
var (
26-
propAnnounceInMeter = metrics.NewRegisteredMeter("eth/fetcher/prop/announces/in", nil)
27-
propAnnounceOutTimer = metrics.NewRegisteredTimer("eth/fetcher/prop/announces/out", nil)
28-
propAnnounceDropMeter = metrics.NewRegisteredMeter("eth/fetcher/prop/announces/drop", nil)
29-
propAnnounceDOSMeter = metrics.NewRegisteredMeter("eth/fetcher/prop/announces/dos", nil)
26+
blockAnnounceInMeter = metrics.NewRegisteredMeter("eth/fetcher/prop/block/announces/in", nil)
27+
blockAnnounceOutTimer = metrics.NewRegisteredTimer("eth/fetcher/prop/block/announces/out", nil)
28+
blockAnnounceDropMeter = metrics.NewRegisteredMeter("eth/fetcher/prop/block/announces/drop", nil)
29+
blockAnnounceDOSMeter = metrics.NewRegisteredMeter("eth/fetcher/prop/block/announces/dos", nil)
3030

31-
propBroadcastInMeter = metrics.NewRegisteredMeter("eth/fetcher/prop/broadcasts/in", nil)
32-
propBroadcastOutTimer = metrics.NewRegisteredTimer("eth/fetcher/prop/broadcasts/out", nil)
33-
propBroadcastDropMeter = metrics.NewRegisteredMeter("eth/fetcher/prop/broadcasts/drop", nil)
34-
propBroadcastDOSMeter = metrics.NewRegisteredMeter("eth/fetcher/prop/broadcasts/dos", nil)
31+
blockBroadcastInMeter = metrics.NewRegisteredMeter("eth/fetcher/prop/block/broadcasts/in", nil)
32+
blockBroadcastOutTimer = metrics.NewRegisteredTimer("eth/fetcher/prop/block/broadcasts/out", nil)
33+
blockBroadcastDropMeter = metrics.NewRegisteredMeter("eth/fetcher/prop/block/broadcasts/drop", nil)
34+
blockBroadcastDOSMeter = metrics.NewRegisteredMeter("eth/fetcher/prop/block/broadcasts/dos", nil)
3535

3636
headerFetchMeter = metrics.NewRegisteredMeter("eth/fetcher/fetch/headers", nil)
3737
bodyFetchMeter = metrics.NewRegisteredMeter("eth/fetcher/fetch/bodies", nil)
@@ -40,4 +40,15 @@ var (
4040
headerFilterOutMeter = metrics.NewRegisteredMeter("eth/fetcher/filter/headers/out", nil)
4141
bodyFilterInMeter = metrics.NewRegisteredMeter("eth/fetcher/filter/bodies/in", nil)
4242
bodyFilterOutMeter = metrics.NewRegisteredMeter("eth/fetcher/filter/bodies/out", nil)
43+
44+
txAnnounceInMeter = metrics.NewRegisteredMeter("eth/fetcher/prop/transaction/announces/in", nil)
45+
txAnnounceDOSMeter = metrics.NewRegisteredMeter("eth/fetcher/prop/transaction/announces/dos", nil)
46+
txAnnounceSkipMeter = metrics.NewRegisteredMeter("eth/fetcher/prop/transaction/announces/skip", nil)
47+
txAnnounceUnderpriceMeter = metrics.NewRegisteredMeter("eth/fetcher/prop/transaction/announces/underprice", nil)
48+
txBroadcastInMeter = metrics.NewRegisteredMeter("eth/fetcher/prop/transaction/broadcasts/in", nil)
49+
txFetchOutMeter = metrics.NewRegisteredMeter("eth/fetcher/fetch/transaction/out", nil)
50+
txFetchSuccessMeter = metrics.NewRegisteredMeter("eth/fetcher/fetch/transaction/success", nil)
51+
txFetchTimeoutMeter = metrics.NewRegisteredMeter("eth/fetcher/fetch/transaction/timeout", nil)
52+
txFetchInvalidMeter = metrics.NewRegisteredMeter("eth/fetcher/fetch/transaction/invalid", nil)
53+
txFetchDurationTimer = metrics.NewRegisteredTimer("eth/fetcher/fetch/transaction/duration", nil)
4354
)

0 commit comments

Comments
 (0)