From c691863ad9f29f1e6bd350d52565b28a799283ac Mon Sep 17 00:00:00 2001 From: sbackend Date: Sun, 26 Apr 2026 15:25:11 +0200 Subject: [PATCH 1/3] fix: make stamps removal sync --- pkg/postage/service.go | 36 ++++++++++++++++-------------------- pkg/postage/service_test.go | 2 +- 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/pkg/postage/service.go b/pkg/postage/service.go index e6991bdcfa3..8916e9b9c88 100644 --- a/pkg/postage/service.go +++ b/pkg/postage/service.go @@ -290,37 +290,33 @@ func (ps *service) HandleStampExpiry(ctx context.Context, id []byte) error { return nil } -// removeStampItems +// removeStampItems removes all stamp items belonging to the given batch. func (ps *service) removeStampItems(ctx context.Context, batchID []byte) error { ps.logger.Debug("removing expired stamp items", "batchID", hex.EncodeToString(batchID)) - deleteItemC := make(chan *StampItem) - go func() { - for item := range deleteItemC { - _ = ps.store.Delete(item) - } - }() - - count := 0 - - defer func() { - close(deleteItemC) - ps.logger.Debug("removed expired stamps", "batchID", hex.EncodeToString(batchID), "count", count) - }() + var toDelete []*StampItem - return ps.store.Iterate( + err := ps.store.Iterate( storage.Query{ Factory: func() storage.Item { return new(StampItem) }, Prefix: string(batchID), }, func(result storage.Result) (bool, error) { - select { - case deleteItemC <- result.Entry.(*StampItem): - case <-ctx.Done(): - return false, ctx.Err() + if err := ctx.Err(); err != nil { + return false, err } - count++ + toDelete = append(toDelete, result.Entry.(*StampItem)) return false, nil }) + if err != nil { + return err + } + + for _, item := range toDelete { + _ = ps.store.Delete(item) + } + + ps.logger.Debug("removed expired stamps", "batchID", hex.EncodeToString(batchID), "count", len(toDelete)) + return nil } // SetExpired removes all expired batches from the stamp issuers. diff --git a/pkg/postage/service_test.go b/pkg/postage/service_test.go index 88a1720e361..c55e82cfccb 100644 --- a/pkg/postage/service_test.go +++ b/pkg/postage/service_test.go @@ -296,7 +296,7 @@ func TestSetExpired(t *testing.T) { err = store.Get(itemNotExists) if err == nil { - t.Fatal(err) + t.Fatal("expected error getting expired stamp item, got nil") } testutil.CleanupCloser(t, ps) From 15e66079e2b8e968cc7895f95b2d6f728f4119b4 Mon Sep 17 00:00:00 2001 From: sbackend Date: Mon, 27 Apr 2026 14:03:52 +0200 Subject: [PATCH 2/3] fix: data race in streamtest record --- pkg/p2p/streamtest/streamtest.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/p2p/streamtest/streamtest.go b/pkg/p2p/streamtest/streamtest.go index be491c3d5eb..6b402605153 100644 --- a/pkg/p2p/streamtest/streamtest.go +++ b/pkg/p2p/streamtest/streamtest.go @@ -401,7 +401,11 @@ func (r *record) close() { } func (r *record) bytes() []byte { - return r.b + r.lock.Lock() + defer r.lock.Unlock() + cp := make([]byte, len(r.b)) + copy(cp, r.b) + return cp } func (r *record) bytesSize() int { From 62dda47ae7b718b24919a97f94905bcf871e87c9 Mon Sep 17 00:00:00 2001 From: sbackend Date: Thu, 30 Apr 2026 12:57:08 +0200 Subject: [PATCH 3/3] fix: fix flaky tests --- pkg/api/gsoc_test.go | 4 ++-- pkg/storer/internal/events/subscribe_test.go | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/pkg/api/gsoc_test.go b/pkg/api/gsoc_test.go index edef7a39842..cf3161a9f03 100644 --- a/pkg/api/gsoc_test.go +++ b/pkg/api/gsoc_test.go @@ -35,7 +35,7 @@ func TestGsocWebsocketSingleHandler(t *testing.T) { payload = []byte("hello there!") ) - err := cl.SetReadDeadline(time.Now().Add(2 * time.Second)) + err := cl.SetReadDeadline(time.Now().Add(longTimeout)) if err != nil { t.Fatal(err) } @@ -70,7 +70,7 @@ func TestGsocWebsocketMultiHandler(t *testing.T) { } testutil.CleanupCloser(t, cl2) - err = cl.SetReadDeadline(time.Now().Add(2 * time.Second)) + err = cl.SetReadDeadline(time.Now().Add(longTimeout)) if err != nil { t.Fatal(err) } diff --git a/pkg/storer/internal/events/subscribe_test.go b/pkg/storer/internal/events/subscribe_test.go index f4adefaea2f..86a2e250d8f 100644 --- a/pkg/storer/internal/events/subscribe_test.go +++ b/pkg/storer/internal/events/subscribe_test.go @@ -45,8 +45,9 @@ func TestSubscriber(t *testing.T) { bin1, unsub1 := s.Subscribe("1") go s.Trigger("1") - go s.Trigger("1") <-bin1 + + go s.Trigger("1") <-bin1 unsub1()