forked from TrueCloudLab/frostfs-node
Evgenii Stratonikov
a6c9a337cd
ContainersOf() is better in almost every aspect, besides creating a session when the containers number is between 1024 and 2048 (prefetch script does limited unwrapping). Making List() private helps to ensure it is no longer used and can be safely removed in future. Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
58 lines
1.5 KiB
Go
58 lines
1.5 KiB
Go
package container
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/client"
|
|
cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
|
|
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/user"
|
|
)
|
|
|
|
// list returns a list of container identifiers belonging
|
|
// to the specified user of FrostFS system. The list is composed
|
|
// through Container contract call.
|
|
//
|
|
// Returns the identifiers of all FrostFS containers if pointer
|
|
// to user identifier is nil.
|
|
func (c *Client) list(idUser *user.ID) ([]cid.ID, error) {
|
|
var rawID []byte
|
|
|
|
if idUser != nil {
|
|
rawID = idUser.WalletBytes()
|
|
}
|
|
|
|
prm := client.TestInvokePrm{}
|
|
prm.SetMethod(listMethod)
|
|
prm.SetArgs(rawID)
|
|
|
|
res, err := c.client.TestInvoke(prm)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("could not perform test invocation (%s): %w", listMethod, err)
|
|
} else if ln := len(res); ln != 1 {
|
|
return nil, fmt.Errorf("unexpected stack item count (%s): %d", listMethod, ln)
|
|
}
|
|
|
|
res, err = client.ArrayFromStackItem(res[0])
|
|
if err != nil {
|
|
return nil, fmt.Errorf("could not get stack item array from stack item (%s): %w", listMethod, err)
|
|
}
|
|
|
|
cidList := make([]cid.ID, 0, len(res))
|
|
for i := range res {
|
|
rawID, err := client.BytesFromStackItem(res[i])
|
|
if err != nil {
|
|
return nil, fmt.Errorf("could not get byte array from stack item (%s): %w", listMethod, err)
|
|
}
|
|
|
|
var id cid.ID
|
|
|
|
err = id.Decode(rawID)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("decode container ID: %w", err)
|
|
}
|
|
|
|
cidList = append(cidList, id)
|
|
}
|
|
|
|
return cidList, nil
|
|
}
|