Parallel upload to block blob support

This commit is contained in:
Jeffrey Richter 2018-01-26 12:14:23 -08:00
Родитель 559751a9a8
Коммит f5afd62008
1 изменённых файлов: 4 добавлений и 9 удалений

Просмотреть файл

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