diff --git a/api/layer/multipart_upload.go b/api/layer/multipart_upload.go index 32ada6d2..0dff2c9e 100644 --- a/api/layer/multipart_upload.go +++ b/api/layer/multipart_upload.go @@ -952,7 +952,12 @@ func (n *layer) CompleteMultipartUpload(ctx context.Context, p *CompleteMultipar CopiesNumber: multipartInfo.CopiesNumber, } - header, err := n.prepareMultipartHeadObject(ctx, prmHeaderObject, multipartHash, homoHash, uint64(multipartObjetSize)) + bktSettings, err := n.GetBucketSettings(ctx, p.Info.Bkt) + if err != nil { + return nil, nil, fmt.Errorf("couldn't get versioning settings object: %w", err) + } + + header, err := n.prepareMultipartHeadObject(ctx, prmHeaderObject, multipartHash, homoHash, uint64(multipartObjetSize), bktSettings.VersioningEnabled()) if err != nil { return nil, nil, err } @@ -1008,11 +1013,6 @@ func (n *layer) CompleteMultipartUpload(ctx context.Context, p *CompleteMultipar return nil, nil, err } - bktSettings, err := n.GetBucketSettings(ctx, p.Info.Bkt) - if err != nil { - return nil, nil, fmt.Errorf("couldn't get versioning settings object: %w", err) - } - headerObjectID, _ := header.ID() // the "big object" is not presented in system, but we have to put correct info about it and its version. diff --git a/api/layer/object.go b/api/layer/object.go index bebfebce..c9b50df5 100644 --- a/api/layer/object.go +++ b/api/layer/object.go @@ -318,7 +318,7 @@ func (n *layer) PutObject(ctx context.Context, p *PutObjectParams) (*data.Extend return extendedObjInfo, nil } -func (n *layer) prepareMultipartHeadObject(ctx context.Context, p *PutObjectParams, payloadHash hash.Hash, homoHash hash.Hash, payloadLength uint64) (*object.Object, error) { +func (n *layer) prepareMultipartHeadObject(ctx context.Context, p *PutObjectParams, payloadHash hash.Hash, homoHash hash.Hash, payloadLength uint64, versioningEnabled bool) (*object.Object, error) { var ( err error owner = n.Owner(ctx) @@ -364,6 +364,10 @@ func (n *layer) prepareMultipartHeadObject(ctx context.Context, p *PutObjectPara attributes = append(attributes, *object.NewAttribute(object.AttributeFilePath, p.Object)) } + if versioningEnabled { + attributes = append(attributes, *object.NewAttribute(attrS3VersioningState, data.VersioningEnabled)) + } + headerObject.SetAttributes(attributes...) multipartHeader, err := n.neoFS.FinalizeObjectWithPayloadChecksums(ctx, headerObject, payloadHash, homoHash, payloadLength)