satellite/metabase: copy when source and destination are the same
If source and destination are the same, do nothing and return the original object. Later, we will have to handle the case when metadata is changed, but for now it's not possible through libuplink. An issue has been created for this (https://github.com/storj/storj/issues/5168) Change-Id: I91cf48afeec498d3b2c219fa0d3baf2163cff384
This commit is contained in:
parent
26444194c2
commit
601cadb92c
@ -176,6 +176,10 @@ func (db *DB) FinishCopyObject(ctx context.Context, opts FinishCopyObject) (obje
|
||||
return err
|
||||
}
|
||||
|
||||
if objectAtDestination != nil && objectAtDestination.StreamID == sourceObject.StreamID {
|
||||
newObject = sourceObject
|
||||
return nil
|
||||
}
|
||||
if opts.VerifyLimits != nil {
|
||||
err := opts.VerifyLimits(sourceObject.TotalEncryptedSize, int64(sourceObject.SegmentCount))
|
||||
if err != nil {
|
||||
|
@ -982,5 +982,34 @@ func TestFinishCopyObject(t *testing.T) {
|
||||
}},
|
||||
}.Check(ctx, t, db)
|
||||
})
|
||||
|
||||
t.Run("finish copy object to same destination", func(t *testing.T) {
|
||||
defer metabasetest.DeleteAll{}.Check(ctx, t, db)
|
||||
|
||||
obj := metabasetest.RandObjectStream()
|
||||
numberOfSegments := 10
|
||||
originalObj, _ := metabasetest.CreateTestObject{
|
||||
CommitObject: &metabase.CommitObject{
|
||||
ObjectStream: obj,
|
||||
EncryptedMetadata: testrand.Bytes(64),
|
||||
EncryptedMetadataNonce: testrand.Nonce().Bytes(),
|
||||
EncryptedMetadataEncryptedKey: testrand.Bytes(265),
|
||||
},
|
||||
}.Run(ctx, t, db, obj, byte(numberOfSegments))
|
||||
|
||||
obj.StreamID = testrand.UUID()
|
||||
_, expectedOriginalSegments, _ := metabasetest.CreateObjectCopy{
|
||||
OriginalObject: originalObj,
|
||||
CopyObjectStream: &obj,
|
||||
}.Run(ctx, t, db)
|
||||
|
||||
metabasetest.Verify{
|
||||
Objects: []metabase.RawObject{
|
||||
metabase.RawObject(originalObj),
|
||||
},
|
||||
Segments: expectedOriginalSegments,
|
||||
Copies: []metabase.RawCopy{},
|
||||
}.Check(ctx, t, db)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user