diff --git a/pkg/services/object/put/common.go b/pkg/services/object/put/common.go index 97e127e1..6696a192 100644 --- a/pkg/services/object/put/common.go +++ b/pkg/services/object/put/common.go @@ -9,6 +9,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs" svcutil "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/object/util" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/object_manager/placement" + objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object" "go.uber.org/zap" ) @@ -112,3 +113,7 @@ func (n *nodeIterator) forEachAddress(ctx context.Context, traverser *placement. return false } + +func needAdditionalBroadcast(obj *objectSDK.Object, localOnly bool) bool { + return len(obj.Children()) > 0 || (!localOnly && (obj.Type() == objectSDK.TypeTombstone || obj.Type() == objectSDK.TypeLock)) +} diff --git a/pkg/services/object/put/distributed.go b/pkg/services/object/put/distributed.go index 577c5a15..509f4aee 100644 --- a/pkg/services/object/put/distributed.go +++ b/pkg/services/object/put/distributed.go @@ -130,12 +130,6 @@ func (t *distributedTarget) WriteObject(ctx context.Context, obj *objectSDK.Obje if t.objMeta, err = t.fmtValidator.ValidateContent(t.obj); err != nil { return fmt.Errorf("(%T) could not validate payload content: %w", t, err) } - - if len(t.obj.Children()) > 0 { - // enabling extra broadcast for linking objects - t.extraBroadcastEnabled = true - } - return t.iteratePlacement(ctx) } @@ -157,6 +151,6 @@ func (t *distributedTarget) iteratePlacement(ctx context.Context) error { id, _ := t.obj.ID() iter := t.cfg.newNodeIterator(append(t.placementOpts, placement.ForObject(id))) - iter.extraBroadcastEnabled = t.extraBroadcastEnabled + iter.extraBroadcastEnabled = needAdditionalBroadcast(t.obj, false /* Distributed target is for cluster-wide PUT */) return iter.forEachNode(ctx, t.sendObject) } diff --git a/pkg/services/object/put/single.go b/pkg/services/object/put/single.go index 8a7f192b..adac194a 100644 --- a/pkg/services/object/put/single.go +++ b/pkg/services/object/put/single.go @@ -151,7 +151,7 @@ func (s *Service) saveToNodes(ctx context.Context, obj *objectSDK.Object, req *o } iter := s.cfg.newNodeIterator(placementOptions) - iter.extraBroadcastEnabled = len(obj.Children()) > 0 || (!localOnly && (obj.Type() == objectSDK.TypeTombstone || obj.Type() == objectSDK.TypeLock)) + iter.extraBroadcastEnabled = needAdditionalBroadcast(obj, localOnly) signer := &putSingleRequestSigner{ req: req,