Skip to content

Commit abb09e2

Browse files
committed
Make store.Count O(1) instead of O(n).
Update the sum of subclients whenever a new lease is assigned or released.
1 parent fd4bf08 commit abb09e2

File tree

1 file changed

+8
-17
lines changed

1 file changed

+8
-17
lines changed

go/server/doorman/store.go

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ type leaseStoreImpl struct {
107107
leases map[string]Lease
108108
sumWants float64
109109
sumHas float64
110+
count int64
110111
}
111112

112113
// New returns a fresh LeaseStore implementation.
@@ -118,29 +119,17 @@ func NewLeaseStore(id string) LeaseStore {
118119
}
119120

120121
func (store *leaseStoreImpl) Count() int64 {
121-
var subclients int64
122-
for _, lease := range store.leases {
123-
subclients += lease.Subclients
124-
}
125-
return subclients
122+
return store.count
126123
}
127124

128125
func (store *leaseStoreImpl) SumWants() float64 {
129126
return store.sumWants
130127
}
131128

132-
func (store *leaseStoreImpl) modifySumWants(diff float64) {
133-
store.sumWants += diff
134-
}
135-
136129
func (store *leaseStoreImpl) SumHas() float64 {
137130
return store.sumHas
138131
}
139132

140-
func (store *leaseStoreImpl) modifySumHas(diff float64) {
141-
store.sumHas += diff
142-
}
143-
144133
func (store *leaseStoreImpl) HasClient(client string) bool {
145134
_, ok := store.leases[client]
146135
return ok
@@ -155,16 +144,18 @@ func (store *leaseStoreImpl) Release(client string) {
155144
if !ok {
156145
return
157146
}
158-
store.modifySumWants(-lease.Wants)
159-
store.modifySumHas(-lease.Has)
147+
store.sumWants -= lease.Wants
148+
store.sumHas -= lease.Has
149+
store.count -= lease.Subclients
160150
delete(store.leases, client)
161151
}
162152

163153
func (store *leaseStoreImpl) Assign(client string, leaseLength, refreshInterval time.Duration, has, wants float64, subclients int64) Lease {
164154
lease := store.leases[client]
165155

166-
store.modifySumHas(has - lease.Has)
167-
store.modifySumWants(wants - lease.Wants)
156+
store.sumHas += has - lease.Has
157+
store.sumWants += wants - lease.Wants
158+
store.count += subclients - lease.Subclients
168159

169160
lease.Has, lease.Wants = has, wants
170161
lease.Expiry = time.Now().Add(leaseLength)

0 commit comments

Comments
 (0)