diff --git a/pkg/services/audit/auditor/por.go b/pkg/services/audit/auditor/por.go index d783ded4e..59d29f647 100644 --- a/pkg/services/audit/auditor/por.go +++ b/pkg/services/audit/auditor/por.go @@ -5,6 +5,7 @@ import ( "github.com/nspcc-dev/neofs-api-go/pkg/object" "github.com/nspcc-dev/neofs-node/pkg/services/object_manager/placement" + "github.com/nspcc-dev/neofs-node/pkg/util/rand" "github.com/nspcc-dev/tzhash/tz" "go.uber.org/zap" ) @@ -44,13 +45,22 @@ func (c *Context) checkStorageGroupPoR(ind int, sg *object.ID) { continue } - for _, node := range placement.FlattenNodes(objectPlacement) { + flat := placement.FlattenNodes(objectPlacement) + + crand := rand.New() // math/rand with cryptographic source + crand.Shuffle(len(flat), func(i, j int) { + flat[i], flat[j] = flat[j], flat[i] + }) + + for _, node := range flat { hdr, err := c.cnrCom.GetHeader(c.task, node, members[i], true) if err != nil { c.log.Debug("can't head object", zap.String("remote_node", node.Address()), zap.Stringer("oid", members[i])) + // todo: count all fails and successes for audit report + continue }