mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-20 10:52:25 +00:00
les: address comments
This commit is contained in:
parent
0e393bb1ad
commit
8c6e652c6d
3 changed files with 23 additions and 21 deletions
|
|
@ -21,6 +21,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"math/big"
|
"math/big"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
|
|
@ -312,7 +313,7 @@ func (h *serverHandler) measure(setup *benchmarkSetup, count int) error {
|
||||||
}()
|
}()
|
||||||
go func() {
|
go func() {
|
||||||
for i := 0; i < count; i++ {
|
for i := 0; i < count; i++ {
|
||||||
if err := h.handleMsg(serverPeer); err != nil {
|
if err := h.handleMsg(serverPeer, &sync.WaitGroup{}); err != nil {
|
||||||
errCh <- err
|
errCh <- err
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -94,7 +94,6 @@ type peer struct {
|
||||||
sendQueue *execQueue
|
sendQueue *execQueue
|
||||||
|
|
||||||
errCh chan error
|
errCh chan error
|
||||||
wg sync.WaitGroup // Wait group used to track all in-flight task routines.
|
|
||||||
|
|
||||||
// responseLock ensures that responses are queued in the same order as
|
// responseLock ensures that responses are queued in the same order as
|
||||||
// RequestProcessed is called
|
// RequestProcessed is called
|
||||||
|
|
|
||||||
|
|
@ -139,9 +139,11 @@ func (h *serverHandler) handle(p *peer) error {
|
||||||
}
|
}
|
||||||
clientConnectionGauge.Update(int64(h.server.peers.Len()))
|
clientConnectionGauge.Update(int64(h.server.peers.Len()))
|
||||||
|
|
||||||
|
var wg sync.WaitGroup // Wait group used to track all in-flight task routines.
|
||||||
|
|
||||||
connectedAt := mclock.Now()
|
connectedAt := mclock.Now()
|
||||||
defer func() {
|
defer func() {
|
||||||
p.wg.Wait() // Ensure all background task routines have exited.
|
wg.Wait() // Ensure all background task routines have exited.
|
||||||
h.server.clientPool.disconnect(p)
|
h.server.clientPool.disconnect(p)
|
||||||
h.server.peers.Unregister(p.id)
|
h.server.peers.Unregister(p.id)
|
||||||
clientConnectionGauge.Update(int64(h.server.peers.Len()))
|
clientConnectionGauge.Update(int64(h.server.peers.Len()))
|
||||||
|
|
@ -156,7 +158,7 @@ func (h *serverHandler) handle(p *peer) error {
|
||||||
return err
|
return err
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
if err := h.handleMsg(p); err != nil {
|
if err := h.handleMsg(p, &wg); err != nil {
|
||||||
p.Log().Debug("Light Ethereum message handling failed", "err", err)
|
p.Log().Debug("Light Ethereum message handling failed", "err", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
@ -165,7 +167,7 @@ func (h *serverHandler) handle(p *peer) error {
|
||||||
|
|
||||||
// handleMsg is invoked whenever an inbound message is received from a remote
|
// handleMsg is invoked whenever an inbound message is received from a remote
|
||||||
// peer. The remote connection is torn down upon returning any error.
|
// peer. The remote connection is torn down upon returning any error.
|
||||||
func (h *serverHandler) handleMsg(p *peer) error {
|
func (h *serverHandler) handleMsg(p *peer, wg *sync.WaitGroup) error {
|
||||||
// Read the next message from the remote peer, and ensure it's fully consumed
|
// Read the next message from the remote peer, and ensure it's fully consumed
|
||||||
msg, err := p.rw.ReadMsg()
|
msg, err := p.rw.ReadMsg()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -276,9 +278,9 @@ func (h *serverHandler) handleMsg(p *peer) error {
|
||||||
}
|
}
|
||||||
query := req.Query
|
query := req.Query
|
||||||
if accept(req.ReqID, query.Amount, MaxHeaderFetch) {
|
if accept(req.ReqID, query.Amount, MaxHeaderFetch) {
|
||||||
p.wg.Add(1)
|
wg.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
defer p.wg.Done()
|
defer wg.Done()
|
||||||
hashMode := query.Origin.Hash != (common.Hash{})
|
hashMode := query.Origin.Hash != (common.Hash{})
|
||||||
first := true
|
first := true
|
||||||
maxNonCanonical := uint64(100)
|
maxNonCanonical := uint64(100)
|
||||||
|
|
@ -392,9 +394,9 @@ func (h *serverHandler) handleMsg(p *peer) error {
|
||||||
)
|
)
|
||||||
reqCnt := len(req.Hashes)
|
reqCnt := len(req.Hashes)
|
||||||
if accept(req.ReqID, uint64(reqCnt), MaxBodyFetch) {
|
if accept(req.ReqID, uint64(reqCnt), MaxBodyFetch) {
|
||||||
p.wg.Add(1)
|
wg.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
defer p.wg.Done()
|
defer wg.Done()
|
||||||
for i, hash := range req.Hashes {
|
for i, hash := range req.Hashes {
|
||||||
if i != 0 && !task.waitOrStop() {
|
if i != 0 && !task.waitOrStop() {
|
||||||
sendResponse(req.ReqID, 0, nil, task.servingTime)
|
sendResponse(req.ReqID, 0, nil, task.servingTime)
|
||||||
|
|
@ -440,9 +442,9 @@ func (h *serverHandler) handleMsg(p *peer) error {
|
||||||
)
|
)
|
||||||
reqCnt := len(req.Reqs)
|
reqCnt := len(req.Reqs)
|
||||||
if accept(req.ReqID, uint64(reqCnt), MaxCodeFetch) {
|
if accept(req.ReqID, uint64(reqCnt), MaxCodeFetch) {
|
||||||
p.wg.Add(1)
|
wg.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
defer p.wg.Done()
|
defer wg.Done()
|
||||||
for i, request := range req.Reqs {
|
for i, request := range req.Reqs {
|
||||||
if i != 0 && !task.waitOrStop() {
|
if i != 0 && !task.waitOrStop() {
|
||||||
sendResponse(req.ReqID, 0, nil, task.servingTime)
|
sendResponse(req.ReqID, 0, nil, task.servingTime)
|
||||||
|
|
@ -511,9 +513,9 @@ func (h *serverHandler) handleMsg(p *peer) error {
|
||||||
)
|
)
|
||||||
reqCnt := len(req.Hashes)
|
reqCnt := len(req.Hashes)
|
||||||
if accept(req.ReqID, uint64(reqCnt), MaxReceiptFetch) {
|
if accept(req.ReqID, uint64(reqCnt), MaxReceiptFetch) {
|
||||||
p.wg.Add(1)
|
wg.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
defer p.wg.Done()
|
defer wg.Done()
|
||||||
for i, hash := range req.Hashes {
|
for i, hash := range req.Hashes {
|
||||||
if i != 0 && !task.waitOrStop() {
|
if i != 0 && !task.waitOrStop() {
|
||||||
sendResponse(req.ReqID, 0, nil, task.servingTime)
|
sendResponse(req.ReqID, 0, nil, task.servingTime)
|
||||||
|
|
@ -568,9 +570,9 @@ func (h *serverHandler) handleMsg(p *peer) error {
|
||||||
)
|
)
|
||||||
reqCnt := len(req.Reqs)
|
reqCnt := len(req.Reqs)
|
||||||
if accept(req.ReqID, uint64(reqCnt), MaxProofsFetch) {
|
if accept(req.ReqID, uint64(reqCnt), MaxProofsFetch) {
|
||||||
p.wg.Add(1)
|
wg.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
defer p.wg.Done()
|
defer wg.Done()
|
||||||
nodes := light.NewNodeSet()
|
nodes := light.NewNodeSet()
|
||||||
|
|
||||||
for i, request := range req.Reqs {
|
for i, request := range req.Reqs {
|
||||||
|
|
@ -671,9 +673,9 @@ func (h *serverHandler) handleMsg(p *peer) error {
|
||||||
)
|
)
|
||||||
reqCnt := len(req.Reqs)
|
reqCnt := len(req.Reqs)
|
||||||
if accept(req.ReqID, uint64(reqCnt), MaxHelperTrieProofsFetch) {
|
if accept(req.ReqID, uint64(reqCnt), MaxHelperTrieProofsFetch) {
|
||||||
p.wg.Add(1)
|
wg.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
defer p.wg.Done()
|
defer wg.Done()
|
||||||
var (
|
var (
|
||||||
lastIdx uint64
|
lastIdx uint64
|
||||||
lastType uint
|
lastType uint
|
||||||
|
|
@ -740,9 +742,9 @@ func (h *serverHandler) handleMsg(p *peer) error {
|
||||||
}
|
}
|
||||||
reqCnt := len(req.Txs)
|
reqCnt := len(req.Txs)
|
||||||
if accept(req.ReqID, uint64(reqCnt), MaxTxSend) {
|
if accept(req.ReqID, uint64(reqCnt), MaxTxSend) {
|
||||||
p.wg.Add(1)
|
wg.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
defer p.wg.Done()
|
defer wg.Done()
|
||||||
stats := make([]light.TxStatus, len(req.Txs))
|
stats := make([]light.TxStatus, len(req.Txs))
|
||||||
for i, tx := range req.Txs {
|
for i, tx := range req.Txs {
|
||||||
if i != 0 && !task.waitOrStop() {
|
if i != 0 && !task.waitOrStop() {
|
||||||
|
|
@ -788,9 +790,9 @@ func (h *serverHandler) handleMsg(p *peer) error {
|
||||||
}
|
}
|
||||||
reqCnt := len(req.Hashes)
|
reqCnt := len(req.Hashes)
|
||||||
if accept(req.ReqID, uint64(reqCnt), MaxTxStatus) {
|
if accept(req.ReqID, uint64(reqCnt), MaxTxStatus) {
|
||||||
p.wg.Add(1)
|
wg.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
defer p.wg.Done()
|
defer wg.Done()
|
||||||
stats := make([]light.TxStatus, len(req.Hashes))
|
stats := make([]light.TxStatus, len(req.Hashes))
|
||||||
for i, hash := range req.Hashes {
|
for i, hash := range req.Hashes {
|
||||||
if i != 0 && !task.waitOrStop() {
|
if i != 0 && !task.waitOrStop() {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue