Merge pull request #1414 from prometheus/beorn7/rushed-race

Fix a race condition in calculatePersistenceUrgencyScore
This commit is contained in:
Björn Rabenstein 2016-02-22 16:09:19 +01:00
commit 51aad630b6

View file

@ -18,6 +18,7 @@ import (
"container/list"
"fmt"
"math"
"sync"
"sync/atomic"
"time"
@ -124,6 +125,7 @@ type memorySeriesStorage struct {
numChunksToPersist int64 // The number of chunks waiting for persistence.
maxChunksToPersist int // If numChunksToPersist reaches this threshold, ingestion will be throttled.
rushed bool // Whether the storage is in rushed mode.
rushedMtx sync.Mutex // Protects entering and exiting rushed mode.
throttled chan struct{} // This chan is sent to whenever NeedsThrottling() returns true (for logging).
fpLocker *fingerprintLocker
@ -1248,6 +1250,9 @@ func (s *memorySeriesStorage) incNumChunksToPersist(by int) {
// files should not by synced anymore provided the user has specified the
// adaptive sync strategy.
func (s *memorySeriesStorage) calculatePersistenceUrgencyScore() float64 {
s.rushedMtx.Lock()
defer s.rushedMtx.Unlock()
var (
chunksToPersist = float64(s.getNumChunksToPersist())
maxChunksToPersist = float64(s.maxChunksToPersist)