s3: add server side copy real time accounting

This commit is contained in:
Nick Craig-Wood
2026-03-03 12:45:28 +00:00
parent f60b09e7ab
commit b8d2ce8962

View File

@@ -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
})
}