Simplify lock handling in influxdb driver.

Docker-DCO-1.1-Signed-off-by: Vishnu Kannan <vishnuk@google.com> (github: vishh)
This commit is contained in:
Vishnu Kannan 2014-08-20 04:31:13 +00:00
parent 9b5b221a57
commit 45c9fb80e1

View File

@ -260,22 +260,26 @@ func (self *influxdbStorage) AddStats(ref info.ContainerReference, stats *info.C
return nil
}
// AddStats will be invoked simultaneously from multiple threads and only one of them will perform a write.
self.lock.Lock()
series := self.newSeries(self.containerStatsToValues(ref, stats))
self.series = append(self.series, series)
self.prevStats = stats.Copy(self.prevStats)
if self.readyToFlush() {
series := self.series
self.series = make([]*influxdb.Series, 0)
self.lastWrite = time.Now()
self.lock.Unlock()
err := self.client.WriteSeries(series)
var seriesToFlush []*influxdb.Series
func() {
self.lock.Lock()
defer self.lock.Unlock()
series := self.newSeries(self.containerStatsToValues(ref, stats))
self.series = append(self.series, series)
self.prevStats = stats.Copy(self.prevStats)
if self.readyToFlush() {
seriesToFlush = self.series
self.series = make([]*influxdb.Series, 0)
self.lastWrite = time.Now()
}
}()
if len(seriesToFlush) > 0 {
err := self.client.WriteSeries(seriesToFlush)
if err != nil {
return fmt.Errorf("failed to write stats to influxDb - %s", err)
}
} else {
self.lock.Unlock()
}
return nil
}