From 1b18d419c11429b9fdeb0d8aa79e3a2d8e639d14 Mon Sep 17 00:00:00 2001 From: rjl493456442 Date: Tue, 27 Aug 2019 15:49:10 +0800 Subject: [PATCH] les: fix issue --- les/server_handler.go | 15 ++++++++------- les/test_helper.go | 1 + 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/les/server_handler.go b/les/server_handler.go index fd50a025dc..e34be4d3df 100644 --- a/les/server_handler.go +++ b/les/server_handler.go @@ -127,16 +127,17 @@ func (h *serverHandler) handle(p *peer) error { } defer p.fcClient.Disconnect() - // Register the peer locally - if err := h.server.peers.Register(p); err != nil { - p.Log().Error("Light Ethereum peer registration failed", "err", err) - return err - } // Disconnect the inbound peer if it's rejected by clientPool - if h.server.clientPool.connect(p, 0) { + if !h.server.clientPool.connect(p, 0) { p.Log().Debug("Light Ethereum peer registration failed", "err", errFullClientPool) return errFullClientPool } + // Register the peer locally + if err := h.server.peers.Register(p); err != nil { + h.server.clientPool.disconnect(p) + p.Log().Error("Light Ethereum peer registration failed", "err", err) + return err + } clientConnectionGauge.Update(int64(h.server.peers.Len())) var wg sync.WaitGroup // Wait group used to track all in-flight task routines. @@ -144,8 +145,8 @@ func (h *serverHandler) handle(p *peer) error { connectedAt := mclock.Now() defer func() { wg.Wait() // Ensure all background task routines have exited. - h.server.clientPool.disconnect(p) h.server.peers.Unregister(p.id) + h.server.clientPool.disconnect(p) clientConnectionGauge.Update(int64(h.server.peers.Len())) connectionTimer.Update(time.Duration(mclock.Now() - connectedAt)) }() diff --git a/les/test_helper.go b/les/test_helper.go index 70a724b72a..79cf323d62 100644 --- a/les/test_helper.go +++ b/les/test_helper.go @@ -281,6 +281,7 @@ func newTestServerHandler(blocks int, indexers []*core.ChainIndexer, db ethdb.Da server.costTracker, server.freeCapacity = newCostTracker(db, server.config) server.costTracker.testCostList = testCostList(0) // Disable flow control mechanism. server.clientPool = newClientPool(db, 1, 10000, clock, nil) + server.clientPool.setLimits(10000, 10000) // Assign enough capacity for clientpool server.handler = newServerHandler(server, simulation.Blockchain(), db, txpool, func() bool { return true }) if server.oracle != nil { server.oracle.start(simulation)