data-usage: Avoid crawling duplicated call (#8843)

This fix will also picks 3 and not 4 disks from a single erasure set.
This commit is contained in:
Anis Elleuch 2020-01-17 18:59:37 +01:00 committed by kannappanr
parent 2bb69033e5
commit 017067e11f
3 changed files with 7 additions and 10 deletions

View File

@ -88,7 +88,8 @@ func runDataUsageInfoForXLZones(ctx context.Context, z *xlZones, endCh <-chan st
time.Sleep(5 * time.Minute) time.Sleep(5 * time.Minute)
continue continue
} }
// Break without locking // Break without unlocking, this node will acquire
// data usage calculator role for its lifetime.
break break
} }

View File

@ -119,15 +119,9 @@ func (s *storageRESTServer) CrawlAndGetDataUsageHandler(w http.ResponseWriter, r
return return
} }
usageInfo, err := s.storage.CrawlAndGetDataUsage(GlobalServiceDoneCh)
if err != nil {
s.writeErrorResponse(w, err)
return
}
w.Header().Set(xhttp.ContentType, "text/event-stream") w.Header().Set(xhttp.ContentType, "text/event-stream")
doneCh := sendWhiteSpaceToHTTPResponse(w) doneCh := sendWhiteSpaceToHTTPResponse(w)
usageInfo, err = s.storage.CrawlAndGetDataUsage(GlobalServiceDoneCh) usageInfo, err := s.storage.CrawlAndGetDataUsage(GlobalServiceDoneCh)
<-doneCh <-doneCh
if err != nil { if err != nil {

View File

@ -198,16 +198,18 @@ func (xl xlObjects) GetMetrics(ctx context.Context) (*Metrics, error) {
return &Metrics{}, NotImplemented{} 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 { func (xl xlObjects) crawlAndGetDataUsage(ctx context.Context, endCh <-chan struct{}) DataUsageInfo {
var randomDisks []StorageAPI var randomDisks []StorageAPI
for _, d := range xl.getLoadBalancedDisks() { for _, d := range xl.getLoadBalancedDisks() {
if d == nil || !d.IsOnline() { if d == nil || !d.IsOnline() {
continue continue
} }
if len(randomDisks) > 3 { randomDisks = append(randomDisks, d)
if len(randomDisks) >= 3 {
break break
} }
randomDisks = append(randomDisks, d)
} }
var dataUsageResults = make([]DataUsageInfo, len(randomDisks)) var dataUsageResults = make([]DataUsageInfo, len(randomDisks))