[#92] Ensure policer objects cannot be worked on concurrently
All checks were successful
ci/woodpecker/pr/pre-commit Pipeline was successful
All checks were successful
ci/woodpecker/pr/pre-commit Pipeline was successful
Signed-off-by: Alejandro Lopez <a.lopez@yadro.com>
This commit is contained in:
parent
7fcc999c2b
commit
e7f3a9fc19
2 changed files with 8 additions and 7 deletions
|
@ -29,10 +29,12 @@ func (oiw *objectsInWork) remove(addr oid.Address) {
|
|||
oiw.Unlock()
|
||||
}
|
||||
|
||||
func (oiw *objectsInWork) add(addr oid.Address) {
|
||||
func (oiw *objectsInWork) add(addr oid.Address) bool {
|
||||
oiw.Lock()
|
||||
_, exists := oiw.objs[addr]
|
||||
oiw.objs[addr] = struct{}{}
|
||||
oiw.Unlock()
|
||||
return !exists
|
||||
}
|
||||
|
||||
// Policer represents the utility that verifies
|
||||
|
|
|
@ -51,12 +51,11 @@ func (p *Policer) shardPolicyWorker(ctx context.Context) {
|
|||
return
|
||||
}
|
||||
|
||||
p.objsInWork.add(addr.Address)
|
||||
|
||||
p.processObject(ctx, addr)
|
||||
|
||||
p.cache.Add(addr.Address, time.Now())
|
||||
p.objsInWork.remove(addr.Address)
|
||||
if p.objsInWork.add(addr.Address) {
|
||||
p.processObject(ctx, addr)
|
||||
p.cache.Add(addr.Address, time.Now())
|
||||
p.objsInWork.remove(addr.Address)
|
||||
}
|
||||
})
|
||||
if err != nil {
|
||||
p.log.Warn(logs.PolicerPoolSubmission, zap.Error(err))
|
||||
|
|
Loading…
Reference in a new issue