aboutsummaryrefslogtreecommitdiffstats
path: root/les/peer.go
diff options
context:
space:
mode:
Diffstat (limited to 'les/peer.go')
-rw-r--r--les/peer.go35
1 files changed, 27 insertions, 8 deletions
diff --git a/les/peer.go b/les/peer.go
index ef5f8a6ce..4793da296 100644
--- a/les/peer.go
+++ b/les/peer.go
@@ -22,6 +22,7 @@ import (
"fmt"
"math/big"
"sync"
+ "time"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
@@ -37,7 +38,10 @@ var (
errNotRegistered = errors.New("peer is not registered")
)
-const maxHeadInfoLen = 20
+const (
+ maxHeadInfoLen = 20
+ maxResponseErrors = 50 // number of invalid responses tolerated (makes the protocol less brittle but still avoids spam)
+)
type peer struct {
*p2p.Peer
@@ -53,9 +57,11 @@ type peer struct {
lock sync.RWMutex
announceChn chan announceData
+ sendQueue *execQueue
- poolEntry *poolEntry
- hasBlock func(common.Hash, uint64) bool
+ poolEntry *poolEntry
+ hasBlock func(common.Hash, uint64) bool
+ responseErrors int
fcClient *flowcontrol.ClientNode // nil if the peer is server only
fcServer *flowcontrol.ServerNode // nil if the peer is client only
@@ -76,6 +82,14 @@ func newPeer(version, network int, p *p2p.Peer, rw p2p.MsgReadWriter) *peer {
}
}
+func (p *peer) canQueue() bool {
+ return p.sendQueue.canQueue()
+}
+
+func (p *peer) queueSend(f func()) {
+ p.sendQueue.queue(f)
+}
+
// Info gathers and returns a collection of metadata known about a peer.
func (p *peer) Info() *eth.PeerInfo {
return &eth.PeerInfo{
@@ -117,6 +131,11 @@ func (p *peer) Td() *big.Int {
return new(big.Int).Set(p.headInfo.Td)
}
+// waitBefore implements distPeer interface
+func (p *peer) waitBefore(maxCost uint64) (time.Duration, float64) {
+ return p.fcServer.CanSend(maxCost)
+}
+
func sendRequest(w p2p.MsgWriter, msgcode, reqID, cost uint64, data interface{}) error {
type req struct {
ReqID uint64
@@ -237,11 +256,8 @@ func (p *peer) RequestHeaderProofs(reqID, cost uint64, reqs []*ChtReq) error {
return sendRequest(p.rw, GetHeaderProofsMsg, reqID, cost, reqs)
}
-func (p *peer) SendTxs(cost uint64, txs types.Transactions) error {
+func (p *peer) SendTxs(reqID, cost uint64, txs types.Transactions) error {
p.Log().Debug("Fetching batch of transactions", "count", len(txs))
- reqID := getNextReqID()
- p.fcServer.MustAssignRequest(reqID)
- p.fcServer.SendRequest(reqID, cost)
return p2p.Send(p.rw, SendTxMsg, txs)
}
@@ -444,6 +460,7 @@ func (ps *peerSet) Register(p *peer) error {
return errAlreadyRegistered
}
ps.peers[p.id] = p
+ p.sendQueue = newExecQueue(100)
return nil
}
@@ -453,8 +470,10 @@ func (ps *peerSet) Unregister(id string) error {
ps.lock.Lock()
defer ps.lock.Unlock()
- if _, ok := ps.peers[id]; !ok {
+ if p, ok := ps.peers[id]; !ok {
return errNotRegistered
+ } else {
+ p.sendQueue.quit()
}
delete(ps.peers, id)
return nil
10123a80593f0143'>eth, les: defer starting LES service until ETH initial sync is finishedZsolt Felfoldi2016-12-103-2/+13 * | core: bugfix state change race condition in txpool (#3412)bas-vk2016-12-114-9/+17 |/ * core, core/vm: implemented a generic environment (#3348)Jeffrey Wilcke2016-12-062-5/+9 * core, core/vm, eth/filters: move Removed field into vm.LogFelix Lange2016-12-054-109/+63 * eth, miner: removed unnecessary state.Copy()Martin Holst Swende2016-11-301-2/+2 * eth/filter: add support for pending logs (#3219)bas-vk2016-11-286-90/+302 * eth/filters: simplify query object decodingFelix Lange2016-11-281-47/+44 * eth: removed http doc backend apiJeffrey Wilcke2016-11-251-7/+0 * common/registrar: delete the old registrar codeFelix Lange2016-11-251-7/+0 * core: improved bad block error reporting (#3320)Jeffrey Wilcke2016-11-231-0/+2 * core/types, params: EIP#155Jeffrey Wilcke2016-11-136-21/+27 * core, core/state, trie: EIP158, reprice & skip empty account writeJeffrey Wilcke2016-11-1311-22/+24 * all: update license informationFelix Lange2016-11-095-11/+11 * core/types: remove header accessorsFelix Lange2016-11-092-3/+3 * p2p/discv5: added new topic discovery packageZsolt Felfoldi2016-11-091-3/+2 * cmd, eth: added light client and light server modeszsfelfoldi2016-11-0911-83/+193 * les: light client protocol and APIZsolt Felfoldi2016-11-097-25/+268 * eth/downloader: clear pending requests when switching trie rootPéter Szilágyi2016-11-011-9/+18 * eth/downloader: lower a state sync log level (users freak out)Péter Szilágyi2016-11-011-1/+1 * eth/downloader: reduce fast sync block requirements, fix testPéter Szilágyi2016-10-312-13/+28 * core/state, eth/downloader, trie: reset fast-failure on progressPéter Szilágyi2016-10-313-160/+206 * Godeps, vendor: convert dependency management to trash (#3198)Péter Szilágyi2016-10-294-158/+13 * eth/downloader: fix a data race in a log outputPéter Szilágyi2016-10-211-1/+2 * cmd/geth, code, eth/downloader: tune import logs and mem statsPéter Szilágyi2016-10-211-1/+1 * common, core, eth/downloader: adjust import log formattingPéter Szilágyi2016-10-181-1/+1 * trie, core/state: improve memory usage and performance (#3135)Felix Lange2016-10-151-1/+1 * eth: move "timed out DAO fork check, dropping" to debug levelFelix Lange2016-10-081-1/+1 * Merge pull request #3092 from fjl/state-journalJeffrey Wilcke2016-10-061-3/+3 |\ | * core/state: implement reverts by journaling all changesFelix Lange2016-10-061-3/+3 * | eth: monitor malicious header retrieval requestsPéter Szilágyi2016-10-052-5/+31 |/ * core, eth, trie: reuse trie journals in all our codePéter Szilágyi2016-09-282-4/+4 * core/state: track all accounts in canon stateFelix Lange2016-09-261-3/+3 * cmd, eth: drop the blockchain version from cli/eth configsPéter Szilágyi2016-09-151-4/+3 * ethereum, ethclient: add SyncProgress API endpointPéter Szilágyi2016-09-063-48/+48 * core, eth, internal, miner: optimize txpool for quick opsPéter Szilágyi2016-09-026-20/+33 * core, eth, miner: only retain 1 tx/nonce, remove bad onesPéter Szilágyi2016-09-021-1/+1 * accounts/abi/bind: use ethereum interfacesFelix Lange2016-08-221-45/+47 * eth: don't call ValidateFieldsFelix Lange2016-08-041-3/+0 * eth/fetcher: small typo fix (#2932)Stein Dekker2016-08-231-1/+1 * core/vm, eth: Add support for javascript trace functionsNick Johnson2016-08-231-8/+57 * Merge pull request #2923 from Arachnid/tracingPéter Szilágyi2016-08-221-34/+22 |\ | * core/vm: Refactor tracing to make Tracer the main interfaceNick Johnson2016-08-221-34/+22 * | eth/fetcher: fix a log message formatting issuePéter Szilágyi2016-08-191-1/+1 |/ * Merge pull request #2909 from fjl/account-manager-cleanupFelix Lange2016-08-182-32/+13 |\ | * common/compiler: simplify solc wrapperFelix Lange2016-08-172-4/+2 | * eth: remove dapp database remainsFelix Lange2016-08-171-22/+6 | * cmd/utils, node: create account manager in package nodeFelix Lange2016-08-171-6/+5 * | rpc: refactor subscriptions and filtersBas van Kervel2016-08-176-768/+1039 * | core: ensure the canonical block is written before the canonical hash is setBas van Kervel2016-08-161-3/+6 * | Merge pull request #2866 from karalabe/downloader-future-ancestorsPéter Szilágyi2016-08-161-9/+17 |\ \ | |/ |/| | * eth/downloader: fewer headers and futures too un ancestor lookupPéter Szilágyi2016-07-261-9/+17 * | Merge pull request #2868 from karalabe/downloader-abort-master-dropPéter Szilágyi2016-08-091-2/+15 |\ \ | * | eth/downloader: abort sync if master drops (timeout prev)Péter Szilágyi2016-07-261-2/+15 | |/ * | Merge pull request #2867 from karalabe/dao-challenge-finishPéter Szilágyi2016-08-092-1/+2 |\ \ | * | eth, eth/downloader: don't forward the DAO challenge headerPéter Szilágyi2016-07-262-1/+2 | |/ * | Merge pull request #2861 from karalabe/track-peer-heads-properlyPéter Szilágyi2016-08-096-50/+59 |\ \ | |/ |/| | * eth, eth/downloader: better remote head trackingPéter Szilágyi2016-07-256-50/+59 * | Merge pull request #2855 from karalabe/downloader-fix-stall-dropFelix Lange2016-07-251-1/+8 |\ \ | |/ |/| | * eth/downloader: fix the stall checks/drops during syncPéter Szilágyi2016-07-221-1/+8 * | Merge pull request #2842 from fjl/downloader-remove-eth61Felix Lange2016-07-2315-1524/+119 |\ \ | |/ |/| | * eth, eth/downloader, eth/fetcher: delete eth/61 codeFelix Lange2016-07-2215-1524/+119 * | Merge pull request #2833 from karalabe/fix-dao-challenge-annoyancePéter Szilágyi2016-07-221-0/+7 |\ \ | * | eth: cancel DAO challenge on peer drop (annoying log)Péter Szilágyi2016-07-191-0/+7 | |/ * | Merge pull request #2711 from hdiedrich/1.4.7-filter-races-cleanupFelix Lange2016-07-202-28/+54 |\ \ | * | eth: fix #2710 filter racesHenning Diedrich2016-07-042-28/+54 * | | eth: fixed chaindb upgradezsfelfoldi2016-07-191-0/+13 | |/ |/| * | cmd/utils, eth: display the user's current fork, minor text tweakPéter Szilágyi2016-07-161-0/+1 * | cmd, core, eth, miner, params, tests: finalize the DAO forkPéter Szilágyi2016-07-151-4/+4 * | accounts, core, eth: pass chain config for chain maker to test DAOPéter Szilágyi2016-07-156-7/+7 * | core, eth: enforce network split post DAO hard-forkPéter Szilágyi2016-07-153-7/+134 * | cmd, core, eth, params: implement flags to control dao fork blocksPéter Szilágyi2016-07-151-0/+2 * | Merge pull request #2799 from zsfelfoldi/api-nonce-fix2Péter Szilágyi2016-07-121-2/+2 |\ \ | * | core: added CheckNonce() to Message interfacezsfelfoldi2016-07-111-2/+2 * | | eth/downloader: return invalid chain (peer drop) on import failsPéter Szilágyi2016-07-121-1/+1 |/ / * | eth: disable eth/61 to prepare for more elaborate fork sync algosPéter Szilágyi2016-07-041-2/+2 * | cmd, common, console, eth, release: drop redundant "full"sPéter Szilágyi2016-06-306-79/+79 * | Merge pull request #2159 from zsfelfoldi/light-backendPéter Szilágyi2016-06-307-1747/+510 |\ \ | |/ |/| | * eth: separate common and full node-specific API and backend servicezsfelfoldi2016-06-167-1747/+510 * | Merge pull request #2686 from obscuren/issue-2542Péter Szilágyi2016-06-141-0/+1 |\ \ | |/ |/| | * core/state, eth: Updated suicides objects when tracing transactionsJeffrey Wilcke2016-06-131-0/+1 * | Merge pull request #2455 from zsfelfoldi/chaindbJeffrey Wilcke2016-06-1311-149/+400 |\ \ | * | core: improved chainDb using sequential keyszsfelfoldi2016-06-0711-149/+400 | |/ * / eth/downloader: fix occasional fast sync critical section test failsPéter Szilágyi2016-06-131-1/+3 |/ * eth: don't accept transactions until we sync up with the networkPéter Szilágyi2016-06-063-4/+13 * eth/downloader: adaptive quality of service tuningPéter Szilágyi2016-06-06