From f87cc006bc7a8a9e582b7d5cc42d89c77c6538ce Mon Sep 17 00:00:00 2001 From: Javier Peletier Date: Thu, 4 Apr 2019 16:19:01 +0200 Subject: [PATCH] swarm/storage/feed: make handler read count atomic --- swarm/storage/feed/handler.go | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/swarm/storage/feed/handler.go b/swarm/storage/feed/handler.go index 0f6f2ba340..a14df04125 100644 --- a/swarm/storage/feed/handler.go +++ b/swarm/storage/feed/handler.go @@ -23,6 +23,7 @@ import ( "context" "fmt" "sync" + "sync/atomic" "github.com/ethereum/go-ethereum/swarm/chunk" @@ -178,12 +179,13 @@ func (h *Handler) Lookup(ctx context.Context, query *Query) (*cacheEntry, error) return nil, NewError(ErrInit, "Call Handler.SetStore() before performing lookups") } - var readCount int + var readCount int32 // Invoke the lookup engine. // The callback will be called every time the lookup algorithm needs to guess requestPtr, err := lookup.Lookup(ctx, timeLimit, query.Hint, func(ctx context.Context, epoch lookup.Epoch, now uint64) (interface{}, error) { - readCount++ + fmt.Printf("Epoch query: %s\n", epoch.String()) + atomic.AddInt32(&readCount, 1) id := ID{ Feed: query.Feed, Epoch: epoch, @@ -228,17 +230,17 @@ func (h *Handler) updateCache(request *Request) (*cacheEntry, error) { updateAddr := request.Addr() log.Trace("feed cache update", "topic", request.Topic.Hex(), "updateaddr", updateAddr, "epoch time", request.Epoch.Time, "epoch level", request.Epoch.Level) - feedUpdate := h.get(&request.Feed) - if feedUpdate == nil { - feedUpdate = &cacheEntry{} - h.set(&request.Feed, feedUpdate) + entry := h.get(&request.Feed) + if entry == nil { + entry = &cacheEntry{} + h.set(&request.Feed, entry) } // update our rsrcs entry map - feedUpdate.lastKey = updateAddr - feedUpdate.Update = request.Update - feedUpdate.Reader = bytes.NewReader(feedUpdate.data) - return feedUpdate, nil + entry.lastKey = updateAddr + entry.Update = request.Update + entry.Reader = bytes.NewReader(entry.data) + return entry, nil } // Update publishes a feed update