[#92] Ensure policer objects cannot be worked on concurrently

Signed-off-by: Alejandro Lopez <a.lopez@yadro.com>
This commit is contained in:
Alejandro Lopez 2023-06-30 10:12:17 +03:00 committed by Evgenii Stratonikov
parent 3223402c90
commit 26acf5689e
2 changed files with 8 additions and 7 deletions

View file

@ -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

View file

@ -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))