From 86fcbe5bde9b0897c5e0e66dbea1e7a5115bdc3c Mon Sep 17 00:00:00 2001 From: "Matt T. Proud" Date: Thu, 5 Sep 2013 10:14:34 +0200 Subject: [PATCH] Retain DTO on each cycle. Change-Id: Ifc6f68f98eacb01097771d0dbf043c98bba1d518 --- storage/metric/leveldb.go | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/storage/metric/leveldb.go b/storage/metric/leveldb.go index c3e7bbb64..f74ca8f70 100644 --- a/storage/metric/leveldb.go +++ b/storage/metric/leveldb.go @@ -345,8 +345,14 @@ func (l *LevelDBMetricPersistence) AppendSamples(samples clientmodel.Samples) (e samplesBatch := leveldb.NewBatch() defer samplesBatch.Close() + key := new(SampleKey) + keyDto := new(dto.SampleKey) + value := new(dto.SampleValueSeries) + for fingerprint, group := range fingerprintToSamples { for { + value.Reset() + lengthOfGroup := len(group) if lengthOfGroup == 0 { @@ -361,24 +367,21 @@ func (l *LevelDBMetricPersistence) AppendSamples(samples clientmodel.Samples) (e chunk := group[0:take] group = group[take:lengthOfGroup] - key := SampleKey{ - Fingerprint: &fingerprint, - FirstTimestamp: chunk[0].Timestamp, - LastTimestamp: chunk[take-1].Timestamp, - SampleCount: uint32(take), - } + key.Fingerprint = &fingerprint + key.FirstTimestamp = chunk[0].Timestamp + key.LastTimestamp = chunk[take-1].Timestamp + key.SampleCount = uint32(take) - value := &dto.SampleValueSeries{} for _, sample := range chunk { + // XXX: Candidate for allocation reduction. value.Value = append(value.Value, &dto.SampleValueSeries_Value{ Timestamp: proto.Int64(sample.Timestamp.Unix()), Value: proto.Float64(float64(sample.Value)), }) } - k := &dto.SampleKey{} - key.Dump(k) - samplesBatch.Put(k, value) + key.Dump(keyDto) + samplesBatch.Put(keyDto, value) } }