forked from TrueCloudLab/frostfs-node
[#281] service/audit: Make report structure threadsafe
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
This commit is contained in:
parent
44d9f95137
commit
8e72abaab7
1 changed files with 24 additions and 0 deletions
|
@ -1,6 +1,8 @@
|
||||||
package audit
|
package audit
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"sync"
|
||||||
|
|
||||||
"github.com/nspcc-dev/neofs-api-go/pkg/audit"
|
"github.com/nspcc-dev/neofs-api-go/pkg/audit"
|
||||||
"github.com/nspcc-dev/neofs-api-go/pkg/container"
|
"github.com/nspcc-dev/neofs-api-go/pkg/container"
|
||||||
"github.com/nspcc-dev/neofs-api-go/pkg/object"
|
"github.com/nspcc-dev/neofs-api-go/pkg/object"
|
||||||
|
@ -8,6 +10,7 @@ import (
|
||||||
|
|
||||||
// Report tracks the progress of auditing container data.
|
// Report tracks the progress of auditing container data.
|
||||||
type Report struct {
|
type Report struct {
|
||||||
|
mu sync.RWMutex
|
||||||
res *audit.Result
|
res *audit.Result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,26 +33,41 @@ func NewReport(cid *container.ID) *Report {
|
||||||
|
|
||||||
// Result forms the structure of the data audit result.
|
// Result forms the structure of the data audit result.
|
||||||
func (r *Report) Result() *audit.Result {
|
func (r *Report) Result() *audit.Result {
|
||||||
|
r.mu.RLock()
|
||||||
|
defer r.mu.RUnlock()
|
||||||
|
|
||||||
return r.res
|
return r.res
|
||||||
}
|
}
|
||||||
|
|
||||||
// Complete completes audit report.
|
// Complete completes audit report.
|
||||||
func (r *Report) Complete() {
|
func (r *Report) Complete() {
|
||||||
|
r.mu.Lock()
|
||||||
|
defer r.mu.Unlock()
|
||||||
|
|
||||||
r.res.SetComplete(true)
|
r.res.SetComplete(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
// PassedPoR updates list of passed storage groups.
|
// PassedPoR updates list of passed storage groups.
|
||||||
func (r *Report) PassedPoR(sg *object.ID) {
|
func (r *Report) PassedPoR(sg *object.ID) {
|
||||||
|
r.mu.Lock()
|
||||||
|
defer r.mu.Unlock()
|
||||||
|
|
||||||
r.res.SetPassSG(append(r.res.PassSG(), sg))
|
r.res.SetPassSG(append(r.res.PassSG(), sg))
|
||||||
}
|
}
|
||||||
|
|
||||||
// FailedPoR updates list of failed storage groups.
|
// FailedPoR updates list of failed storage groups.
|
||||||
func (r *Report) FailedPoR(sg *object.ID) {
|
func (r *Report) FailedPoR(sg *object.ID) {
|
||||||
|
r.mu.Lock()
|
||||||
|
defer r.mu.Unlock()
|
||||||
|
|
||||||
r.res.SetFailSG(append(r.res.FailSG(), sg))
|
r.res.SetFailSG(append(r.res.FailSG(), sg))
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetPlacementCounters sets counters of compliance with placement.
|
// SetPlacementCounters sets counters of compliance with placement.
|
||||||
func (r *Report) SetPlacementCounters(hit, miss, fail uint32) {
|
func (r *Report) SetPlacementCounters(hit, miss, fail uint32) {
|
||||||
|
r.mu.Lock()
|
||||||
|
defer r.mu.Unlock()
|
||||||
|
|
||||||
r.res.SetHit(hit)
|
r.res.SetHit(hit)
|
||||||
r.res.SetMiss(miss)
|
r.res.SetMiss(miss)
|
||||||
r.res.SetFail(fail)
|
r.res.SetFail(fail)
|
||||||
|
@ -57,12 +75,18 @@ func (r *Report) SetPlacementCounters(hit, miss, fail uint32) {
|
||||||
|
|
||||||
// SetPDPResults sets lists of nodes according to their PDP results.
|
// SetPDPResults sets lists of nodes according to their PDP results.
|
||||||
func (r *Report) SetPDPResults(passed, failed [][]byte) {
|
func (r *Report) SetPDPResults(passed, failed [][]byte) {
|
||||||
|
r.mu.Lock()
|
||||||
|
defer r.mu.Unlock()
|
||||||
|
|
||||||
r.res.SetPassNodes(passed)
|
r.res.SetPassNodes(passed)
|
||||||
r.res.SetFailNodes(failed)
|
r.res.SetFailNodes(failed)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetPoRCounters sets amounts of head requests and retries at PoR audit stage.
|
// SetPoRCounters sets amounts of head requests and retries at PoR audit stage.
|
||||||
func (r *Report) SetPoRCounters(requests, retries uint32) {
|
func (r *Report) SetPoRCounters(requests, retries uint32) {
|
||||||
|
r.mu.Lock()
|
||||||
|
defer r.mu.Unlock()
|
||||||
|
|
||||||
r.res.SetRequests(requests)
|
r.res.SetRequests(requests)
|
||||||
r.res.SetRetries(retries)
|
r.res.SetRetries(retries)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue