From bc2ebe00210c5257d46f088881466e15192b1387 Mon Sep 17 00:00:00 2001 From: Klaus Post Date: Mon, 24 Aug 2020 10:15:46 -0700 Subject: [PATCH] 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. --- cmd/erasure-zones.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/cmd/erasure-zones.go b/cmd/erasure-zones.go index 749b5c140..7c7bbfe82 100644 --- a/cmd/erasure-zones.go +++ b/cmd/erasure-zones.go @@ -371,8 +371,10 @@ func (z *erasureZones) CrawlAndGetDataUsage(ctx context.Context, bf *bloomFilter case v := <-updateCloser: update() // Enforce quotas when all is done. - for _, b := range allBuckets { - enforceFIFOQuotaBucket(ctx, z, b.Name, allMerged.bucketUsageInfo(b.Name)) + if firstErr == nil { + for _, b := range allBuckets { + enforceFIFOQuotaBucket(ctx, z, b.Name, allMerged.bucketUsageInfo(b.Name)) + } } close(v) return @@ -388,6 +390,9 @@ func (z *erasureZones) CrawlAndGetDataUsage(ctx context.Context, bf *bloomFilter case updateCloser <- ch: <-ch case <-ctx.Done(): + if firstErr == nil { + firstErr = ctx.Err() + } } return firstErr }