From d701d884ef67dd8db35ca27fc810b051a3ff46e2 Mon Sep 17 00:00:00 2001 From: Bin Liu Date: Tue, 15 Apr 2025 20:45:51 +0800 Subject: [PATCH] fix: check blob exist before copying layers samller than chunk size `copyBlobByChunk()` should like `copyBlob()`, first try to mount an exists layer, if not mounted or exist, then copy the layer monolithic or by chunks. Signed-off-by: Bin Liu Signed-off-by: Bin Liu --- src/controller/replication/transfer/image/transfer.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/controller/replication/transfer/image/transfer.go b/src/controller/replication/transfer/image/transfer.go index 09c1bea27e9..bf76eee9559 100644 --- a/src/controller/replication/transfer/image/transfer.go +++ b/src/controller/replication/transfer/image/transfer.go @@ -403,11 +403,6 @@ func (t *transfer) copyBlobByMonolithic(srcRepo, dstRepo, digest string, sizeFro // copyBlobByChunk copy blob by chunk with specified start and end range. // The refers to the byte range of the chunk, and MUST be inclusive on both ends. The first chunk's range MUST begin with 0. func (t *transfer) copyBlobByChunk(srcRepo, dstRepo, digest string, sizeFromDescriptor int64, start, end *int64, location *string, speed int32) error { - // fallback to copy by monolithic if the blob size is equal or less than chunk size. - if sizeFromDescriptor <= replicationChunkSize { - return t.copyBlobByMonolithic(srcRepo, dstRepo, digest, sizeFromDescriptor, speed) - } - mounted, err := t.tryMountBlob(srcRepo, dstRepo, digest) if err != nil { return err @@ -417,6 +412,11 @@ func (t *transfer) copyBlobByChunk(srcRepo, dstRepo, digest string, sizeFromDesc return nil } + // fallback to copy by monolithic if the blob size is equal or less than chunk size. + if sizeFromDescriptor <= replicationChunkSize { + return t.copyBlobByMonolithic(srcRepo, dstRepo, digest, sizeFromDescriptor, speed) + } + // end range should equal (blobSize - 1) endRange := sizeFromDescriptor - 1 for {