forked from TrueCloudLab/frostfs-node
[#265] innerring: Select containers to audit
Signed-off-by: Alex Vanin <alexey@nspcc.ru>
This commit is contained in:
parent
87e1252065
commit
3d3d058b05
8 changed files with 263 additions and 11 deletions
|
@ -1,9 +1,13 @@
|
|||
package invoke
|
||||
|
||||
import (
|
||||
"crypto/sha256"
|
||||
|
||||
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
|
||||
"github.com/nspcc-dev/neo-go/pkg/util"
|
||||
"github.com/nspcc-dev/neofs-api-go/pkg/container"
|
||||
"github.com/nspcc-dev/neofs-node/pkg/morph/client"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
type (
|
||||
|
@ -21,9 +25,12 @@ type (
|
|||
}
|
||||
)
|
||||
|
||||
var ErrParseTestInvoke = errors.New("can't parse NEO node response")
|
||||
|
||||
const (
|
||||
putContainerMethod = "put"
|
||||
deleteContainerMethod = "delete"
|
||||
listContainersMethod = "list"
|
||||
)
|
||||
|
||||
// RegisterContainer invokes Put method.
|
||||
|
@ -50,3 +57,47 @@ func RemoveContainer(cli *client.Client, con util.Uint160, p *RemoveContainerPar
|
|||
p.Signature,
|
||||
)
|
||||
}
|
||||
|
||||
func ListContainers(cli *client.Client, con util.Uint160) ([]*container.ID, error) {
|
||||
if cli == nil {
|
||||
return nil, client.ErrNilClient
|
||||
}
|
||||
|
||||
item, err := cli.TestInvoke(con, listContainersMethod, []byte{})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if len(item) < 1 {
|
||||
return nil, errors.Wrap(ErrParseTestInvoke, "nested array expected")
|
||||
}
|
||||
|
||||
rawIDs, err := client.ArrayFromStackItem(item[0])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
result := make([]*container.ID, 0, len(rawIDs))
|
||||
|
||||
var bufHash [sha256.Size]byte
|
||||
|
||||
for i := range rawIDs {
|
||||
cid, err := client.BytesFromStackItem(rawIDs[i])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if len(cid) != sha256.Size {
|
||||
return nil, errors.Wrap(ErrParseTestInvoke, "invalid container ID size")
|
||||
}
|
||||
|
||||
copy(bufHash[:], cid)
|
||||
|
||||
containerID := container.NewID()
|
||||
containerID.SetSHA256(bufHash)
|
||||
|
||||
result = append(result, containerID)
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue