@@ -24,6 +24,7 @@ import (
24
24
"github.com/nspcc-dev/neofs-sdk-go/object"
25
25
oid "github.com/nspcc-dev/neofs-sdk-go/object/id"
26
26
"github.com/nspcc-dev/neofs-sdk-go/user"
27
+ "github.com/nspcc-dev/neofs-sdk-go/version"
27
28
"github.com/nspcc-dev/tzhash/tz"
28
29
"go.uber.org/zap"
29
30
"golang.org/x/exp/slices"
@@ -251,11 +252,10 @@ func (n *layer) uploadPart(ctx context.Context, multipartInfo *data.MultipartInf
251
252
}
252
253
253
254
var (
254
- splitPreviousID oid.ID
255
- splitFirstID oid.ID
256
- isSetSplitPreviousID bool
257
- multipartHash = sha256 .New ()
258
- tzHash hash.Hash
255
+ splitPreviousID oid.ID
256
+ splitFirstID oid.ID
257
+ multipartHash = sha256 .New ()
258
+ tzHash hash.Hash
259
259
)
260
260
261
261
if n .neoFS .IsHomomorphicHashingEnabled () {
@@ -281,7 +281,6 @@ func (n *layer) uploadPart(ctx context.Context, multipartInfo *data.MultipartInf
281
281
}
282
282
}
283
283
284
- isSetSplitPreviousID = true
285
284
splitPreviousID = lastPart .OID
286
285
287
286
if err = splitFirstID .DecodeString (multipartInfo .UploadID ); err != nil {
@@ -317,9 +316,7 @@ func (n *layer) uploadPart(ctx context.Context, multipartInfo *data.MultipartInf
317
316
var totalBytes int
318
317
// slice part manually. Simultaneously considering the part is a single object for user.
319
318
for {
320
- if isSetSplitPreviousID {
321
- prm .Multipart .SplitPreviousID = & splitPreviousID
322
- }
319
+ prm .Multipart .SplitPreviousID = & splitPreviousID
323
320
324
321
if ! splitFirstID .Equals (oid.ID {}) {
325
322
prm .Multipart .SplitFirstID = & splitFirstID
@@ -337,7 +334,6 @@ func (n *layer) uploadPart(ctx context.Context, multipartInfo *data.MultipartInf
337
334
return nil , err
338
335
}
339
336
340
- isSetSplitPreviousID = true
341
337
splitPreviousID = id
342
338
elements = append (elements , data.LinkObjectPayload {OID : id , Size : uint32 (nBts )})
343
339
}
@@ -451,6 +447,31 @@ func (n *layer) uploadZeroPart(ctx context.Context, multipartInfo *data.Multipar
451
447
objHashes = append (objHashes , tzHash )
452
448
}
453
449
450
+ attrs := make ([]object.Attribute , 0 , len (multipartInfo .Meta )+ 1 )
451
+ attrs = append (attrs , * object .NewAttribute (object .AttributeTimestamp , strconv .FormatInt (creationTime .Unix (), 10 )))
452
+
453
+ for key , val := range multipartInfo .Meta {
454
+ if strings .HasPrefix (key , metaPrefix ) {
455
+ attrs = append (attrs , * object .NewAttribute (strings .TrimPrefix (key , metaPrefix ), val ))
456
+ }
457
+ }
458
+
459
+ if encInfo .Enabled {
460
+ attrs = append (attrs , * object .NewAttribute (AttributeEncryptionAlgorithm , encInfo .Algorithm ))
461
+ attrs = append (attrs , * object .NewAttribute (AttributeHMACKey , encInfo .HMACKey ))
462
+ attrs = append (attrs , * object .NewAttribute (AttributeHMACSalt , encInfo .HMACSalt ))
463
+ }
464
+
465
+ var hashlessHeaderObject object.Object
466
+ hashlessHeaderObject .SetContainerID (bktInfo .CID )
467
+ hashlessHeaderObject .SetType (object .TypeRegular )
468
+ hashlessHeaderObject .SetOwnerID (& bktInfo .Owner )
469
+ hashlessHeaderObject .SetAttributes (attrs ... )
470
+ hashlessHeaderObject .SetCreationEpoch (n .neoFS .CurrentEpoch ())
471
+
472
+ currentVersion := version .Current ()
473
+ hashlessHeaderObject .SetVersion (& currentVersion )
474
+
454
475
prm := PrmObjectCreate {
455
476
Container : bktInfo .CID ,
456
477
Creator : bktInfo .Owner ,
@@ -459,6 +480,7 @@ func (n *layer) uploadZeroPart(ctx context.Context, multipartInfo *data.Multipar
459
480
CopiesNumber : multipartInfo .CopiesNumber ,
460
481
Multipart : & Multipart {
461
482
MultipartHashes : objHashes ,
483
+ HeaderObject : & hashlessHeaderObject ,
462
484
},
463
485
Payload : bytes .NewBuffer (nil ),
464
486
}
0 commit comments