Add locking to sketch merge.

pull/7913/head
Ben Johnson 2016-12-20 08:58:06 -07:00
parent 9bd19cdc69
commit 5f7654173e
No known key found for this signature in database
GPG Key ID: 81741CD251883081
2 changed files with 15 additions and 4 deletions

View File

@ -681,10 +681,7 @@ func (i *Index) SeriesSketches() (estimator.Sketch, estimator.Sketch, error) {
// Merge in any current log file sketches.
for _, f := range i.logFiles {
if err := sketch.Merge(f.sSketch); err != nil {
return nil, nil, err
}
if err := tsketch.Merge(f.sTSketch); err != nil {
if err := f.MergeSeriesSketches(sketch, tsketch); err != nil {
return nil, nil, err
}
}

View File

@ -775,6 +775,20 @@ func (f *LogFile) reset() {
}
}
// MergeSeriesSketches merges the series sketches within a mutex.
func (f *LogFile) MergeSeriesSketches(sketch, tsketch estimator.Sketch) error {
f.mu.RLock()
defer f.mu.RUnlock()
if err := sketch.Merge(f.sSketch); err != nil {
return err
}
if err := tsketch.Merge(f.sTSketch); err != nil {
return err
}
return nil
}
// LogEntry represents a single log entry in the write-ahead log.
type LogEntry struct {
Flag byte // flag