From b8d2ce8962bde274a75b7bd7808952f686bdce3d Mon Sep 17 00:00:00 2001 From: Nick Craig-Wood Date: Tue, 3 Mar 2026 12:45:28 +0000 Subject: [PATCH] s3: add server side copy real time accounting --- backend/s3/s3.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/backend/s3/s3.go b/backend/s3/s3.go index 02398a34f..440890f8c 100644 --- a/backend/s3/s3.go +++ b/backend/s3/s3.go @@ -63,6 +63,7 @@ import ( "github.com/rclone/rclone/lib/pool" "github.com/rclone/rclone/lib/readers" "github.com/rclone/rclone/lib/rest" + "github.com/rclone/rclone/lib/transferaccounter" "github.com/rclone/rclone/lib/version" ) @@ -3006,6 +3007,8 @@ func (f *Fs) copyMultipart(ctx context.Context, copyReq *s3.CopyObjectInput, dst numParts := (srcSize-1)/partSize + 1 fs.Debugf(src, "Starting multipart copy with %d parts", numParts) + account := transferaccounter.Get(ctx) + account.Start() var ( parts = make([]types.CompletedPart, numParts) @@ -3040,6 +3043,11 @@ func (f *Fs) copyMultipart(ctx context.Context, copyReq *s3.CopyObjectInput, dst PartNumber: &partNum, ETag: uout.CopyPartResult.ETag, } + copied := partSize + if int64(partNum) == numParts { + copied = srcSize - (numParts-1)*partSize + } + account.Add(copied) return nil }) }