From 827ea1a41ef1fecdec8c1f52360a671ecec092ce Mon Sep 17 00:00:00 2001 From: Nikita Zinkevich Date: Fri, 27 Sep 2024 11:14:45 +0300 Subject: [PATCH] [#488] Move layer/frostfs.go to layer/frostfs/frostfs.go Signed-off-by: Nikita Zinkevich --- api/handler/encryption_test.go | 3 ++- api/handler/handlers_test.go | 3 ++- api/handler/util.go | 5 +++-- api/handler/util_test.go | 8 ++++---- api/layer/container.go | 9 ++++---- api/layer/cors.go | 5 +++-- api/layer/{ => frostfs}/frostfs.go | 2 +- api/layer/frostfs_mock.go | 33 +++++++++++++++--------------- api/layer/layer.go | 9 ++++---- api/layer/lifecycle.go | 7 ++++--- api/layer/multipart_upload.go | 5 +++-- api/layer/object.go | 31 ++++++++++++++-------------- api/layer/object_test.go | 3 ++- api/layer/patch.go | 15 +++++++------- api/layer/system_object.go | 5 +++-- api/layer/versioning_test.go | 3 ++- internal/frostfs/authmate.go | 18 ++++++++-------- internal/frostfs/frostfs.go | 32 ++++++++++++++--------------- internal/frostfs/frostfs_test.go | 6 +++--- pkg/service/tree/tree.go | 4 ++-- 20 files changed, 110 insertions(+), 96 deletions(-) rename api/layer/{ => frostfs}/frostfs.go (99%) diff --git a/api/handler/encryption_test.go b/api/handler/encryption_test.go index 68f76e93..d43721de 100644 --- a/api/handler/encryption_test.go +++ b/api/handler/encryption_test.go @@ -16,6 +16,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/frostfs" "github.com/stretchr/testify/require" ) @@ -37,7 +38,7 @@ func TestSimpleGetEncrypted(t *testing.T) { objInfo, err := tc.Layer().GetObjectInfo(tc.Context(), &layer.HeadObjectParams{BktInfo: bktInfo, Object: objName}) require.NoError(t, err) - obj, err := tc.MockedPool().GetObject(tc.Context(), layer.PrmObjectGet{Container: bktInfo.CID, Object: objInfo.ID}) + obj, err := tc.MockedPool().GetObject(tc.Context(), frostfs.PrmObjectGet{Container: bktInfo.CID, Object: objInfo.ID}) require.NoError(t, err) encryptedContent, err := io.ReadAll(obj.Payload) require.NoError(t, err) diff --git a/api/handler/handlers_test.go b/api/handler/handlers_test.go index 7f30e915..dc32ff91 100644 --- a/api/handler/handlers_test.go +++ b/api/handler/handlers_test.go @@ -20,6 +20,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/encryption" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/frostfs" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/middleware" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/resolver" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/pkg/service/tree" @@ -387,7 +388,7 @@ func createTestBucket(hc *handlerContext, bktName string) *data.BucketInfo { } func createTestBucketWithLock(hc *handlerContext, bktName string, conf *data.ObjectLockConfiguration) *data.BucketInfo { - res, err := hc.MockedPool().CreateContainer(hc.Context(), layer.PrmContainerCreate{ + res, err := hc.MockedPool().CreateContainer(hc.Context(), frostfs.PrmContainerCreate{ Creator: hc.owner, Name: bktName, AdditionalAttributes: [][2]string{{layer.AttributeLockEnabled, "true"}}, diff --git a/api/handler/util.go b/api/handler/util.go index 48b5eae1..23a087a4 100644 --- a/api/handler/util.go +++ b/api/handler/util.go @@ -12,6 +12,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" s3errors "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/frostfs" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/tree" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/middleware" frosterrors "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/frostfs/errors" @@ -67,12 +68,12 @@ func transformToS3Error(err error) error { return err } - if errors.Is(err, layer.ErrAccessDenied) || + if errors.Is(err, frostfs.ErrAccessDenied) || errors.Is(err, tree.ErrNodeAccessDenied) { return s3errors.GetAPIError(s3errors.ErrAccessDenied) } - if errors.Is(err, layer.ErrGatewayTimeout) { + if errors.Is(err, frostfs.ErrGatewayTimeout) { return s3errors.GetAPIError(s3errors.ErrGatewayTimeout) } diff --git a/api/handler/util_test.go b/api/handler/util_test.go index 6b18b42f..f0eb4e1d 100644 --- a/api/handler/util_test.go +++ b/api/handler/util_test.go @@ -6,7 +6,7 @@ import ( "testing" s3errors "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" - "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/frostfs" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/tree" "github.com/stretchr/testify/require" ) @@ -24,12 +24,12 @@ func TestTransformS3Errors(t *testing.T) { }, { name: "layer access denied error to s3 access denied error", - err: layer.ErrAccessDenied, + err: frostfs.ErrAccessDenied, expected: s3errors.ErrAccessDenied, }, { name: "wrapped layer access denied error to s3 access denied error", - err: fmt.Errorf("wrap: %w", layer.ErrAccessDenied), + err: fmt.Errorf("wrap: %w", frostfs.ErrAccessDenied), expected: s3errors.ErrAccessDenied, }, { @@ -39,7 +39,7 @@ func TestTransformS3Errors(t *testing.T) { }, { name: "layer gateway timeout error to s3 gateway timeout error", - err: layer.ErrGatewayTimeout, + err: frostfs.ErrGatewayTimeout, expected: s3errors.ErrGatewayTimeout, }, { diff --git a/api/layer/container.go b/api/layer/container.go index 2c8f94dd..622dc4f4 100644 --- a/api/layer/container.go +++ b/api/layer/container.go @@ -8,6 +8,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" s3errors "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/frostfs" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/middleware" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client" @@ -20,7 +21,7 @@ const ( AttributeLockEnabled = "LockEnabled" ) -func (n *Layer) containerInfo(ctx context.Context, prm PrmContainer) (*data.BucketInfo, error) { +func (n *Layer) containerInfo(ctx context.Context, prm frostfs.PrmContainer) (*data.BucketInfo, error) { var ( err error res *container.Container @@ -77,7 +78,7 @@ func (n *Layer) containerInfo(ctx context.Context, prm PrmContainer) (*data.Buck func (n *Layer) containerList(ctx context.Context) ([]*data.BucketInfo, error) { stoken := n.SessionTokenForRead(ctx) - prm := PrmUserContainers{ + prm := frostfs.PrmUserContainers{ UserID: n.BearerOwner(ctx), SessionToken: stoken, } @@ -90,7 +91,7 @@ func (n *Layer) containerList(ctx context.Context) ([]*data.BucketInfo, error) { list := make([]*data.BucketInfo, 0, len(res)) for i := range res { - getPrm := PrmContainer{ + getPrm := frostfs.PrmContainer{ ContainerID: res[i], SessionToken: stoken, } @@ -132,7 +133,7 @@ func (n *Layer) createContainer(ctx context.Context, p *CreateBucketParams) (*da }) } - res, err := n.frostFS.CreateContainer(ctx, PrmContainerCreate{ + res, err := n.frostFS.CreateContainer(ctx, frostfs.PrmContainerCreate{ Creator: bktInfo.Owner, Policy: p.Policy, Name: p.Name, diff --git a/api/layer/cors.go b/api/layer/cors.go index 44549c3b..dfefd095 100644 --- a/api/layer/cors.go +++ b/api/layer/cors.go @@ -9,6 +9,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/frostfs" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/tree" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id" @@ -39,7 +40,7 @@ func (n *Layer) PutBucketCORS(ctx context.Context, p *PutCORSParams) error { return err } - prm := PrmObjectCreate{ + prm := frostfs.PrmObjectCreate{ Payload: &buf, Filepath: p.BktInfo.CORSObjectName(), CreationTime: TimeNow(ctx), @@ -80,7 +81,7 @@ func (n *Layer) PutBucketCORS(ctx context.Context, p *PutCORSParams) error { // deleteCORSObject removes object and logs in case of error. func (n *Layer) deleteCORSObject(ctx context.Context, bktInfo *data.BucketInfo, addr oid.Address) { - var prmAuth PrmAuth + var prmAuth frostfs.PrmAuth corsBkt := bktInfo if !addr.Container().Equals(bktInfo.CID) && !addr.Container().Equals(cid.ID{}) { corsBkt = &data.BucketInfo{CID: addr.Container()} diff --git a/api/layer/frostfs.go b/api/layer/frostfs/frostfs.go similarity index 99% rename from api/layer/frostfs.go rename to api/layer/frostfs/frostfs.go index 3f01f2f7..26340dc8 100644 --- a/api/layer/frostfs.go +++ b/api/layer/frostfs/frostfs.go @@ -1,4 +1,4 @@ -package layer +package frostfs import ( "context" diff --git a/api/layer/frostfs_mock.go b/api/layer/frostfs_mock.go index b416dcc9..30395092 100644 --- a/api/layer/frostfs_mock.go +++ b/api/layer/frostfs_mock.go @@ -12,6 +12,7 @@ import ( v2container "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/container" objectv2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/frostfs" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/middleware" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/bearer" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/checksum" @@ -61,7 +62,7 @@ func (k *FeatureSettingsMock) FormContainerZone(ns string) string { } type TestFrostFS struct { - FrostFS + frostfs.FrostFS objects map[string]*object.Object objectErrors map[string]error @@ -139,7 +140,7 @@ func (t *TestFrostFS) SetContainer(cnrID cid.ID, cnr *container.Container) { t.containers[cnrID.EncodeToString()] = cnr } -func (t *TestFrostFS) CreateContainer(_ context.Context, prm PrmContainerCreate) (*ContainerCreateResult, error) { +func (t *TestFrostFS) CreateContainer(_ context.Context, prm frostfs.PrmContainerCreate) (*frostfs.ContainerCreateResult, error) { var cnr container.Container cnr.Init() cnr.SetOwner(prm.Creator) @@ -174,7 +175,7 @@ func (t *TestFrostFS) CreateContainer(_ context.Context, prm PrmContainerCreate) id.SetSHA256(sha256.Sum256(b)) t.containers[id.EncodeToString()] = &cnr - return &ContainerCreateResult{ContainerID: id}, nil + return &frostfs.ContainerCreateResult{ContainerID: id}, nil } func (t *TestFrostFS) DeleteContainer(_ context.Context, cnrID cid.ID, _ *session.Container) error { @@ -183,7 +184,7 @@ func (t *TestFrostFS) DeleteContainer(_ context.Context, cnrID cid.ID, _ *sessio return nil } -func (t *TestFrostFS) Container(_ context.Context, prm PrmContainer) (*container.Container, error) { +func (t *TestFrostFS) Container(_ context.Context, prm frostfs.PrmContainer) (*container.Container, error) { for k, v := range t.containers { if k == prm.ContainerID.EncodeToString() { return v, nil @@ -193,7 +194,7 @@ func (t *TestFrostFS) Container(_ context.Context, prm PrmContainer) (*container return nil, fmt.Errorf("container not found %s", prm.ContainerID) } -func (t *TestFrostFS) UserContainers(context.Context, PrmUserContainers) ([]cid.ID, error) { +func (t *TestFrostFS) UserContainers(context.Context, frostfs.PrmUserContainers) ([]cid.ID, error) { var res []cid.ID for k := range t.containers { var idCnr cid.ID @@ -220,7 +221,7 @@ func (t *TestFrostFS) retrieveObject(ctx context.Context, cnrID cid.ID, objID oi if obj, ok := t.objects[sAddr]; ok { owner := getBearerOwner(ctx) if !t.checkAccess(cnrID, owner) { - return nil, ErrAccessDenied + return nil, frostfs.ErrAccessDenied } return obj, nil @@ -229,23 +230,23 @@ func (t *TestFrostFS) retrieveObject(ctx context.Context, cnrID cid.ID, objID oi return nil, fmt.Errorf("%w: %s", &apistatus.ObjectNotFound{}, addr) } -func (t *TestFrostFS) HeadObject(ctx context.Context, prm PrmObjectHead) (*object.Object, error) { +func (t *TestFrostFS) HeadObject(ctx context.Context, prm frostfs.PrmObjectHead) (*object.Object, error) { return t.retrieveObject(ctx, prm.Container, prm.Object) } -func (t *TestFrostFS) GetObject(ctx context.Context, prm PrmObjectGet) (*Object, error) { +func (t *TestFrostFS) GetObject(ctx context.Context, prm frostfs.PrmObjectGet) (*frostfs.Object, error) { obj, err := t.retrieveObject(ctx, prm.Container, prm.Object) if err != nil { return nil, err } - return &Object{ + return &frostfs.Object{ Header: *obj, Payload: io.NopCloser(bytes.NewReader(obj.Payload())), }, nil } -func (t *TestFrostFS) RangeObject(ctx context.Context, prm PrmObjectRange) (io.ReadCloser, error) { +func (t *TestFrostFS) RangeObject(ctx context.Context, prm frostfs.PrmObjectRange) (io.ReadCloser, error) { obj, err := t.retrieveObject(ctx, prm.Container, prm.Object) if err != nil { return nil, err @@ -257,7 +258,7 @@ func (t *TestFrostFS) RangeObject(ctx context.Context, prm PrmObjectRange) (io.R return io.NopCloser(bytes.NewReader(payload)), nil } -func (t *TestFrostFS) CreateObject(_ context.Context, prm PrmObjectCreate) (*CreateObjectResult, error) { +func (t *TestFrostFS) CreateObject(_ context.Context, prm frostfs.PrmObjectCreate) (*frostfs.CreateObjectResult, error) { b := make([]byte, 32) if _, err := io.ReadFull(rand.Reader, b); err != nil { return nil, err @@ -327,13 +328,13 @@ func (t *TestFrostFS) CreateObject(_ context.Context, prm PrmObjectCreate) (*Cre addr := newAddress(cnrID, objID) t.objects[addr.EncodeToString()] = obj - return &CreateObjectResult{ + return &frostfs.CreateObjectResult{ ObjectID: objID, CreationEpoch: t.currentEpoch - 1, }, nil } -func (t *TestFrostFS) DeleteObject(ctx context.Context, prm PrmObjectDelete) error { +func (t *TestFrostFS) DeleteObject(ctx context.Context, prm frostfs.PrmObjectDelete) error { var addr oid.Address addr.SetContainer(prm.Container) addr.SetObject(prm.Object) @@ -345,7 +346,7 @@ func (t *TestFrostFS) DeleteObject(ctx context.Context, prm PrmObjectDelete) err if _, ok := t.objects[addr.EncodeToString()]; ok { owner := getBearerOwner(ctx) if !t.checkAccess(prm.Container, owner) { - return ErrAccessDenied + return frostfs.ErrAccessDenied } delete(t.objects, addr.EncodeToString()) @@ -372,7 +373,7 @@ func (t *TestFrostFS) AllObjects(cnrID cid.ID) []oid.ID { return result } -func (t *TestFrostFS) SearchObjects(_ context.Context, prm PrmObjectSearch) ([]oid.ID, error) { +func (t *TestFrostFS) SearchObjects(_ context.Context, prm frostfs.PrmObjectSearch) ([]oid.ID, error) { filters := object.NewSearchFilters() filters.AddRootFilter() @@ -416,7 +417,7 @@ func (t *TestFrostFS) NetworkInfo(context.Context) (netmap.NetworkInfo, error) { return ni, nil } -func (t *TestFrostFS) PatchObject(ctx context.Context, prm PrmObjectPatch) (oid.ID, error) { +func (t *TestFrostFS) PatchObject(ctx context.Context, prm frostfs.PrmObjectPatch) (oid.ID, error) { obj, err := t.retrieveObject(ctx, prm.Container, prm.Object) if err != nil { return oid.ID{}, err diff --git a/api/layer/layer.go b/api/layer/layer.go index 09ba4b52..172b5d23 100644 --- a/api/layer/layer.go +++ b/api/layer/layer.go @@ -20,6 +20,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" s3errors "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/encryption" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/frostfs" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/tree" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/middleware" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" @@ -47,7 +48,7 @@ type ( } Layer struct { - frostFS FrostFS + frostFS frostfs.FrostFS gateOwner user.ID log *zap.Logger anonKey AnonymousKey @@ -236,7 +237,7 @@ func (p HeadObjectParams) Versioned() bool { // NewLayer creates an instance of a Layer. It checks credentials // and establishes gRPC connection with the node. -func NewLayer(log *zap.Logger, frostFS FrostFS, config *Config) *Layer { +func NewLayer(log *zap.Logger, frostFS frostfs.FrostFS, config *Config) *Layer { return &Layer{ frostFS: frostFS, log: log, @@ -300,7 +301,7 @@ func (n *Layer) reqLogger(ctx context.Context) *zap.Logger { return n.log } -func (n *Layer) prepareAuthParameters(ctx context.Context, prm *PrmAuth, bktOwner user.ID) { +func (n *Layer) prepareAuthParameters(ctx context.Context, prm *frostfs.PrmAuth, bktOwner user.ID) { if prm.BearerToken != nil || prm.PrivateKey != nil { return } @@ -337,7 +338,7 @@ func (n *Layer) GetBucketInfo(ctx context.Context, name string) (*data.BucketInf return nil, err } - prm := PrmContainer{ + prm := frostfs.PrmContainer{ ContainerID: containerID, SessionToken: n.SessionTokenForRead(ctx), } diff --git a/api/layer/lifecycle.go b/api/layer/lifecycle.go index 2def9d14..dd84deea 100644 --- a/api/layer/lifecycle.go +++ b/api/layer/lifecycle.go @@ -11,6 +11,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" apiErr "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/frostfs" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/tree" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id" @@ -26,7 +27,7 @@ type PutBucketLifecycleParams struct { } func (n *Layer) PutBucketLifecycleConfiguration(ctx context.Context, p *PutBucketLifecycleParams) error { - prm := PrmObjectCreate{ + prm := frostfs.PrmObjectCreate{ Payload: p.LifecycleReader, Filepath: p.BktInfo.LifecycleConfigurationObjectName(), CreationTime: TimeNow(ctx), @@ -78,7 +79,7 @@ func (n *Layer) PutBucketLifecycleConfiguration(ctx context.Context, p *PutBucke // deleteLifecycleObject removes object and logs in case of error. func (n *Layer) deleteLifecycleObject(ctx context.Context, bktInfo *data.BucketInfo, addr oid.Address) { - var prmAuth PrmAuth + var prmAuth frostfs.PrmAuth lifecycleBkt := bktInfo if !addr.Container().Equals(bktInfo.CID) { lifecycleBkt = &data.BucketInfo{CID: addr.Container()} @@ -108,7 +109,7 @@ func (n *Layer) GetBucketLifecycleConfiguration(ctx context.Context, bktInfo *da return nil, fmt.Errorf("%w: %s", apiErr.GetAPIError(apiErr.ErrNoSuchLifecycleConfiguration), err.Error()) } - var prmAuth PrmAuth + var prmAuth frostfs.PrmAuth lifecycleBkt := bktInfo if !addr.Container().Equals(bktInfo.CID) { lifecycleBkt = &data.BucketInfo{CID: addr.Container()} diff --git a/api/layer/multipart_upload.go b/api/layer/multipart_upload.go index 212626fb..c73b47f8 100644 --- a/api/layer/multipart_upload.go +++ b/api/layer/multipart_upload.go @@ -19,6 +19,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" s3errors "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/encryption" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/frostfs" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/tree" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id" @@ -214,7 +215,7 @@ func (n *Layer) uploadPart(ctx context.Context, multipartInfo *data.MultipartInf } bktInfo := p.Info.Bkt - prm := PrmObjectCreate{ + prm := frostfs.PrmObjectCreate{ Container: bktInfo.CID, Attributes: make([][2]string, 2), Payload: p.Reader, @@ -246,7 +247,7 @@ func (n *Layer) uploadPart(ctx context.Context, multipartInfo *data.MultipartInf return nil, s3errors.GetAPIError(s3errors.ErrInvalidDigest) } if hex.EncodeToString(hashBytes) != hex.EncodeToString(createdObj.MD5Sum) { - prm := PrmObjectDelete{ + prm := frostfs.PrmObjectDelete{ Object: createdObj.ID, Container: bktInfo.CID, } diff --git a/api/layer/object.go b/api/layer/object.go index 4780ee5c..a5cfcf9a 100644 --- a/api/layer/object.go +++ b/api/layer/object.go @@ -21,6 +21,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/auth" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" apiErrors "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/frostfs" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/tree" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/pkg/detector" @@ -71,7 +72,7 @@ func newAddress(cnr cid.ID, obj oid.ID) oid.Address { // objectHead returns all object's headers. func (n *Layer) objectHead(ctx context.Context, bktInfo *data.BucketInfo, idObj oid.ID) (*object.Object, error) { - prm := PrmObjectHead{ + prm := frostfs.PrmObjectHead{ Container: bktInfo.CID, Object: idObj, } @@ -129,11 +130,11 @@ func (n *Layer) initObjectPayloadReader(ctx context.Context, p getParams) (io.Re // initializes payload reader of the FrostFS object. // Zero range corresponds to full payload (panics if only offset is set). func (n *Layer) initFrostFSObjectPayloadReader(ctx context.Context, p getFrostFSParams) (io.Reader, error) { - var prmAuth PrmAuth + var prmAuth frostfs.PrmAuth n.prepareAuthParameters(ctx, &prmAuth, p.bktInfo.Owner) if p.off+p.ln != 0 { - prm := PrmObjectRange{ + prm := frostfs.PrmObjectRange{ PrmAuth: prmAuth, Container: p.bktInfo.CID, Object: p.oid, @@ -143,7 +144,7 @@ func (n *Layer) initFrostFSObjectPayloadReader(ctx context.Context, p getFrostFS return n.frostFS.RangeObject(ctx, prm) } - prm := PrmObjectGet{ + prm := frostfs.PrmObjectGet{ PrmAuth: prmAuth, Container: p.bktInfo.CID, Object: p.oid, @@ -158,17 +159,17 @@ func (n *Layer) initFrostFSObjectPayloadReader(ctx context.Context, p getFrostFS } // objectGet returns an object with payload in the object. -func (n *Layer) objectGet(ctx context.Context, bktInfo *data.BucketInfo, objID oid.ID) (*Object, error) { - return n.objectGetBase(ctx, bktInfo, objID, PrmAuth{}) +func (n *Layer) objectGet(ctx context.Context, bktInfo *data.BucketInfo, objID oid.ID) (*frostfs.Object, error) { + return n.objectGetBase(ctx, bktInfo, objID, frostfs.PrmAuth{}) } // objectGetWithAuth returns an object with payload in the object. Uses provided PrmAuth. -func (n *Layer) objectGetWithAuth(ctx context.Context, bktInfo *data.BucketInfo, objID oid.ID, auth PrmAuth) (*Object, error) { +func (n *Layer) objectGetWithAuth(ctx context.Context, bktInfo *data.BucketInfo, objID oid.ID, auth frostfs.PrmAuth) (*frostfs.Object, error) { return n.objectGetBase(ctx, bktInfo, objID, auth) } -func (n *Layer) objectGetBase(ctx context.Context, bktInfo *data.BucketInfo, objID oid.ID, auth PrmAuth) (*Object, error) { - prm := PrmObjectGet{ +func (n *Layer) objectGetBase(ctx context.Context, bktInfo *data.BucketInfo, objID oid.ID, auth frostfs.PrmAuth) (*frostfs.Object, error) { + prm := frostfs.PrmObjectGet{ PrmAuth: auth, Container: bktInfo.CID, Object: objID, @@ -263,7 +264,7 @@ func (n *Layer) PutObject(ctx context.Context, p *PutObjectParams) (*data.Extend } } - prm := PrmObjectCreate{ + prm := frostfs.PrmObjectCreate{ Container: p.BktInfo.CID, Filepath: p.Object, Payload: r, @@ -485,16 +486,16 @@ func (n *Layer) headVersion(ctx context.Context, bkt *data.BucketInfo, p *HeadOb // objectDelete puts tombstone object into frostfs. func (n *Layer) objectDelete(ctx context.Context, bktInfo *data.BucketInfo, idObj oid.ID) error { - return n.objectDeleteBase(ctx, bktInfo, idObj, PrmAuth{}) + return n.objectDeleteBase(ctx, bktInfo, idObj, frostfs.PrmAuth{}) } // objectDeleteWithAuth puts tombstone object into frostfs. Uses provided PrmAuth. -func (n *Layer) objectDeleteWithAuth(ctx context.Context, bktInfo *data.BucketInfo, idObj oid.ID, auth PrmAuth) error { +func (n *Layer) objectDeleteWithAuth(ctx context.Context, bktInfo *data.BucketInfo, idObj oid.ID, auth frostfs.PrmAuth) error { return n.objectDeleteBase(ctx, bktInfo, idObj, auth) } -func (n *Layer) objectDeleteBase(ctx context.Context, bktInfo *data.BucketInfo, idObj oid.ID, auth PrmAuth) error { - prm := PrmObjectDelete{ +func (n *Layer) objectDeleteBase(ctx context.Context, bktInfo *data.BucketInfo, idObj oid.ID, auth frostfs.PrmAuth) error { + prm := frostfs.PrmObjectDelete{ PrmAuth: auth, Container: bktInfo.CID, Object: idObj, @@ -508,7 +509,7 @@ func (n *Layer) objectDeleteBase(ctx context.Context, bktInfo *data.BucketInfo, } // objectPutAndHash prepare auth parameters and invoke frostfs.CreateObject. -func (n *Layer) objectPutAndHash(ctx context.Context, prm PrmObjectCreate, bktInfo *data.BucketInfo) (*data.CreatedObjectInfo, error) { +func (n *Layer) objectPutAndHash(ctx context.Context, prm frostfs.PrmObjectCreate, bktInfo *data.BucketInfo) (*data.CreatedObjectInfo, error) { n.prepareAuthParameters(ctx, &prm.PrmAuth, bktInfo.Owner) prm.ClientCut = n.features.ClientCut() prm.BufferMaxSize = n.features.BufferMaxSizeForPut() diff --git a/api/layer/object_test.go b/api/layer/object_test.go index d1c668b5..d94fec86 100644 --- a/api/layer/object_test.go +++ b/api/layer/object_test.go @@ -8,6 +8,7 @@ import ( "io" "testing" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/frostfs" "github.com/stretchr/testify/require" ) @@ -37,7 +38,7 @@ func TestGoroutinesDontLeakInPutAndHash(t *testing.T) { require.NoError(t, err) payload := bytes.NewReader(content) - prm := PrmObjectCreate{ + prm := frostfs.PrmObjectCreate{ Filepath: tc.obj, Payload: payload, } diff --git a/api/layer/patch.go b/api/layer/patch.go index 44d4e4f1..fca21427 100644 --- a/api/layer/patch.go +++ b/api/layer/patch.go @@ -12,6 +12,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/frostfs" ) type PatchObjectParams struct { @@ -32,7 +33,7 @@ func (n *Layer) PatchObject(ctx context.Context, p *PatchObjectParams) (*data.Ex return n.patchMultipartObject(ctx, p) } - prmPatch := PrmObjectPatch{ + prmPatch := frostfs.PrmObjectPatch{ Container: p.BktInfo.CID, Object: p.Object.ObjectInfo.ID, Payload: p.NewBytes, @@ -74,13 +75,13 @@ func (n *Layer) PatchObject(ctx context.Context, p *PatchObjectParams) (*data.Ex return p.Object, nil } -func (n *Layer) patchObject(ctx context.Context, p PrmObjectPatch) (*data.CreatedObjectInfo, error) { +func (n *Layer) patchObject(ctx context.Context, p frostfs.PrmObjectPatch) (*data.CreatedObjectInfo, error) { objID, err := n.frostFS.PatchObject(ctx, p) if err != nil { return nil, fmt.Errorf("patch object: %w", err) } - prmHead := PrmObjectHead{ + prmHead := frostfs.PrmObjectHead{ PrmAuth: p.PrmAuth, Container: p.Container, Object: objID, @@ -110,7 +111,7 @@ func (n *Layer) patchMultipartObject(ctx context.Context, p *PatchObjectParams) return nil, fmt.Errorf("unmarshal combined object parts: %w", err) } - prmPatch := PrmObjectPatch{ + prmPatch := frostfs.PrmObjectPatch{ Container: p.BktInfo.CID, } n.prepareAuthParameters(ctx, &prmPatch.PrmAuth, p.BktInfo.Owner) @@ -144,13 +145,13 @@ func (n *Layer) patchMultipartObject(ctx context.Context, p *PatchObjectParams) } // Returns patched part info, updated offset and length. -func (n *Layer) patchPart(ctx context.Context, part *data.PartInfo, p *PatchObjectParams, prmPatch *PrmObjectPatch, off, ln uint64, lastPart bool) (*data.CreatedObjectInfo, uint64, uint64, error) { +func (n *Layer) patchPart(ctx context.Context, part *data.PartInfo, p *PatchObjectParams, prmPatch *frostfs.PrmObjectPatch, off, ln uint64, lastPart bool) (*data.CreatedObjectInfo, uint64, uint64, error) { if off == 0 && ln >= part.Size { curLen := part.Size if lastPart { curLen = ln } - prm := PrmObjectCreate{ + prm := frostfs.PrmObjectCreate{ Container: p.BktInfo.CID, Payload: io.LimitReader(p.NewBytes, int64(curLen)), CreationTime: part.Created, @@ -204,7 +205,7 @@ func (n *Layer) updateCombinedObject(ctx context.Context, parts []*data.PartInfo headerParts.WriteString(headerPart) } - prm := PrmObjectCreate{ + prm := frostfs.PrmObjectCreate{ Container: p.BktInfo.CID, PayloadSize: fullObjSize, Filepath: p.Object.ObjectInfo.Name, diff --git a/api/layer/system_object.go b/api/layer/system_object.go index 02156c51..8ec52820 100644 --- a/api/layer/system_object.go +++ b/api/layer/system_object.go @@ -12,6 +12,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/errors" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/frostfs" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/tree" cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id" oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id" @@ -114,7 +115,7 @@ func (n *Layer) getNodeVersionFromCacheOrFrostfs(ctx context.Context, objVersion } func (n *Layer) putLockObject(ctx context.Context, bktInfo *data.BucketInfo, objID oid.ID, lock *data.ObjectLock, copiesNumber []uint32) (oid.ID, error) { - prm := PrmObjectCreate{ + prm := frostfs.PrmObjectCreate{ Container: bktInfo.CID, Locks: []oid.ID{objID}, CreationTime: TimeNow(ctx), @@ -175,7 +176,7 @@ func (n *Layer) getCORS(ctx context.Context, bkt *data.BucketInfo) (*data.CORSCo return nil, fmt.Errorf("%w: %s", errors.GetAPIError(errors.ErrNoSuchCORSConfiguration), err.Error()) } - var prmAuth PrmAuth + var prmAuth frostfs.PrmAuth corsBkt := bkt if !addr.Container().Equals(bkt.CID) && !addr.Container().Equals(cid.ID{}) { corsBkt = &data.BucketInfo{CID: addr.Container()} diff --git a/api/layer/versioning_test.go b/api/layer/versioning_test.go index 533a39b8..2f49f75f 100644 --- a/api/layer/versioning_test.go +++ b/api/layer/versioning_test.go @@ -7,6 +7,7 @@ import ( "testing" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/frostfs" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/middleware" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/creds/accessbox" bearertest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/bearer/test" @@ -154,7 +155,7 @@ func prepareContext(t *testing.T, cachesConfig ...*CachesConfig) *testContext { tp := NewTestFrostFS(key) bktName := "testbucket1" - res, err := tp.CreateContainer(ctx, PrmContainerCreate{ + res, err := tp.CreateContainer(ctx, frostfs.PrmContainerCreate{ Name: bktName, }) require.NoError(t, err) diff --git a/internal/frostfs/authmate.go b/internal/frostfs/authmate.go index ea0c5aa9..2936d3dc 100644 --- a/internal/frostfs/authmate.go +++ b/internal/frostfs/authmate.go @@ -9,7 +9,7 @@ import ( "time" objectv2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object" - "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/frostfs" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/middleware" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/authmate" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/creds/tokens" @@ -28,18 +28,18 @@ const ( // AuthmateFrostFS is a mediator which implements authmate.FrostFS through pool.Pool. type AuthmateFrostFS struct { - frostFS layer.FrostFS + frostFS frostfs.FrostFS log *zap.Logger } // NewAuthmateFrostFS creates new AuthmateFrostFS using provided pool.Pool. -func NewAuthmateFrostFS(frostFS layer.FrostFS, log *zap.Logger) *AuthmateFrostFS { +func NewAuthmateFrostFS(frostFS frostfs.FrostFS, log *zap.Logger) *AuthmateFrostFS { return &AuthmateFrostFS{frostFS: frostFS, log: log} } // ContainerExists implements authmate.FrostFS interface method. func (x *AuthmateFrostFS) ContainerExists(ctx context.Context, idCnr cid.ID) error { - _, err := x.frostFS.Container(ctx, layer.PrmContainer{ContainerID: idCnr}) + _, err := x.frostFS.Container(ctx, frostfs.PrmContainer{ContainerID: idCnr}) if err != nil { return fmt.Errorf("get container via connection pool: %w", err) } @@ -60,7 +60,7 @@ func (x *AuthmateFrostFS) CreateContainer(ctx context.Context, prm authmate.PrmC basicACL.AllowOp(acl.OpObjectHead, acl.RoleOthers) basicACL.AllowOp(acl.OpObjectSearch, acl.RoleOthers) - res, err := x.frostFS.CreateContainer(ctx, layer.PrmContainerCreate{ + res, err := x.frostFS.CreateContainer(ctx, frostfs.PrmContainerCreate{ Creator: prm.Owner, Policy: prm.Policy, Name: prm.FriendlyName, @@ -84,7 +84,7 @@ func (x *AuthmateFrostFS) GetCredsObject(ctx context.Context, addr oid.Address) credObjID = last.ObjID } - res, err := x.frostFS.GetObject(ctx, layer.PrmObjectGet{ + res, err := x.frostFS.GetObject(ctx, frostfs.PrmObjectGet{ Container: addr.Container(), Object: credObjID, }) @@ -137,7 +137,7 @@ func (x *AuthmateFrostFS) CreateObject(ctx context.Context, prm tokens.PrmObject attributes = append(attributes, [2]string{attr.Key(), attr.Value()}) } - res, err := x.frostFS.CreateObject(ctx, layer.PrmObjectCreate{ + res, err := x.frostFS.CreateObject(ctx, frostfs.PrmObjectCreate{ Container: prm.Container, Filepath: prm.Filepath, Attributes: attributes, @@ -152,7 +152,7 @@ func (x *AuthmateFrostFS) CreateObject(ctx context.Context, prm tokens.PrmObject func (x *AuthmateFrostFS) getCredVersions(ctx context.Context, addr oid.Address) (*crdt.ObjectVersions, error) { objCredSystemName := credVersionSysName(addr.Container(), addr.Object()) - credVersions, err := x.frostFS.SearchObjects(ctx, layer.PrmObjectSearch{ + credVersions, err := x.frostFS.SearchObjects(ctx, frostfs.PrmObjectSearch{ Container: addr.Container(), ExactAttribute: [2]string{accessBoxCRDTNameAttr, objCredSystemName}, }) @@ -163,7 +163,7 @@ func (x *AuthmateFrostFS) getCredVersions(ctx context.Context, addr oid.Address) versions := crdt.NewObjectVersions(objCredSystemName) for _, id := range credVersions { - objVersion, err := x.frostFS.HeadObject(ctx, layer.PrmObjectHead{ + objVersion, err := x.frostFS.HeadObject(ctx, frostfs.PrmObjectHead{ Container: addr.Container(), Object: id, }) diff --git a/internal/frostfs/frostfs.go b/internal/frostfs/frostfs.go index 5fd935b7..9651854b 100644 --- a/internal/frostfs/frostfs.go +++ b/internal/frostfs/frostfs.go @@ -10,7 +10,7 @@ import ( "time" objectv2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object" - "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/frostfs" errorsFrost "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/frostfs/errors" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container" @@ -89,7 +89,7 @@ func (x *FrostFS) TimeToEpoch(ctx context.Context, now, futureTime time.Time) (u } // Container implements layer.FrostFS interface method. -func (x *FrostFS) Container(ctx context.Context, layerPrm layer.PrmContainer) (*container.Container, error) { +func (x *FrostFS) Container(ctx context.Context, layerPrm frostfs.PrmContainer) (*container.Container, error) { prm := pool.PrmContainerGet{ ContainerID: layerPrm.ContainerID, Session: layerPrm.SessionToken, @@ -104,7 +104,7 @@ func (x *FrostFS) Container(ctx context.Context, layerPrm layer.PrmContainer) (* } // CreateContainer implements layer.FrostFS interface method. -func (x *FrostFS) CreateContainer(ctx context.Context, prm layer.PrmContainerCreate) (*layer.ContainerCreateResult, error) { +func (x *FrostFS) CreateContainer(ctx context.Context, prm frostfs.PrmContainerCreate) (*frostfs.ContainerCreateResult, error) { var cnr container.Container cnr.Init() cnr.SetPlacementPolicy(prm.Policy) @@ -145,14 +145,14 @@ func (x *FrostFS) CreateContainer(ctx context.Context, prm layer.PrmContainerCre // send request to save the container idCnr, err := x.pool.PutContainer(ctx, prmPut) - return &layer.ContainerCreateResult{ + return &frostfs.ContainerCreateResult{ ContainerID: idCnr, HomomorphicHashDisabled: container.IsHomomorphicHashingDisabled(cnr), }, handleObjectError("save container via connection pool", err) } // UserContainers implements layer.FrostFS interface method. -func (x *FrostFS) UserContainers(ctx context.Context, layerPrm layer.PrmUserContainers) ([]cid.ID, error) { +func (x *FrostFS) UserContainers(ctx context.Context, layerPrm frostfs.PrmUserContainers) ([]cid.ID, error) { prm := pool.PrmContainerList{ OwnerID: layerPrm.UserID, Session: layerPrm.SessionToken, @@ -171,7 +171,7 @@ func (x *FrostFS) DeleteContainer(ctx context.Context, id cid.ID, token *session } // CreateObject implements layer.FrostFS interface method. -func (x *FrostFS) CreateObject(ctx context.Context, prm layer.PrmObjectCreate) (*layer.CreateObjectResult, error) { +func (x *FrostFS) CreateObject(ctx context.Context, prm frostfs.PrmObjectCreate) (*frostfs.CreateObjectResult, error) { attrNum := len(prm.Attributes) + 1 // + creation time if prm.Filepath != "" { @@ -243,7 +243,7 @@ func (x *FrostFS) CreateObject(ctx context.Context, prm layer.PrmObjectCreate) ( return nil, err } - return &layer.CreateObjectResult{ + return &frostfs.CreateObjectResult{ ObjectID: res.ObjectID, CreationEpoch: res.Epoch, }, nil @@ -264,7 +264,7 @@ func (x payloadReader) Read(p []byte) (int, error) { } // HeadObject implements layer.FrostFS interface method. -func (x *FrostFS) HeadObject(ctx context.Context, prm layer.PrmObjectHead) (*object.Object, error) { +func (x *FrostFS) HeadObject(ctx context.Context, prm frostfs.PrmObjectHead) (*object.Object, error) { var addr oid.Address addr.SetContainer(prm.Container) addr.SetObject(prm.Object) @@ -287,7 +287,7 @@ func (x *FrostFS) HeadObject(ctx context.Context, prm layer.PrmObjectHead) (*obj } // GetObject implements layer.FrostFS interface method. -func (x *FrostFS) GetObject(ctx context.Context, prm layer.PrmObjectGet) (*layer.Object, error) { +func (x *FrostFS) GetObject(ctx context.Context, prm frostfs.PrmObjectGet) (*frostfs.Object, error) { var addr oid.Address addr.SetContainer(prm.Container) addr.SetObject(prm.Object) @@ -306,14 +306,14 @@ func (x *FrostFS) GetObject(ctx context.Context, prm layer.PrmObjectGet) (*layer return nil, handleObjectError("init full object reading via connection pool", err) } - return &layer.Object{ + return &frostfs.Object{ Header: res.Header, Payload: res.Payload, }, nil } // RangeObject implements layer.FrostFS interface method. -func (x *FrostFS) RangeObject(ctx context.Context, prm layer.PrmObjectRange) (io.ReadCloser, error) { +func (x *FrostFS) RangeObject(ctx context.Context, prm frostfs.PrmObjectRange) (io.ReadCloser, error) { var addr oid.Address addr.SetContainer(prm.Container) addr.SetObject(prm.Object) @@ -338,7 +338,7 @@ func (x *FrostFS) RangeObject(ctx context.Context, prm layer.PrmObjectRange) (io } // DeleteObject implements layer.FrostFS interface method. -func (x *FrostFS) DeleteObject(ctx context.Context, prm layer.PrmObjectDelete) error { +func (x *FrostFS) DeleteObject(ctx context.Context, prm frostfs.PrmObjectDelete) error { var addr oid.Address addr.SetContainer(prm.Container) addr.SetObject(prm.Object) @@ -357,7 +357,7 @@ func (x *FrostFS) DeleteObject(ctx context.Context, prm layer.PrmObjectDelete) e } // SearchObjects implements layer.FrostFS interface method. -func (x *FrostFS) SearchObjects(ctx context.Context, prm layer.PrmObjectSearch) ([]oid.ID, error) { +func (x *FrostFS) SearchObjects(ctx context.Context, prm frostfs.PrmObjectSearch) ([]oid.ID, error) { filters := object.NewSearchFilters() filters.AddRootFilter() @@ -403,7 +403,7 @@ func (x *FrostFS) NetworkInfo(ctx context.Context) (netmap.NetworkInfo, error) { return ni, nil } -func (x *FrostFS) PatchObject(ctx context.Context, prm layer.PrmObjectPatch) (oid.ID, error) { +func (x *FrostFS) PatchObject(ctx context.Context, prm frostfs.PrmObjectPatch) (oid.ID, error) { var addr oid.Address addr.SetContainer(prm.Container) addr.SetObject(prm.Object) @@ -467,11 +467,11 @@ func handleObjectError(msg string, err error) error { } if reason, ok := errorsFrost.IsErrObjectAccessDenied(err); ok { - return fmt.Errorf("%s: %w: %s", msg, layer.ErrAccessDenied, reason) + return fmt.Errorf("%s: %w: %s", msg, frostfs.ErrAccessDenied, reason) } if errorsFrost.IsTimeoutError(err) { - return fmt.Errorf("%s: %w: %s", msg, layer.ErrGatewayTimeout, err.Error()) + return fmt.Errorf("%s: %w: %s", msg, frostfs.ErrGatewayTimeout, err.Error()) } return fmt.Errorf("%s: %w", msg, err) diff --git a/internal/frostfs/frostfs_test.go b/internal/frostfs/frostfs_test.go index a3b9bf22..137832a7 100644 --- a/internal/frostfs/frostfs_test.go +++ b/internal/frostfs/frostfs_test.go @@ -7,7 +7,7 @@ import ( "testing" "time" - "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/frostfs" errorsFrost "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/frostfs/errors" apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status" "github.com/stretchr/testify/require" @@ -23,10 +23,10 @@ func TestErrorChecking(t *testing.T) { var wrappedError error if fetchedReason, ok := errorsFrost.IsErrObjectAccessDenied(err); ok { - wrappedError = fmt.Errorf("%w: %s", layer.ErrAccessDenied, fetchedReason) + wrappedError = fmt.Errorf("%w: %s", frostfs.ErrAccessDenied, fetchedReason) } - require.ErrorIs(t, wrappedError, layer.ErrAccessDenied) + require.ErrorIs(t, wrappedError, frostfs.ErrAccessDenied) require.Contains(t, wrappedError.Error(), reason) } diff --git a/pkg/service/tree/tree.go b/pkg/service/tree/tree.go index bd2df22d..0b095a06 100644 --- a/pkg/service/tree/tree.go +++ b/pkg/service/tree/tree.go @@ -12,7 +12,7 @@ import ( "time" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/data" - "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer" + "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/frostfs" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/layer/tree" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/api/middleware" "git.frostfs.info/TrueCloudLab/frostfs-s3-gw/internal/logs" @@ -82,7 +82,7 @@ var ( ErrNodeAccessDenied = tree.ErrNodeAccessDenied // ErrGatewayTimeout is returned from ServiceClient service in case of timeout error. - ErrGatewayTimeout = layer.ErrGatewayTimeout + ErrGatewayTimeout = frostfs.ErrGatewayTimeout errNodeDoesntContainFileName = fmt.Errorf("node doesn't contain FileName") )