From 43081319ecd70925ab4c2dfde4fa285932a4373c Mon Sep 17 00:00:00 2001 From: nugaon Date: Tue, 5 May 2026 11:31:20 +0200 Subject: [PATCH 1/2] fix: draining strategy fetch --- pkg/file/redundancy/getter/getter.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/pkg/file/redundancy/getter/getter.go b/pkg/file/redundancy/getter/getter.go index 8244142ad9b..6027e63da15 100644 --- a/pkg/file/redundancy/getter/getter.go +++ b/pkg/file/redundancy/getter/getter.go @@ -240,7 +240,14 @@ func (g *decoder) runStrategy(s Strategy) error { c := make(chan error, len(m)) ctx, cancel := context.WithCancel(context.Background()) - defer cancel() + completed := 0 + defer func() { + cancel() + remaining := len(m) - completed + for i := 0; i < remaining; i++ { + <-c + } + }() for _, i := range m { go func(i int) { @@ -248,7 +255,9 @@ func (g *decoder) runStrategy(s Strategy) error { }(i) } - for range c { + for completed < len(m) { + <-c + completed++ if g.fetchedCnt.Load() >= int32(g.shardCnt) { return nil } From 0709fae2a109b7f7cd299cd91ef4e08ca4897476 Mon Sep 17 00:00:00 2001 From: nugaon Date: Tue, 5 May 2026 22:04:43 +0200 Subject: [PATCH 2/2] refactor: return should never happen --- pkg/file/redundancy/getter/getter.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/file/redundancy/getter/getter.go b/pkg/file/redundancy/getter/getter.go index 6027e63da15..bfb72c577e4 100644 --- a/pkg/file/redundancy/getter/getter.go +++ b/pkg/file/redundancy/getter/getter.go @@ -19,6 +19,7 @@ import ( var ( errStrategyNotAllowed = errors.New("strategy not allowed") errStrategyFailed = errors.New("strategy failed") + errShouldNeverHappen = errors.New("should never happen") ) // decoder is a private implementation of storage.Getter @@ -266,7 +267,7 @@ func (g *decoder) runStrategy(s Strategy) error { } } - return nil + return errShouldNeverHappen } // recover wraps the stages of data shard recovery: