Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
854f068e
Unverified
Commit
854f068e
authored
Apr 27, 2021
by
gary rong
Committed by
GitHub
Apr 27, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
les: polish code (#22625)
* les: polish code * les/vflus/server: fixes * les: fix lint
parent
9b99e3df
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
83 additions
and
63 deletions
+83
-63
metrics.go
les/metrics.go
+0
-1
peer.go
les/peer.go
+0
-1
server_handler.go
les/server_handler.go
+9
-12
prioritypool.go
les/vflux/server/prioritypool.go
+74
-49
No files found.
les/metrics.go
View file @
854f068e
...
@@ -71,7 +71,6 @@ var (
...
@@ -71,7 +71,6 @@ var (
connectionTimer
=
metrics
.
NewRegisteredTimer
(
"les/connection/duration"
,
nil
)
connectionTimer
=
metrics
.
NewRegisteredTimer
(
"les/connection/duration"
,
nil
)
serverConnectionGauge
=
metrics
.
NewRegisteredGauge
(
"les/connection/server"
,
nil
)
serverConnectionGauge
=
metrics
.
NewRegisteredGauge
(
"les/connection/server"
,
nil
)
clientConnectionGauge
=
metrics
.
NewRegisteredGauge
(
"les/connection/client"
,
nil
)
totalCapacityGauge
=
metrics
.
NewRegisteredGauge
(
"les/server/totalCapacity"
,
nil
)
totalCapacityGauge
=
metrics
.
NewRegisteredGauge
(
"les/server/totalCapacity"
,
nil
)
totalRechargeGauge
=
metrics
.
NewRegisteredGauge
(
"les/server/totalRecharge"
,
nil
)
totalRechargeGauge
=
metrics
.
NewRegisteredGauge
(
"les/server/totalRecharge"
,
nil
)
...
...
les/peer.go
View file @
854f068e
...
@@ -1099,7 +1099,6 @@ func (p *clientPeer) Handshake(td *big.Int, head common.Hash, headNum uint64, ge
...
@@ -1099,7 +1099,6 @@ func (p *clientPeer) Handshake(td *big.Int, head common.Hash, headNum uint64, ge
// set default announceType on server side
// set default announceType on server side
p
.
announceType
=
announceTypeSimple
p
.
announceType
=
announceTypeSimple
}
}
p
.
fcClient
=
flowcontrol
.
NewClientNode
(
server
.
fcManager
,
p
.
fcParams
)
}
}
return
nil
return
nil
})
})
...
...
les/server_handler.go
View file @
854f068e
...
@@ -30,6 +30,7 @@ import (
...
@@ -30,6 +30,7 @@ import (
"github.com/ethereum/go-ethereum/core/state"
"github.com/ethereum/go-ethereum/core/state"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/ethdb"
"github.com/ethereum/go-ethereum/ethdb"
"github.com/ethereum/go-ethereum/les/flowcontrol"
"github.com/ethereum/go-ethereum/light"
"github.com/ethereum/go-ethereum/light"
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/metrics"
"github.com/ethereum/go-ethereum/metrics"
...
@@ -122,26 +123,27 @@ func (h *serverHandler) handle(p *clientPeer) error {
...
@@ -122,26 +123,27 @@ func (h *serverHandler) handle(p *clientPeer) error {
p
.
Log
()
.
Debug
(
"Light Ethereum handshake failed"
,
"err"
,
err
)
p
.
Log
()
.
Debug
(
"Light Ethereum handshake failed"
,
"err"
,
err
)
return
err
return
err
}
}
// Connected to another server, no messages expected, just wait for disconnection
if
p
.
server
{
if
p
.
server
{
if
err
:=
h
.
server
.
serverset
.
register
(
p
);
err
!=
nil
{
if
err
:=
h
.
server
.
serverset
.
register
(
p
);
err
!=
nil
{
return
err
return
err
}
}
// connected to another server, no messages expected, just wait for disconnection
_
,
err
:=
p
.
rw
.
ReadMsg
()
_
,
err
:=
p
.
rw
.
ReadMsg
()
h
.
server
.
serverset
.
unregister
(
p
)
h
.
server
.
serverset
.
unregister
(
p
)
return
err
return
err
}
}
defer
p
.
fcClient
.
Disconnect
()
// set by handshake if it's not another server
// Setup flow control mechanism for the peer
p
.
fcClient
=
flowcontrol
.
NewClientNode
(
h
.
server
.
fcManager
,
p
.
fcParams
)
defer
p
.
fcClient
.
Disconnect
()
// Reject light clients if server is not synced.
// Reject light clients if server is not synced. Put this checking here, so
//
// that "non-synced" les-server peers are still allowed to keep the connection.
// Put this checking here, so that "non-synced" les-server peers are still allowed
// to keep the connection.
if
!
h
.
synced
()
{
if
!
h
.
synced
()
{
p
.
Log
()
.
Debug
(
"Light server not synced, rejecting peer"
)
p
.
Log
()
.
Debug
(
"Light server not synced, rejecting peer"
)
return
p2p
.
DiscRequested
return
p2p
.
DiscRequested
}
}
// Register the peer into the peerset and clientpool
if
err
:=
h
.
server
.
peers
.
register
(
p
);
err
!=
nil
{
if
err
:=
h
.
server
.
peers
.
register
(
p
);
err
!=
nil
{
return
err
return
err
}
}
...
@@ -150,19 +152,14 @@ func (h *serverHandler) handle(p *clientPeer) error {
...
@@ -150,19 +152,14 @@ func (h *serverHandler) handle(p *clientPeer) error {
p
.
Log
()
.
Debug
(
"Client pool already closed"
)
p
.
Log
()
.
Debug
(
"Client pool already closed"
)
return
p2p
.
DiscRequested
return
p2p
.
DiscRequested
}
}
activeCount
,
_
:=
h
.
server
.
clientPool
.
Active
()
clientConnectionGauge
.
Update
(
int64
(
activeCount
))
p
.
connectedAt
=
mclock
.
Now
()
p
.
connectedAt
=
mclock
.
Now
()
var
wg
sync
.
WaitGroup
// Wait group used to track all in-flight task routines.
var
wg
sync
.
WaitGroup
// Wait group used to track all in-flight task routines.
defer
func
()
{
defer
func
()
{
wg
.
Wait
()
// Ensure all background task routines have exited.
wg
.
Wait
()
// Ensure all background task routines have exited.
h
.
server
.
clientPool
.
Unregister
(
p
)
h
.
server
.
clientPool
.
Unregister
(
p
)
h
.
server
.
peers
.
unregister
(
p
.
ID
())
h
.
server
.
peers
.
unregister
(
p
.
ID
())
p
.
balance
=
nil
p
.
balance
=
nil
activeCount
,
_
:=
h
.
server
.
clientPool
.
Active
()
clientConnectionGauge
.
Update
(
int64
(
activeCount
))
connectionTimer
.
Update
(
time
.
Duration
(
mclock
.
Now
()
-
p
.
connectedAt
))
connectionTimer
.
Update
(
time
.
Duration
(
mclock
.
Now
()
-
p
.
connectedAt
))
}()
}()
...
...
les/vflux/server/prioritypool.go
View file @
854f068e
...
@@ -63,20 +63,22 @@ type priorityPool struct {
...
@@ -63,20 +63,22 @@ type priorityPool struct {
ns
*
nodestate
.
NodeStateMachine
ns
*
nodestate
.
NodeStateMachine
clock
mclock
.
Clock
clock
mclock
.
Clock
lock
sync
.
Mutex
lock
sync
.
Mutex
inactiveQueue
*
prque
.
Prque
maxCount
,
maxCap
uint64
maxCount
,
maxCap
uint64
minCap
uint64
minCap
uint64
activeBias
time
.
Duration
activeBias
time
.
Duration
capacityStepDiv
,
fineStepDiv
uint64
capacityStepDiv
,
fineStepDiv
uint64
// The snapshot of priority pool for query.
cachedCurve
*
capacityCurve
cachedCurve
*
capacityCurve
ccUpdatedAt
mclock
.
AbsTime
ccUpdatedAt
mclock
.
AbsTime
ccUpdateForced
bool
ccUpdateForced
bool
tempState
[]
*
ppNodeInfo
// nodes currently in temporary state
// Runtime status of prioritypool, represents the
// the following fields represent the temporary state if tempState is not empty
// temporary state if tempState is not empty
tempState
[]
*
ppNodeInfo
activeCount
,
activeCap
uint64
activeCount
,
activeCap
uint64
activeQueue
*
prque
.
LazyQueue
activeQueue
*
prque
.
LazyQueue
inactiveQueue
*
prque
.
Prque
}
}
// ppNodeInfo is the internal node descriptor of priorityPool
// ppNodeInfo is the internal node descriptor of priorityPool
...
@@ -89,8 +91,9 @@ type ppNodeInfo struct {
...
@@ -89,8 +91,9 @@ type ppNodeInfo struct {
tempState
bool
// should only be true while the priorityPool lock is held
tempState
bool
// should only be true while the priorityPool lock is held
tempCapacity
uint64
// equals capacity when tempState is false
tempCapacity
uint64
// equals capacity when tempState is false
// the following fields only affect the temporary state and they are set to their
// the following fields only affect the temporary state and they are set to their
// default value when
enter
ing the temp state
// default value when
leav
ing the temp state
minTarget
,
stepDiv
uint64
minTarget
,
stepDiv
uint64
bias
time
.
Duration
bias
time
.
Duration
}
}
...
@@ -157,11 +160,6 @@ func newPriorityPool(ns *nodestate.NodeStateMachine, setup *serverSetup, clock m
...
@@ -157,11 +160,6 @@ func newPriorityPool(ns *nodestate.NodeStateMachine, setup *serverSetup, clock m
func
(
pp
*
priorityPool
)
requestCapacity
(
node
*
enode
.
Node
,
minTarget
,
maxTarget
uint64
,
bias
time
.
Duration
)
uint64
{
func
(
pp
*
priorityPool
)
requestCapacity
(
node
*
enode
.
Node
,
minTarget
,
maxTarget
uint64
,
bias
time
.
Duration
)
uint64
{
pp
.
lock
.
Lock
()
pp
.
lock
.
Lock
()
pp
.
activeQueue
.
Refresh
()
pp
.
activeQueue
.
Refresh
()
var
updates
[]
capUpdate
defer
func
()
{
pp
.
lock
.
Unlock
()
pp
.
updateFlags
(
updates
)
}()
if
minTarget
<
pp
.
minCap
{
if
minTarget
<
pp
.
minCap
{
minTarget
=
pp
.
minCap
minTarget
=
pp
.
minCap
...
@@ -175,12 +173,13 @@ func (pp *priorityPool) requestCapacity(node *enode.Node, minTarget, maxTarget u
...
@@ -175,12 +173,13 @@ func (pp *priorityPool) requestCapacity(node *enode.Node, minTarget, maxTarget u
c
,
_
:=
pp
.
ns
.
GetField
(
node
,
pp
.
setup
.
queueField
)
.
(
*
ppNodeInfo
)
c
,
_
:=
pp
.
ns
.
GetField
(
node
,
pp
.
setup
.
queueField
)
.
(
*
ppNodeInfo
)
if
c
==
nil
{
if
c
==
nil
{
log
.
Error
(
"requestCapacity called for unknown node"
,
"id"
,
node
.
ID
())
log
.
Error
(
"requestCapacity called for unknown node"
,
"id"
,
node
.
ID
())
pp
.
lock
.
Unlock
()
return
0
return
0
}
}
pp
.
setTempState
(
c
)
pp
.
setTempState
(
c
)
if
maxTarget
>
c
.
capacity
{
if
maxTarget
>
c
.
capacity
{
c
.
bias
=
bias
pp
.
setTempStepDiv
(
c
,
pp
.
fineStepDiv
)
c
.
stepDiv
=
pp
.
fineStepDiv
pp
.
setTempBias
(
c
,
bias
)
}
}
pp
.
setTempCapacity
(
c
,
maxTarget
)
pp
.
setTempCapacity
(
c
,
maxTarget
)
c
.
minTarget
=
minTarget
c
.
minTarget
=
minTarget
...
@@ -188,7 +187,9 @@ func (pp *priorityPool) requestCapacity(node *enode.Node, minTarget, maxTarget u
...
@@ -188,7 +187,9 @@ func (pp *priorityPool) requestCapacity(node *enode.Node, minTarget, maxTarget u
pp
.
inactiveQueue
.
Remove
(
c
.
inactiveIndex
)
pp
.
inactiveQueue
.
Remove
(
c
.
inactiveIndex
)
pp
.
activeQueue
.
Push
(
c
)
pp
.
activeQueue
.
Push
(
c
)
pp
.
enforceLimits
()
pp
.
enforceLimits
()
updates
=
pp
.
finalizeChanges
(
c
.
tempCapacity
>=
minTarget
&&
c
.
tempCapacity
<=
maxTarget
&&
c
.
tempCapacity
!=
c
.
capacity
)
updates
:=
pp
.
finalizeChanges
(
c
.
tempCapacity
>=
minTarget
&&
c
.
tempCapacity
<=
maxTarget
&&
c
.
tempCapacity
!=
c
.
capacity
)
pp
.
lock
.
Unlock
()
pp
.
updateFlags
(
updates
)
return
c
.
capacity
return
c
.
capacity
}
}
...
@@ -196,15 +197,11 @@ func (pp *priorityPool) requestCapacity(node *enode.Node, minTarget, maxTarget u
...
@@ -196,15 +197,11 @@ func (pp *priorityPool) requestCapacity(node *enode.Node, minTarget, maxTarget u
func
(
pp
*
priorityPool
)
SetLimits
(
maxCount
,
maxCap
uint64
)
{
func
(
pp
*
priorityPool
)
SetLimits
(
maxCount
,
maxCap
uint64
)
{
pp
.
lock
.
Lock
()
pp
.
lock
.
Lock
()
pp
.
activeQueue
.
Refresh
()
pp
.
activeQueue
.
Refresh
()
var
updates
[]
capUpdate
defer
func
()
{
pp
.
lock
.
Unlock
()
pp
.
ns
.
Operation
(
func
()
{
pp
.
updateFlags
(
updates
)
})
}()
inc
:=
(
maxCount
>
pp
.
maxCount
)
||
(
maxCap
>
pp
.
maxCap
)
inc
:=
(
maxCount
>
pp
.
maxCount
)
||
(
maxCap
>
pp
.
maxCap
)
dec
:=
(
maxCount
<
pp
.
maxCount
)
||
(
maxCap
<
pp
.
maxCap
)
dec
:=
(
maxCount
<
pp
.
maxCount
)
||
(
maxCap
<
pp
.
maxCap
)
pp
.
maxCount
,
pp
.
maxCap
=
maxCount
,
maxCap
pp
.
maxCount
,
pp
.
maxCap
=
maxCount
,
maxCap
var
updates
[]
capUpdate
if
dec
{
if
dec
{
pp
.
enforceLimits
()
pp
.
enforceLimits
()
updates
=
pp
.
finalizeChanges
(
true
)
updates
=
pp
.
finalizeChanges
(
true
)
...
@@ -212,6 +209,8 @@ func (pp *priorityPool) SetLimits(maxCount, maxCap uint64) {
...
@@ -212,6 +209,8 @@ func (pp *priorityPool) SetLimits(maxCount, maxCap uint64) {
if
inc
{
if
inc
{
updates
=
append
(
updates
,
pp
.
tryActivate
(
false
)
...
)
updates
=
append
(
updates
,
pp
.
tryActivate
(
false
)
...
)
}
}
pp
.
lock
.
Unlock
()
pp
.
ns
.
Operation
(
func
()
{
pp
.
updateFlags
(
updates
)
})
}
}
// setActiveBias sets the bias applied when trying to activate inactive nodes
// setActiveBias sets the bias applied when trying to activate inactive nodes
...
@@ -291,18 +290,15 @@ func (pp *priorityPool) inactivePriority(p *ppNodeInfo) int64 {
...
@@ -291,18 +290,15 @@ func (pp *priorityPool) inactivePriority(p *ppNodeInfo) int64 {
func
(
pp
*
priorityPool
)
connectedNode
(
c
*
ppNodeInfo
)
{
func
(
pp
*
priorityPool
)
connectedNode
(
c
*
ppNodeInfo
)
{
pp
.
lock
.
Lock
()
pp
.
lock
.
Lock
()
pp
.
activeQueue
.
Refresh
()
pp
.
activeQueue
.
Refresh
()
var
updates
[]
capUpdate
defer
func
()
{
pp
.
lock
.
Unlock
()
pp
.
updateFlags
(
updates
)
}()
if
c
.
connected
{
if
c
.
connected
{
pp
.
lock
.
Unlock
()
return
return
}
}
c
.
connected
=
true
c
.
connected
=
true
pp
.
inactiveQueue
.
Push
(
c
,
pp
.
inactivePriority
(
c
))
pp
.
inactiveQueue
.
Push
(
c
,
pp
.
inactivePriority
(
c
))
updates
=
pp
.
tryActivate
(
false
)
updates
:=
pp
.
tryActivate
(
false
)
pp
.
lock
.
Unlock
()
pp
.
updateFlags
(
updates
)
}
}
// disconnectedNode is called when a node has been removed from the pool (both inactiveFlag
// disconnectedNode is called when a node has been removed from the pool (both inactiveFlag
...
@@ -311,23 +307,22 @@ func (pp *priorityPool) connectedNode(c *ppNodeInfo) {
...
@@ -311,23 +307,22 @@ func (pp *priorityPool) connectedNode(c *ppNodeInfo) {
func
(
pp
*
priorityPool
)
disconnectedNode
(
c
*
ppNodeInfo
)
{
func
(
pp
*
priorityPool
)
disconnectedNode
(
c
*
ppNodeInfo
)
{
pp
.
lock
.
Lock
()
pp
.
lock
.
Lock
()
pp
.
activeQueue
.
Refresh
()
pp
.
activeQueue
.
Refresh
()
var
updates
[]
capUpdate
defer
func
()
{
pp
.
lock
.
Unlock
()
pp
.
updateFlags
(
updates
)
}()
if
!
c
.
connected
{
if
!
c
.
connected
{
pp
.
lock
.
Unlock
()
return
return
}
}
c
.
connected
=
false
c
.
connected
=
false
pp
.
activeQueue
.
Remove
(
c
.
activeIndex
)
pp
.
activeQueue
.
Remove
(
c
.
activeIndex
)
pp
.
inactiveQueue
.
Remove
(
c
.
inactiveIndex
)
pp
.
inactiveQueue
.
Remove
(
c
.
inactiveIndex
)
var
updates
[]
capUpdate
if
c
.
capacity
!=
0
{
if
c
.
capacity
!=
0
{
pp
.
setTempState
(
c
)
pp
.
setTempState
(
c
)
pp
.
setTempCapacity
(
c
,
0
)
pp
.
setTempCapacity
(
c
,
0
)
updates
=
pp
.
tryActivate
(
true
)
updates
=
pp
.
tryActivate
(
true
)
}
}
pp
.
lock
.
Unlock
()
pp
.
updateFlags
(
updates
)
}
}
// setTempState internally puts a node in a temporary state that can either be reverted
// setTempState internally puts a node in a temporary state that can either be reverted
...
@@ -342,27 +337,62 @@ func (pp *priorityPool) setTempState(c *ppNodeInfo) {
...
@@ -342,27 +337,62 @@ func (pp *priorityPool) setTempState(c *ppNodeInfo) {
if
c
.
tempCapacity
!=
c
.
capacity
{
// should never happen
if
c
.
tempCapacity
!=
c
.
capacity
{
// should never happen
log
.
Error
(
"tempCapacity != capacity when entering tempState"
)
log
.
Error
(
"tempCapacity != capacity when entering tempState"
)
}
}
// Assign all the defaults to the temp state.
c
.
minTarget
=
pp
.
minCap
c
.
minTarget
=
pp
.
minCap
c
.
stepDiv
=
pp
.
capacityStepDiv
c
.
stepDiv
=
pp
.
capacityStepDiv
c
.
bias
=
0
pp
.
tempState
=
append
(
pp
.
tempState
,
c
)
pp
.
tempState
=
append
(
pp
.
tempState
,
c
)
}
}
// unsetTempState revokes the temp status of the node and reset all internal
// fields to the default value.
func
(
pp
*
priorityPool
)
unsetTempState
(
c
*
ppNodeInfo
)
{
if
!
c
.
tempState
{
return
}
c
.
tempState
=
false
if
c
.
tempCapacity
!=
c
.
capacity
{
// should never happen
log
.
Error
(
"tempCapacity != capacity when leaving tempState"
)
}
c
.
minTarget
=
pp
.
minCap
c
.
stepDiv
=
pp
.
capacityStepDiv
c
.
bias
=
0
}
// setTempCapacity changes the capacity of a node in the temporary state and adjusts
// setTempCapacity changes the capacity of a node in the temporary state and adjusts
// activeCap and activeCount accordingly. Since this change is performed in the temporary
// activeCap and activeCount accordingly. Since this change is performed in the temporary
// state it should be called after setTempState and before finalizeChanges.
// state it should be called after setTempState and before finalizeChanges.
func
(
pp
*
priorityPool
)
setTempCapacity
(
n
*
ppNodeInfo
,
cap
uint64
)
{
func
(
pp
*
priorityPool
)
setTempCapacity
(
c
*
ppNodeInfo
,
cap
uint64
)
{
if
!
n
.
tempState
{
// should never happen
if
!
c
.
tempState
{
// should never happen
log
.
Error
(
"Node is not in temporary state"
)
log
.
Error
(
"Node is not in temporary state"
)
return
return
}
}
pp
.
activeCap
+=
cap
-
n
.
tempCapacity
pp
.
activeCap
+=
cap
-
c
.
tempCapacity
if
n
.
tempCapacity
==
0
{
if
c
.
tempCapacity
==
0
{
pp
.
activeCount
++
pp
.
activeCount
++
}
}
if
cap
==
0
{
if
cap
==
0
{
pp
.
activeCount
--
pp
.
activeCount
--
}
}
n
.
tempCapacity
=
cap
c
.
tempCapacity
=
cap
}
// setTempBias changes the connection bias of a node in the temporary state.
func
(
pp
*
priorityPool
)
setTempBias
(
c
*
ppNodeInfo
,
bias
time
.
Duration
)
{
if
!
c
.
tempState
{
// should never happen
log
.
Error
(
"Node is not in temporary state"
)
return
}
c
.
bias
=
bias
}
// setTempStepDiv changes the capacity divisor of a node in the temporary state.
func
(
pp
*
priorityPool
)
setTempStepDiv
(
c
*
ppNodeInfo
,
stepDiv
uint64
)
{
if
!
c
.
tempState
{
// should never happen
log
.
Error
(
"Node is not in temporary state"
)
return
}
c
.
stepDiv
=
stepDiv
}
}
// enforceLimits enforces active node count and total capacity limits. It returns the
// enforceLimits enforces active node count and total capacity limits. It returns the
...
@@ -412,10 +442,8 @@ func (pp *priorityPool) finalizeChanges(commit bool) (updates []capUpdate) {
...
@@ -412,10 +442,8 @@ func (pp *priorityPool) finalizeChanges(commit bool) (updates []capUpdate) {
}
else
{
}
else
{
pp
.
setTempCapacity
(
c
,
c
.
capacity
)
// revert activeCount/activeCap
pp
.
setTempCapacity
(
c
,
c
.
capacity
)
// revert activeCount/activeCap
}
}
c
.
tempState
=
false
pp
.
unsetTempState
(
c
)
c
.
bias
=
0
c
.
stepDiv
=
pp
.
capacityStepDiv
c
.
minTarget
=
pp
.
minCap
if
c
.
connected
{
if
c
.
connected
{
if
c
.
capacity
!=
0
{
if
c
.
capacity
!=
0
{
pp
.
activeQueue
.
Push
(
c
)
pp
.
activeQueue
.
Push
(
c
)
...
@@ -462,13 +490,13 @@ func (pp *priorityPool) tryActivate(commit bool) []capUpdate {
...
@@ -462,13 +490,13 @@ func (pp *priorityPool) tryActivate(commit bool) []capUpdate {
for
pp
.
inactiveQueue
.
Size
()
>
0
{
for
pp
.
inactiveQueue
.
Size
()
>
0
{
c
:=
pp
.
inactiveQueue
.
PopItem
()
.
(
*
ppNodeInfo
)
c
:=
pp
.
inactiveQueue
.
PopItem
()
.
(
*
ppNodeInfo
)
pp
.
setTempState
(
c
)
pp
.
setTempState
(
c
)
pp
.
setTempBias
(
c
,
pp
.
activeBias
)
pp
.
setTempCapacity
(
c
,
pp
.
minCap
)
pp
.
setTempCapacity
(
c
,
pp
.
minCap
)
c
.
bias
=
pp
.
activeBias
pp
.
activeQueue
.
Push
(
c
)
pp
.
activeQueue
.
Push
(
c
)
pp
.
enforceLimits
()
pp
.
enforceLimits
()
if
c
.
tempCapacity
>
0
{
if
c
.
tempCapacity
>
0
{
commit
=
true
commit
=
true
c
.
bias
=
0
pp
.
setTempBias
(
c
,
0
)
}
else
{
}
else
{
break
break
}
}
...
@@ -483,14 +511,9 @@ func (pp *priorityPool) tryActivate(commit bool) []capUpdate {
...
@@ -483,14 +511,9 @@ func (pp *priorityPool) tryActivate(commit bool) []capUpdate {
func
(
pp
*
priorityPool
)
updatePriority
(
node
*
enode
.
Node
)
{
func
(
pp
*
priorityPool
)
updatePriority
(
node
*
enode
.
Node
)
{
pp
.
lock
.
Lock
()
pp
.
lock
.
Lock
()
pp
.
activeQueue
.
Refresh
()
pp
.
activeQueue
.
Refresh
()
var
updates
[]
capUpdate
defer
func
()
{
pp
.
lock
.
Unlock
()
pp
.
updateFlags
(
updates
)
}()
c
,
_
:=
pp
.
ns
.
GetField
(
node
,
pp
.
setup
.
queueField
)
.
(
*
ppNodeInfo
)
c
,
_
:=
pp
.
ns
.
GetField
(
node
,
pp
.
setup
.
queueField
)
.
(
*
ppNodeInfo
)
if
c
==
nil
||
!
c
.
connected
{
if
c
==
nil
||
!
c
.
connected
{
pp
.
lock
.
Unlock
()
return
return
}
}
pp
.
activeQueue
.
Remove
(
c
.
activeIndex
)
pp
.
activeQueue
.
Remove
(
c
.
activeIndex
)
...
@@ -500,7 +523,9 @@ func (pp *priorityPool) updatePriority(node *enode.Node) {
...
@@ -500,7 +523,9 @@ func (pp *priorityPool) updatePriority(node *enode.Node) {
}
else
{
}
else
{
pp
.
inactiveQueue
.
Push
(
c
,
pp
.
inactivePriority
(
c
))
pp
.
inactiveQueue
.
Push
(
c
,
pp
.
inactivePriority
(
c
))
}
}
updates
=
pp
.
tryActivate
(
false
)
updates
:=
pp
.
tryActivate
(
false
)
pp
.
lock
.
Unlock
()
pp
.
updateFlags
(
updates
)
}
}
// capacityCurve is a snapshot of the priority pool contents in a format that can efficiently
// capacityCurve is a snapshot of the priority pool contents in a format that can efficiently
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment