From f5afd6200808be1d5f6fc0236529270262cbfe4b Mon Sep 17 00:00:00 2001 From: Jeffrey Richter Date: Fri, 26 Jan 2018 12:14:23 -0800 Subject: [PATCH] Parallel upload to block blob support --- 2016-05-31/azblob/highlevel.go | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/2016-05-31/azblob/highlevel.go b/2016-05-31/azblob/highlevel.go index c76c6c4..1eb93c0 100644 --- a/2016-05-31/azblob/highlevel.go +++ b/2016-05-31/azblob/highlevel.go @@ -107,13 +107,7 @@ func UploadBufferToBlockBlob(ctx context.Context, b []byte, } blobProgress := int64(0) - var blockProgress []int64 - var progressLock *sync.Mutex - if o.Progress != nil { - // Optimization: allocate only if progress reporting requested - blockProgress = make([]int64, numBlocks) // Potentially 50,000 * 8 = 400,000 bytes! - progressLock = &sync.Mutex{} - } + progressLock := &sync.Mutex{} // Add each put block to the channel for blockNum := uint16(0); blockNum < numBlocks; blockNum++ { @@ -126,10 +120,11 @@ func UploadBufferToBlockBlob(ctx context.Context, b []byte, var body io.ReadSeeker = bytes.NewReader(b[offset : offset+blockSize]) capturedBlockNum := blockNum if o.Progress != nil { + blockProgress := int64(0) body = pipeline.NewRequestBodyProgress(body, func(bytesTransferred int64) { - diff := bytesTransferred - blockProgress[capturedBlockNum] - blockProgress[capturedBlockNum] = bytesTransferred + diff := bytesTransferred - blockProgress + blockProgress = bytesTransferred progressLock.Lock() blobProgress += diff o.Progress(blobProgress)