s3: add server side copy real time accounting

This commit is contained in:
Nick Craig-Wood
2026-03-03 14:01:11 +00:00
parent f60b09e7ab
commit b8d2ce8962
+8
View File
@@ -63,6 +63,7 @@ import (
"github.com/rclone/rclone/lib/pool" "github.com/rclone/rclone/lib/pool"
"github.com/rclone/rclone/lib/readers" "github.com/rclone/rclone/lib/readers"
"github.com/rclone/rclone/lib/rest" "github.com/rclone/rclone/lib/rest"
"github.com/rclone/rclone/lib/transferaccounter"
"github.com/rclone/rclone/lib/version" "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 numParts := (srcSize-1)/partSize + 1
fs.Debugf(src, "Starting multipart copy with %d parts", numParts) fs.Debugf(src, "Starting multipart copy with %d parts", numParts)
account := transferaccounter.Get(ctx)
account.Start()
var ( var (
parts = make([]types.CompletedPart, numParts) parts = make([]types.CompletedPart, numParts)
@@ -3040,6 +3043,11 @@ func (f *Fs) copyMultipart(ctx context.Context, copyReq *s3.CopyObjectInput, dst
PartNumber: &partNum, PartNumber: &partNum,
ETag: uout.CopyPartResult.ETag, ETag: uout.CopyPartResult.ETag,
} }
copied := partSize
if int64(partNum) == numParts {
copied = srcSize - (numParts-1)*partSize
}
account.Add(copied)
return nil return nil
}) })
} }