Only enforce quota on success (#10339)

We should only enforce quotas if no error has been returned.

firstErr is safe to access since all goroutines have exited at this point.

If `firstErr` hasn't been set by something else return the context error if cancelled.
master
Klaus Post 4 years ago committed by GitHub
parent 21e8440423
commit bc2ebe0021
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 5
      cmd/erasure-zones.go

@ -371,9 +371,11 @@ func (z *erasureZones) CrawlAndGetDataUsage(ctx context.Context, bf *bloomFilter
case v := <-updateCloser: case v := <-updateCloser:
update() update()
// Enforce quotas when all is done. // Enforce quotas when all is done.
if firstErr == nil {
for _, b := range allBuckets { for _, b := range allBuckets {
enforceFIFOQuotaBucket(ctx, z, b.Name, allMerged.bucketUsageInfo(b.Name)) enforceFIFOQuotaBucket(ctx, z, b.Name, allMerged.bucketUsageInfo(b.Name))
} }
}
close(v) close(v)
return return
case <-updateTicker.C: case <-updateTicker.C:
@ -388,6 +390,9 @@ func (z *erasureZones) CrawlAndGetDataUsage(ctx context.Context, bf *bloomFilter
case updateCloser <- ch: case updateCloser <- ch:
<-ch <-ch
case <-ctx.Done(): case <-ctx.Done():
if firstErr == nil {
firstErr = ctx.Err()
}
} }
return firstErr return firstErr
} }

Loading…
Cancel
Save