Skip to content

Commit 5327781

Browse files
committed
les/lespay/server: use CapacityField only in balance tracker
1 parent 732d728 commit 5327781

File tree

3 files changed

+22
-27
lines changed

3 files changed

+22
-27
lines changed

les/clientpool.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ var (
5757
)
5858

5959
func init() {
60-
balanceTrackerSetup.Connect(connAddressField, priorityPoolSetup.CapacityField, priorityPoolSetup.ActiveFlag, priorityPoolSetup.InactiveFlag)
60+
balanceTrackerSetup.Connect(connAddressField, priorityPoolSetup.CapacityField)
6161
priorityPoolSetup.Connect(balanceTrackerSetup.BalanceField, balanceTrackerSetup.UpdateFlag) // NodeBalance implements nodePriority
6262
}
6363

les/lespay/server/balance_test.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ var (
3737
)
3838

3939
func init() {
40-
btTestSetup.Connect(connAddrFlag, ppTestSetup.CapacityField, ppTestSetup.ActiveFlag, ppTestSetup.InactiveFlag)
40+
btTestSetup.Connect(connAddrFlag, ppTestSetup.CapacityField)
4141
}
4242

4343
type zeroExpirer struct{}
@@ -145,7 +145,7 @@ func TestBalanceTimeCost(t *testing.T) {
145145
defer b.stop()
146146
node := b.newNode(1000)
147147

148-
b.ns.SetState(node.node, ppTestSetup.ActiveFlag, nodestate.Flags{}, 0)
148+
b.ns.SetField(node.node, ppTestSetup.CapacityField, uint64(1))
149149
node.SetPriceFactors(PriceFactors{1, 0, 1}, PriceFactors{1, 0, 1})
150150
node.SetBalance(uint64(time.Minute), 0) // 1 minute time allowance
151151

@@ -187,7 +187,7 @@ func TestBalanceReqCost(t *testing.T) {
187187
node := b.newNode(1000)
188188
node.SetPriceFactors(PriceFactors{1, 0, 1}, PriceFactors{1, 0, 1})
189189

190-
b.ns.SetState(node.node, ppTestSetup.ActiveFlag, nodestate.Flags{}, 0)
190+
b.ns.SetField(node.node, ppTestSetup.CapacityField, uint64(1))
191191
node.SetBalance(uint64(time.Minute), 0) // 1 minute time serving time allowance
192192
var inputs = []struct {
193193
reqCost uint64
@@ -241,7 +241,7 @@ func TestEstimatedPriority(t *testing.T) {
241241
node := b.newNode(1000000000)
242242
node.SetPriceFactors(PriceFactors{1, 0, 1}, PriceFactors{1, 0, 1})
243243

244-
b.ns.SetState(node.node, ppTestSetup.ActiveFlag, nodestate.Flags{}, 0)
244+
b.ns.SetField(node.node, ppTestSetup.CapacityField, uint64(1))
245245
node.SetBalance(uint64(time.Minute), 0)
246246
var inputs = []struct {
247247
runTime time.Duration // time cost
@@ -282,7 +282,7 @@ func TestPosBalanceMissing(t *testing.T) {
282282
node := b.newNode(1000)
283283
node.SetPriceFactors(PriceFactors{1, 0, 1}, PriceFactors{1, 0, 1})
284284

285-
b.ns.SetState(node.node, ppTestSetup.ActiveFlag, nodestate.Flags{}, 0)
285+
b.ns.SetField(node.node, ppTestSetup.CapacityField, uint64(1))
286286
var inputs = []struct {
287287
pos, neg uint64
288288
priority int64
@@ -330,15 +330,15 @@ func TestPostiveBalanceCounting(t *testing.T) {
330330
// Change client status
331331
for i := 0; i < 100; i += 1 {
332332
if rand.Intn(2) == 0 {
333-
b.ns.SetState(nodes[i].node, ppTestSetup.ActiveFlag, ppTestSetup.InactiveFlag, 0)
333+
b.ns.SetField(nodes[i].node, ppTestSetup.CapacityField, uint64(1))
334334
}
335335
}
336336
if b.bt.TotalTokenAmount() != sum {
337337
t.Fatalf("Invalid token amount")
338338
}
339339
for i := 0; i < 100; i += 1 {
340340
if rand.Intn(2) == 0 {
341-
b.ns.SetState(nodes[i].node, ppTestSetup.InactiveFlag, ppTestSetup.ActiveFlag, 0)
341+
b.ns.SetField(nodes[i].node, ppTestSetup.CapacityField, uint64(1))
342342
}
343343
}
344344
if b.bt.TotalTokenAmount() != sum {
@@ -374,7 +374,7 @@ func TestCallback(t *testing.T) {
374374
defer b.stop()
375375
node := b.newNode(1000)
376376
node.SetPriceFactors(PriceFactors{1, 0, 1}, PriceFactors{1, 0, 1})
377-
b.ns.SetState(node.node, ppTestSetup.ActiveFlag, nodestate.Flags{}, 0)
377+
b.ns.SetField(node.node, ppTestSetup.CapacityField, uint64(1))
378378

379379
callCh := make(chan struct{}, 1)
380380
node.SetBalance(uint64(time.Minute), 0)

les/lespay/server/balance_tracker.go

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ type BalanceTrackerSetup struct {
4242
BalanceField nodestate.Field
4343
// external connections
4444
connAddressField, capacityField nodestate.Field
45-
activeFlag, inactiveFlag nodestate.Flags
4645
}
4746

4847
// NewBalanceTrackerSetup creates a new BalanceTrackerSetup and initializes the fields
@@ -61,11 +60,9 @@ func NewBalanceTrackerSetup(setup *nodestate.Setup) BalanceTrackerSetup {
6160
}
6261

6362
// Connect sets the fields used by BalanceTracker as an input
64-
func (bts *BalanceTrackerSetup) Connect(connAddressField, capacityField nodestate.Field, activeFlag, inactiveFlag nodestate.Flags) {
63+
func (bts *BalanceTrackerSetup) Connect(connAddressField, capacityField nodestate.Field) {
6564
bts.connAddressField = connAddressField
6665
bts.capacityField = capacityField
67-
bts.activeFlag = activeFlag
68-
bts.inactiveFlag = inactiveFlag
6966
}
7067

7168
// BalanceTracker tracks positive and negative balances for connected nodes.
@@ -114,7 +111,18 @@ func NewBalanceTracker(ns *nodestate.NodeStateMachine, setup BalanceTrackerSetup
114111
log.Error("Capacity field changed while node field is missing")
115112
return
116113
}
117-
n.setCapacity(newValue.(uint64))
114+
115+
ov, _ := oldValue.(uint64)
116+
nv, _ := newValue.(uint64)
117+
if ov == 0 && nv != 0 {
118+
n.activate()
119+
}
120+
if nv != 0 {
121+
n.setCapacity(nv)
122+
}
123+
if ov != 0 && nv == 0 {
124+
n.deactivate()
125+
}
118126
})
119127

120128
ns.SubscribeField(bt.connAddressField, func(node *enode.Node, state nodestate.Flags, oldValue, newValue interface{}) {
@@ -129,19 +137,6 @@ func NewBalanceTracker(ns *nodestate.NodeStateMachine, setup BalanceTrackerSetup
129137
}
130138
})
131139

132-
ns.SubscribeState(bt.inactiveFlag.Or(bt.activeFlag), func(n *enode.Node, oldState, newState nodestate.Flags) {
133-
node, _ := ns.GetField(n, bt.BalanceField).(*NodeBalance)
134-
if node == nil {
135-
return
136-
}
137-
if newState.Equals(bt.activeFlag) {
138-
node.activate()
139-
}
140-
if newState.Equals(bt.inactiveFlag) {
141-
node.deactivate()
142-
}
143-
})
144-
145140
// The positive and negative balances of clients are stored in database
146141
// and both of these decay exponentially over time. Delete them if the
147142
// value is small enough.

0 commit comments

Comments
 (0)