les: using random request IDs
This commit is contained in:
parent
af8a742d00
commit
c8130df1d9
@ -350,7 +350,7 @@ func (f *lightFetcher) request(p *peer, n *fetcherTreeNode, amount uint64) (uint
|
|||||||
return 0, false
|
return 0, false
|
||||||
}
|
}
|
||||||
|
|
||||||
reqID := f.odr.getNextReqID()
|
reqID := getNextReqID()
|
||||||
n.requested = true
|
n.requested = true
|
||||||
cost := p.GetRequestCost(GetBlockHeadersMsg, int(amount))
|
cost := p.GetRequestCost(GetBlockHeadersMsg, int(amount))
|
||||||
p.fcServer.SendRequest(reqID, cost)
|
p.fcServer.SendRequest(reqID, cost)
|
||||||
|
@ -338,13 +338,13 @@ func (pm *ProtocolManager) handle(p *peer) error {
|
|||||||
glog.V(logger.Debug).Infof("LES: register peer %v", p.id)
|
glog.V(logger.Debug).Infof("LES: register peer %v", p.id)
|
||||||
if pm.lightSync {
|
if pm.lightSync {
|
||||||
requestHeadersByHash := func(origin common.Hash, amount int, skip int, reverse bool) error {
|
requestHeadersByHash := func(origin common.Hash, amount int, skip int, reverse bool) error {
|
||||||
reqID := pm.odr.getNextReqID()
|
reqID := getNextReqID()
|
||||||
cost := p.GetRequestCost(GetBlockHeadersMsg, amount)
|
cost := p.GetRequestCost(GetBlockHeadersMsg, amount)
|
||||||
p.fcServer.SendRequest(reqID, cost)
|
p.fcServer.SendRequest(reqID, cost)
|
||||||
return p.RequestHeadersByHash(reqID, cost, origin, amount, skip, reverse)
|
return p.RequestHeadersByHash(reqID, cost, origin, amount, skip, reverse)
|
||||||
}
|
}
|
||||||
requestHeadersByNumber := func(origin uint64, amount int, skip int, reverse bool) error {
|
requestHeadersByNumber := func(origin uint64, amount int, skip int, reverse bool) error {
|
||||||
reqID := pm.odr.getNextReqID()
|
reqID := getNextReqID()
|
||||||
cost := p.GetRequestCost(GetBlockHeadersMsg, amount)
|
cost := p.GetRequestCost(GetBlockHeadersMsg, amount)
|
||||||
p.fcServer.SendRequest(reqID, cost)
|
p.fcServer.SendRequest(reqID, cost)
|
||||||
return p.RequestHeadersByNumber(reqID, cost, origin, amount, skip, reverse)
|
return p.RequestHeadersByNumber(reqID, cost, origin, amount, skip, reverse)
|
||||||
|
15
les/odr.go
15
les/odr.go
@ -17,6 +17,8 @@
|
|||||||
package les
|
package les
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto/rand"
|
||||||
|
"encoding/binary"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -50,7 +52,6 @@ type LesOdr struct {
|
|||||||
mlock, clock sync.Mutex
|
mlock, clock sync.Mutex
|
||||||
sentReqs map[uint64]*sentReq
|
sentReqs map[uint64]*sentReq
|
||||||
serverPool odrPeerSelector
|
serverPool odrPeerSelector
|
||||||
lastReqID uint64
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewLesOdr(db ethdb.Database) *LesOdr {
|
func NewLesOdr(db ethdb.Database) *LesOdr {
|
||||||
@ -167,7 +168,7 @@ func (self *LesOdr) networkRequest(ctx context.Context, lreq LesOdrRequest) erro
|
|||||||
sentTo: make(map[*peer]chan struct{}),
|
sentTo: make(map[*peer]chan struct{}),
|
||||||
answered: answered, // reply delivered by any peer
|
answered: answered, // reply delivered by any peer
|
||||||
}
|
}
|
||||||
reqID := self.getNextReqID()
|
reqID := getNextReqID()
|
||||||
self.mlock.Lock()
|
self.mlock.Lock()
|
||||||
self.sentReqs[reqID] = req
|
self.sentReqs[reqID] = req
|
||||||
self.mlock.Unlock()
|
self.mlock.Unlock()
|
||||||
@ -236,10 +237,8 @@ func (self *LesOdr) Retrieve(ctx context.Context, req light.OdrRequest) (err err
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *LesOdr) getNextReqID() uint64 {
|
func getNextReqID() uint64 {
|
||||||
self.clock.Lock()
|
var rnd [8]byte
|
||||||
defer self.clock.Unlock()
|
rand.Read(rnd[:])
|
||||||
|
return binary.BigEndian.Uint64(rnd[:])
|
||||||
self.lastReqID++
|
|
||||||
return self.lastReqID
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user