fix: fatal error: concurrent map writes (#1265)

This commit is contained in:
Pablo Lopez 2024-12-10 14:08:04 +02:00 committed by pablo
parent 1608cf2b0b
commit d2bdab893b
No known key found for this signature in database
GPG Key ID: 78F35FCC60FDC63A

View File

@ -6,6 +6,7 @@ import (
"errors" "errors"
"fmt" "fmt"
"math" "math"
"sync"
"github.com/libp2p/go-libp2p/core/host" "github.com/libp2p/go-libp2p/core/host"
"github.com/libp2p/go-libp2p/core/peer" "github.com/libp2p/go-libp2p/core/peer"
@ -73,6 +74,7 @@ type WakuStore struct {
defaultRatelimit rate.Limit defaultRatelimit rate.Limit
rateLimiters map[peer.ID]*rate.Limiter rateLimiters map[peer.ID]*rate.Limiter
rateLimitersMux sync.Mutex
} }
// NewWakuStore is used to instantiate a StoreV3 client // NewWakuStore is used to instantiate a StoreV3 client
@ -297,11 +299,13 @@ func (s *WakuStore) queryFrom(ctx context.Context, storeRequest *pb.StoreQueryRe
logger.Debug("sending store request") logger.Debug("sending store request")
if !params.skipRatelimit { if !params.skipRatelimit {
s.rateLimitersMux.Lock()
rateLimiter, ok := s.rateLimiters[params.selectedPeer] rateLimiter, ok := s.rateLimiters[params.selectedPeer]
if !ok { if !ok {
rateLimiter = rate.NewLimiter(s.defaultRatelimit, 1) rateLimiter = rate.NewLimiter(s.defaultRatelimit, 1)
s.rateLimiters[params.selectedPeer] = rateLimiter s.rateLimiters[params.selectedPeer] = rateLimiter
} }
s.rateLimitersMux.Unlock()
err := rateLimiter.Wait(ctx) err := rateLimiter.Wait(ctx)
if err != nil { if err != nil {
return nil, err return nil, err