From 8096d11e4e8157fc38660e193b97b912deec04f6 Mon Sep 17 00:00:00 2001 From: Goutham Veeramachaneni Date: Fri, 5 May 2017 19:52:11 +0530 Subject: [PATCH] Add bounds check to headBlockAppender Signed-off-by: Goutham Veeramachaneni --- head.go | 4 ++++ head_test.go | 14 +++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/head.go b/head.go index b350af799..6b8adebf6 100644 --- a/head.go +++ b/head.go @@ -296,6 +296,10 @@ type refdSample struct { } func (a *headAppender) Add(lset labels.Labels, t int64, v float64) (uint64, error) { + if !a.inBounds(t) { + return 0, ErrOutOfBounds + } + hash := lset.Hash() if ms := a.get(hash, lset); ms != nil { diff --git a/head_test.go b/head_test.go index 540081ace..32960ffcb 100644 --- a/head_test.go +++ b/head_test.go @@ -168,6 +168,8 @@ func TestHeadBlock_e2e(t *testing.T) { numDatapoints := 1000 numRanges := 1000 timeInterval := int64(3) + maxTime := int64(2 * 1000) + minTime := int64(200) // Create 8 series with 1000 data-points of different ranges and run queries. lbls := [][]labels.Label{ { @@ -220,7 +222,7 @@ func TestHeadBlock_e2e(t *testing.T) { tmpdir, _ := ioutil.TempDir("", "test") defer os.RemoveAll(tmpdir) - hb, err := createHeadBlock(tmpdir+"/hb", 0, nil, 0, 1000) + hb, err := createHeadBlock(tmpdir+"/hb", 0, nil, minTime, maxTime) require.NoError(t, err) app := hb.Appender() @@ -231,10 +233,16 @@ func TestHeadBlock_e2e(t *testing.T) { ts := rand.Int63n(300) for i := 0; i < numDatapoints; i++ { v := rand.Float64() - series = append(series, sample{ts, v}) + if ts >= minTime && ts <= maxTime { + series = append(series, sample{ts, v}) + } _, err := app.Add(ls, ts, v) - require.NoError(t, err) + if ts >= minTime && ts <= maxTime { + require.NoError(t, err) + } else { + require.Error(t, ErrOutOfBounds, err) + } ts += rand.Int63n(timeInterval) + 1 }