Fix last timestamp initialization

This initializes the chunkDesc's last timestamp to the minimum
value so initial samples with a timestamp of 0 (e.g. in tests)
are not accidentally dropped.
This commit is contained in:
Fabian Reinartz 2017-01-04 14:06:40 +01:00
parent 40cf215fba
commit 3f72d5d027
2 changed files with 12 additions and 9 deletions

10
db.go
View file

@ -538,17 +538,17 @@ type chunkDesc struct {
chunk chunks.Chunk
// Caching fields.
firsTimestamp int64
lastTimestamp int64
lastValue float64
numSamples int
firstTimestamp int64
lastTimestamp int64
lastValue float64
numSamples int
app chunks.Appender // Current appender for the chunks.
}
func (cd *chunkDesc) append(ts int64, v float64) {
if cd.numSamples == 0 {
cd.firsTimestamp = ts
cd.firstTimestamp = ts
}
cd.app.Append(ts, v)

11
head.go
View file

@ -2,6 +2,7 @@ package tsdb
import (
"errors"
"math"
"sort"
"sync"
@ -122,7 +123,7 @@ func (h *HeadBlock) Series(ref uint32) (labels.Labels, []ChunkMeta, error) {
cd := h.descs[ref]
meta := ChunkMeta{
MinTime: cd.firsTimestamp,
MinTime: cd.firstTimestamp,
MaxTime: cd.lastTimestamp,
Ref: ref,
}
@ -155,9 +156,11 @@ func (h *HeadBlock) create(hash uint64, lset labels.Labels) *chunkDesc {
var err error
cd := &chunkDesc{
lset: lset,
chunk: chunks.NewXORChunk(),
lset: lset,
chunk: chunks.NewXORChunk(),
lastTimestamp: math.MinInt64,
}
cd.app, err = cd.chunk.Appender()
if err != nil {
// Getting an Appender for a new chunk must not panic.
@ -276,7 +279,7 @@ func (h *HeadBlock) persist(indexw IndexWriter, chunkw SeriesWriter) error {
for ref, cd := range h.descs {
if err := chunkw.WriteSeries(uint32(ref), cd.lset, []ChunkMeta{
{
MinTime: cd.firsTimestamp,
MinTime: cd.firstTimestamp,
MaxTime: cd.lastTimestamp,
Chunk: cd.chunk,
},