xl: getPartsMetadata fetch parts and decode in go-routine. (#1569)

Ref #1516
This commit is contained in:
Harshavardhana 2016-05-09 23:51:05 -07:00 committed by Anand Babu (AB) Periasamy
parent eec41c369c
commit 0db3218d5d
1 changed files with 21 additions and 14 deletions

View File

@ -19,6 +19,7 @@ package main
import ( import (
"errors" "errors"
slashpath "path" slashpath "path"
"sync"
"github.com/Sirupsen/logrus" "github.com/Sirupsen/logrus"
) )
@ -117,12 +118,16 @@ func (xl XL) getPartsMetadata(volume, path string) ([]xlMetaV1, []error) {
errs := make([]error, len(xl.storageDisks)) errs := make([]error, len(xl.storageDisks))
metadataArray := make([]xlMetaV1, len(xl.storageDisks)) metadataArray := make([]xlMetaV1, len(xl.storageDisks))
xlMetaV1FilePath := slashpath.Join(path, xlMetaV1File) xlMetaV1FilePath := slashpath.Join(path, xlMetaV1File)
var wg = &sync.WaitGroup{}
for index, disk := range xl.storageDisks { for index, disk := range xl.storageDisks {
wg.Add(1)
go func(index int, disk StorageAPI) {
defer wg.Done()
offset := int64(0) offset := int64(0)
metadataReader, err := disk.ReadFile(volume, xlMetaV1FilePath, offset) metadataReader, err := disk.ReadFile(volume, xlMetaV1FilePath, offset)
if err != nil { if err != nil {
errs[index] = err errs[index] = err
continue return
} }
defer metadataReader.Close() defer metadataReader.Close()
@ -130,10 +135,12 @@ func (xl XL) getPartsMetadata(volume, path string) ([]xlMetaV1, []error) {
if err != nil { if err != nil {
// Unable to parse file.json, set error. // Unable to parse file.json, set error.
errs[index] = err errs[index] = err
continue return
} }
metadataArray[index] = metadata metadataArray[index] = metadata
}(index, disk)
} }
wg.Wait()
return metadataArray, errs return metadataArray, errs
} }