forked from TrueCloudLab/frostfs-node
Compare commits
1 commit
master
...
aarifullin
Author | SHA1 | Date | |
---|---|---|---|
7453020fee |
170 changed files with 2169 additions and 1205 deletions
|
@ -4,6 +4,8 @@ ARG VERSION=dev
|
|||
ARG REPO=repository
|
||||
WORKDIR /src
|
||||
COPY . /src
|
||||
COPY go.mod.docker /src/go.mod
|
||||
COPY go.mod.sum /src/go.sum
|
||||
|
||||
RUN make bin/frostfs-ir
|
||||
|
||||
|
|
|
@ -4,6 +4,8 @@ ARG VERSION=dev
|
|||
ARG REPO=repository
|
||||
WORKDIR /src
|
||||
COPY . /src
|
||||
COPY go.mod.docker /src/go.mod
|
||||
COPY go.mod.sum /src/go.sum
|
||||
|
||||
RUN make bin/frostfs-node
|
||||
|
||||
|
|
|
@ -114,7 +114,7 @@ func printStorageNodeBalances(cmd *cobra.Command, inv *invoker.Invoker, nmHash u
|
|||
if err != nil {
|
||||
return errors.New("can't parse the list of storage nodes")
|
||||
}
|
||||
var ni netmap.NodeInfo
|
||||
ni := netmap.NewNodeInfo()
|
||||
if err := ni.Unmarshal(bs); err != nil {
|
||||
return fmt.Errorf("can't parse the list of storage nodes: %w", err)
|
||||
}
|
||||
|
|
|
@ -118,7 +118,7 @@ type GetContainerRes struct {
|
|||
}
|
||||
|
||||
// Container returns structured of the requested container.
|
||||
func (x GetContainerRes) Container() containerSDK.Container {
|
||||
func (x GetContainerRes) Container() *containerSDK.Container {
|
||||
return x.cliRes.Container()
|
||||
}
|
||||
|
||||
|
@ -369,7 +369,7 @@ func (x *PutObjectPrm) PrepareLocally() {
|
|||
}
|
||||
|
||||
func (x *PutObjectPrm) convertToSDKPrm(ctx context.Context) (client.PrmObjectPutInit, error) {
|
||||
var putPrm client.PrmObjectPutInit
|
||||
putPrm := client.NewPrmObjectPutInit()
|
||||
if !x.prepareLocally && x.sessionToken != nil {
|
||||
putPrm.WithinSession(*x.sessionToken)
|
||||
}
|
||||
|
@ -502,7 +502,7 @@ func (x DeleteObjectRes) Tombstone() oid.ID {
|
|||
//
|
||||
// Returns any error which prevented the operation from completing correctly in error return.
|
||||
func DeleteObject(ctx context.Context, prm DeleteObjectPrm) (*DeleteObjectRes, error) {
|
||||
var delPrm client.PrmObjectDelete
|
||||
delPrm := client.NewPrmObjectDelete()
|
||||
delPrm.FromContainer(prm.objAddr.Container())
|
||||
delPrm.ByID(prm.objAddr.Object())
|
||||
|
||||
|
@ -558,7 +558,7 @@ func (x GetObjectRes) Header() *object.Object {
|
|||
// Returns any error which prevented the operation from completing correctly in error return.
|
||||
// For raw reading, returns *object.SplitInfoError error if object is virtual.
|
||||
func GetObject(ctx context.Context, prm GetObjectPrm) (*GetObjectRes, error) {
|
||||
var getPrm client.PrmObjectGet
|
||||
getPrm := client.NewPrmObjectGet()
|
||||
getPrm.FromContainer(prm.objAddr.Container())
|
||||
getPrm.ByID(prm.objAddr.Object())
|
||||
|
||||
|
@ -585,14 +585,14 @@ func GetObject(ctx context.Context, prm GetObjectPrm) (*GetObjectRes, error) {
|
|||
return nil, fmt.Errorf("init object reading on client: %w", err)
|
||||
}
|
||||
|
||||
var hdr object.Object
|
||||
hdr := object.New()
|
||||
|
||||
if !rdr.ReadHeader(&hdr) {
|
||||
if !rdr.ReadHeader(hdr) {
|
||||
_, err = rdr.Close()
|
||||
return nil, fmt.Errorf("read object header: %w", err)
|
||||
}
|
||||
if prm.headerCallback != nil {
|
||||
prm.headerCallback(&hdr)
|
||||
prm.headerCallback(hdr)
|
||||
}
|
||||
|
||||
_, err = io.Copy(prm.wrt, rdr)
|
||||
|
@ -601,7 +601,7 @@ func GetObject(ctx context.Context, prm GetObjectPrm) (*GetObjectRes, error) {
|
|||
}
|
||||
|
||||
return &GetObjectRes{
|
||||
hdr: &hdr,
|
||||
hdr: hdr,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
@ -634,7 +634,7 @@ func (x HeadObjectRes) Header() *object.Object {
|
|||
// Returns any error which prevented the operation from completing correctly in error return.
|
||||
// For raw reading, returns *object.SplitInfoError error if object is virtual.
|
||||
func HeadObject(ctx context.Context, prm HeadObjectPrm) (*HeadObjectRes, error) {
|
||||
var cliPrm client.PrmObjectHead
|
||||
cliPrm := client.NewPrmObjectHead()
|
||||
cliPrm.FromContainer(prm.objAddr.Container())
|
||||
cliPrm.ByID(prm.objAddr.Object())
|
||||
|
||||
|
@ -661,14 +661,14 @@ func HeadObject(ctx context.Context, prm HeadObjectPrm) (*HeadObjectRes, error)
|
|||
return nil, fmt.Errorf("read object header via client: %w", err)
|
||||
}
|
||||
|
||||
var hdr object.Object
|
||||
hdr := object.New()
|
||||
|
||||
if !res.ReadHeader(&hdr) {
|
||||
if !res.ReadHeader(hdr) {
|
||||
return nil, fmt.Errorf("missing header in response")
|
||||
}
|
||||
|
||||
return &HeadObjectRes{
|
||||
hdr: &hdr,
|
||||
hdr: hdr,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
@ -699,7 +699,7 @@ func (x SearchObjectsRes) IDList() []oid.ID {
|
|||
//
|
||||
// Returns any error which prevented the operation from completing correctly in error return.
|
||||
func SearchObjects(ctx context.Context, prm SearchObjectsPrm) (*SearchObjectsRes, error) {
|
||||
var cliPrm client.PrmObjectSearch
|
||||
cliPrm := client.NewPrmObjectSearch()
|
||||
cliPrm.InContainer(prm.cnrID)
|
||||
cliPrm.SetFilters(prm.filters)
|
||||
|
||||
|
@ -789,7 +789,7 @@ func (x HashPayloadRangesRes) HashList() [][]byte {
|
|||
// Returns any error which prevented the operation from completing correctly in error return.
|
||||
// Returns an error if number of received hashes differs with the number of requested ranges.
|
||||
func HashPayloadRanges(ctx context.Context, prm HashPayloadRangesPrm) (*HashPayloadRangesRes, error) {
|
||||
var cliPrm client.PrmObjectHash
|
||||
cliPrm := client.NewPrmObjectHash()
|
||||
cliPrm.FromContainer(prm.objAddr.Container())
|
||||
cliPrm.ByID(prm.objAddr.Object())
|
||||
|
||||
|
@ -857,7 +857,7 @@ type PayloadRangeRes struct{}
|
|||
// Returns any error which prevented the operation from completing correctly in error return.
|
||||
// For raw reading, returns *object.SplitInfoError error if object is virtual.
|
||||
func PayloadRange(ctx context.Context, prm PayloadRangePrm) (*PayloadRangeRes, error) {
|
||||
var cliPrm client.PrmObjectRange
|
||||
cliPrm := client.NewPrmObjectRange()
|
||||
cliPrm.FromContainer(prm.objAddr.Container())
|
||||
cliPrm.ByID(prm.objAddr.Object())
|
||||
|
||||
|
@ -921,7 +921,7 @@ func SyncContainerSettings(ctx context.Context, prm SyncContainerPrm) (*SyncCont
|
|||
panic("sync container settings with the network: nil container")
|
||||
}
|
||||
|
||||
err := client.SyncContainerWithNetwork(ctx, prm.c, prm.cli)
|
||||
err := client.SyncContainerWithNetwork(ctx, *prm.c, prm.cli)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@ func ReadBearerToken(cmd *cobra.Command, flagname string) *bearer.Token {
|
|||
|
||||
PrintVerbose(cmd, "Reading bearer token from file [%s]...", path)
|
||||
|
||||
var tok bearer.Token
|
||||
tok := bearer.NewToken()
|
||||
|
||||
err = ReadBinaryOrJSON(cmd, &tok, path)
|
||||
commonCmd.ExitOnErr(cmd, "invalid bearer token: %v", err)
|
||||
|
|
|
@ -95,7 +95,7 @@ func createToken(cmd *cobra.Command, _ []string) {
|
|||
var ownerID user.ID
|
||||
commonCmd.ExitOnErr(cmd, "can't parse recipient: %w", ownerID.DecodeString(ownerStr))
|
||||
|
||||
var b bearer.Token
|
||||
b := bearer.NewToken()
|
||||
b.SetExp(exp)
|
||||
b.SetNbf(nvb)
|
||||
b.SetIat(iat)
|
||||
|
@ -107,7 +107,7 @@ func createToken(cmd *cobra.Command, _ []string) {
|
|||
raw, err := os.ReadFile(eaclPath)
|
||||
commonCmd.ExitOnErr(cmd, "can't read extended ACL file: %w", err)
|
||||
commonCmd.ExitOnErr(cmd, "can't parse extended ACL: %w", json.Unmarshal(raw, table))
|
||||
b.SetEACLTable(*table)
|
||||
b.SetEACLTable(table)
|
||||
}
|
||||
|
||||
var data []byte
|
||||
|
|
|
@ -7,7 +7,7 @@ import (
|
|||
"strings"
|
||||
"time"
|
||||
|
||||
containerApi "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/container"
|
||||
containerApi "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/container/grpc"
|
||||
internalclient "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/client"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags"
|
||||
|
@ -68,10 +68,10 @@ It will be stored in sidechain when inner ring will accepts it.`,
|
|||
}
|
||||
}
|
||||
|
||||
var cnr container.Container
|
||||
cnr := container.NewContainer()
|
||||
cnr.Init()
|
||||
|
||||
err = parseAttributes(&cnr, containerAttributes)
|
||||
err = parseAttributes(cnr, containerAttributes)
|
||||
commonCmd.ExitOnErr(cmd, "", err)
|
||||
|
||||
var basicACL acl.Basic
|
||||
|
@ -189,7 +189,7 @@ func parseContainerPolicy(cmd *cobra.Command, policyString string) (*netmap.Plac
|
|||
return nil, errors.New("can't parse placement policy")
|
||||
}
|
||||
|
||||
func parseAttributes(dst *container.Container, attributes []string) error {
|
||||
func parseAttributes(dst container.Container, attributes []string) error {
|
||||
for i := range attributes {
|
||||
k, v, found := strings.Cut(attributes[i], attributeDelimiter)
|
||||
if !found {
|
||||
|
|
|
@ -76,7 +76,7 @@ func (x *stringWriter) WriteString(s string) (n int, err error) {
|
|||
|
||||
func prettyPrintContainer(cmd *cobra.Command, cnr container.Container, jsonEncoding bool) {
|
||||
if jsonEncoding {
|
||||
common.PrettyPrintJSON(cmd, cnr, "container")
|
||||
common.PrettyPrintJSON(cmd, &cnr, "container")
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -134,7 +134,7 @@ func prettyPrintBasicACL(cmd *cobra.Command, basicACL acl.Basic) {
|
|||
}
|
||||
|
||||
func getContainer(cmd *cobra.Command) (container.Container, *ecdsa.PrivateKey) {
|
||||
var cnr container.Container
|
||||
cnr := container.NewContainer()
|
||||
var pk *ecdsa.PrivateKey
|
||||
if containerPathFrom != "" {
|
||||
data, err := os.ReadFile(containerPathFrom)
|
||||
|
@ -154,7 +154,7 @@ func getContainer(cmd *cobra.Command) (container.Container, *ecdsa.PrivateKey) {
|
|||
res, err := internalclient.GetContainer(cmd.Context(), prm)
|
||||
commonCmd.ExitOnErr(cmd, "rpc error: %w", err)
|
||||
|
||||
cnr = res.Container()
|
||||
cnr = *res.Container()
|
||||
}
|
||||
return cnr, pk
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ package container
|
|||
import (
|
||||
"strings"
|
||||
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/container"
|
||||
containerapi "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/container/grpc"
|
||||
internalclient "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/client"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key"
|
||||
|
@ -70,16 +70,15 @@ var listContainersCmd = &cobra.Command{
|
|||
}
|
||||
|
||||
cnr := res.Container()
|
||||
if cnrName := containerSDK.Name(cnr); flagVarListName != "" && cnrName != flagVarListName {
|
||||
if cnrName := containerSDK.Name(*cnr); flagVarListName != "" && cnrName != flagVarListName {
|
||||
continue
|
||||
}
|
||||
cmd.Println(cnrID.String())
|
||||
|
||||
if flagVarListPrintAttr {
|
||||
cnr.IterateAttributes(func(key, val string) {
|
||||
if !strings.HasPrefix(key, container.SysAttributePrefix) && !strings.HasPrefix(key, container.SysAttributePrefixNeoFS) {
|
||||
// FIXME(@cthulhu-rider): https://git.frostfs.info/TrueCloudLab/frostfs-sdk-go/issues/97
|
||||
// Use dedicated method to skip system attributes.
|
||||
if !strings.HasPrefix(key, containerapi.SysAttributePrefix) && !strings.HasPrefix(key, containerapi.SysAttributePrefixNeoFS) {
|
||||
// FIXME(@cthulhu-rider): neofs-sdk-go#314 use dedicated method to skip system attributes
|
||||
cmd.Printf(" %s: %s\n", key, val)
|
||||
}
|
||||
})
|
||||
|
|
|
@ -37,7 +37,7 @@ var listContainerObjectsCmd = &cobra.Command{
|
|||
cli := internalclient.GetSDKClientByFlag(cmd, key.GetOrGenerate(cmd), commonflags.RPC)
|
||||
|
||||
var prmSearch internalclient.SearchObjectsPrm
|
||||
var prmHead internalclient.HeadObjectPrm
|
||||
prmHead := internalclient.NewHeadObjectPrm()
|
||||
|
||||
prmSearch.SetClient(cli)
|
||||
|
||||
|
@ -69,11 +69,11 @@ var listContainerObjectsCmd = &cobra.Command{
|
|||
if err == nil {
|
||||
attrs := resHead.Header().Attributes()
|
||||
for i := range attrs {
|
||||
attrKey := attrs[i].Key()
|
||||
attrKey := attrs[i].GetKey()
|
||||
if !strings.HasPrefix(attrKey, v2object.SysAttributePrefix) && !strings.HasPrefix(attrKey, v2object.SysAttributePrefixNeoFS) {
|
||||
// FIXME(@cthulhu-rider): https://git.frostfs.info/TrueCloudLab/frostfs-sdk-go/issues/97
|
||||
// Use dedicated method to skip system attributes.
|
||||
cmd.Printf(" %s: %s\n", attrKey, attrs[i].Value())
|
||||
cmd.Printf(" %s: %s\n", attrKey, attrs[i].GetValue())
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -50,7 +50,7 @@ Container ID in EACL table will be substituted with ID from the CLI.`,
|
|||
|
||||
var setEACLPrm internalclient.SetEACLPrm
|
||||
setEACLPrm.SetClient(cli)
|
||||
setEACLPrm.SetTable(*eaclTable)
|
||||
setEACLPrm.SetTable(eaclTable)
|
||||
|
||||
if tok != nil {
|
||||
setEACLPrm.WithinSession(*tok)
|
||||
|
|
|
@ -47,7 +47,7 @@ func getSession(cmd *cobra.Command) *session.Container {
|
|||
|
||||
common.PrintVerbose(cmd, "Reading container session from the file [%s]...", path)
|
||||
|
||||
var res session.Container
|
||||
res := session.NewContainer()
|
||||
|
||||
err := common.ReadBinaryOrJSON(cmd, &res, path)
|
||||
commonCmd.ExitOnErr(cmd, "read container session: %v", err)
|
||||
|
|
|
@ -4,7 +4,7 @@ import (
|
|||
"crypto/ecdsa"
|
||||
"errors"
|
||||
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
|
||||
refsapi "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs/grpc"
|
||||
internalclient "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/client"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags"
|
||||
commonCmd "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/internal/common"
|
||||
|
@ -40,14 +40,14 @@ func verifyResponse(cmd *cobra.Command,
|
|||
commonCmd.ExitOnErr(cmd, "", errors.New("missing response signature"))
|
||||
}
|
||||
|
||||
// TODO(@cthulhu-rider): #468 use Signature message from FrostFS API to avoid conversion
|
||||
var sigV2 refs.Signature
|
||||
sigV2.SetScheme(refs.ECDSA_SHA512)
|
||||
// TODO(@cthulhu-rider): #1387 use Signature message from NeoFS API to avoid conversion
|
||||
var sigV2 refsapi.Signature
|
||||
sigV2.SetScheme(refsapi.SignatureScheme_ECDSA_SHA512)
|
||||
sigV2.SetKey(sigControl.GetKey())
|
||||
sigV2.SetSign(sigControl.GetSign())
|
||||
|
||||
var sig frostfscrypto.Signature
|
||||
commonCmd.ExitOnErr(cmd, "can't read signature: %w", sig.ReadFromV2(sigV2))
|
||||
sig := frostfscrypto.NewSignature()
|
||||
commonCmd.ExitOnErr(cmd, "can't read signature: %w", sig.ReadFromV2(&sigV2))
|
||||
|
||||
if !sig.Verify(body.StableMarshal(nil)) {
|
||||
commonCmd.ExitOnErr(cmd, "", errors.New("invalid response signature"))
|
||||
|
|
|
@ -41,7 +41,7 @@ func initNodeInfoCmd() {
|
|||
func prettyPrintNodeInfo(cmd *cobra.Command, i netmap.NodeInfo) {
|
||||
isJSON, _ := cmd.Flags().GetBool(nodeInfoJSONFlag)
|
||||
if isJSON {
|
||||
common.PrettyPrintJSON(cmd, i, "node info")
|
||||
common.PrettyPrintJSON(cmd, &i, "node info")
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -61,7 +61,7 @@ func prettyPrintNodeInfo(cmd *cobra.Command, i netmap.NodeInfo) {
|
|||
|
||||
cmd.Println("state:", stateWord)
|
||||
|
||||
netmap.IterateNetworkEndpoints(i, func(s string) {
|
||||
netmap.IterateNetworkEndpoints(&i, func(s string) {
|
||||
cmd.Println("address:", s)
|
||||
})
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
|
||||
refsapi "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs/grpc"
|
||||
internalclient "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/client"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags"
|
||||
|
@ -150,21 +150,21 @@ func printHeader(cmd *cobra.Command, obj *object.Object) error {
|
|||
|
||||
cmd.Println("Attributes:")
|
||||
for _, attr := range obj.Attributes() {
|
||||
if attr.Key() == object.AttributeTimestamp {
|
||||
if attr.GetKey() == object.AttributeTimestamp {
|
||||
cmd.Printf(" %s=%s (%s)\n",
|
||||
attr.Key(),
|
||||
attr.Value(),
|
||||
common.PrettyPrintUnixTime(attr.Value()))
|
||||
attr.GetKey(),
|
||||
attr.GetValue(),
|
||||
common.PrettyPrintUnixTime(attr.GetValue()))
|
||||
continue
|
||||
}
|
||||
cmd.Printf(" %s=%s\n", attr.Key(), attr.Value())
|
||||
cmd.Printf(" %s=%s\n", attr.GetKey(), attr.GetValue())
|
||||
}
|
||||
|
||||
if signature := obj.Signature(); signature != nil {
|
||||
cmd.Print("ID signature:\n")
|
||||
|
||||
// TODO(@carpawell): #468 implement and use another approach to avoid conversion
|
||||
var sigV2 refs.Signature
|
||||
// TODO(@carpawell): #1387 implement and use another approach to avoid conversion
|
||||
var sigV2 refsapi.Signature
|
||||
signature.WriteToV2(&sigV2)
|
||||
|
||||
cmd.Printf(" public key: %s\n", hex.EncodeToString(sigV2.GetKey()))
|
||||
|
|
|
@ -65,7 +65,7 @@ var objectLockCmd = &cobra.Command{
|
|||
var idOwner user.ID
|
||||
user.IDFromKey(&idOwner, key.PublicKey)
|
||||
|
||||
var lock objectSDK.Lock
|
||||
lock := objectSDK.NewLock()
|
||||
lock.WriteMembers(lockList)
|
||||
|
||||
exp, _ := cmd.Flags().GetUint64(commonflags.ExpireAt)
|
||||
|
@ -88,7 +88,7 @@ var objectLockCmd = &cobra.Command{
|
|||
|
||||
common.PrintVerbose(cmd, "Lock object will expire after %d epoch", exp)
|
||||
|
||||
var expirationAttr objectSDK.Attribute
|
||||
expirationAttr := *objectSDK.NewAttribute()
|
||||
expirationAttr.SetKey(objectV2.SysAttributeExpEpoch)
|
||||
expirationAttr.SetValue(strconv.FormatUint(exp, 10))
|
||||
|
||||
|
|
|
@ -196,7 +196,7 @@ func getAllObjectAttributes(cmd *cobra.Command) []object.Attribute {
|
|||
expAttrValue := strconv.FormatUint(expiresOn, 10)
|
||||
|
||||
for i := range attrs {
|
||||
if attrs[i].Key() == objectV2.SysAttributeExpEpoch {
|
||||
if attrs[i].GetKey() == objectV2.SysAttributeExpEpoch {
|
||||
attrs[i].SetValue(expAttrValue)
|
||||
expAttrFound = true
|
||||
break
|
||||
|
@ -205,7 +205,7 @@ func getAllObjectAttributes(cmd *cobra.Command) []object.Attribute {
|
|||
|
||||
if !expAttrFound {
|
||||
index := len(attrs)
|
||||
attrs = append(attrs, object.Attribute{})
|
||||
attrs = append(attrs, *object.NewAttribute())
|
||||
attrs[index].SetKey(objectV2.SysAttributeExpEpoch)
|
||||
attrs[index].SetValue(expAttrValue)
|
||||
}
|
||||
|
@ -227,6 +227,7 @@ func parseObjectAttrs(cmd *cobra.Command) ([]object.Attribute, error) {
|
|||
if !found {
|
||||
return nil, fmt.Errorf("invalid attribute format: %s", rawAttrs[i])
|
||||
}
|
||||
attrs[i] = *object.NewAttribute()
|
||||
attrs[i].SetKey(k)
|
||||
attrs[i].SetValue(v)
|
||||
}
|
||||
|
@ -235,7 +236,7 @@ func parseObjectAttrs(cmd *cobra.Command) ([]object.Attribute, error) {
|
|||
if !disableFilename {
|
||||
filename := filepath.Base(cmd.Flag(fileFlag).Value.String())
|
||||
index := len(attrs)
|
||||
attrs = append(attrs, object.Attribute{})
|
||||
attrs = append(attrs, *object.NewAttribute())
|
||||
attrs[index].SetKey(object.AttributeFileName)
|
||||
attrs[index].SetValue(filename)
|
||||
}
|
||||
|
|
|
@ -38,7 +38,7 @@ func inspectFunc(cmd *cobra.Command, _ []string) {
|
|||
|
||||
data := res.Object()
|
||||
|
||||
var o object.Object
|
||||
o := *object.New()
|
||||
common.ExitOnErr(cmd, common.Errf("could not unmarshal object: %w",
|
||||
o.Unmarshal(data)),
|
||||
)
|
||||
|
|
|
@ -21,7 +21,7 @@ func PrintObjectHeader(cmd *cobra.Command, h object.Object) {
|
|||
cmd.Println("PayloadSize:", h.PayloadSize())
|
||||
cmd.Println("Attributes:")
|
||||
for _, attr := range h.Attributes() {
|
||||
cmd.Printf(" %s: %s\n", attr.Key(), attr.Value())
|
||||
cmd.Printf(" %s: %s\n", attr.GetKey(), attr.GetValue())
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ func inspectFunc(cmd *cobra.Command, _ []string) {
|
|||
data, err := writecache.Get(db, []byte(vAddress))
|
||||
common.ExitOnErr(cmd, common.Errf("could not fetch object: %w", err))
|
||||
|
||||
var o object.Object
|
||||
o := *object.New()
|
||||
common.ExitOnErr(cmd, common.Errf("could not unmarshal object: %w", o.Unmarshal(data)))
|
||||
|
||||
common.PrintObjectHeader(cmd, o)
|
||||
|
|
|
@ -208,7 +208,7 @@ func newCachedContainerStorage(v container.Source, ttl time.Duration) ttlContain
|
|||
}
|
||||
|
||||
func (s ttlContainerStorage) handleRemoval(cnr cid.ID) {
|
||||
s.set(cnr, nil, apistatus.ContainerNotFound{})
|
||||
s.set(cnr, nil, apistatus.NewContainerNotFound())
|
||||
}
|
||||
|
||||
// Get returns container value from the cache. If value is missing in the cache
|
||||
|
|
|
@ -15,7 +15,7 @@ import (
|
|||
"syscall"
|
||||
"time"
|
||||
|
||||
netmapV2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
|
||||
netmapV2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap/grpc"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-node/config"
|
||||
apiclientconfig "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-node/config/apiclient"
|
||||
contractsconfig "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-node/config/contracts"
|
||||
|
@ -423,7 +423,7 @@ type cfg struct {
|
|||
// latest epoch. Returns an error if value has not been cached yet.
|
||||
//
|
||||
// Provides interface for NetmapService server.
|
||||
func (c *cfg) ReadCurrentNetMap(msg *netmapV2.NetMap) error {
|
||||
func (c *cfg) ReadCurrentNetMap(msg *netmapV2.Netmap) error {
|
||||
val := c.netMap.Load()
|
||||
if val == nil {
|
||||
return errors.New("missing local network map")
|
||||
|
@ -563,6 +563,8 @@ func initCfg(appCfg *config.Config) *cfg {
|
|||
}
|
||||
c.cfgContainer = initContainer(appCfg)
|
||||
|
||||
c.cfgNodeInfo = initCfgNodeInfo()
|
||||
|
||||
c.cfgNetmap = initNetmap(appCfg, netState, relayOnly)
|
||||
|
||||
c.cfgGRPC = initCfgGRPC()
|
||||
|
@ -654,6 +656,12 @@ func initContainer(appCfg *config.Config) cfgContainer {
|
|||
}
|
||||
}
|
||||
|
||||
func initCfgNodeInfo() cfgNodeInfo {
|
||||
return cfgNodeInfo{
|
||||
localInfo: netmap.NewNodeInfo(),
|
||||
}
|
||||
}
|
||||
|
||||
func initCfgGRPC() cfgGRPC {
|
||||
maxChunkSize := uint64(maxMsgSize) * 3 / 4 // 25% to meta, 75% to payload
|
||||
maxAddrAmount := uint64(maxChunkSize) / addressSize // each address is about 72 bytes
|
||||
|
|
|
@ -9,7 +9,6 @@ import (
|
|||
"fmt"
|
||||
"strconv"
|
||||
|
||||
containerV2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/container"
|
||||
containerGRPC "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/container/grpc"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/client"
|
||||
|
@ -470,7 +469,7 @@ func (d *localStorageLoad) Iterate(f loadcontroller.UsedSpaceFilter, h loadcontr
|
|||
zap.Stringer("cid", idList[i]),
|
||||
)
|
||||
|
||||
var a containerSDK.SizeEstimation
|
||||
a := *containerSDK.NewSizeEstimation()
|
||||
a.SetContainer(idList[i])
|
||||
a.SetValue(sz)
|
||||
|
||||
|
@ -534,10 +533,10 @@ func (c *usedSpaceService) ExternalAddresses() []string {
|
|||
return c.cfg.ExternalAddresses()
|
||||
}
|
||||
|
||||
func (c *usedSpaceService) AnnounceUsedSpace(ctx context.Context, req *containerV2.AnnounceUsedSpaceRequest) (*containerV2.AnnounceUsedSpaceResponse, error) {
|
||||
func (c *usedSpaceService) AnnounceUsedSpace(ctx context.Context, req *containerGRPC.AnnounceUsedSpaceRequest) (*containerGRPC.AnnounceUsedSpaceResponse, error) {
|
||||
var passedRoute []loadcontroller.ServerInfo
|
||||
|
||||
for hdr := req.GetVerificationHeader(); hdr != nil; hdr = hdr.GetOrigin() {
|
||||
for hdr := req.GetVerifyHeader(); hdr != nil; hdr = hdr.GetOrigin() {
|
||||
passedRoute = append(passedRoute, &containerOnlyKeyRemoteServerInfo{
|
||||
key: hdr.GetBodySignature().GetKey(),
|
||||
})
|
||||
|
@ -554,7 +553,7 @@ func (c *usedSpaceService) AnnounceUsedSpace(ctx context.Context, req *container
|
|||
return nil, fmt.Errorf("could not initialize container's used space writer: %w", err)
|
||||
}
|
||||
|
||||
var est containerSDK.SizeEstimation
|
||||
est := *containerSDK.NewSizeEstimation()
|
||||
|
||||
for _, aV2 := range req.GetBody().GetAnnouncements() {
|
||||
err = est.ReadFromV2(aV2)
|
||||
|
@ -567,9 +566,9 @@ func (c *usedSpaceService) AnnounceUsedSpace(ctx context.Context, req *container
|
|||
}
|
||||
}
|
||||
|
||||
respBody := new(containerV2.AnnounceUsedSpaceResponseBody)
|
||||
respBody := new(containerGRPC.AnnounceUsedSpaceResponse_Body)
|
||||
|
||||
resp := new(containerV2.AnnounceUsedSpaceResponse)
|
||||
resp := new(containerGRPC.AnnounceUsedSpaceResponse)
|
||||
resp.SetBody(respBody)
|
||||
|
||||
c.cfg.respSvc.SetMeta(resp)
|
||||
|
|
BIN
cmd/frostfs-node/frostfs-node
Executable file
BIN
cmd/frostfs-node/frostfs-node
Executable file
Binary file not shown.
|
@ -445,7 +445,7 @@ func (n *netInfo) Dump(ver version.Version) (*netmapSDK.NetworkInfo, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
var ni netmapSDK.NetworkInfo
|
||||
ni := netmapSDK.NewNetworkInfo()
|
||||
ni.SetCurrentEpoch(n.netState.CurrentEpoch())
|
||||
ni.SetMagicNumber(magic)
|
||||
|
||||
|
@ -454,7 +454,7 @@ func (n *netInfo) Dump(ver version.Version) (*netmapSDK.NetworkInfo, error) {
|
|||
return nil, fmt.Errorf("read network configuration using netmap contract client: %w", err)
|
||||
}
|
||||
|
||||
if mjr := ver.Major(); mjr > 2 || mjr == 2 && ver.Minor() > 9 {
|
||||
if mjr := ver.GetMajor(); mjr > 2 || mjr == 2 && ver.GetMinor() > 9 {
|
||||
msPerBlock, err := n.msPerBlockRdr()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("ms per block: %w", err)
|
||||
|
|
|
@ -5,7 +5,6 @@ import (
|
|||
"errors"
|
||||
"fmt"
|
||||
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
|
||||
objectGRPC "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object/grpc"
|
||||
metricsconfig "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-node/config/metrics"
|
||||
policerconfig "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-node/config/policer"
|
||||
|
@ -70,27 +69,27 @@ func (s *objectSvc) Put() (objectService.PutObjectStream, error) {
|
|||
return s.put.Put()
|
||||
}
|
||||
|
||||
func (s *objectSvc) Head(ctx context.Context, req *object.HeadRequest) (*object.HeadResponse, error) {
|
||||
func (s *objectSvc) Head(ctx context.Context, req *objectGRPC.HeadRequest) (*objectGRPC.HeadResponse, error) {
|
||||
return s.get.Head(ctx, req)
|
||||
}
|
||||
|
||||
func (s *objectSvc) Search(req *object.SearchRequest, stream objectService.SearchStream) error {
|
||||
func (s *objectSvc) Search(req *objectGRPC.SearchRequest, stream objectService.SearchStream) error {
|
||||
return s.search.Search(req, stream)
|
||||
}
|
||||
|
||||
func (s *objectSvc) Get(req *object.GetRequest, stream objectService.GetObjectStream) error {
|
||||
func (s *objectSvc) Get(req *objectGRPC.GetRequest, stream objectService.GetObjectStream) error {
|
||||
return s.get.Get(req, stream)
|
||||
}
|
||||
|
||||
func (s *objectSvc) Delete(ctx context.Context, req *object.DeleteRequest) (*object.DeleteResponse, error) {
|
||||
func (s *objectSvc) Delete(ctx context.Context, req *objectGRPC.DeleteRequest) (*objectGRPC.DeleteResponse, error) {
|
||||
return s.delete.Delete(ctx, req)
|
||||
}
|
||||
|
||||
func (s *objectSvc) GetRange(req *object.GetRangeRequest, stream objectService.GetObjectRangeStream) error {
|
||||
func (s *objectSvc) GetRange(req *objectGRPC.GetRangeRequest, stream objectService.GetObjectRangeStream) error {
|
||||
return s.get.GetRange(req, stream)
|
||||
}
|
||||
|
||||
func (s *objectSvc) GetRangeHash(ctx context.Context, req *object.GetRangeHashRequest) (*object.GetRangeHashResponse, error) {
|
||||
func (s *objectSvc) GetRangeHash(ctx context.Context, req *objectGRPC.GetRangeHashRequest) (*objectGRPC.GetRangeHashResponse, error) {
|
||||
return s.get.GetRangeHash(ctx, req)
|
||||
}
|
||||
|
||||
|
|
|
@ -5,7 +5,6 @@ import (
|
|||
"fmt"
|
||||
"time"
|
||||
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
|
||||
sessionGRPC "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session/grpc"
|
||||
nodeconfig "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-node/config/node"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/event"
|
||||
|
@ -19,7 +18,7 @@ import (
|
|||
)
|
||||
|
||||
type sessionStorage interface {
|
||||
Create(ctx context.Context, body *session.CreateRequestBody) (*session.CreateResponseBody, error)
|
||||
Create(ctx context.Context, body *sessionGRPC.CreateRequest_Body) (*sessionGRPC.CreateResponse_Body, error)
|
||||
Get(ownerID user.ID, tokenID []byte) *storage.PrivateToken
|
||||
RemoveOld(epoch uint64)
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ func PrettyPrintNodeInfo(cmd *cobra.Command, node netmap.NodeInfo,
|
|||
|
||||
cmd.Printf("%sNode %d: %s %s ", indent, index+1, hex.EncodeToString(node.PublicKey()), strState)
|
||||
|
||||
netmap.IterateNetworkEndpoints(node, func(endpoint string) {
|
||||
netmap.IterateNetworkEndpoints(&node, func(endpoint string) {
|
||||
cmd.Printf("%s ", endpoint)
|
||||
})
|
||||
cmd.Println()
|
||||
|
|
5
go.mod
5
go.mod
|
@ -2,6 +2,11 @@ module git.frostfs.info/TrueCloudLab/frostfs-node
|
|||
|
||||
go 1.19
|
||||
|
||||
replace (
|
||||
git.frostfs.info/TrueCloudLab/frostfs-api-go/v2 v2.15.1-0.20230602142716-68021b910acb => /home/aarifullin/ws/frostfs-api-go
|
||||
git.frostfs.info/TrueCloudLab/frostfs-sdk-go v0.0.0-20230628121302-5d62cef27e6c => /home/aarifullin/ws/frostfs-sdk-go
|
||||
)
|
||||
|
||||
require (
|
||||
git.frostfs.info/TrueCloudLab/frostfs-api-go/v2 v2.15.1-0.20230602142716-68021b910acb
|
||||
git.frostfs.info/TrueCloudLab/frostfs-contract v0.0.0-20230627134746-36f3d39c406a
|
||||
|
|
129
go.mod.docker
Normal file
129
go.mod.docker
Normal file
|
@ -0,0 +1,129 @@
|
|||
module git.frostfs.info/TrueCloudLab/frostfs-node
|
||||
|
||||
go 1.19
|
||||
|
||||
replace (
|
||||
git.frostfs.info/TrueCloudLab/frostfs-api-go/v2 v2.15.1-0.20230602142716-68021b910acb => ./frostfs-api-go
|
||||
git.frostfs.info/TrueCloudLab/frostfs-sdk-go v0.0.0-20230628121302-5d62cef27e6c => ./frostfs-sdk-go
|
||||
)
|
||||
|
||||
require (
|
||||
git.frostfs.info/TrueCloudLab/frostfs-api-go/v2 v2.15.1-0.20230602142716-68021b910acb
|
||||
git.frostfs.info/TrueCloudLab/frostfs-contract v0.0.0-20230627134746-36f3d39c406a
|
||||
git.frostfs.info/TrueCloudLab/frostfs-observability v0.0.0-20230531082742-c97d21411eb6
|
||||
git.frostfs.info/TrueCloudLab/frostfs-sdk-go v0.0.0-20230628121302-5d62cef27e6c
|
||||
git.frostfs.info/TrueCloudLab/hrw v1.2.1
|
||||
git.frostfs.info/TrueCloudLab/tzhash v1.8.0
|
||||
github.com/cheggaaa/pb v1.0.29
|
||||
github.com/chzyer/readline v1.5.1
|
||||
github.com/flynn-archive/go-shlex v0.0.0-20150515145356-3f9db97f8568
|
||||
github.com/google/uuid v1.3.0
|
||||
github.com/hashicorp/golang-lru/v2 v2.0.4
|
||||
github.com/klauspost/compress v1.16.6
|
||||
github.com/mitchellh/go-homedir v1.1.0
|
||||
github.com/mr-tron/base58 v1.2.0
|
||||
github.com/multiformats/go-multiaddr v0.9.0
|
||||
github.com/nats-io/nats.go v1.27.1
|
||||
github.com/nspcc-dev/neo-go v0.101.2-0.20230601131642-a0117042e8fc
|
||||
github.com/olekukonko/tablewriter v0.0.5
|
||||
github.com/panjf2000/ants/v2 v2.7.5
|
||||
github.com/paulmach/orb v0.9.2
|
||||
github.com/prometheus/client_golang v1.16.0
|
||||
github.com/spf13/cast v1.5.1
|
||||
github.com/spf13/cobra v1.7.0
|
||||
github.com/spf13/pflag v1.0.5
|
||||
github.com/spf13/viper v1.16.0
|
||||
github.com/stretchr/testify v1.8.4
|
||||
go.etcd.io/bbolt v1.3.7
|
||||
go.opentelemetry.io/otel v1.16.0
|
||||
go.opentelemetry.io/otel/trace v1.16.0
|
||||
go.uber.org/zap v1.24.0
|
||||
golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df
|
||||
golang.org/x/sync v0.3.0
|
||||
golang.org/x/term v0.9.0
|
||||
google.golang.org/grpc v1.56.1
|
||||
google.golang.org/protobuf v1.31.0
|
||||
gopkg.in/yaml.v3 v3.0.1
|
||||
)
|
||||
|
||||
require (
|
||||
git.frostfs.info/TrueCloudLab/frostfs-crypto v0.6.0 // indirect
|
||||
git.frostfs.info/TrueCloudLab/rfc6979 v0.4.0 // indirect
|
||||
github.com/antlr4-go/antlr/v4 v4.13.0 // indirect
|
||||
github.com/benbjohnson/clock v1.3.5 // indirect
|
||||
github.com/beorn7/perks v1.0.1 // indirect
|
||||
github.com/bits-and-blooms/bitset v1.8.0 // indirect
|
||||
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
|
||||
github.com/cespare/xxhash/v2 v2.2.0 // indirect
|
||||
github.com/consensys/bavard v0.1.13 // indirect
|
||||
github.com/consensys/gnark-crypto v0.11.0 // indirect
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
|
||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect
|
||||
github.com/fsnotify/fsnotify v1.6.0 // indirect
|
||||
github.com/go-logr/logr v1.2.4 // indirect
|
||||
github.com/go-logr/stdr v1.2.2 // indirect
|
||||
github.com/golang/protobuf v1.5.3 // indirect
|
||||
github.com/golang/snappy v0.0.4 // indirect
|
||||
github.com/gorilla/websocket v1.5.0 // indirect
|
||||
github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.0-rc.0 // indirect
|
||||
github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.0.0-rc.5 // indirect
|
||||
github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 // indirect
|
||||
github.com/hashicorp/golang-lru v0.6.0 // indirect
|
||||
github.com/hashicorp/hcl v1.0.0 // indirect
|
||||
github.com/holiman/uint256 v1.2.2 // indirect
|
||||
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
||||
github.com/ipfs/go-cid v0.4.1 // indirect
|
||||
github.com/klauspost/cpuid/v2 v2.2.5 // indirect
|
||||
github.com/magiconair/properties v1.8.7 // indirect
|
||||
github.com/mattn/go-runewidth v0.0.14 // indirect
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
|
||||
github.com/minio/sha256-simd v1.0.1 // indirect
|
||||
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
||||
github.com/mmcloughlin/addchain v0.4.0 // indirect
|
||||
github.com/multiformats/go-base32 v0.1.0 // indirect
|
||||
github.com/multiformats/go-base36 v0.2.0 // indirect
|
||||
github.com/multiformats/go-multibase v0.2.0 // indirect
|
||||
github.com/multiformats/go-multihash v0.2.3 // indirect
|
||||
github.com/multiformats/go-varint v0.0.7 // indirect
|
||||
github.com/nats-io/nats-server/v2 v2.7.4 // indirect
|
||||
github.com/nats-io/nkeys v0.4.4 // indirect
|
||||
github.com/nats-io/nuid v1.0.1 // indirect
|
||||
github.com/nspcc-dev/go-ordered-json v0.0.0-20220111165707-25110be27d22 // indirect
|
||||
github.com/nspcc-dev/neo-go/pkg/interop v0.0.0-20230615193820-9185820289ce // indirect
|
||||
github.com/nspcc-dev/rfc6979 v0.2.0 // indirect
|
||||
github.com/pelletier/go-toml/v2 v2.0.8 // indirect
|
||||
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||
github.com/prometheus/client_model v0.4.0 // indirect
|
||||
github.com/prometheus/common v0.44.0 // indirect
|
||||
github.com/prometheus/procfs v0.11.0 // indirect
|
||||
github.com/rivo/uniseg v0.4.4 // indirect
|
||||
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
||||
github.com/spaolacci/murmur3 v1.1.0 // indirect
|
||||
github.com/spf13/afero v1.9.5 // indirect
|
||||
github.com/spf13/jwalterweatherman v1.1.0 // indirect
|
||||
github.com/subosito/gotenv v1.4.2 // indirect
|
||||
github.com/syndtr/goleveldb v1.0.1-0.20210305035536-64b5b1c73954 // indirect
|
||||
github.com/twmb/murmur3 v1.1.8 // indirect
|
||||
github.com/urfave/cli v1.22.14 // indirect
|
||||
go.mongodb.org/mongo-driver v1.12.0 // indirect
|
||||
go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.16.0 // indirect
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.16.0 // indirect
|
||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.16.0 // indirect
|
||||
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.16.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.16.0 // indirect
|
||||
go.opentelemetry.io/otel/sdk v1.16.0 // indirect
|
||||
go.opentelemetry.io/proto/otlp v0.20.0 // indirect
|
||||
go.uber.org/atomic v1.11.0 // indirect
|
||||
go.uber.org/multierr v1.11.0 // indirect
|
||||
golang.org/x/crypto v0.10.0 // indirect
|
||||
golang.org/x/net v0.11.0 // indirect
|
||||
golang.org/x/sys v0.9.0 // indirect
|
||||
golang.org/x/text v0.10.0 // indirect
|
||||
google.golang.org/genproto v0.0.0-20230628200519-e449d1ea0e82 // indirect
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20230628200519-e449d1ea0e82 // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20230628200519-e449d1ea0e82 // indirect
|
||||
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||
lukechampine.com/blake3 v1.2.1 // indirect
|
||||
rsc.io/tmplfunc v0.0.3 // indirect
|
||||
)
|
1008
go.mod.sum
Normal file
1008
go.mod.sum
Normal file
File diff suppressed because it is too large
Load diff
2
go.sum
2
go.sum
|
@ -36,8 +36,6 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX
|
|||
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
|
||||
cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
|
||||
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
|
||||
git.frostfs.info/TrueCloudLab/frostfs-api-go/v2 v2.15.1-0.20230602142716-68021b910acb h1:gaq4wgk7b+i9+rkDa+goPkv5FzqYlMxEuCKdZ57mSc0=
|
||||
git.frostfs.info/TrueCloudLab/frostfs-api-go/v2 v2.15.1-0.20230602142716-68021b910acb/go.mod h1:pKJJRLOChW4zDQsAt1e8k/snWKljJtpkiPfxV53ngjI=
|
||||
git.frostfs.info/TrueCloudLab/frostfs-contract v0.0.0-20230627134746-36f3d39c406a h1:EeaOunifY30ATPzOo1F32vUDW299UXDHYukZrIVxBZ0=
|
||||
git.frostfs.info/TrueCloudLab/frostfs-contract v0.0.0-20230627134746-36f3d39c406a/go.mod h1:nkR5gaGeez3Zv2SE7aceP0YwxG2FzIB5cGKpQO2vV2o=
|
||||
git.frostfs.info/TrueCloudLab/frostfs-crypto v0.6.0 h1:FxqFDhQYYgpe41qsIHVOcdzSVCB8JNSfPG7Uk4r2oSk=
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package container
|
||||
|
||||
import (
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
|
||||
refsGRPC "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs/grpc"
|
||||
cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/session"
|
||||
)
|
||||
|
@ -14,7 +14,7 @@ type RemovalWitness struct {
|
|||
ContainerID cid.ID
|
||||
|
||||
// Signature the signature of the container identifier.
|
||||
Signature *refs.Signature
|
||||
Signature *refsGRPC.Signature
|
||||
|
||||
// SessionToken the token of the session within
|
||||
// which the container was removed.
|
||||
|
|
|
@ -1,24 +1,26 @@
|
|||
package netmap
|
||||
|
||||
import "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/netmap"
|
||||
import (
|
||||
netmapGRPC "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/netmap"
|
||||
)
|
||||
|
||||
// Node is a named type of netmap.NodeInfo which provides interface needed
|
||||
// in the current repository. Node is expected to be used everywhere instead
|
||||
// of direct usage of netmap.NodeInfo, so it represents a type mediator.
|
||||
type Node netmap.NodeInfo
|
||||
type Node netmapGRPC.NodeInfo
|
||||
|
||||
// PublicKey returns public key bound to the storage node.
|
||||
//
|
||||
// Return value MUST NOT be mutated, make a copy first.
|
||||
func (x Node) PublicKey() []byte {
|
||||
return (netmap.NodeInfo)(x).PublicKey()
|
||||
return (netmapGRPC.NodeInfo)(x).PublicKey()
|
||||
}
|
||||
|
||||
// IterateAddresses iterates over all announced network addresses
|
||||
// and passes them into f. Handler MUST NOT be nil.
|
||||
func (x Node) IterateAddresses(f func(string) bool) {
|
||||
(netmap.NodeInfo)(x).IterateNetworkEndpoints(f)
|
||||
for _, addr := range (netmap.NodeInfo)(x).ExternalAddresses() {
|
||||
(netmapGRPC.NodeInfo)(x).IterateNetworkEndpoints(f)
|
||||
for _, addr := range (netmapGRPC.NodeInfo)(x).ExternalAddresses() {
|
||||
if f(addr) {
|
||||
return
|
||||
}
|
||||
|
@ -27,15 +29,15 @@ func (x Node) IterateAddresses(f func(string) bool) {
|
|||
|
||||
// NumberOfAddresses returns number of announced network addresses.
|
||||
func (x Node) NumberOfAddresses() int {
|
||||
return (netmap.NodeInfo)(x).NumberOfNetworkEndpoints()
|
||||
return (netmapGRPC.NodeInfo)(x).NumberOfNetworkEndpoints()
|
||||
}
|
||||
|
||||
// ExternalAddresses returns external addresses of a node.
|
||||
func (x Node) ExternalAddresses() []string {
|
||||
return (netmap.NodeInfo)(x).ExternalAddresses()
|
||||
return (netmapGRPC.NodeInfo)(x).ExternalAddresses()
|
||||
}
|
||||
|
||||
// Nodes is a named type of []netmap.NodeInfo which provides interface needed
|
||||
// in the current repository. Nodes is expected to be used everywhere instead
|
||||
// of direct usage of []netmap.NodeInfo, so it represents a type mediator.
|
||||
type Nodes []netmap.NodeInfo
|
||||
type Nodes []netmapGRPC.NodeInfo
|
||||
|
|
|
@ -8,7 +8,7 @@ import (
|
|||
"strconv"
|
||||
|
||||
objectV2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
|
||||
refsGRPC "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs/grpc"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/netmap"
|
||||
cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
|
||||
frostfsecdsa "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/crypto/ecdsa"
|
||||
|
@ -139,7 +139,7 @@ func (v *FormatValidator) validateSignatureKey(obj *object.Object) error {
|
|||
return errors.New("missing signature")
|
||||
}
|
||||
|
||||
var sigV2 refs.Signature
|
||||
var sigV2 refsGRPC.Signature
|
||||
sig.WriteToV2(&sigV2)
|
||||
|
||||
binKey := sigV2.GetKey()
|
||||
|
@ -240,7 +240,7 @@ func (v *FormatValidator) fillAndValidateLockMeta(o *object.Object, meta *Conten
|
|||
return fmt.Errorf("lock object expiration: %d; current: %d", lockExp, currEpoch)
|
||||
}
|
||||
|
||||
var lock object.Lock
|
||||
lock := object.NewLock()
|
||||
|
||||
if err = lock.Unmarshal(o.Payload()); err != nil {
|
||||
return fmt.Errorf("decode lock payload: %w", err)
|
||||
|
@ -323,11 +323,11 @@ func (v *FormatValidator) checkExpiration(ctx context.Context, obj *object.Objec
|
|||
|
||||
func expirationEpochAttribute(obj *object.Object) (uint64, error) {
|
||||
for _, a := range obj.Attributes() {
|
||||
if a.Key() != objectV2.SysAttributeExpEpoch && a.Key() != objectV2.SysAttributeExpEpochNeoFS {
|
||||
if a.GetKey() != objectV2.SysAttributeExpEpoch && a.GetKey() != objectV2.SysAttributeExpEpochNeoFS {
|
||||
continue
|
||||
}
|
||||
|
||||
return strconv.ParseUint(a.Value(), 10, 64)
|
||||
return strconv.ParseUint(a.GetValue(), 10, 64)
|
||||
}
|
||||
|
||||
return 0, errNoExpirationEpoch
|
||||
|
@ -344,13 +344,13 @@ func (v *FormatValidator) checkAttributes(obj *object.Object) error {
|
|||
mUnique := make(map[string]struct{}, len(as))
|
||||
|
||||
for _, a := range as {
|
||||
key := a.Key()
|
||||
key := a.GetKey()
|
||||
|
||||
if _, was := mUnique[key]; was {
|
||||
return errDuplAttr
|
||||
}
|
||||
|
||||
if a.Value() == "" {
|
||||
if a.GetValue() == "" {
|
||||
return errEmptyAttrVal
|
||||
}
|
||||
|
||||
|
|
|
@ -141,7 +141,7 @@ func TestFormatValidator_Validate(t *testing.T) {
|
|||
_, err = v.ValidateContent(obj)
|
||||
require.Error(t, err) // no expiration epoch in tombstone
|
||||
|
||||
var expirationAttribute object.Attribute
|
||||
expirationAttribute := *object.NewAttribute()
|
||||
expirationAttribute.SetKey(objectV2.SysAttributeExpEpoch)
|
||||
expirationAttribute.SetValue(strconv.Itoa(10))
|
||||
|
||||
|
@ -170,11 +170,11 @@ func TestFormatValidator_Validate(t *testing.T) {
|
|||
fn := func(val string) *object.Object {
|
||||
obj := blankValidObject(&ownerKey.PrivateKey)
|
||||
|
||||
var a object.Attribute
|
||||
a := object.NewAttribute()
|
||||
a.SetKey(objectV2.SysAttributeExpEpoch)
|
||||
a.SetValue(val)
|
||||
|
||||
obj.SetAttributes(a)
|
||||
obj.SetAttributes(*a)
|
||||
|
||||
require.NoError(t, object.SetIDWithSignature(ownerKey.PrivateKey, obj))
|
||||
|
||||
|
@ -204,7 +204,6 @@ func TestFormatValidator_Validate(t *testing.T) {
|
|||
addr.SetContainer(cID)
|
||||
addr.SetObject(oID)
|
||||
ls.m[addr] = true
|
||||
|
||||
err := v.Validate(context.Background(), obj, false)
|
||||
require.NoError(t, err)
|
||||
})
|
||||
|
@ -221,11 +220,11 @@ func TestFormatValidator_Validate(t *testing.T) {
|
|||
t.Run("duplication", func(t *testing.T) {
|
||||
obj := blankValidObject(&ownerKey.PrivateKey)
|
||||
|
||||
var a1 object.Attribute
|
||||
a1 := *object.NewAttribute()
|
||||
a1.SetKey("key1")
|
||||
a1.SetValue("val1")
|
||||
|
||||
var a2 object.Attribute
|
||||
a2 := *object.NewAttribute()
|
||||
a2.SetKey("key2")
|
||||
a2.SetValue("val2")
|
||||
|
||||
|
@ -234,7 +233,7 @@ func TestFormatValidator_Validate(t *testing.T) {
|
|||
err := v.checkAttributes(obj)
|
||||
require.NoError(t, err)
|
||||
|
||||
a2.SetKey(a1.Key())
|
||||
a2.SetKey(a1.GetKey())
|
||||
obj.SetAttributes(a1, a2)
|
||||
|
||||
err = v.checkAttributes(obj)
|
||||
|
@ -244,10 +243,10 @@ func TestFormatValidator_Validate(t *testing.T) {
|
|||
t.Run("empty value", func(t *testing.T) {
|
||||
obj := blankValidObject(&ownerKey.PrivateKey)
|
||||
|
||||
var a object.Attribute
|
||||
a := object.NewAttribute()
|
||||
a.SetKey("key")
|
||||
|
||||
obj.SetAttributes(a)
|
||||
obj.SetAttributes(*a)
|
||||
|
||||
err := v.checkAttributes(obj)
|
||||
require.Equal(t, errEmptyAttrVal, err)
|
||||
|
|
|
@ -11,7 +11,7 @@ func IsValid(v version.Version) bool {
|
|||
startMinor = 7
|
||||
)
|
||||
|
||||
mjr := v.Major()
|
||||
mjr := v.GetMajor()
|
||||
|
||||
return mjr > startMajor || mjr == startMajor && v.Minor() >= startMinor
|
||||
return mjr > startMajor || mjr == startMajor && v.GetMinor() >= startMinor
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ import (
|
|||
func TestIsValid(t *testing.T) {
|
||||
require.True(t, version.IsValid(versionSDK.Current()))
|
||||
|
||||
var v versionSDK.Version
|
||||
v := versionSDK.NewVersion()
|
||||
|
||||
for _, item := range []struct {
|
||||
mjr, mnr uint32
|
||||
|
|
|
@ -27,12 +27,12 @@ func TestProcessorEmitsGasToNetmapAndAlphabet(t *testing.T) {
|
|||
|
||||
morphClient := &testMorphClient{}
|
||||
|
||||
var node1 netmap.NodeInfo
|
||||
node1 := netmap.NewNodeInfo()
|
||||
key1, err := keys.NewPublicKeyFromString("038c862959e56b43e20f79187c4fe9e0bc7c8c66c1603e6cf0ec7f87ab6b08dc35")
|
||||
require.NoError(t, err, "failed to parse key1")
|
||||
node1.SetPublicKey(key1.Bytes())
|
||||
|
||||
var node2 netmap.NodeInfo
|
||||
node2 := netmap.NewNodeInfo()
|
||||
key2, err := keys.NewPublicKeyFromString("02ac920cd7df0b61b289072e6b946e2da4e1a31b9ab1c621bb475e30fa4ab102c3")
|
||||
require.NoError(t, err, "failed to parse key2")
|
||||
node2.SetPublicKey(key2.Bytes())
|
||||
|
@ -104,12 +104,12 @@ func TestProcessorEmitsGasToNetmapIfNoParsedWallets(t *testing.T) {
|
|||
|
||||
morphClient := &testMorphClient{}
|
||||
|
||||
var node1 netmap.NodeInfo
|
||||
node1 := netmap.NewNodeInfo()
|
||||
key1, err := keys.NewPublicKeyFromString("038c862959e56b43e20f79187c4fe9e0bc7c8c66c1603e6cf0ec7f87ab6b08dc35")
|
||||
require.NoError(t, err, "failed to parse key1")
|
||||
node1.SetPublicKey(key1.Bytes())
|
||||
|
||||
var node2 netmap.NodeInfo
|
||||
node2 := netmap.NewNodeInfo()
|
||||
key2, err := keys.NewPublicKeyFromString("02ac920cd7df0b61b289072e6b946e2da4e1a31b9ab1c621bb475e30fa4ab102c3")
|
||||
require.NoError(t, err, "failed to parse key2")
|
||||
node2.SetPublicKey(key2.Bytes())
|
||||
|
|
|
@ -106,7 +106,7 @@ func (cp *Processor) checkTokenLifetime(token session.Container) error {
|
|||
}
|
||||
|
||||
func (cp *Processor) verifyByTokenSession(v signatureVerificationData, key *frostfsecdsa.PublicKeyRFC6979, keyProvided bool) error {
|
||||
var tok session.Container
|
||||
tok := session.NewContainer()
|
||||
|
||||
err := tok.Unmarshal(v.binTokenSession)
|
||||
if err != nil {
|
||||
|
|
|
@ -55,12 +55,12 @@ func TestPutEvent(t *testing.T) {
|
|||
var pp netmap.PlacementPolicy
|
||||
pp.AddReplicas(netmap.ReplicaDescriptor{})
|
||||
|
||||
var cnr containerSDK.Container
|
||||
cnr := containerSDK.NewContainer()
|
||||
cnr.Init()
|
||||
cnr.SetOwner(usr)
|
||||
cnr.SetPlacementPolicy(pp)
|
||||
cnr.SetBasicACL(acl.Private)
|
||||
containerSDK.DisableHomomorphicHashing(&cnr)
|
||||
containerSDK.DisableHomomorphicHashing(cnr)
|
||||
|
||||
nr := &payload.P2PNotaryRequest{
|
||||
MainTransaction: &transaction.Transaction{},
|
||||
|
@ -119,12 +119,12 @@ func TestDeleteEvent(t *testing.T) {
|
|||
var pp netmap.PlacementPolicy
|
||||
pp.AddReplicas(netmap.ReplicaDescriptor{})
|
||||
|
||||
var cnr containerSDK.Container
|
||||
cnr := containerSDK.NewContainer()
|
||||
cnr.Init()
|
||||
cnr.SetOwner(usr)
|
||||
cnr.SetPlacementPolicy(pp)
|
||||
cnr.SetBasicACL(acl.Private)
|
||||
containerSDK.DisableHomomorphicHashing(&cnr)
|
||||
containerSDK.DisableHomomorphicHashing(cnr)
|
||||
|
||||
var cid cid.ID
|
||||
containerSDK.CalculateID(&cid, cnr)
|
||||
|
@ -141,7 +141,7 @@ func TestDeleteEvent(t *testing.T) {
|
|||
NotaryRequestValue: nr,
|
||||
}
|
||||
|
||||
var signature frostfscrypto.Signature
|
||||
signature := frostfscrypto.NewSignature()
|
||||
signer := frostfsecdsa.Signer(p.PrivateKey)
|
||||
require.NoError(t, signature.Calculate(signer, ev.ContainerID()), "failed to calculate signature")
|
||||
cc.get[hex.EncodeToString(ev.ContainerID())] = &containercore.Container{
|
||||
|
@ -193,19 +193,19 @@ func TestSetEACLEvent(t *testing.T) {
|
|||
var pp netmap.PlacementPolicy
|
||||
pp.AddReplicas(netmap.ReplicaDescriptor{})
|
||||
|
||||
var cnr containerSDK.Container
|
||||
cnr := containerSDK.NewContainer()
|
||||
cnr.Init()
|
||||
cnr.SetOwner(usr)
|
||||
cnr.SetPlacementPolicy(pp)
|
||||
cnr.SetBasicACL(acl.PrivateExtended)
|
||||
containerSDK.DisableHomomorphicHashing(&cnr)
|
||||
containerSDK.DisableHomomorphicHashing(cnr)
|
||||
|
||||
var cid cid.ID
|
||||
containerSDK.CalculateID(&cid, cnr)
|
||||
cidBytes := make([]byte, 32)
|
||||
cid.Encode(cidBytes)
|
||||
|
||||
var signature frostfscrypto.Signature
|
||||
signature := frostfscrypto.NewSignature()
|
||||
signer := frostfsecdsa.Signer(p.PrivateKey)
|
||||
require.NoError(t, signature.Calculate(signer, cidBytes), "failed to calculate signature")
|
||||
|
||||
|
|
|
@ -62,7 +62,7 @@ func (cp *Processor) processContainerPut(put putEvent) bool {
|
|||
|
||||
func (cp *Processor) checkPutContainer(ctx *putContainerContext) error {
|
||||
binCnr := ctx.e.Container()
|
||||
var cnr containerSDK.Container
|
||||
cnr := containerSDK.NewContainer()
|
||||
|
||||
err := cnr.Unmarshal(binCnr)
|
||||
if err != nil {
|
||||
|
|
|
@ -128,6 +128,7 @@ func TestCleanupTable(t *testing.T) {
|
|||
}
|
||||
|
||||
func newNodeInfo(key *keys.PublicKey) (n netmap.NodeInfo) {
|
||||
n = netmap.NewNodeInfo()
|
||||
n.SetPublicKey(key.Bytes())
|
||||
return n
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ import (
|
|||
"testing"
|
||||
"time"
|
||||
|
||||
v2netmap "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
|
||||
v2netmap "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap/grpc"
|
||||
netmapContract "git.frostfs.info/TrueCloudLab/frostfs-contract/netmap"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/innerring/processors/governance"
|
||||
timerEvent "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/innerring/timers"
|
||||
|
@ -50,12 +50,12 @@ func TestNewEpochTick(t *testing.T) {
|
|||
|
||||
func TestNewEpoch(t *testing.T) {
|
||||
t.Parallel()
|
||||
var node1 netmap.NodeInfo
|
||||
node1 := netmap.NewNodeInfo()
|
||||
key1, err := keys.NewPublicKeyFromString("038c862959e56b43e20f79187c4fe9e0bc7c8c66c1603e6cf0ec7f87ab6b08dc35")
|
||||
require.NoError(t, err, "failed to parse key1")
|
||||
node1.SetPublicKey(key1.Bytes())
|
||||
|
||||
var node2 netmap.NodeInfo
|
||||
node2 := netmap.NewNodeInfo()
|
||||
key2, err := keys.NewPublicKeyFromString("02ac920cd7df0b61b289072e6b946e2da4e1a31b9ab1c621bb475e30fa4ab102c3")
|
||||
require.NoError(t, err, "failed to parse key2")
|
||||
node2.SetPublicKey(key2.Bytes())
|
||||
|
@ -127,7 +127,7 @@ func TestAddPeer(t *testing.T) {
|
|||
|
||||
require.NoError(t, err, "failed to create processor")
|
||||
|
||||
var node netmap.NodeInfo
|
||||
node := netmap.NewNodeInfo()
|
||||
key, err := keys.NewPublicKeyFromString("038c862959e56b43e20f79187c4fe9e0bc7c8c66c1603e6cf0ec7f87ab6b08dc35")
|
||||
require.NoError(t, err, "failed to parse key")
|
||||
node.SetPublicKey(key.Bytes())
|
||||
|
@ -245,7 +245,7 @@ func TestCleanupTick(t *testing.T) {
|
|||
nonce: uint32(ev.epoch),
|
||||
vub: nil,
|
||||
method: "updateStateIR",
|
||||
args: []any{int64(v2netmap.Offline), keyExp.Bytes()},
|
||||
args: []any{int64(v2netmap.NodeInfo_OFFLINE), keyExp.Bytes()},
|
||||
},
|
||||
}, nc.notaryInvokes, "invalid notary invokes")
|
||||
require.True(t, proc.netmapSnapshot.lastAccess[key1Str].removeFlag, "invalid expired removed flag")
|
||||
|
|
|
@ -43,7 +43,7 @@ func addLocodeAttr(n *netmap.NodeInfo, lc locodestd.LOCODE) {
|
|||
}
|
||||
|
||||
func nodeInfoWithSomeAttrs() *netmap.NodeInfo {
|
||||
var n netmap.NodeInfo
|
||||
n := netmap.NewNodeInfo()
|
||||
|
||||
n.SetAttribute("key1", "val1")
|
||||
n.SetAttribute("key2", "val2")
|
||||
|
|
|
@ -66,7 +66,7 @@ func TestValidator_VerifyAndUpdate(t *testing.T) {
|
|||
},
|
||||
},
|
||||
} {
|
||||
var node netmap.NodeInfo
|
||||
node := netmap.NewNodeInfo()
|
||||
|
||||
// prepare node
|
||||
testCase.preparer(&node)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package netmap
|
||||
|
||||
import (
|
||||
v2netmap "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
|
||||
v2netmap "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap/grpc"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
|
||||
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
|
||||
"go.uber.org/zap"
|
||||
|
@ -36,7 +36,7 @@ func (np *Processor) processNetmapCleanupTick(ev netmapCleanupTick) bool {
|
|||
uint32(ev.epoch),
|
||||
nil,
|
||||
methodUpdateStateNotary,
|
||||
int64(v2netmap.Offline), key.Bytes(),
|
||||
int64(v2netmap.NodeInfo_OFFLINE), key.Bytes(),
|
||||
)
|
||||
if err != nil {
|
||||
np.log.Error(logs.NetmapCantInvokeNetmapUpdateState, zap.Error(err))
|
||||
|
|
|
@ -30,7 +30,7 @@ func (np *Processor) processAddPeer(ev netmapEvent.AddPeer) bool {
|
|||
}
|
||||
|
||||
// unmarshal node info
|
||||
var nodeInfo netmap.NodeInfo
|
||||
nodeInfo := netmap.NewNodeInfo()
|
||||
if err := nodeInfo.Unmarshal(ev.Node()); err != nil {
|
||||
// it will be nice to have tx id at event structure to log it
|
||||
np.log.Warn(logs.NetmapCantParseNetworkMapCandidate)
|
||||
|
|
|
@ -77,7 +77,7 @@ func (b *Blobovnicza) Delete(ctx context.Context, prm DeletePrm) (DeleteRes, err
|
|||
})
|
||||
|
||||
if err == nil && !found {
|
||||
var errNotFound apistatus.ObjectNotFound
|
||||
errNotFound := apistatus.NewObjectNotFound()
|
||||
|
||||
return DeleteRes{}, errNotFound
|
||||
}
|
||||
|
|
|
@ -72,7 +72,7 @@ func (b *Blobovnicza) Get(ctx context.Context, prm GetPrm) (GetRes, error) {
|
|||
}
|
||||
|
||||
if data == nil {
|
||||
var errNotFound apistatus.ObjectNotFound
|
||||
errNotFound := apistatus.NewObjectNotFound()
|
||||
|
||||
return GetRes{}, errNotFound
|
||||
}
|
||||
|
|
|
@ -66,11 +66,11 @@ func TestCompression(t *testing.T) {
|
|||
testGet := func(t *testing.T, b *BlobStor, i int) {
|
||||
res1, err := b.Get(context.Background(), common.GetPrm{Address: object.AddressOf(smallObj[i])})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, smallObj[i], res1.Object)
|
||||
require.True(t, smallObj[i].Equal(res1.Object))
|
||||
|
||||
res2, err := b.Get(context.Background(), common.GetPrm{Address: object.AddressOf(bigObj[i])})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, bigObj[i], res2.Object)
|
||||
require.True(t, bigObj[i].Equal(res2.Object))
|
||||
}
|
||||
|
||||
testPut := func(t *testing.T, b *BlobStor, i int) {
|
||||
|
@ -134,7 +134,7 @@ func TestBlobstor_needsCompression(t *testing.T) {
|
|||
newObjectWithCt := func(contentType string) *objectSDK.Object {
|
||||
obj := testObject(smallSizeLimit + 1)
|
||||
if contentType != "" {
|
||||
var a objectSDK.Attribute
|
||||
a := *objectSDK.NewAttribute()
|
||||
a.SetKey(objectSDK.AttributeContentType)
|
||||
a.SetValue(contentType)
|
||||
obj.SetAttributes(a)
|
||||
|
@ -194,7 +194,7 @@ func TestConcurrentPut(t *testing.T) {
|
|||
testGet := func(t *testing.T, b *BlobStor, obj *objectSDK.Object) {
|
||||
res, err := b.Get(context.Background(), common.GetPrm{Address: object.AddressOf(obj)})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, obj, res.Object)
|
||||
require.True(t, obj.Equal(res.Object))
|
||||
}
|
||||
|
||||
testPut := func(t *testing.T, b *BlobStor, obj *objectSDK.Object) {
|
||||
|
|
|
@ -50,16 +50,16 @@ func (c *Config) NeedsCompression(obj *objectSDK.Object) bool {
|
|||
}
|
||||
|
||||
for _, attr := range obj.Attributes() {
|
||||
if attr.Key() == objectSDK.AttributeContentType {
|
||||
if attr.GetKey() == objectSDK.AttributeContentType {
|
||||
for _, value := range c.UncompressableContentTypes {
|
||||
match := false
|
||||
switch {
|
||||
case len(value) > 0 && value[len(value)-1] == '*':
|
||||
match = strings.HasPrefix(attr.Value(), value[:len(value)-1])
|
||||
match = strings.HasPrefix(attr.GetValue(), value[:len(value)-1])
|
||||
case len(value) > 0 && value[0] == '*':
|
||||
match = strings.HasSuffix(attr.Value(), value[1:])
|
||||
match = strings.HasSuffix(attr.GetValue(), value[1:])
|
||||
default:
|
||||
match = attr.Value() == value
|
||||
match = attr.GetValue() == value
|
||||
}
|
||||
if match {
|
||||
return false
|
||||
|
|
|
@ -32,13 +32,13 @@ func TestGet(t *testing.T, cons Constructor, min, max uint64) {
|
|||
gPrm.StorageID = objects[i].storageID
|
||||
res, err := s.Get(context.Background(), gPrm)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, objects[i].obj, res.Object)
|
||||
require.True(t, objects[i].obj.Equal(res.Object))
|
||||
|
||||
// Without storage ID.
|
||||
gPrm.StorageID = nil
|
||||
res, err = s.Get(context.Background(), gPrm)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, objects[i].obj, res.Object)
|
||||
require.True(t, objects[i].obj.Equal(res.Object))
|
||||
|
||||
// With raw flag.
|
||||
gPrm.StorageID = objects[i].storageID
|
||||
|
@ -46,6 +46,6 @@ func TestGet(t *testing.T, cons Constructor, min, max uint64) {
|
|||
|
||||
res, err = s.Get(context.Background(), gPrm)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, objects[i].raw, res.RawData)
|
||||
require.True(t, objects[i].obj.Equal(res.Object))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ import (
|
|||
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/common"
|
||||
apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
|
||||
oidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id/test"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
@ -34,6 +35,7 @@ func TestGetRange(t *testing.T, cons Constructor, min, max uint64) {
|
|||
|
||||
var gPrm common.GetRangePrm
|
||||
gPrm.Address = objects[0].addr
|
||||
gPrm.Range = *object.NewRange()
|
||||
gPrm.Range.SetOffset(start)
|
||||
gPrm.Range.SetLength(stop - start)
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ func TestSimpleLifecycle(t *testing.T) {
|
|||
}
|
||||
|
||||
{
|
||||
var objRange objectSDK.Range
|
||||
objRange := *objectSDK.NewRange()
|
||||
objRange.SetOffset(256)
|
||||
objRange.SetLength(512)
|
||||
resp, err := s.GetRange(context.Background(), common.GetRangePrm{
|
||||
|
|
|
@ -209,7 +209,7 @@ func TestBlobstorFailback(t *testing.T) {
|
|||
addr := object.AddressOf(objs[i])
|
||||
getRes, err := te.ng.Get(context.Background(), GetPrm{addr: addr})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, objs[i], getRes.Object())
|
||||
require.True(t, objs[i].Equal(getRes.Object()))
|
||||
|
||||
rngRes, err := te.ng.GetRange(context.Background(), RngPrm{addr: addr, off: 1, ln: 10})
|
||||
require.NoError(t, err)
|
||||
|
|
|
@ -150,7 +150,7 @@ func TestEvacuateNetwork(t *testing.T) {
|
|||
n++
|
||||
for i := range objects {
|
||||
if addr == objectCore.AddressOf(objects[i]) {
|
||||
require.Equal(t, objects[i], obj)
|
||||
require.True(t, objects[i].Equal(obj))
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
|
|
@ -67,7 +67,7 @@ func (e *StorageEngine) get(ctx context.Context, prm GetPrm) (GetRes, error) {
|
|||
defer elapsed("Get", e.metrics.AddMethodDuration)()
|
||||
}
|
||||
|
||||
var errNotFound apistatus.ObjectNotFound
|
||||
errNotFound := apistatus.NewObjectNotFound()
|
||||
|
||||
var shPrm shard.GetPrm
|
||||
shPrm.SetAddress(prm.addr)
|
||||
|
|
|
@ -125,7 +125,7 @@ func (e *StorageEngine) inhume(ctx context.Context, prm InhumePrm) (InhumeRes, e
|
|||
// Returns ok if object was inhumed during this invocation or before.
|
||||
func (e *StorageEngine) inhumeAddr(ctx context.Context, addr oid.Address, prm shard.InhumePrm, checkExists bool) (bool, error) {
|
||||
root := false
|
||||
var errLocked apistatus.ObjectLocked
|
||||
errLocked := apistatus.NewObjectLocked()
|
||||
var existPrm shard.ExistsPrm
|
||||
var retErr error
|
||||
var ok bool
|
||||
|
|
|
@ -62,7 +62,7 @@ func (e *StorageEngine) lock(ctx context.Context, idCnr cid.ID, locker oid.ID, l
|
|||
func (e *StorageEngine) lockSingle(ctx context.Context, idCnr cid.ID, locker, locked oid.ID, checkExists bool) (status uint8) {
|
||||
// code is pretty similar to inhumeAddr, maybe unify?
|
||||
root := false
|
||||
var errIrregular apistatus.LockNonRegularObject
|
||||
errIrregular := apistatus.NewLockNonRegularObject()
|
||||
|
||||
var addrLocked oid.Address
|
||||
addrLocked.SetContainer(idCnr)
|
||||
|
|
|
@ -83,7 +83,7 @@ func TestLockUserScenario(t *testing.T) {
|
|||
lockerAddr.SetContainer(cnr)
|
||||
lockerAddr.SetObject(lockerID)
|
||||
|
||||
var a object.Attribute
|
||||
a := *object.NewAttribute()
|
||||
a.SetKey(objectV2.SysAttributeExpEpoch)
|
||||
a.SetValue(strconv.Itoa(lockerExpiresAfter))
|
||||
|
||||
|
@ -105,7 +105,7 @@ func TestLockUserScenario(t *testing.T) {
|
|||
require.NoError(t, err)
|
||||
|
||||
// 2.
|
||||
var locker object.Lock
|
||||
locker := *object.NewLock()
|
||||
locker.WriteMembers([]oid.ID{id})
|
||||
object.WriteLock(lockerObj, locker)
|
||||
|
||||
|
@ -188,13 +188,13 @@ func TestLockExpiration(t *testing.T) {
|
|||
require.NoError(t, err)
|
||||
|
||||
// 2.
|
||||
var a object.Attribute
|
||||
a := object.NewAttribute()
|
||||
a.SetKey(objectV2.SysAttributeExpEpoch)
|
||||
a.SetValue(strconv.Itoa(lockerExpiresAfter))
|
||||
|
||||
lock := testutil.GenerateObjectWithCID(cnr)
|
||||
lock.SetType(object.TypeLock)
|
||||
lock.SetAttributes(a)
|
||||
lock.SetAttributes(*a)
|
||||
|
||||
err = Put(context.Background(), e, lock)
|
||||
require.NoError(t, err)
|
||||
|
|
|
@ -83,7 +83,7 @@ func (e *StorageEngine) getRange(ctx context.Context, prm RngPrm) (RngRes, error
|
|||
defer elapsed("GetRange", e.metrics.AddMethodDuration)()
|
||||
}
|
||||
|
||||
var errNotFound apistatus.ObjectNotFound
|
||||
errNotFound := apistatus.NewObjectNotFound()
|
||||
|
||||
var shPrm shard.RngPrm
|
||||
shPrm.SetAddress(prm.addr)
|
||||
|
@ -212,7 +212,7 @@ func (i *getRangeShardIterator) tryGetFromBlobstor(ctx context.Context) {
|
|||
|
||||
res, err := sh.GetRange(ctx, i.ShardPrm)
|
||||
if shard.IsErrOutOfRange(err) {
|
||||
var errOutOfRange apistatus.ObjectOutOfRange
|
||||
errOutOfRange := apistatus.NewObjectOutOfRange()
|
||||
|
||||
i.OutError = errOutOfRange
|
||||
return true
|
||||
|
|
|
@ -27,21 +27,21 @@ func GenerateObjectWithCID(cnr cid.ID) *object.Object {
|
|||
}
|
||||
|
||||
func GenerateObjectWithCIDWithPayload(cnr cid.ID, data []byte) *object.Object {
|
||||
var ver version.Version
|
||||
ver := version.NewVersion()
|
||||
ver.SetMajor(2)
|
||||
ver.SetMinor(1)
|
||||
|
||||
var csum checksum.Checksum
|
||||
csum := checksum.NewChecksum()
|
||||
csum.SetSHA256(sha256.Sum256(data))
|
||||
|
||||
var csumTZ checksum.Checksum
|
||||
csumTZ := checksum.NewChecksum()
|
||||
csumTZ.SetTillichZemor(tz.Sum(csum.Value()))
|
||||
|
||||
obj := object.New()
|
||||
obj.SetID(oidtest.ID())
|
||||
obj.SetOwnerID(usertest.ID())
|
||||
obj.SetContainerID(cnr)
|
||||
obj.SetVersion(&ver)
|
||||
obj.SetVersion(ver)
|
||||
obj.SetPayload(data)
|
||||
obj.SetPayloadChecksum(csum)
|
||||
obj.SetPayloadHomomorphicHash(csumTZ)
|
||||
|
@ -50,7 +50,7 @@ func GenerateObjectWithCIDWithPayload(cnr cid.ID, data []byte) *object.Object {
|
|||
}
|
||||
|
||||
func AddAttribute(obj *object.Object, key, val string) {
|
||||
var attr object.Attribute
|
||||
attr := *object.NewAttribute()
|
||||
attr.SetKey(key)
|
||||
attr.SetValue(val)
|
||||
|
||||
|
|
|
@ -76,7 +76,7 @@ func checkExpiredObjects(t *testing.T, db *meta.DB, f func(exp, nonExp *objectSD
|
|||
}
|
||||
|
||||
func setExpiration(o *objectSDK.Object, epoch uint64) {
|
||||
var attr objectSDK.Attribute
|
||||
attr := *objectSDK.NewAttribute()
|
||||
|
||||
attr.SetKey(objectV2.SysAttributeExpEpoch)
|
||||
attr.SetValue(strconv.FormatUint(epoch, 10))
|
||||
|
|
|
@ -183,5 +183,5 @@ func getSplitInfoError(tx *bbolt.Tx, cnr cid.ID, key []byte) error {
|
|||
return logicerr.Wrap(objectSDK.NewSplitInfoError(splitInfo))
|
||||
}
|
||||
|
||||
return logicerr.Wrap(apistatus.ObjectNotFound{})
|
||||
return logicerr.Wrap(apistatus.NewObjectNotFound())
|
||||
}
|
||||
|
|
|
@ -109,7 +109,7 @@ func TestInhumeLocked(t *testing.T) {
|
|||
|
||||
_, err = db.Inhume(context.Background(), prm)
|
||||
|
||||
var e apistatus.ObjectLocked
|
||||
e := apistatus.NewObjectLocked()
|
||||
require.ErrorAs(t, err, &e)
|
||||
}
|
||||
|
||||
|
|
|
@ -344,10 +344,10 @@ func updateFKBTIndexes(tx *bbolt.Tx, obj *objectSDK.Object, f updateIndexItemFun
|
|||
|
||||
// user specified attributes
|
||||
for i := range attrs {
|
||||
key = attributeBucketName(cnr, attrs[i].Key(), key)
|
||||
key = attributeBucketName(cnr, attrs[i].GetKey(), key)
|
||||
err := f(tx, namedBucketItem{
|
||||
name: key,
|
||||
key: []byte(attrs[i].Value()),
|
||||
key: []byte(attrs[i].GetValue()),
|
||||
val: objKey,
|
||||
})
|
||||
if err != nil {
|
||||
|
|
|
@ -8,7 +8,8 @@ import (
|
|||
"strings"
|
||||
"time"
|
||||
|
||||
v2object "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
|
||||
objectapi "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
|
||||
objectGRPC "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object/grpc"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/metaerr"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
|
||||
|
@ -193,27 +194,27 @@ func (db *DB) selectFastFilter(
|
|||
currEpoch := db.epochState.CurrentEpoch()
|
||||
bucketName := make([]byte, bucketKeySize)
|
||||
switch f.Header() {
|
||||
case v2object.FilterHeaderObjectID:
|
||||
case objectapi.FilterHeaderObjectID:
|
||||
db.selectObjectID(tx, f, cnr, to, fNum, currEpoch)
|
||||
case v2object.FilterHeaderOwnerID:
|
||||
case objectapi.FilterHeaderOwnerID:
|
||||
bucketName := ownerBucketName(cnr, bucketName)
|
||||
db.selectFromFKBT(tx, bucketName, f, to, fNum)
|
||||
case v2object.FilterHeaderPayloadHash:
|
||||
case objectapi.FilterHeaderPayloadHash:
|
||||
bucketName := payloadHashBucketName(cnr, bucketName)
|
||||
db.selectFromList(tx, bucketName, f, to, fNum)
|
||||
case v2object.FilterHeaderObjectType:
|
||||
case objectapi.FilterHeaderObjectType:
|
||||
for _, bucketName := range bucketNamesForType(cnr, f.Operation(), f.Value()) {
|
||||
selectAllFromBucket(tx, bucketName, to, fNum)
|
||||
}
|
||||
case v2object.FilterHeaderParent:
|
||||
case objectapi.FilterHeaderParent:
|
||||
bucketName := parentBucketName(cnr, bucketName)
|
||||
db.selectFromList(tx, bucketName, f, to, fNum)
|
||||
case v2object.FilterHeaderSplitID:
|
||||
case objectapi.FilterHeaderSplitID:
|
||||
bucketName := splitBucketName(cnr, bucketName)
|
||||
db.selectFromList(tx, bucketName, f, to, fNum)
|
||||
case v2object.FilterPropertyRoot:
|
||||
case objectapi.FilterPropertyRoot:
|
||||
selectAllFromBucket(tx, rootBucketName(cnr, bucketName), to, fNum)
|
||||
case v2object.FilterPropertyPhy:
|
||||
case objectapi.FilterPropertyPhy:
|
||||
selectAllFromBucket(tx, primaryBucketName(cnr, bucketName), to, fNum)
|
||||
selectAllFromBucket(tx, tombstoneBucketName(cnr, bucketName), to, fNum)
|
||||
selectAllFromBucket(tx, bucketNameLockers(cnr, bucketName), to, fNum)
|
||||
|
@ -229,9 +230,9 @@ func (db *DB) selectFastFilter(
|
|||
}
|
||||
|
||||
var mBucketNaming = map[string][]func(cid.ID, []byte) []byte{
|
||||
v2object.TypeRegular.String(): {primaryBucketName, parentBucketName},
|
||||
v2object.TypeTombstone.String(): {tombstoneBucketName},
|
||||
v2object.TypeLock.String(): {bucketNameLockers},
|
||||
objectGRPC.ObjectType_REGULAR.String(): {primaryBucketName, parentBucketName},
|
||||
objectGRPC.ObjectType_TOMBSTONE.String(): {tombstoneBucketName},
|
||||
objectGRPC.ObjectType_LOCK.String(): {bucketNameLockers},
|
||||
}
|
||||
|
||||
func allBucketNames(cnr cid.ID) (names [][]byte) {
|
||||
|
@ -495,15 +496,15 @@ func (db *DB) matchSlowFilters(tx *bbolt.Tx, addr oid.Address, f object.SearchFi
|
|||
var data []byte
|
||||
|
||||
switch f[i].Header() {
|
||||
case v2object.FilterHeaderVersion:
|
||||
case objectapi.FilterHeaderVersion:
|
||||
data = []byte(obj.Version().String())
|
||||
case v2object.FilterHeaderHomomorphicHash:
|
||||
case objectapi.FilterHeaderHomomorphicHash:
|
||||
cs, _ := obj.PayloadHomomorphicHash()
|
||||
data = cs.Value()
|
||||
case v2object.FilterHeaderCreationEpoch:
|
||||
case objectapi.FilterHeaderCreationEpoch:
|
||||
data = make([]byte, 8)
|
||||
binary.LittleEndian.PutUint64(data, obj.CreationEpoch())
|
||||
case v2object.FilterHeaderPayloadLength:
|
||||
case objectapi.FilterHeaderPayloadLength:
|
||||
data = make([]byte, 8)
|
||||
binary.LittleEndian.PutUint64(data, obj.PayloadSize())
|
||||
default:
|
||||
|
@ -529,7 +530,7 @@ func groupFilters(filters object.SearchFilters) (filterGroup, error) {
|
|||
|
||||
for i := range filters {
|
||||
switch filters[i].Header() {
|
||||
case v2object.FilterHeaderContainerID: // support deprecated field
|
||||
case objectapi.FilterHeaderContainerID: // support deprecated field
|
||||
err := res.cnr.DecodeString(filters[i].Value())
|
||||
if err != nil {
|
||||
return filterGroup{}, fmt.Errorf("can't parse container id: %w", err)
|
||||
|
@ -537,10 +538,10 @@ func groupFilters(filters object.SearchFilters) (filterGroup, error) {
|
|||
|
||||
res.withCnrFilter = true
|
||||
case // slow filters
|
||||
v2object.FilterHeaderVersion,
|
||||
v2object.FilterHeaderCreationEpoch,
|
||||
v2object.FilterHeaderPayloadLength,
|
||||
v2object.FilterHeaderHomomorphicHash:
|
||||
objectapi.FilterHeaderVersion,
|
||||
objectapi.FilterHeaderCreationEpoch,
|
||||
objectapi.FilterHeaderPayloadLength,
|
||||
objectapi.FilterHeaderHomomorphicHash:
|
||||
res.slowFilters = append(res.slowFilters, filters[i])
|
||||
default: // fast filters or user attributes if unknown
|
||||
res.fastFilters = append(res.fastFilters, filters[i])
|
||||
|
@ -569,5 +570,6 @@ func checkNonEmpty(fs object.SearchFilters) bool {
|
|||
|
||||
// returns true if string key is a reserved system filter key.
|
||||
func isSystemKey(key string) bool {
|
||||
return strings.HasPrefix(key, v2object.ReservedFilterPrefix)
|
||||
// FIXME: #1147 version-dependent approach
|
||||
return strings.HasPrefix(key, objectapi.ReservedFilterPrefix)
|
||||
}
|
||||
|
|
|
@ -6,7 +6,8 @@ import (
|
|||
"strconv"
|
||||
"testing"
|
||||
|
||||
v2object "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
|
||||
objectapi "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
|
||||
objectGRPC "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object/grpc"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil"
|
||||
meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase"
|
||||
|
@ -199,7 +200,7 @@ func TestDB_SelectRootPhyParent(t *testing.T) {
|
|||
)
|
||||
|
||||
fs = objectSDK.SearchFilters{}
|
||||
fs.AddFilter(v2object.FilterPropertyRoot, "", objectSDK.MatchNotPresent)
|
||||
fs.AddFilter(objectapi.FilterPropertyRoot, "", objectSDK.MatchNotPresent)
|
||||
testSelect(t, db, cnr, fs)
|
||||
})
|
||||
|
||||
|
@ -216,13 +217,13 @@ func TestDB_SelectRootPhyParent(t *testing.T) {
|
|||
)
|
||||
|
||||
fs = objectSDK.SearchFilters{}
|
||||
fs.AddFilter(v2object.FilterPropertyPhy, "", objectSDK.MatchNotPresent)
|
||||
fs.AddFilter(objectapi.FilterPropertyPhy, "", objectSDK.MatchNotPresent)
|
||||
testSelect(t, db, cnr, fs)
|
||||
})
|
||||
|
||||
t.Run("regular objects", func(t *testing.T) {
|
||||
fs := objectSDK.SearchFilters{}
|
||||
fs.AddFilter(v2object.FilterHeaderObjectType, v2object.TypeRegular.String(), objectSDK.MatchStringEqual)
|
||||
fs.AddFilter(objectapi.FilterHeaderObjectType, objectGRPC.ObjectType_REGULAR.String(), objectSDK.MatchStringEqual)
|
||||
testSelect(t, db, cnr, fs,
|
||||
object.AddressOf(small),
|
||||
object.AddressOf(leftChild),
|
||||
|
@ -232,24 +233,24 @@ func TestDB_SelectRootPhyParent(t *testing.T) {
|
|||
)
|
||||
|
||||
fs = objectSDK.SearchFilters{}
|
||||
fs.AddFilter(v2object.FilterHeaderObjectType, v2object.TypeRegular.String(), objectSDK.MatchStringNotEqual)
|
||||
fs.AddFilter(objectapi.FilterHeaderObjectType, objectGRPC.ObjectType_REGULAR.String(), objectSDK.MatchStringNotEqual)
|
||||
testSelect(t, db, cnr, fs,
|
||||
object.AddressOf(ts),
|
||||
object.AddressOf(lock),
|
||||
)
|
||||
|
||||
fs = objectSDK.SearchFilters{}
|
||||
fs.AddFilter(v2object.FilterHeaderObjectType, "", objectSDK.MatchNotPresent)
|
||||
fs.AddFilter(objectapi.FilterHeaderObjectType, "", objectSDK.MatchNotPresent)
|
||||
testSelect(t, db, cnr, fs)
|
||||
})
|
||||
|
||||
t.Run("tombstone objects", func(t *testing.T) {
|
||||
fs := objectSDK.SearchFilters{}
|
||||
fs.AddFilter(v2object.FilterHeaderObjectType, v2object.TypeTombstone.String(), objectSDK.MatchStringEqual)
|
||||
fs.AddFilter(objectapi.FilterHeaderObjectType, objectGRPC.ObjectType_TOMBSTONE.String(), objectSDK.MatchStringEqual)
|
||||
testSelect(t, db, cnr, fs, object.AddressOf(ts))
|
||||
|
||||
fs = objectSDK.SearchFilters{}
|
||||
fs.AddFilter(v2object.FilterHeaderObjectType, v2object.TypeTombstone.String(), objectSDK.MatchStringNotEqual)
|
||||
fs.AddFilter(objectapi.FilterHeaderObjectType, objectGRPC.ObjectType_TOMBSTONE.String(), objectSDK.MatchStringNotEqual)
|
||||
testSelect(t, db, cnr, fs,
|
||||
object.AddressOf(small),
|
||||
object.AddressOf(leftChild),
|
||||
|
@ -260,7 +261,7 @@ func TestDB_SelectRootPhyParent(t *testing.T) {
|
|||
)
|
||||
|
||||
fs = objectSDK.SearchFilters{}
|
||||
fs.AddFilter(v2object.FilterHeaderObjectType, "", objectSDK.MatchNotPresent)
|
||||
fs.AddFilter(objectapi.FilterHeaderObjectType, "", objectSDK.MatchNotPresent)
|
||||
testSelect(t, db, cnr, fs)
|
||||
})
|
||||
|
||||
|
@ -268,7 +269,7 @@ func TestDB_SelectRootPhyParent(t *testing.T) {
|
|||
idParent, _ := parent.ID()
|
||||
|
||||
fs := objectSDK.SearchFilters{}
|
||||
fs.AddFilter(v2object.FilterHeaderParent,
|
||||
fs.AddFilter(objectapi.FilterHeaderParent,
|
||||
idParent.EncodeToString(),
|
||||
objectSDK.MatchStringEqual)
|
||||
|
||||
|
@ -278,7 +279,7 @@ func TestDB_SelectRootPhyParent(t *testing.T) {
|
|||
)
|
||||
|
||||
fs = objectSDK.SearchFilters{}
|
||||
fs.AddFilter(v2object.FilterHeaderParent, "", objectSDK.MatchNotPresent)
|
||||
fs.AddFilter(objectapi.FilterHeaderParent, "", objectSDK.MatchNotPresent)
|
||||
testSelect(t, db, cnr, fs)
|
||||
})
|
||||
|
||||
|
@ -349,28 +350,28 @@ func TestDB_SelectPayloadHash(t *testing.T) {
|
|||
payloadHash := hex.EncodeToString(cs.Value())
|
||||
|
||||
fs := objectSDK.SearchFilters{}
|
||||
fs.AddFilter(v2object.FilterHeaderPayloadHash,
|
||||
fs.AddFilter(objectapi.FilterHeaderPayloadHash,
|
||||
payloadHash,
|
||||
objectSDK.MatchStringEqual)
|
||||
|
||||
testSelect(t, db, cnr, fs, object.AddressOf(raw1))
|
||||
|
||||
fs = objectSDK.SearchFilters{}
|
||||
fs.AddFilter(v2object.FilterHeaderPayloadHash,
|
||||
fs.AddFilter(objectapi.FilterHeaderPayloadHash,
|
||||
payloadHash[:len(payloadHash)-1],
|
||||
objectSDK.MatchCommonPrefix)
|
||||
|
||||
testSelect(t, db, cnr, fs, object.AddressOf(raw1))
|
||||
|
||||
fs = objectSDK.SearchFilters{}
|
||||
fs.AddFilter(v2object.FilterHeaderPayloadHash,
|
||||
fs.AddFilter(objectapi.FilterHeaderPayloadHash,
|
||||
payloadHash,
|
||||
objectSDK.MatchStringNotEqual)
|
||||
|
||||
testSelect(t, db, cnr, fs, object.AddressOf(raw2))
|
||||
|
||||
fs = objectSDK.SearchFilters{}
|
||||
fs.AddFilter(v2object.FilterHeaderPayloadHash,
|
||||
fs.AddFilter(objectapi.FilterHeaderPayloadHash,
|
||||
"",
|
||||
objectSDK.MatchNotPresent)
|
||||
|
||||
|
@ -378,21 +379,21 @@ func TestDB_SelectPayloadHash(t *testing.T) {
|
|||
|
||||
t.Run("invalid hashes", func(t *testing.T) {
|
||||
fs = objectSDK.SearchFilters{}
|
||||
fs.AddFilter(v2object.FilterHeaderPayloadHash,
|
||||
fs.AddFilter(objectapi.FilterHeaderPayloadHash,
|
||||
payloadHash[:len(payloadHash)-1],
|
||||
objectSDK.MatchStringNotEqual)
|
||||
|
||||
testSelect(t, db, cnr, fs, object.AddressOf(raw1), object.AddressOf(raw2))
|
||||
|
||||
fs = objectSDK.SearchFilters{}
|
||||
fs.AddFilter(v2object.FilterHeaderPayloadHash,
|
||||
fs.AddFilter(objectapi.FilterHeaderPayloadHash,
|
||||
payloadHash[:len(payloadHash)-2]+"x",
|
||||
objectSDK.MatchCommonPrefix)
|
||||
|
||||
testSelect(t, db, cnr, fs)
|
||||
|
||||
fs = objectSDK.SearchFilters{}
|
||||
fs.AddFilter(v2object.FilterHeaderPayloadHash,
|
||||
fs.AddFilter(objectapi.FilterHeaderPayloadHash,
|
||||
payloadHash[:len(payloadHash)-3]+"x0",
|
||||
objectSDK.MatchCommonPrefix)
|
||||
|
||||
|
@ -407,10 +408,10 @@ func TestDB_SelectWithSlowFilters(t *testing.T) {
|
|||
|
||||
cnr := cidtest.ID()
|
||||
|
||||
v20 := new(version.Version)
|
||||
v20 := version.NewVersion()
|
||||
v20.SetMajor(2)
|
||||
|
||||
var v21 version.Version
|
||||
v21 := version.NewVersion()
|
||||
v21.SetMajor(2)
|
||||
v21.SetMinor(1)
|
||||
|
||||
|
@ -424,7 +425,7 @@ func TestDB_SelectWithSlowFilters(t *testing.T) {
|
|||
raw2 := testutil.GenerateObjectWithCID(cnr)
|
||||
raw2.SetPayloadSize(20)
|
||||
raw2.SetCreationEpoch(21)
|
||||
raw2.SetVersion(&v21)
|
||||
raw2.SetVersion(v21)
|
||||
err = putBig(db, raw2)
|
||||
require.NoError(t, err)
|
||||
|
||||
|
@ -432,21 +433,21 @@ func TestDB_SelectWithSlowFilters(t *testing.T) {
|
|||
cs, _ := raw1.PayloadHomomorphicHash()
|
||||
|
||||
fs := objectSDK.SearchFilters{}
|
||||
fs.AddFilter(v2object.FilterHeaderHomomorphicHash,
|
||||
fs.AddFilter(objectapi.FilterHeaderHomomorphicHash,
|
||||
hex.EncodeToString(cs.Value()),
|
||||
objectSDK.MatchStringEqual)
|
||||
|
||||
testSelect(t, db, cnr, fs, object.AddressOf(raw1))
|
||||
|
||||
fs = objectSDK.SearchFilters{}
|
||||
fs.AddFilter(v2object.FilterHeaderHomomorphicHash,
|
||||
fs.AddFilter(objectapi.FilterHeaderHomomorphicHash,
|
||||
hex.EncodeToString(cs.Value()),
|
||||
objectSDK.MatchStringNotEqual)
|
||||
|
||||
testSelect(t, db, cnr, fs, object.AddressOf(raw2))
|
||||
|
||||
fs = objectSDK.SearchFilters{}
|
||||
fs.AddFilter(v2object.FilterHeaderHomomorphicHash,
|
||||
fs.AddFilter(objectapi.FilterHeaderHomomorphicHash,
|
||||
"",
|
||||
objectSDK.MatchNotPresent)
|
||||
|
||||
|
@ -455,39 +456,39 @@ func TestDB_SelectWithSlowFilters(t *testing.T) {
|
|||
|
||||
t.Run("object with payload length", func(t *testing.T) {
|
||||
fs := objectSDK.SearchFilters{}
|
||||
fs.AddFilter(v2object.FilterHeaderPayloadLength, "20", objectSDK.MatchStringEqual)
|
||||
fs.AddFilter(objectapi.FilterHeaderPayloadLength, "20", objectSDK.MatchStringEqual)
|
||||
|
||||
testSelect(t, db, cnr, fs, object.AddressOf(raw2))
|
||||
|
||||
fs = objectSDK.SearchFilters{}
|
||||
fs.AddFilter(v2object.FilterHeaderPayloadLength, "20", objectSDK.MatchStringNotEqual)
|
||||
fs.AddFilter(objectapi.FilterHeaderPayloadLength, "20", objectSDK.MatchStringNotEqual)
|
||||
|
||||
testSelect(t, db, cnr, fs, object.AddressOf(raw1))
|
||||
|
||||
fs = objectSDK.SearchFilters{}
|
||||
fs.AddFilter(v2object.FilterHeaderPayloadLength, "", objectSDK.MatchNotPresent)
|
||||
fs.AddFilter(objectapi.FilterHeaderPayloadLength, "", objectSDK.MatchNotPresent)
|
||||
|
||||
testSelect(t, db, cnr, fs)
|
||||
})
|
||||
|
||||
t.Run("object with creation epoch", func(t *testing.T) {
|
||||
fs := objectSDK.SearchFilters{}
|
||||
fs.AddFilter(v2object.FilterHeaderCreationEpoch, "11", objectSDK.MatchStringEqual)
|
||||
fs.AddFilter(objectapi.FilterHeaderCreationEpoch, "11", objectSDK.MatchStringEqual)
|
||||
|
||||
testSelect(t, db, cnr, fs, object.AddressOf(raw1))
|
||||
|
||||
fs = objectSDK.SearchFilters{}
|
||||
fs.AddFilter(v2object.FilterHeaderCreationEpoch, "11", objectSDK.MatchStringNotEqual)
|
||||
fs.AddFilter(objectapi.FilterHeaderCreationEpoch, "11", objectSDK.MatchStringNotEqual)
|
||||
|
||||
testSelect(t, db, cnr, fs, object.AddressOf(raw2))
|
||||
|
||||
fs = objectSDK.SearchFilters{}
|
||||
fs.AddFilter(v2object.FilterHeaderCreationEpoch, "", objectSDK.MatchNotPresent)
|
||||
fs.AddFilter(objectapi.FilterHeaderCreationEpoch, "", objectSDK.MatchNotPresent)
|
||||
|
||||
testSelect(t, db, cnr, fs)
|
||||
|
||||
fs = objectSDK.SearchFilters{}
|
||||
fs.AddFilter(v2object.FilterHeaderCreationEpoch, "1", objectSDK.MatchCommonPrefix)
|
||||
fs.AddFilter(objectapi.FilterHeaderCreationEpoch, "1", objectSDK.MatchCommonPrefix)
|
||||
|
||||
testSelect(t, db, cnr, fs, object.AddressOf(raw1))
|
||||
})
|
||||
|
@ -646,32 +647,32 @@ func TestDB_SelectSplitID(t *testing.T) {
|
|||
|
||||
t.Run("not present", func(t *testing.T) {
|
||||
fs := objectSDK.SearchFilters{}
|
||||
fs.AddFilter(v2object.FilterHeaderSplitID, "", objectSDK.MatchNotPresent)
|
||||
fs.AddFilter(objectapi.FilterHeaderSplitID, "", objectSDK.MatchNotPresent)
|
||||
testSelect(t, db, cnr, fs)
|
||||
})
|
||||
|
||||
t.Run("split id", func(t *testing.T) {
|
||||
fs := objectSDK.SearchFilters{}
|
||||
fs.AddFilter(v2object.FilterHeaderSplitID, split1.String(), objectSDK.MatchStringEqual)
|
||||
fs.AddFilter(objectapi.FilterHeaderSplitID, split1.String(), objectSDK.MatchStringEqual)
|
||||
testSelect(t, db, cnr, fs,
|
||||
object.AddressOf(child1),
|
||||
object.AddressOf(child2),
|
||||
)
|
||||
|
||||
fs = objectSDK.SearchFilters{}
|
||||
fs.AddFilter(v2object.FilterHeaderSplitID, split2.String(), objectSDK.MatchStringEqual)
|
||||
fs.AddFilter(objectapi.FilterHeaderSplitID, split2.String(), objectSDK.MatchStringEqual)
|
||||
testSelect(t, db, cnr, fs, object.AddressOf(child3))
|
||||
})
|
||||
|
||||
t.Run("empty split", func(t *testing.T) {
|
||||
fs := objectSDK.SearchFilters{}
|
||||
fs.AddFilter(v2object.FilterHeaderSplitID, "", objectSDK.MatchStringEqual)
|
||||
fs.AddFilter(objectapi.FilterHeaderSplitID, "", objectSDK.MatchStringEqual)
|
||||
testSelect(t, db, cnr, fs)
|
||||
})
|
||||
|
||||
t.Run("unknown split id", func(t *testing.T) {
|
||||
fs := objectSDK.SearchFilters{}
|
||||
fs.AddFilter(v2object.FilterHeaderSplitID,
|
||||
fs.AddFilter(objectapi.FilterHeaderSplitID,
|
||||
objectSDK.NewSplitID().String(),
|
||||
objectSDK.MatchStringEqual)
|
||||
testSelect(t, db, cnr, fs)
|
||||
|
@ -732,7 +733,7 @@ func BenchmarkSelect(b *testing.B) {
|
|||
cid := cidtest.ID()
|
||||
|
||||
for i := 0; i < objCount; i++ {
|
||||
var attr objectSDK.Attribute
|
||||
attr := *objectSDK.NewAttribute()
|
||||
attr.SetKey("myHeader")
|
||||
attr.SetValue(strconv.Itoa(i))
|
||||
obj := testutil.GenerateObjectWithCID(cid)
|
||||
|
|
|
@ -214,7 +214,7 @@ func (s *Shard) refillMetabase(ctx context.Context) error {
|
|||
}
|
||||
|
||||
func (s *Shard) refillLockObject(ctx context.Context, obj *objectSDK.Object) error {
|
||||
var lock objectSDK.Lock
|
||||
lock := *objectSDK.NewLock()
|
||||
if err := lock.Unmarshal(obj.Payload()); err != nil {
|
||||
return fmt.Errorf("could not unmarshal lock content: %w", err)
|
||||
}
|
||||
|
|
|
@ -262,7 +262,7 @@ func TestRefillMetabase(t *testing.T) {
|
|||
require.NoError(t, err)
|
||||
|
||||
// LOCK object handling
|
||||
var lock objectSDK.Lock
|
||||
lock := *objectSDK.NewLock()
|
||||
lock.WriteMembers(locked)
|
||||
|
||||
lockObj := objecttest.Object()
|
||||
|
@ -295,7 +295,7 @@ func TestRefillMetabase(t *testing.T) {
|
|||
}
|
||||
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, expObj.CutPayload(), res.Object())
|
||||
require.True(t, expObj.CutPayload().Equal(res.Object()))
|
||||
}
|
||||
|
||||
checkAllObjs := func(exists bool) {
|
||||
|
|
|
@ -33,7 +33,7 @@ func Test_GCDropsLockedExpiredSimpleObject(t *testing.T) {
|
|||
|
||||
cnr := cidtest.ID()
|
||||
|
||||
var objExpirationAttr objectSDK.Attribute
|
||||
objExpirationAttr := *objectSDK.NewAttribute()
|
||||
objExpirationAttr.SetKey(objectV2.SysAttributeExpEpoch)
|
||||
objExpirationAttr.SetValue("101")
|
||||
|
||||
|
@ -41,7 +41,7 @@ func Test_GCDropsLockedExpiredSimpleObject(t *testing.T) {
|
|||
obj.SetAttributes(objExpirationAttr)
|
||||
objID, _ := obj.ID()
|
||||
|
||||
var lockExpirationAttr objectSDK.Attribute
|
||||
lockExpirationAttr := *objectSDK.NewAttribute()
|
||||
lockExpirationAttr.SetKey(objectV2.SysAttributeExpEpoch)
|
||||
lockExpirationAttr.SetValue("103")
|
||||
|
||||
|
@ -85,11 +85,11 @@ func Test_GCDropsLockedExpiredComplexObject(t *testing.T) {
|
|||
parentID := oidtest.ID()
|
||||
splitID := objectSDK.NewSplitID()
|
||||
|
||||
var objExpirationAttr objectSDK.Attribute
|
||||
objExpirationAttr := *objectSDK.NewAttribute()
|
||||
objExpirationAttr.SetKey(objectV2.SysAttributeExpEpoch)
|
||||
objExpirationAttr.SetValue("101")
|
||||
|
||||
var lockExpirationAttr objectSDK.Attribute
|
||||
lockExpirationAttr := *objectSDK.NewAttribute()
|
||||
lockExpirationAttr.SetKey(objectV2.SysAttributeExpEpoch)
|
||||
lockExpirationAttr.SetValue("103")
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@ func testShardGet(t *testing.T, hasWriteCache bool) {
|
|||
|
||||
res, err := testGet(t, sh, getPrm, hasWriteCache)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, obj, res.Object())
|
||||
require.True(t, obj.Equal(res.Object()))
|
||||
})
|
||||
|
||||
t.Run("big object", func(t *testing.T) {
|
||||
|
@ -69,7 +69,7 @@ func testShardGet(t *testing.T, hasWriteCache bool) {
|
|||
|
||||
res, err := testGet(t, sh, getPrm, hasWriteCache)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, obj, res.Object())
|
||||
require.True(t, obj.Equal(res.Object()))
|
||||
})
|
||||
|
||||
t.Run("parent object", func(t *testing.T) {
|
||||
|
|
|
@ -94,6 +94,7 @@ func (s *Shard) GetRange(ctx context.Context, prm RngPrm) (RngRes, error) {
|
|||
cb := func(stor *blobstor.BlobStor, id []byte) (*object.Object, error) {
|
||||
var getRngPrm common.GetRangePrm
|
||||
getRngPrm.Address = prm.addr
|
||||
getRngPrm.Range = *object.NewRange()
|
||||
getRngPrm.Range.SetOffset(prm.off)
|
||||
getRngPrm.Range.SetLength(prm.ln)
|
||||
getRngPrm.StorageID = id
|
||||
|
|
|
@ -150,7 +150,7 @@ func newObject() *objectSDK.Object {
|
|||
x.SetOwnerID(usertest.ID())
|
||||
x.SetContainerID(cidtest.ID())
|
||||
x.SetType(objectSDK.TypeRegular)
|
||||
x.SetVersion(&ver)
|
||||
x.SetVersion(ver)
|
||||
x.SetPayloadChecksum(checksumtest.Checksum())
|
||||
x.SetPayloadHomomorphicHash(checksumtest.Checksum())
|
||||
return x
|
||||
|
|
|
@ -201,7 +201,7 @@ func (c *cache) flushFSTree(ctx context.Context, ignoreErrors bool) error {
|
|||
return err
|
||||
}
|
||||
|
||||
var obj object.Object
|
||||
obj := object.New()
|
||||
err = obj.Unmarshal(data)
|
||||
if err != nil {
|
||||
c.reportFlushError("can't unmarshal an object", sAddr, metaerr.Wrap(err))
|
||||
|
@ -211,7 +211,7 @@ func (c *cache) flushFSTree(ctx context.Context, ignoreErrors bool) error {
|
|||
return err
|
||||
}
|
||||
|
||||
err = c.flushObject(ctx, &obj, data, StorageTypeFSTree)
|
||||
err = c.flushObject(ctx, obj, data, StorageTypeFSTree)
|
||||
if err != nil {
|
||||
if ignoreErrors {
|
||||
return nil
|
||||
|
@ -322,7 +322,7 @@ func (c *cache) flush(ctx context.Context, ignoreErrors bool) error {
|
|||
return err
|
||||
}
|
||||
|
||||
var obj object.Object
|
||||
obj := object.New()
|
||||
if err := obj.Unmarshal(data); err != nil {
|
||||
c.reportFlushError("can't unmarshal an object from the DB", sa, metaerr.Wrap(err))
|
||||
if ignoreErrors {
|
||||
|
@ -331,7 +331,7 @@ func (c *cache) flush(ctx context.Context, ignoreErrors bool) error {
|
|||
return err
|
||||
}
|
||||
|
||||
if err := c.flushObject(ctx, &obj, data, StorageTypeDB); err != nil {
|
||||
if err := c.flushObject(ctx, obj, data, StorageTypeDB); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
|
|
@ -96,7 +96,7 @@ func TestFlush(t *testing.T) {
|
|||
|
||||
res, err := bs.Get(context.Background(), prm)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, objects[i].obj, res.Object)
|
||||
require.True(t, objects[i].obj.Equal(res.Object))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -219,7 +219,7 @@ func newObject(t *testing.T, size int) (*object.Object, []byte) {
|
|||
obj.SetOwnerID(usertest.ID())
|
||||
obj.SetContainerID(cidtest.ID())
|
||||
obj.SetType(object.TypeRegular)
|
||||
obj.SetVersion(&ver)
|
||||
obj.SetVersion(ver)
|
||||
obj.SetPayloadChecksum(checksumtest.Checksum())
|
||||
obj.SetPayloadHomomorphicHash(checksumtest.Checksum())
|
||||
obj.SetPayload(make([]byte, size))
|
||||
|
|
|
@ -4,7 +4,7 @@ import (
|
|||
"crypto/sha256"
|
||||
"fmt"
|
||||
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
|
||||
refsGRPC "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs/grpc"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/container"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/client"
|
||||
apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status"
|
||||
|
@ -86,12 +86,12 @@ func (c *Client) GetEACL(cnr cid.ID) (*container.EACL, error) {
|
|||
}
|
||||
}
|
||||
|
||||
// TODO(@cthulhu-rider): #468 implement and use another approach to avoid conversion
|
||||
var sigV2 refs.Signature
|
||||
// TODO(@cthulhu-rider): #1387 implement and use another approach to avoid conversion
|
||||
var sigV2 refsGRPC.Signature
|
||||
sigV2.SetKey(pub)
|
||||
sigV2.SetSign(sig)
|
||||
sigV2.SetScheme(refs.ECDSA_RFC6979_SHA256)
|
||||
sigV2.SetScheme(refsGRPC.SignatureScheme_ECDSA_RFC6979_SHA256)
|
||||
|
||||
err = res.Signature.ReadFromV2(sigV2)
|
||||
err = res.Signature.ReadFromV2(&sigV2)
|
||||
return &res, err
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ package container
|
|||
import (
|
||||
"fmt"
|
||||
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
|
||||
refsGRPC "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs/grpc"
|
||||
containercore "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/container"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/client"
|
||||
)
|
||||
|
@ -31,8 +31,8 @@ func PutEACL(c *Client, eaclInfo containercore.EACL) error {
|
|||
prm.SetToken(eaclInfo.Session.Marshal())
|
||||
}
|
||||
|
||||
// TODO(@cthulhu-rider): #468 implement and use another approach to avoid conversion
|
||||
var sigV2 refs.Signature
|
||||
// TODO(@cthulhu-rider): #1387 implement and use another approach to avoid conversion
|
||||
var sigV2 refsGRPC.Signature
|
||||
eaclInfo.Signature.WriteToV2(&sigV2)
|
||||
|
||||
prm.SetKey(sigV2.GetKey())
|
||||
|
|
|
@ -5,7 +5,7 @@ import (
|
|||
"fmt"
|
||||
"strings"
|
||||
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
|
||||
refsGRPC "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs/grpc"
|
||||
containerContract "git.frostfs.info/TrueCloudLab/frostfs-contract/container"
|
||||
containercore "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/container"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/client"
|
||||
|
@ -105,12 +105,12 @@ func (c *Client) Get(cid []byte) (*containercore.Container, error) {
|
|||
}
|
||||
}
|
||||
|
||||
// TODO(@cthulhu-rider): #468 implement and use another approach to avoid conversion
|
||||
var sigV2 refs.Signature
|
||||
// TODO(@cthulhu-rider): #1387 implement and use another approach to avoid conversion
|
||||
var sigV2 refsGRPC.Signature
|
||||
sigV2.SetKey(pub)
|
||||
sigV2.SetSign(sigBytes)
|
||||
sigV2.SetScheme(refs.ECDSA_RFC6979_SHA256)
|
||||
sigV2.SetScheme(refsGRPC.SignatureScheme_ECDSA_RFC6979_SHA256)
|
||||
|
||||
err = cnr.Signature.ReadFromV2(sigV2)
|
||||
err = cnr.Signature.ReadFromV2(&sigV2)
|
||||
return &cnr, err
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@ import (
|
|||
"crypto/sha256"
|
||||
"fmt"
|
||||
|
||||
v2refs "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
|
||||
v2refs "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs/grpc"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/client"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container"
|
||||
cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
|
||||
|
|
|
@ -3,7 +3,7 @@ package container
|
|||
import (
|
||||
"fmt"
|
||||
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
|
||||
refsGRPC "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs/grpc"
|
||||
containercore "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/container"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/client"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container"
|
||||
|
@ -28,8 +28,8 @@ func Put(c *Client, cnr containercore.Container) (*cid.ID, error) {
|
|||
prm.SetToken(cnr.Session.Marshal())
|
||||
}
|
||||
|
||||
// TODO(@cthulhu-rider): #468 implement and use another approach to avoid conversion
|
||||
var sigV2 refs.Signature
|
||||
// TODO(@cthulhu-rider): #1387 implement and use another approach to avoid conversion
|
||||
var sigV2 refsGRPC.Signature
|
||||
cnr.Signature.WriteToV2(&sigV2)
|
||||
|
||||
prm.SetKey(sigV2.GetKey())
|
||||
|
|
|
@ -11,6 +11,10 @@ import (
|
|||
|
||||
type NodeInfo = netmap.NodeInfo
|
||||
|
||||
func NewNodeInfo() NodeInfo {
|
||||
return NodeInfo(netmap.NewNodeInfo())
|
||||
}
|
||||
|
||||
// Client is a wrapper over StaticClient
|
||||
// which makes calls with the names and arguments
|
||||
// of the FrostFS Netmap contract.
|
||||
|
|
|
@ -15,6 +15,7 @@ import (
|
|||
func Test_stackItemsToNodeInfos(t *testing.T) {
|
||||
expected := make([]netmap.NodeInfo, 4)
|
||||
for i := range expected {
|
||||
expected[i] = netmap.NewNodeInfo()
|
||||
pub := make([]byte, 33)
|
||||
rand.Read(pub)
|
||||
|
||||
|
|
|
@ -3,7 +3,6 @@ package accounting
|
|||
import (
|
||||
"context"
|
||||
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/accounting"
|
||||
accountingGRPC "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/accounting/grpc"
|
||||
accountingsvc "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/accounting"
|
||||
)
|
||||
|
@ -23,15 +22,5 @@ func New(c accountingsvc.Server) *Server {
|
|||
|
||||
// Balance converts gRPC BalanceRequest message and passes it to internal Accounting service.
|
||||
func (s *Server) Balance(ctx context.Context, req *accountingGRPC.BalanceRequest) (*accountingGRPC.BalanceResponse, error) {
|
||||
balReq := new(accounting.BalanceRequest)
|
||||
if err := balReq.FromGRPCMessage(req); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
resp, err := s.srv.Balance(ctx, balReq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp.ToGRPCMessage().(*accountingGRPC.BalanceResponse), nil
|
||||
return s.srv.Balance(ctx, req)
|
||||
}
|
||||
|
|
|
@ -3,7 +3,6 @@ package container
|
|||
import (
|
||||
"context"
|
||||
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/container"
|
||||
containerGRPC "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/container/grpc"
|
||||
containersvc "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/container"
|
||||
)
|
||||
|
@ -23,105 +22,35 @@ func New(c containersvc.Server) *Server {
|
|||
|
||||
// Put converts gRPC PutRequest message and passes it to internal Container service.
|
||||
func (s *Server) Put(ctx context.Context, req *containerGRPC.PutRequest) (*containerGRPC.PutResponse, error) {
|
||||
putReq := new(container.PutRequest)
|
||||
if err := putReq.FromGRPCMessage(req); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
resp, err := s.srv.Put(ctx, putReq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp.ToGRPCMessage().(*containerGRPC.PutResponse), nil
|
||||
return s.srv.Put(ctx, req)
|
||||
}
|
||||
|
||||
// Delete converts gRPC DeleteRequest message and passes it to internal Container service.
|
||||
func (s *Server) Delete(ctx context.Context, req *containerGRPC.DeleteRequest) (*containerGRPC.DeleteResponse, error) {
|
||||
delReq := new(container.DeleteRequest)
|
||||
if err := delReq.FromGRPCMessage(req); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
resp, err := s.srv.Delete(ctx, delReq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp.ToGRPCMessage().(*containerGRPC.DeleteResponse), nil
|
||||
return s.srv.Delete(ctx, req)
|
||||
}
|
||||
|
||||
// Get converts gRPC GetRequest message and passes it to internal Container service.
|
||||
func (s *Server) Get(ctx context.Context, req *containerGRPC.GetRequest) (*containerGRPC.GetResponse, error) {
|
||||
getReq := new(container.GetRequest)
|
||||
if err := getReq.FromGRPCMessage(req); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
resp, err := s.srv.Get(ctx, getReq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp.ToGRPCMessage().(*containerGRPC.GetResponse), nil
|
||||
return s.srv.Get(ctx, req)
|
||||
}
|
||||
|
||||
// List converts gRPC ListRequest message and passes it to internal Container service.
|
||||
func (s *Server) List(ctx context.Context, req *containerGRPC.ListRequest) (*containerGRPC.ListResponse, error) {
|
||||
listReq := new(container.ListRequest)
|
||||
if err := listReq.FromGRPCMessage(req); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
resp, err := s.srv.List(ctx, listReq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp.ToGRPCMessage().(*containerGRPC.ListResponse), nil
|
||||
return s.srv.List(ctx, req)
|
||||
}
|
||||
|
||||
// SetExtendedACL converts gRPC SetExtendedACLRequest message and passes it to internal Container service.
|
||||
func (s *Server) SetExtendedACL(ctx context.Context, req *containerGRPC.SetExtendedACLRequest) (*containerGRPC.SetExtendedACLResponse, error) {
|
||||
setEACLReq := new(container.SetExtendedACLRequest)
|
||||
if err := setEACLReq.FromGRPCMessage(req); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
resp, err := s.srv.SetExtendedACL(ctx, setEACLReq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp.ToGRPCMessage().(*containerGRPC.SetExtendedACLResponse), nil
|
||||
return s.srv.SetExtendedACL(ctx, req)
|
||||
}
|
||||
|
||||
// GetExtendedACL converts gRPC GetExtendedACLRequest message and passes it to internal Container service.
|
||||
func (s *Server) GetExtendedACL(ctx context.Context, req *containerGRPC.GetExtendedACLRequest) (*containerGRPC.GetExtendedACLResponse, error) {
|
||||
getEACLReq := new(container.GetExtendedACLRequest)
|
||||
if err := getEACLReq.FromGRPCMessage(req); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
resp, err := s.srv.GetExtendedACL(ctx, getEACLReq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp.ToGRPCMessage().(*containerGRPC.GetExtendedACLResponse), nil
|
||||
return s.srv.GetExtendedACL(ctx, req)
|
||||
}
|
||||
|
||||
// AnnounceUsedSpace converts gRPC AnnounceUsedSpaceRequest message and passes it to internal Container service.
|
||||
func (s *Server) AnnounceUsedSpace(ctx context.Context, req *containerGRPC.AnnounceUsedSpaceRequest) (*containerGRPC.AnnounceUsedSpaceResponse, error) {
|
||||
announceReq := new(container.AnnounceUsedSpaceRequest)
|
||||
if err := announceReq.FromGRPCMessage(req); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
resp, err := s.srv.AnnounceUsedSpace(ctx, announceReq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp.ToGRPCMessage().(*containerGRPC.AnnounceUsedSpaceResponse), nil
|
||||
return s.srv.AnnounceUsedSpace(ctx, req)
|
||||
}
|
||||
|
|
|
@ -3,7 +3,6 @@ package grpc
|
|||
import (
|
||||
"context"
|
||||
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap"
|
||||
netmapGRPC "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/netmap/grpc"
|
||||
netmapsvc "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/netmap"
|
||||
)
|
||||
|
@ -25,45 +24,15 @@ func New(c netmapsvc.Server) *Server {
|
|||
func (s *Server) LocalNodeInfo(
|
||||
ctx context.Context,
|
||||
req *netmapGRPC.LocalNodeInfoRequest) (*netmapGRPC.LocalNodeInfoResponse, error) {
|
||||
nodeInfoReq := new(netmap.LocalNodeInfoRequest)
|
||||
if err := nodeInfoReq.FromGRPCMessage(req); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
resp, err := s.srv.LocalNodeInfo(ctx, nodeInfoReq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp.ToGRPCMessage().(*netmapGRPC.LocalNodeInfoResponse), nil
|
||||
return s.srv.LocalNodeInfo(ctx, req)
|
||||
}
|
||||
|
||||
// NetworkInfo converts gRPC request message and passes it to internal netmap service.
|
||||
func (s *Server) NetworkInfo(ctx context.Context, req *netmapGRPC.NetworkInfoRequest) (*netmapGRPC.NetworkInfoResponse, error) {
|
||||
netInfoReq := new(netmap.NetworkInfoRequest)
|
||||
if err := netInfoReq.FromGRPCMessage(req); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
resp, err := s.srv.NetworkInfo(ctx, netInfoReq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp.ToGRPCMessage().(*netmapGRPC.NetworkInfoResponse), nil
|
||||
return s.srv.NetworkInfo(ctx, req)
|
||||
}
|
||||
|
||||
// NetmapSnapshot converts gRPC request message and passes it to internal netmap service.
|
||||
func (s *Server) NetmapSnapshot(ctx context.Context, req *netmapGRPC.NetmapSnapshotRequest) (*netmapGRPC.NetmapSnapshotResponse, error) {
|
||||
snapshotReq := new(netmap.SnapshotRequest)
|
||||
if err := snapshotReq.FromGRPCMessage(req); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
resp, err := s.srv.Snapshot(ctx, snapshotReq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp.ToGRPCMessage().(*netmapGRPC.NetmapSnapshotResponse), nil
|
||||
return s.srv.Snapshot(ctx, req)
|
||||
}
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package object
|
||||
|
||||
import (
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
|
||||
objectGRPC "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object/grpc"
|
||||
)
|
||||
|
||||
|
@ -9,22 +8,15 @@ type getStreamerV2 struct {
|
|||
objectGRPC.ObjectService_GetServer
|
||||
}
|
||||
|
||||
func (s *getStreamerV2) Send(resp *object.GetResponse) error {
|
||||
return s.ObjectService_GetServer.Send(
|
||||
resp.ToGRPCMessage().(*objectGRPC.GetResponse),
|
||||
)
|
||||
func (s *getStreamerV2) Send(resp *objectGRPC.GetResponse) error {
|
||||
return s.ObjectService_GetServer.Send(resp)
|
||||
}
|
||||
|
||||
// Get converts gRPC GetRequest message and server-side stream and overtakes its data
|
||||
// to gRPC stream.
|
||||
func (s *Server) Get(req *objectGRPC.GetRequest, gStream objectGRPC.ObjectService_GetServer) error {
|
||||
getReq := new(object.GetRequest)
|
||||
if err := getReq.FromGRPCMessage(req); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return s.srv.Get(
|
||||
getReq,
|
||||
req,
|
||||
&getStreamerV2{
|
||||
ObjectService_GetServer: gStream,
|
||||
},
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package object
|
||||
|
||||
import (
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
|
||||
objectGRPC "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object/grpc"
|
||||
)
|
||||
|
||||
|
@ -9,22 +8,15 @@ type getRangeStreamerV2 struct {
|
|||
objectGRPC.ObjectService_GetRangeServer
|
||||
}
|
||||
|
||||
func (s *getRangeStreamerV2) Send(resp *object.GetRangeResponse) error {
|
||||
return s.ObjectService_GetRangeServer.Send(
|
||||
resp.ToGRPCMessage().(*objectGRPC.GetRangeResponse),
|
||||
)
|
||||
func (s *getRangeStreamerV2) Send(resp *objectGRPC.GetRangeResponse) error {
|
||||
return s.ObjectService_GetRangeServer.Send(resp)
|
||||
}
|
||||
|
||||
// GetRange converts gRPC GetRangeRequest message and server-side stream and overtakes its data
|
||||
// to gRPC stream.
|
||||
func (s *Server) GetRange(req *objectGRPC.GetRangeRequest, gStream objectGRPC.ObjectService_GetRangeServer) error {
|
||||
getRngReq := new(object.GetRangeRequest)
|
||||
if err := getRngReq.FromGRPCMessage(req); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return s.srv.GetRange(
|
||||
getRngReq,
|
||||
req,
|
||||
&getRangeStreamerV2{
|
||||
ObjectService_GetRangeServer: gStream,
|
||||
},
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package object
|
||||
|
||||
import (
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
|
||||
objectGRPC "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object/grpc"
|
||||
)
|
||||
|
||||
|
@ -9,22 +8,15 @@ type searchStreamerV2 struct {
|
|||
objectGRPC.ObjectService_SearchServer
|
||||
}
|
||||
|
||||
func (s *searchStreamerV2) Send(resp *object.SearchResponse) error {
|
||||
return s.ObjectService_SearchServer.Send(
|
||||
resp.ToGRPCMessage().(*objectGRPC.SearchResponse),
|
||||
)
|
||||
func (s *searchStreamerV2) Send(resp *objectGRPC.SearchResponse) error {
|
||||
return s.ObjectService_SearchServer.Send(resp)
|
||||
}
|
||||
|
||||
// Search converts gRPC SearchRequest message and server-side stream and overtakes its data
|
||||
// to gRPC stream.
|
||||
func (s *Server) Search(req *objectGRPC.SearchRequest, gStream objectGRPC.ObjectService_SearchServer) error {
|
||||
searchReq := new(object.SearchRequest)
|
||||
if err := searchReq.FromGRPCMessage(req); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return s.srv.Search(
|
||||
searchReq,
|
||||
req,
|
||||
&searchStreamerV2{
|
||||
ObjectService_SearchServer: gStream,
|
||||
},
|
||||
|
|
|
@ -5,7 +5,6 @@ import (
|
|||
"errors"
|
||||
"io"
|
||||
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
|
||||
objectGRPC "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object/grpc"
|
||||
objectSvc "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/object"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/util"
|
||||
|
@ -40,25 +39,20 @@ func (s *Server) Put(gStream objectGRPC.ObjectService_PutServer) error {
|
|||
return err
|
||||
}
|
||||
|
||||
return gStream.SendAndClose(resp.ToGRPCMessage().(*objectGRPC.PutResponse))
|
||||
return gStream.SendAndClose(resp)
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
putReq := new(object.PutRequest)
|
||||
if err := putReq.FromGRPCMessage(req); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := stream.Send(gStream.Context(), putReq); err != nil {
|
||||
if err := stream.Send(gStream.Context(), req); err != nil {
|
||||
if errors.Is(err, util.ErrAbortStream) {
|
||||
resp, err := stream.CloseAndRecv(gStream.Context())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return gStream.SendAndClose(resp.ToGRPCMessage().(*objectGRPC.PutResponse))
|
||||
return gStream.SendAndClose(resp)
|
||||
}
|
||||
|
||||
return err
|
||||
|
@ -68,45 +62,19 @@ func (s *Server) Put(gStream objectGRPC.ObjectService_PutServer) error {
|
|||
|
||||
// Delete converts gRPC DeleteRequest message and passes it to internal Object service.
|
||||
func (s *Server) Delete(ctx context.Context, req *objectGRPC.DeleteRequest) (*objectGRPC.DeleteResponse, error) {
|
||||
delReq := new(object.DeleteRequest)
|
||||
if err := delReq.FromGRPCMessage(req); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
resp, err := s.srv.Delete(ctx, delReq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp.ToGRPCMessage().(*objectGRPC.DeleteResponse), nil
|
||||
return s.srv.Delete(ctx, req)
|
||||
}
|
||||
|
||||
// Head converts gRPC HeadRequest message and passes it to internal Object service.
|
||||
func (s *Server) Head(ctx context.Context, req *objectGRPC.HeadRequest) (*objectGRPC.HeadResponse, error) {
|
||||
searchReq := new(object.HeadRequest)
|
||||
if err := searchReq.FromGRPCMessage(req); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
resp, err := s.srv.Head(ctx, searchReq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp.ToGRPCMessage().(*objectGRPC.HeadResponse), nil
|
||||
return s.srv.Head(ctx, req)
|
||||
}
|
||||
|
||||
// GetRangeHash converts gRPC GetRangeHashRequest message and passes it to internal Object service.
|
||||
func (s *Server) GetRangeHash(ctx context.Context, req *objectGRPC.GetRangeHashRequest) (*objectGRPC.GetRangeHashResponse, error) {
|
||||
hashRngReq := new(object.GetRangeHashRequest)
|
||||
if err := hashRngReq.FromGRPCMessage(req); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
resp, err := s.srv.GetRangeHash(ctx, hashRngReq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp.ToGRPCMessage().(*objectGRPC.GetRangeHashResponse), nil
|
||||
return s.srv.GetRangeHash(ctx, req)
|
||||
}
|
||||
|
||||
func (s *Server) PutSingle(context.Context, *objectGRPC.PutSingleRequest) (*objectGRPC.PutSingleResponse, error) {
|
||||
return &objectGRPC.PutSingleResponse{}, nil
|
||||
}
|
||||
|
|
|
@ -3,7 +3,6 @@ package session
|
|||
import (
|
||||
"context"
|
||||
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
|
||||
sessionGRPC "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session/grpc"
|
||||
sessionsvc "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/session"
|
||||
)
|
||||
|
@ -23,15 +22,5 @@ func New(c sessionsvc.Server) *Server {
|
|||
|
||||
// Create converts gRPC CreateRequest message and passes it to internal Session service.
|
||||
func (s *Server) Create(ctx context.Context, req *sessionGRPC.CreateRequest) (*sessionGRPC.CreateResponse, error) {
|
||||
createReq := new(session.CreateRequest)
|
||||
if err := createReq.FromGRPCMessage(req); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
resp, err := s.srv.Create(ctx, createReq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp.ToGRPCMessage().(*sessionGRPC.CreateResponse), nil
|
||||
return s.srv.Create(ctx, req)
|
||||
}
|
||||
|
|
|
@ -56,6 +56,7 @@ func TestVerifyMultiAddress_Order(t *testing.T) {
|
|||
}
|
||||
|
||||
func constructNodeInfo(address string) (ni netmap.NodeInfo) {
|
||||
ni = netmap.NewNodeInfo()
|
||||
ni.SetNetworkEndpoints(address)
|
||||
return ni
|
||||
}
|
||||
|
|
|
@ -4,12 +4,12 @@ import (
|
|||
"context"
|
||||
"fmt"
|
||||
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/accounting"
|
||||
accGRPC "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/accounting/grpc"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/util/response"
|
||||
)
|
||||
|
||||
type ServiceExecutor interface {
|
||||
Balance(context.Context, *accounting.BalanceRequestBody) (*accounting.BalanceResponseBody, error)
|
||||
Balance(context.Context, *accGRPC.BalanceRequest_Body) (*accGRPC.BalanceResponse_Body, error)
|
||||
}
|
||||
|
||||
type executorSvc struct {
|
||||
|
@ -25,13 +25,13 @@ func NewExecutionService(exec ServiceExecutor, respSvc *response.Service) Server
|
|||
}
|
||||
}
|
||||
|
||||
func (s *executorSvc) Balance(ctx context.Context, req *accounting.BalanceRequest) (*accounting.BalanceResponse, error) {
|
||||
func (s *executorSvc) Balance(ctx context.Context, req *accGRPC.BalanceRequest) (*accGRPC.BalanceResponse, error) {
|
||||
respBody, err := s.exec.Balance(ctx, req.GetBody())
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("could not execute Balance request: %w", err)
|
||||
}
|
||||
|
||||
resp := new(accounting.BalanceResponse)
|
||||
resp := new(accGRPC.BalanceResponse)
|
||||
resp.SetBody(respBody)
|
||||
|
||||
s.respSvc.SetMeta(resp)
|
||||
|
|
|
@ -5,7 +5,7 @@ import (
|
|||
"errors"
|
||||
"fmt"
|
||||
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/accounting"
|
||||
accGRPC "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/accounting/grpc"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/client/balance"
|
||||
accountingSvc "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/accounting"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/user"
|
||||
|
@ -21,15 +21,15 @@ func NewExecutor(client *balance.Client) accountingSvc.ServiceExecutor {
|
|||
}
|
||||
}
|
||||
|
||||
func (s *morphExecutor) Balance(_ context.Context, body *accounting.BalanceRequestBody) (*accounting.BalanceResponseBody, error) {
|
||||
idV2 := body.GetOwnerID()
|
||||
func (s *morphExecutor) Balance(_ context.Context, body *accGRPC.BalanceRequest_Body) (*accGRPC.BalanceResponse_Body, error) {
|
||||
idV2 := body.GetOwnerId()
|
||||
if idV2 == nil {
|
||||
return nil, errors.New("missing account")
|
||||
}
|
||||
|
||||
var id user.ID
|
||||
|
||||
err := id.ReadFromV2(*idV2)
|
||||
err := id.ReadFromV2(idV2)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("invalid account: %w", err)
|
||||
}
|
||||
|
@ -44,11 +44,11 @@ func (s *morphExecutor) Balance(_ context.Context, body *accounting.BalanceReque
|
|||
return nil, err
|
||||
}
|
||||
|
||||
dec := new(accounting.Decimal)
|
||||
dec := new(accGRPC.Decimal)
|
||||
dec.SetValue(amount.Int64())
|
||||
dec.SetPrecision(balancePrecision)
|
||||
|
||||
res := new(accounting.BalanceResponseBody)
|
||||
res := new(accGRPC.BalanceResponse_Body)
|
||||
res.SetBalance(dec)
|
||||
|
||||
return res, nil
|
||||
|
|
|
@ -3,10 +3,10 @@ package accounting
|
|||
import (
|
||||
"context"
|
||||
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/accounting"
|
||||
accGRPC "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/accounting/grpc"
|
||||
)
|
||||
|
||||
// Server is an interface of the FrostFS API Accounting service server.
|
||||
type Server interface {
|
||||
Balance(context.Context, *accounting.BalanceRequest) (*accounting.BalanceResponse, error)
|
||||
Balance(context.Context, *accGRPC.BalanceRequest) (*accGRPC.BalanceResponse, error)
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@ import (
|
|||
"context"
|
||||
"crypto/ecdsa"
|
||||
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/accounting"
|
||||
accGRPC "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/accounting/grpc"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/util"
|
||||
)
|
||||
|
||||
|
@ -21,18 +21,18 @@ func NewSignService(key *ecdsa.PrivateKey, svc Server) Server {
|
|||
}
|
||||
}
|
||||
|
||||
func (s *signService) Balance(ctx context.Context, req *accounting.BalanceRequest) (*accounting.BalanceResponse, error) {
|
||||
func (s *signService) Balance(ctx context.Context, req *accGRPC.BalanceRequest) (*accGRPC.BalanceResponse, error) {
|
||||
resp, err := s.sigSvc.HandleUnaryRequest(ctx, req,
|
||||
func(ctx context.Context, req any) (util.ResponseMessage, error) {
|
||||
return s.svc.Balance(ctx, req.(*accounting.BalanceRequest))
|
||||
return s.svc.Balance(ctx, req.(*accGRPC.BalanceRequest))
|
||||
},
|
||||
func() util.ResponseMessage {
|
||||
return new(accounting.BalanceResponse)
|
||||
return new(accGRPC.BalanceResponse)
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp.(*accounting.BalanceResponse), nil
|
||||
return resp.(*accGRPC.BalanceResponse), nil
|
||||
}
|
||||
|
|
|
@ -74,6 +74,7 @@ func (s *testAnnouncementStorage) Close(context.Context) error {
|
|||
}
|
||||
|
||||
func randAnnouncement() (a container.SizeEstimation) {
|
||||
a = *container.NewSizeEstimation()
|
||||
a.SetContainer(cidtest.ID())
|
||||
a.SetValue(rand.Uint64())
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ import (
|
|||
func TestStorage(t *testing.T) {
|
||||
const epoch uint64 = 13
|
||||
|
||||
var a container.SizeEstimation
|
||||
a := *container.NewSizeEstimation()
|
||||
a.SetContainer(cidtest.ID())
|
||||
a.SetEpoch(epoch)
|
||||
|
||||
|
|
|
@ -4,18 +4,19 @@ import (
|
|||
"context"
|
||||
"fmt"
|
||||
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/container"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session"
|
||||
container "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/container/grpc"
|
||||
containerGRPC "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/container/grpc"
|
||||
sessionGRPC "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session/grpc"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/util/response"
|
||||
)
|
||||
|
||||
type ServiceExecutor interface {
|
||||
Put(context.Context, *session.Token, *container.PutRequestBody) (*container.PutResponseBody, error)
|
||||
Delete(context.Context, *session.Token, *container.DeleteRequestBody) (*container.DeleteResponseBody, error)
|
||||
Get(context.Context, *container.GetRequestBody) (*container.GetResponseBody, error)
|
||||
List(context.Context, *container.ListRequestBody) (*container.ListResponseBody, error)
|
||||
SetExtendedACL(context.Context, *session.Token, *container.SetExtendedACLRequestBody) (*container.SetExtendedACLResponseBody, error)
|
||||
GetExtendedACL(context.Context, *container.GetExtendedACLRequestBody) (*container.GetExtendedACLResponseBody, error)
|
||||
Put(context.Context, *sessionGRPC.SessionToken, *containerGRPC.PutRequest_Body) (*containerGRPC.PutResponse_Body, error)
|
||||
Delete(context.Context, *sessionGRPC.SessionToken, *containerGRPC.DeleteRequest_Body) (*containerGRPC.DeleteResponse_Body, error)
|
||||
Get(context.Context, *containerGRPC.GetRequest_Body) (*containerGRPC.GetResponse_Body, error)
|
||||
List(context.Context, *containerGRPC.ListRequest_Body) (*containerGRPC.ListResponse_Body, error)
|
||||
SetExtendedACL(context.Context, *sessionGRPC.SessionToken, *containerGRPC.SetExtendedACLRequest_Body) (*containerGRPC.SetExtendedACLResponse_Body, error)
|
||||
GetExtendedACL(context.Context, *containerGRPC.GetExtendedACLRequest_Body) (*containerGRPC.GetExtendedACLResponse_Body, error)
|
||||
}
|
||||
|
||||
type executorSvc struct {
|
||||
|
@ -34,7 +35,7 @@ func NewExecutionService(exec ServiceExecutor, respSvc *response.Service) Server
|
|||
}
|
||||
}
|
||||
|
||||
func (s *executorSvc) Put(ctx context.Context, req *container.PutRequest) (*container.PutResponse, error) {
|
||||
func (s *executorSvc) Put(ctx context.Context, req *containerGRPC.PutRequest) (*containerGRPC.PutResponse, error) {
|
||||
meta := req.GetMetaHeader()
|
||||
for origin := meta.GetOrigin(); origin != nil; origin = meta.GetOrigin() {
|
||||
meta = origin
|
||||
|
@ -52,7 +53,7 @@ func (s *executorSvc) Put(ctx context.Context, req *container.PutRequest) (*cont
|
|||
return resp, nil
|
||||
}
|
||||
|
||||
func (s *executorSvc) Delete(ctx context.Context, req *container.DeleteRequest) (*container.DeleteResponse, error) {
|
||||
func (s *executorSvc) Delete(ctx context.Context, req *containerGRPC.DeleteRequest) (*containerGRPC.DeleteResponse, error) {
|
||||
meta := req.GetMetaHeader()
|
||||
for origin := meta.GetOrigin(); origin != nil; origin = meta.GetOrigin() {
|
||||
meta = origin
|
||||
|
@ -70,7 +71,7 @@ func (s *executorSvc) Delete(ctx context.Context, req *container.DeleteRequest)
|
|||
return resp, nil
|
||||
}
|
||||
|
||||
func (s *executorSvc) Get(ctx context.Context, req *container.GetRequest) (*container.GetResponse, error) {
|
||||
func (s *executorSvc) Get(ctx context.Context, req *containerGRPC.GetRequest) (*containerGRPC.GetResponse, error) {
|
||||
respBody, err := s.exec.Get(ctx, req.GetBody())
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("could not execute Get request: %w", err)
|
||||
|
@ -83,7 +84,7 @@ func (s *executorSvc) Get(ctx context.Context, req *container.GetRequest) (*cont
|
|||
return resp, nil
|
||||
}
|
||||
|
||||
func (s *executorSvc) List(ctx context.Context, req *container.ListRequest) (*container.ListResponse, error) {
|
||||
func (s *executorSvc) List(ctx context.Context, req *containerGRPC.ListRequest) (*containerGRPC.ListResponse, error) {
|
||||
respBody, err := s.exec.List(ctx, req.GetBody())
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("could not execute List request: %w", err)
|
||||
|
@ -96,7 +97,7 @@ func (s *executorSvc) List(ctx context.Context, req *container.ListRequest) (*co
|
|||
return resp, nil
|
||||
}
|
||||
|
||||
func (s *executorSvc) SetExtendedACL(ctx context.Context, req *container.SetExtendedACLRequest) (*container.SetExtendedACLResponse, error) {
|
||||
func (s *executorSvc) SetExtendedACL(ctx context.Context, req *containerGRPC.SetExtendedACLRequest) (*containerGRPC.SetExtendedACLResponse, error) {
|
||||
meta := req.GetMetaHeader()
|
||||
for origin := meta.GetOrigin(); origin != nil; origin = meta.GetOrigin() {
|
||||
meta = origin
|
||||
|
@ -114,7 +115,7 @@ func (s *executorSvc) SetExtendedACL(ctx context.Context, req *container.SetExte
|
|||
return resp, nil
|
||||
}
|
||||
|
||||
func (s *executorSvc) GetExtendedACL(ctx context.Context, req *container.GetExtendedACLRequest) (*container.GetExtendedACLResponse, error) {
|
||||
func (s *executorSvc) GetExtendedACL(ctx context.Context, req *containerGRPC.GetExtendedACLRequest) (*containerGRPC.GetExtendedACLResponse, error) {
|
||||
respBody, err := s.exec.GetExtendedACL(ctx, req.GetBody())
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("could not execute GetEACL request: %w", err)
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue