From 4f14360212c4bffb99c1f0e6bd8b15a0a7bb943d Mon Sep 17 00:00:00 2001 From: Evgenii Stratonikov Date: Tue, 10 Jan 2023 15:10:54 +0300 Subject: [PATCH] [#6] services/object: Simplify local/remote targets Signed-off-by: Evgenii Stratonikov --- pkg/services/object/put/distributed.go | 6 ++--- pkg/services/object/put/local.go | 33 +++++++------------------- pkg/services/object/put/remote.go | 27 +++++++-------------- pkg/services/object/put/streamer.go | 2 +- 4 files changed, 20 insertions(+), 48 deletions(-) diff --git a/pkg/services/object/put/distributed.go b/pkg/services/object/put/distributed.go index c697d338b..927b1599e 100644 --- a/pkg/services/object/put/distributed.go +++ b/pkg/services/object/put/distributed.go @@ -17,7 +17,6 @@ import ( type preparedObjectTarget interface { WriteObject(*objectSDK.Object, object.ContentMeta) error - Close() (*transformer.AccessIdentifiers, error) } type distributedTarget struct { @@ -154,10 +153,9 @@ func (t *distributedTarget) sendObject(node nodeDesc) error { target := t.nodeTargetInitializer(node) - if err := target.WriteObject(t.obj, t.objMeta); err != nil { + err := target.WriteObject(t.obj, t.objMeta) + if err != nil { return fmt.Errorf("could not write header: %w", err) - } else if _, err := target.Close(); err != nil { - return fmt.Errorf("could not close object stream: %w", err) } return nil } diff --git a/pkg/services/object/put/local.go b/pkg/services/object/put/local.go index 592d40cde..f6634e13f 100644 --- a/pkg/services/object/put/local.go +++ b/pkg/services/object/put/local.go @@ -4,7 +4,6 @@ import ( "fmt" objectCore "github.com/TrueCloudLab/frostfs-node/pkg/core/object" - "github.com/TrueCloudLab/frostfs-node/pkg/services/object_manager/transformer" "github.com/TrueCloudLab/frostfs-sdk-go/object" oid "github.com/TrueCloudLab/frostfs-sdk-go/object/id" ) @@ -24,40 +23,26 @@ type ObjectStorage interface { type localTarget struct { storage ObjectStorage - - obj *object.Object - meta objectCore.ContentMeta } -func (t *localTarget) WriteObject(obj *object.Object, meta objectCore.ContentMeta) error { - t.obj = obj - t.meta = meta - - return nil -} - -func (t *localTarget) Close() (*transformer.AccessIdentifiers, error) { - switch t.meta.Type() { +func (t localTarget) WriteObject(obj *object.Object, meta objectCore.ContentMeta) error { + switch meta.Type() { case object.TypeTombstone: - err := t.storage.Delete(objectCore.AddressOf(t.obj), t.meta.Objects()) + err := t.storage.Delete(objectCore.AddressOf(obj), meta.Objects()) if err != nil { - return nil, fmt.Errorf("could not delete objects from tombstone locally: %w", err) + return fmt.Errorf("could not delete objects from tombstone locally: %w", err) } case object.TypeLock: - err := t.storage.Lock(objectCore.AddressOf(t.obj), t.meta.Objects()) + err := t.storage.Lock(objectCore.AddressOf(obj), meta.Objects()) if err != nil { - return nil, fmt.Errorf("could not lock object from lock objects locally: %w", err) + return fmt.Errorf("could not lock object from lock objects locally: %w", err) } default: // objects that do not change meta storage } - if err := t.storage.Put(t.obj); err != nil { - return nil, fmt.Errorf("(%T) could not put object to local storage: %w", t, err) + if err := t.storage.Put(obj); err != nil { + return fmt.Errorf("(%T) could not put object to local storage: %w", t, err) } - - id, _ := t.obj.ID() - - return new(transformer.AccessIdentifiers). - WithSelfID(id), nil + return nil } diff --git a/pkg/services/object/put/remote.go b/pkg/services/object/put/remote.go index 181c3229f..281e364d9 100644 --- a/pkg/services/object/put/remote.go +++ b/pkg/services/object/put/remote.go @@ -9,7 +9,6 @@ import ( objectcore "github.com/TrueCloudLab/frostfs-node/pkg/core/object" internalclient "github.com/TrueCloudLab/frostfs-node/pkg/services/object/internal/client" "github.com/TrueCloudLab/frostfs-node/pkg/services/object/util" - "github.com/TrueCloudLab/frostfs-node/pkg/services/object_manager/transformer" "github.com/TrueCloudLab/frostfs-sdk-go/netmap" "github.com/TrueCloudLab/frostfs-sdk-go/object" ) @@ -23,8 +22,6 @@ type remoteTarget struct { nodeInfo clientcore.NodeInfo - obj *object.Object - clientConstructor ClientConstructor } @@ -44,12 +41,6 @@ type RemotePutPrm struct { } func (t *remoteTarget) WriteObject(obj *object.Object, _ objectcore.ContentMeta) error { - t.obj = obj - - return nil -} - -func (t *remoteTarget) Close() (*transformer.AccessIdentifiers, error) { var sessionInfo *util.SessionInfo if tok := t.commonPrm.SessionToken(); tok != nil { @@ -61,12 +52,12 @@ func (t *remoteTarget) Close() (*transformer.AccessIdentifiers, error) { key, err := t.keyStorage.GetKey(sessionInfo) if err != nil { - return nil, fmt.Errorf("(%T) could not receive private key: %w", t, err) + return fmt.Errorf("(%T) could not receive private key: %w", t, err) } c, err := t.clientConstructor.Get(t.nodeInfo) if err != nil { - return nil, fmt.Errorf("(%T) could not create SDK client %s: %w", t, t.nodeInfo, err) + return fmt.Errorf("(%T) could not create SDK client %s: %w", t, t.nodeInfo, err) } var prm internalclient.PutObjectPrm @@ -77,15 +68,14 @@ func (t *remoteTarget) Close() (*transformer.AccessIdentifiers, error) { prm.SetSessionToken(t.commonPrm.SessionToken()) prm.SetBearerToken(t.commonPrm.BearerToken()) prm.SetXHeaders(t.commonPrm.XHeaders()) - prm.SetObject(t.obj) + prm.SetObject(obj) - res, err := internalclient.PutObject(prm) + _, err = internalclient.PutObject(prm) if err != nil { - return nil, fmt.Errorf("(%T) could not put object to %s: %w", t, t.nodeInfo.AddressGroup(), err) + return fmt.Errorf("(%T) could not put object to %s: %w", t, t.nodeInfo.AddressGroup(), err) } - return new(transformer.AccessIdentifiers). - WithSelfID(res.ID()), nil + return nil } // NewRemoteSender creates, initializes and returns new RemoteSender instance. @@ -127,9 +117,8 @@ func (s *RemoteSender) PutObject(ctx context.Context, p *RemotePutPrm) error { return fmt.Errorf("parse client node info: %w", err) } - if err := t.WriteObject(p.obj, objectcore.ContentMeta{}); err != nil { - return fmt.Errorf("(%T) could not send object header: %w", s, err) - } else if _, err := t.Close(); err != nil { + err = t.WriteObject(p.obj, objectcore.ContentMeta{}) + if err != nil { return fmt.Errorf("(%T) could not send object: %w", s, err) } diff --git a/pkg/services/object/put/streamer.go b/pkg/services/object/put/streamer.go index f088f624f..8a7a5819f 100644 --- a/pkg/services/object/put/streamer.go +++ b/pkg/services/object/put/streamer.go @@ -220,7 +220,7 @@ func (p *Streamer) newCommonTarget(prm *PutInitPrm) transformer.ObjectTarget { getWorkerPool: p.getWorkerPool, nodeTargetInitializer: func(node nodeDesc) preparedObjectTarget { if node.local { - return &localTarget{ + return localTarget{ storage: p.localStore, } }