From eb932d152425e56ad3ceaa16fd8fa68ed1530ccc Mon Sep 17 00:00:00 2001 From: Bjoern Rabenstein Date: Wed, 7 Jan 2015 19:02:38 +0100 Subject: [PATCH] Remove a deadlock during shutdown. --- storage/local/storage.go | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/storage/local/storage.go b/storage/local/storage.go index 7224c615f..0b51fa6e8 100644 --- a/storage/local/storage.go +++ b/storage/local/storage.go @@ -424,7 +424,7 @@ func (s *memorySeriesStorage) preloadChunksForRange( func (s *memorySeriesStorage) handleEvictList() { ticker := time.NewTicker(maxEvictInterval) count := 0 -loop: + for { // To batch up evictions a bit, this tries evictions at least // once per evict interval, but earlier if the number of evict @@ -450,12 +450,20 @@ loop: s.maybeEvict() } case <-s.evictStopping: - break loop + // Drain evictRequests to not let requesters hang. + for { + select { + case <-s.evictRequests: + // Do nothing. + default: + ticker.Stop() + glog.Info("Chunk eviction stopped.") + close(s.evictStopped) + return + } + } } } - ticker.Stop() - glog.Info("Chunk eviction stopped.") - close(s.evictStopped) } // maybeEvict is a local helper method. Must only be called by handleEvictList.