[#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() oiw.Unlock()
} }
func (oiw *objectsInWork) add(addr oid.Address) { func (oiw *objectsInWork) add(addr oid.Address) bool {
oiw.Lock() oiw.Lock()
_, exists := oiw.objs[addr]
oiw.objs[addr] = struct{}{} oiw.objs[addr] = struct{}{}
oiw.Unlock() oiw.Unlock()
return !exists
} }
// Policer represents the utility that verifies // Policer represents the utility that verifies

View file

@ -51,12 +51,11 @@ func (p *Policer) shardPolicyWorker(ctx context.Context) {
return return
} }
p.objsInWork.add(addr.Address) if p.objsInWork.add(addr.Address) {
p.processObject(ctx, addr) p.processObject(ctx, addr)
p.cache.Add(addr.Address, time.Now()) p.cache.Add(addr.Address, time.Now())
p.objsInWork.remove(addr.Address) p.objsInWork.remove(addr.Address)
}
}) })
if err != nil { if err != nil {
p.log.Warn(logs.PolicerPoolSubmission, zap.Error(err)) p.log.Warn(logs.PolicerPoolSubmission, zap.Error(err))