From f5c7d1c8eb202b850541a3fcfc2e9bd4ee6f70a9 Mon Sep 17 00:00:00 2001 From: Balint Gabor Date: Wed, 19 Sep 2018 16:59:10 +0200 Subject: [PATCH] swarm/storage: Implement global timeout for fetcher (#17702) --- swarm/storage/netstore.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/swarm/storage/netstore.go b/swarm/storage/netstore.go index de2d82d2b..80ac6f198 100644 --- a/swarm/storage/netstore.go +++ b/swarm/storage/netstore.go @@ -52,6 +52,8 @@ type NetStore struct { closeC chan struct{} } +var fetcherTimeout = 2 * time.Minute // timeout to cancel the fetcher even if requests are coming in + // NewNetStore creates a new NetStore object using the given local store. newFetchFunc is a // constructor function that can create a fetch function for a specific chunk address. func NewNetStore(store SyncChunkStore, nnf NewNetFetcherFunc) (*NetStore, error) { @@ -168,7 +170,7 @@ func (n *NetStore) getOrCreateFetcher(ref Address) *fetcher { // no fetcher for the given address, we have to create a new one key := hex.EncodeToString(ref) // create the context during which fetching is kept alive - ctx, cancel := context.WithCancel(context.Background()) + ctx, cancel := context.WithTimeout(context.Background(), fetcherTimeout) // destroy is called when all requests finish destroy := func() { // remove fetcher from fetchers