[#1369] audit: Upgrade SDK package

Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
Leonard Lyubich 2022-05-11 13:26:22 +03:00 committed by LeL
parent 875f0e79a2
commit 7a57d7b076
9 changed files with 61 additions and 61 deletions

2
go.mod
View file

@ -19,7 +19,7 @@ require (
github.com/nspcc-dev/neo-go/pkg/interop v0.0.0-20220321144137-d5a9af5860af // indirect github.com/nspcc-dev/neo-go/pkg/interop v0.0.0-20220321144137-d5a9af5860af // indirect
github.com/nspcc-dev/neofs-api-go/v2 v2.12.1 github.com/nspcc-dev/neofs-api-go/v2 v2.12.1
github.com/nspcc-dev/neofs-contract v0.14.2 github.com/nspcc-dev/neofs-contract v0.14.2
github.com/nspcc-dev/neofs-sdk-go v1.0.0-rc.3.0.20220316141620-a55ffa47966a github.com/nspcc-dev/neofs-sdk-go v1.0.0-rc.3.0.20220412151250-3e75660802ae
github.com/nspcc-dev/tzhash v1.5.2 github.com/nspcc-dev/tzhash v1.5.2
github.com/panjf2000/ants/v2 v2.4.0 github.com/panjf2000/ants/v2 v2.4.0
github.com/paulmach/orb v0.2.2 github.com/paulmach/orb v0.2.2

BIN
go.sum

Binary file not shown.

View file

@ -174,7 +174,7 @@ func (ap *Processor) StartAuditHandler() event.Handler {
func (r *epochAuditReporter) WriteReport(rep *audit.Report) error { func (r *epochAuditReporter) WriteReport(rep *audit.Report) error {
res := rep.Result() res := rep.Result()
res.SetAuditEpoch(r.epoch) res.ForEpoch(r.epoch)
return r.rep.WriteReport(rep) return r.rep.WriteReport(rep)
} }

View file

@ -13,6 +13,7 @@ import (
"github.com/nspcc-dev/neofs-sdk-go/audit" "github.com/nspcc-dev/neofs-sdk-go/audit"
cid "github.com/nspcc-dev/neofs-sdk-go/container/id" cid "github.com/nspcc-dev/neofs-sdk-go/container/id"
addressSDK "github.com/nspcc-dev/neofs-sdk-go/object/address" addressSDK "github.com/nspcc-dev/neofs-sdk-go/object/address"
oid "github.com/nspcc-dev/neofs-sdk-go/object/id"
"github.com/nspcc-dev/neofs-sdk-go/owner" "github.com/nspcc-dev/neofs-sdk-go/owner"
"go.uber.org/zap" "go.uber.org/zap"
) )
@ -108,7 +109,7 @@ func (c *Calculator) Calculate(p *CalculatePrm) {
func (c *Calculator) processResult(ctx *singleResultCtx) { func (c *Calculator) processResult(ctx *singleResultCtx) {
ctx.log = ctx.log.With( ctx.log = ctx.log.With(
zap.Stringer("cid", ctx.containerID()), zap.Stringer("cid", ctx.containerID()),
zap.Uint64("audit epoch", ctx.auditResult.AuditEpoch()), zap.Uint64("audit epoch", ctx.auditResult.Epoch()),
) )
ctx.log.Debug("reading information about the container") ctx.log.Debug("reading information about the container")
@ -147,7 +148,7 @@ func (c *Calculator) processResult(ctx *singleResultCtx) {
func (c *Calculator) readContainerInfo(ctx *singleResultCtx) bool { func (c *Calculator) readContainerInfo(ctx *singleResultCtx) bool {
var err error var err error
ctx.cnrInfo, err = c.prm.ContainerStorage.ContainerInfo(ctx.auditResult.ContainerID()) ctx.cnrInfo, err = c.prm.ContainerStorage.ContainerInfo(ctx.auditResult.Container())
if err != nil { if err != nil {
ctx.log.Error("could not get container info", ctx.log.Error("could not get container info",
zap.String("error", err.Error()), zap.String("error", err.Error()),
@ -178,21 +179,26 @@ func (c *Calculator) buildPlacement(ctx *singleResultCtx) bool {
func (c *Calculator) collectPassNodes(ctx *singleResultCtx) bool { func (c *Calculator) collectPassNodes(ctx *singleResultCtx) bool {
ctx.passNodes = make(map[string]common.NodeInfo) ctx.passNodes = make(map[string]common.NodeInfo)
loop:
for _, cnrNode := range ctx.cnrNodes { for _, cnrNode := range ctx.cnrNodes {
for _, passNode := range ctx.auditResult.PassNodes() { // TODO(@cthulhu-rider): neofs-sdk-go#241 use dedicated method
ctx.auditResult.IteratePassedStorageNodes(func(passNode []byte) bool {
if !bytes.Equal(cnrNode.PublicKey(), passNode) { if !bytes.Equal(cnrNode.PublicKey(), passNode) {
continue return true
} }
for _, failNode := range ctx.auditResult.FailNodes() { failed := false
if bytes.Equal(cnrNode.PublicKey(), failNode) {
continue loop
}
}
ctx.auditResult.IterateFailedStorageNodes(func(failNode []byte) bool {
failed = bytes.Equal(cnrNode.PublicKey(), failNode)
return !failed
})
if !failed {
ctx.passNodes[hex.EncodeToString(passNode)] = cnrNode ctx.passNodes[hex.EncodeToString(passNode)] = cnrNode
} }
return false
})
} }
empty := len(ctx.passNodes) == 0 empty := len(ctx.passNodes) == 0
@ -204,32 +210,34 @@ loop:
} }
func (c *Calculator) sumSGSizes(ctx *singleResultCtx) bool { func (c *Calculator) sumSGSizes(ctx *singleResultCtx) bool {
passedSG := ctx.auditResult.PassSG()
if len(passedSG) == 0 {
ctx.log.Debug("empty list of passed SG")
return false
}
sumPassSGSize := uint64(0) sumPassSGSize := uint64(0)
fail := false
addr := addressSDK.NewAddress() addr := addressSDK.NewAddress()
addr.SetContainerID(ctx.containerID()) addr.SetContainerID(ctx.containerID())
passSG := ctx.auditResult.PassSG() ctx.auditResult.IteratePassedStorageGroups(func(id oid.ID) bool {
for i := range passSG { addr.SetObjectID(&id)
addr.SetObjectID(&passSG[i])
sgInfo, err := c.prm.SGStorage.SGInfo(addr) sgInfo, err := c.prm.SGStorage.SGInfo(addr)
if err != nil { if err != nil {
ctx.log.Error("could not get SG info", ctx.log.Error("could not get SG info",
zap.String("id", passSG[i].String()), zap.String("id", id.String()),
zap.String("error", err.Error()),
) )
fail = true
return false // we also can continue and calculate at least some part return false // we also can continue and calculate at least some part
} }
sumPassSGSize += sgInfo.Size() sumPassSGSize += sgInfo.Size()
return true
})
if fail {
return false
} }
if sumPassSGSize == 0 { if sumPassSGSize == 0 {
@ -279,11 +287,11 @@ func (c *Calculator) fillTransferTable(ctx *singleResultCtx) bool {
} }
// add txs to pay inner ring node for audit result // add txs to pay inner ring node for audit result
auditIR, err := ownerFromKey(ctx.auditResult.PublicKey()) auditIR, err := ownerFromKey(ctx.auditResult.AuditorKey())
if err != nil { if err != nil {
ctx.log.Error("could not parse public key of the inner ring node", ctx.log.Error("could not parse public key of the inner ring node",
zap.String("error", err.Error()), zap.String("error", err.Error()),
zap.String("key", hex.EncodeToString(ctx.auditResult.PublicKey())), zap.String("key", hex.EncodeToString(ctx.auditResult.AuditorKey())),
) )
return false return false
@ -300,7 +308,7 @@ func (c *Calculator) fillTransferTable(ctx *singleResultCtx) bool {
func (c *singleResultCtx) containerID() *cid.ID { func (c *singleResultCtx) containerID() *cid.ID {
if c.cid == nil { if c.cid == nil {
c.cid = c.auditResult.ContainerID() c.cid = c.auditResult.Container()
} }
return c.cid return c.cid
@ -308,7 +316,7 @@ func (c *singleResultCtx) containerID() *cid.ID {
func (c *singleResultCtx) auditEpoch() uint64 { func (c *singleResultCtx) auditEpoch() uint64 {
if c.eAudit == 0 { if c.eAudit == 0 {
c.eAudit = c.auditResult.AuditEpoch() c.eAudit = c.auditResult.Epoch()
} }
return c.eAudit return c.eAudit

View file

@ -149,7 +149,7 @@ func (s *Server) VoteForSidechainValidator(prm governance.VoteValidatorPrm) erro
// and sends it to Audit contract. // and sends it to Audit contract.
func (s *Server) WriteReport(r *audit.Report) error { func (s *Server) WriteReport(r *audit.Report) error {
res := r.Result() res := r.Result()
res.SetPublicKey(s.pubKey) res.SetAuditorKey(s.pubKey)
prm := auditClient.PutPrm{} prm := auditClient.PutPrm{}
prm.SetResult(res) prm.SetResult(res)

View file

@ -25,10 +25,10 @@ func (c *Client) GetAuditResult(id ResultID) (*auditAPI.Result, error) {
return nil, fmt.Errorf("could not get byte array from stack item (%s): %w", getResultMethod, err) return nil, fmt.Errorf("could not get byte array from stack item (%s): %w", getResultMethod, err)
} }
auditRes := auditAPI.NewResult() var auditRes auditAPI.Result
if err := auditRes.Unmarshal(value); err != nil { if err := auditRes.Unmarshal(value); err != nil {
return nil, fmt.Errorf("could not unmarshal audit result structure: %w", err) return nil, fmt.Errorf("could not unmarshal audit result structure: %w", err)
} }
return auditRes, nil return &auditRes, nil
} }

View file

@ -30,17 +30,12 @@ func (p *PutPrm) SetResult(result *auditAPI.Result) {
// //
// Returns encountered error that caused the saving to interrupt. // Returns encountered error that caused the saving to interrupt.
func (c *Client) PutAuditResult(p PutPrm) error { func (c *Client) PutAuditResult(p PutPrm) error {
rawResult, err := p.result.Marshal()
if err != nil {
return fmt.Errorf("could not marshal audit result: %w", err)
}
prm := client.InvokePrm{} prm := client.InvokePrm{}
prm.SetMethod(putResultMethod) prm.SetMethod(putResultMethod)
prm.SetArgs(rawResult) prm.SetArgs(p.result.Marshal())
prm.InvokePrmOptional = p.InvokePrmOptional prm.InvokePrmOptional = p.InvokePrmOptional
err = c.client.Invoke(prm) err := c.client.Invoke(prm)
if err != nil { if err != nil {
return fmt.Errorf("could not invoke method (%s): %w", putResultMethod, err) return fmt.Errorf("could not invoke method (%s): %w", putResultMethod, err)
} }

View file

@ -34,13 +34,13 @@ func TestAuditResults(t *testing.T) {
id := cidtest.ID() id := cidtest.ID()
auditRes := auditAPI.NewResult() var auditRes auditAPI.Result
auditRes.SetAuditEpoch(epoch) auditRes.ForEpoch(epoch)
auditRes.SetPublicKey(key.PublicKey().Bytes()) auditRes.SetAuditorKey(key.PublicKey().Bytes())
auditRes.SetContainerID(id) auditRes.ForContainer(*id)
prm := PutPrm{} prm := PutPrm{}
prm.SetResult(auditRes) prm.SetResult(&auditRes)
require.NoError(t, auditClientWrapper.PutAuditResult(prm)) require.NoError(t, auditClientWrapper.PutAuditResult(prm))

View file

@ -11,7 +11,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 mu sync.RWMutex
res *audit.Result res audit.Result
} }
// Reporter is an interface of the entity that records // Reporter is an interface of the entity that records
@ -22,13 +22,10 @@ type Reporter interface {
// NewReport creates and returns blank Report instance. // NewReport creates and returns blank Report instance.
func NewReport(cid *cid.ID) *Report { func NewReport(cid *cid.ID) *Report {
rep := &Report{ var rep Report
res: audit.NewResult(), rep.res.ForContainer(*cid)
}
rep.res.SetContainerID(cid) return &rep
return rep
} }
// Result forms the structure of the data audit result. // Result forms the structure of the data audit result.
@ -36,7 +33,7 @@ func (r *Report) Result() *audit.Result {
r.mu.RLock() r.mu.RLock()
defer r.mu.RUnlock() defer r.mu.RUnlock()
return r.res return &r.res
} }
// Complete completes audit report. // Complete completes audit report.
@ -44,7 +41,7 @@ func (r *Report) Complete() {
r.mu.Lock() r.mu.Lock()
defer r.mu.Unlock() defer r.mu.Unlock()
r.res.SetComplete(true) r.res.Complete()
} }
// PassedPoR updates list of passed storage groups. // PassedPoR updates list of passed storage groups.
@ -52,7 +49,7 @@ func (r *Report) PassedPoR(sg *oidSDK.ID) {
r.mu.Lock() r.mu.Lock()
defer r.mu.Unlock() defer r.mu.Unlock()
r.res.SetPassSG(append(r.res.PassSG(), *sg)) r.res.SubmitPassedStorageGroup(*sg)
} }
// FailedPoR updates list of failed storage groups. // FailedPoR updates list of failed storage groups.
@ -60,7 +57,7 @@ func (r *Report) FailedPoR(sg *oidSDK.ID) {
r.mu.Lock() r.mu.Lock()
defer r.mu.Unlock() defer r.mu.Unlock()
r.res.SetFailSG(append(r.res.FailSG(), *sg)) r.res.SubmitFailedStorageGroup(*sg)
} }
// SetPlacementCounters sets counters of compliance with placement. // SetPlacementCounters sets counters of compliance with placement.
@ -68,9 +65,9 @@ func (r *Report) SetPlacementCounters(hit, miss, fail uint32) {
r.mu.Lock() r.mu.Lock()
defer r.mu.Unlock() defer r.mu.Unlock()
r.res.SetHit(hit) r.res.SetHits(hit)
r.res.SetMiss(miss) r.res.SetMisses(miss)
r.res.SetFail(fail) r.res.SetFailures(fail)
} }
// SetPDPResults sets lists of nodes according to their PDP results. // SetPDPResults sets lists of nodes according to their PDP results.
@ -78,8 +75,8 @@ func (r *Report) SetPDPResults(passed, failed [][]byte) {
r.mu.Lock() r.mu.Lock()
defer r.mu.Unlock() defer r.mu.Unlock()
r.res.SetPassNodes(passed) r.res.SubmitPassedStorageNodes(passed)
r.res.SetFailNodes(failed) r.res.SubmitFailedStorageNodes(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.
@ -87,6 +84,6 @@ func (r *Report) SetPoRCounters(requests, retries uint32) {
r.mu.Lock() r.mu.Lock()
defer r.mu.Unlock() defer r.mu.Unlock()
r.res.SetRequests(requests) r.res.SetRequestsPoR(requests)
r.res.SetRetries(retries) r.res.SetRetriesPoR(retries)
} }