diff --git a/cmd/data-usage.go b/cmd/data-usage.go index a5611d270..b7beb4284 100644 --- a/cmd/data-usage.go +++ b/cmd/data-usage.go @@ -88,7 +88,8 @@ func runDataUsageInfoForXLZones(ctx context.Context, z *xlZones, endCh <-chan st time.Sleep(5 * time.Minute) continue } - // Break without locking + // Break without unlocking, this node will acquire + // data usage calculator role for its lifetime. break } diff --git a/cmd/storage-rest-server.go b/cmd/storage-rest-server.go index 93809ddf3..325bc32e7 100644 --- a/cmd/storage-rest-server.go +++ b/cmd/storage-rest-server.go @@ -119,15 +119,9 @@ func (s *storageRESTServer) CrawlAndGetDataUsageHandler(w http.ResponseWriter, r return } - usageInfo, err := s.storage.CrawlAndGetDataUsage(GlobalServiceDoneCh) - if err != nil { - s.writeErrorResponse(w, err) - return - } - w.Header().Set(xhttp.ContentType, "text/event-stream") doneCh := sendWhiteSpaceToHTTPResponse(w) - usageInfo, err = s.storage.CrawlAndGetDataUsage(GlobalServiceDoneCh) + usageInfo, err := s.storage.CrawlAndGetDataUsage(GlobalServiceDoneCh) <-doneCh if err != nil { diff --git a/cmd/xl-v1.go b/cmd/xl-v1.go index 754e80acb..7b3e89bf2 100644 --- a/cmd/xl-v1.go +++ b/cmd/xl-v1.go @@ -198,16 +198,18 @@ func (xl xlObjects) GetMetrics(ctx context.Context) (*Metrics, error) { return &Metrics{}, NotImplemented{} } +// crawlAndGetDataUsage picks three random disks to crawl and get data usage func (xl xlObjects) crawlAndGetDataUsage(ctx context.Context, endCh <-chan struct{}) DataUsageInfo { + var randomDisks []StorageAPI for _, d := range xl.getLoadBalancedDisks() { if d == nil || !d.IsOnline() { continue } - if len(randomDisks) > 3 { + randomDisks = append(randomDisks, d) + if len(randomDisks) >= 3 { break } - randomDisks = append(randomDisks, d) } var dataUsageResults = make([]DataUsageInfo, len(randomDisks))