|
|
|
|
@ -813,6 +813,7 @@ func TestHeadDeleteSimple(t *testing.T) { |
|
|
|
|
} |
|
|
|
|
smplsAll := buildSmpls([]int64{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}) |
|
|
|
|
lblDefault := labels.Label{Name: "a", Value: "b"} |
|
|
|
|
lblsDefault := labels.FromStrings("a", "b") |
|
|
|
|
|
|
|
|
|
cases := []struct { |
|
|
|
|
dranges tombstones.Intervals |
|
|
|
|
@ -860,7 +861,7 @@ func TestHeadDeleteSimple(t *testing.T) { |
|
|
|
|
|
|
|
|
|
app := head.Appender(context.Background()) |
|
|
|
|
for _, smpl := range smplsAll { |
|
|
|
|
_, err := app.Append(0, labels.Labels{lblDefault}, smpl.t, smpl.v) |
|
|
|
|
_, err := app.Append(0, lblsDefault, smpl.t, smpl.v) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
@ -874,7 +875,7 @@ func TestHeadDeleteSimple(t *testing.T) { |
|
|
|
|
// Add more samples.
|
|
|
|
|
app = head.Appender(context.Background()) |
|
|
|
|
for _, smpl := range c.addSamples { |
|
|
|
|
_, err := app.Append(0, labels.Labels{lblDefault}, smpl.t, smpl.v) |
|
|
|
|
_, err := app.Append(0, lblsDefault, smpl.t, smpl.v) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
@ -898,7 +899,7 @@ func TestHeadDeleteSimple(t *testing.T) { |
|
|
|
|
actSeriesSet := q.Select(false, nil, labels.MustNewMatcher(labels.MatchEqual, lblDefault.Name, lblDefault.Value)) |
|
|
|
|
require.NoError(t, q.Close()) |
|
|
|
|
expSeriesSet := newMockSeriesSet([]storage.Series{ |
|
|
|
|
storage.NewListSeries(labels.Labels{lblDefault}, func() []tsdbutil.Sample { |
|
|
|
|
storage.NewListSeries(lblsDefault, func() []tsdbutil.Sample { |
|
|
|
|
ss := make([]tsdbutil.Sample, 0, len(c.smplsExp)) |
|
|
|
|
for _, s := range c.smplsExp { |
|
|
|
|
ss = append(ss, s) |
|
|
|
|
@ -946,7 +947,7 @@ func TestDeleteUntilCurMax(t *testing.T) { |
|
|
|
|
smpls := make([]float64, numSamples) |
|
|
|
|
for i := int64(0); i < numSamples; i++ { |
|
|
|
|
smpls[i] = rand.Float64() |
|
|
|
|
_, err := app.Append(0, labels.Labels{{Name: "a", Value: "b"}}, i, smpls[i]) |
|
|
|
|
_, err := app.Append(0, labels.FromStrings("a", "b"), i, smpls[i]) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
} |
|
|
|
|
require.NoError(t, app.Commit()) |
|
|
|
|
@ -967,7 +968,7 @@ func TestDeleteUntilCurMax(t *testing.T) { |
|
|
|
|
|
|
|
|
|
// Add again and test for presence.
|
|
|
|
|
app = hb.Appender(context.Background()) |
|
|
|
|
_, err = app.Append(0, labels.Labels{{Name: "a", Value: "b"}}, 11, 1) |
|
|
|
|
_, err = app.Append(0, labels.FromStrings("a", "b"), 11, 1) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
require.NoError(t, app.Commit()) |
|
|
|
|
q, err = NewBlockQuerier(hb, 0, 100000) |
|
|
|
|
@ -993,7 +994,7 @@ func TestDeletedSamplesAndSeriesStillInWALAfterCheckpoint(t *testing.T) { |
|
|
|
|
|
|
|
|
|
for i := 0; i < numSamples; i++ { |
|
|
|
|
app := hb.Appender(context.Background()) |
|
|
|
|
_, err := app.Append(0, labels.Labels{{Name: "a", Value: "b"}}, int64(i), 0) |
|
|
|
|
_, err := app.Append(0, labels.FromStrings("a", "b"), int64(i), 0) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
require.NoError(t, app.Commit()) |
|
|
|
|
} |
|
|
|
|
@ -1392,9 +1393,7 @@ func TestGCChunkAccess(t *testing.T) { |
|
|
|
|
) |
|
|
|
|
require.NoError(t, idx.Series(1, &lset, &chunks)) |
|
|
|
|
|
|
|
|
|
require.Equal(t, labels.Labels{{ |
|
|
|
|
Name: "a", Value: "1", |
|
|
|
|
}}, lset) |
|
|
|
|
require.Equal(t, labels.FromStrings("a", "1"), lset) |
|
|
|
|
require.Equal(t, 2, len(chunks)) |
|
|
|
|
|
|
|
|
|
cr, err := h.chunksRange(0, 1500, nil) |
|
|
|
|
@ -1446,9 +1445,7 @@ func TestGCSeriesAccess(t *testing.T) { |
|
|
|
|
) |
|
|
|
|
require.NoError(t, idx.Series(1, &lset, &chunks)) |
|
|
|
|
|
|
|
|
|
require.Equal(t, labels.Labels{{ |
|
|
|
|
Name: "a", Value: "1", |
|
|
|
|
}}, lset) |
|
|
|
|
require.Equal(t, labels.FromStrings("a", "1"), lset) |
|
|
|
|
require.Equal(t, 2, len(chunks)) |
|
|
|
|
|
|
|
|
|
cr, err := h.chunksRange(0, 2000, nil) |
|
|
|
|
@ -1724,7 +1721,7 @@ func TestNewWalSegmentOnTruncate(t *testing.T) { |
|
|
|
|
}() |
|
|
|
|
add := func(ts int64) { |
|
|
|
|
app := h.Appender(context.Background()) |
|
|
|
|
_, err := app.Append(0, labels.Labels{{Name: "a", Value: "b"}}, ts, 0) |
|
|
|
|
_, err := app.Append(0, labels.FromStrings("a", "b"), ts, 0) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
require.NoError(t, app.Commit()) |
|
|
|
|
} |
|
|
|
|
@ -1760,9 +1757,9 @@ func TestAddDuplicateLabelName(t *testing.T) { |
|
|
|
|
require.Equal(t, fmt.Sprintf(`label name "%s" is not unique: invalid sample`, labelName), err.Error()) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
add(labels.Labels{{Name: "a", Value: "c"}, {Name: "a", Value: "b"}}, "a") |
|
|
|
|
add(labels.Labels{{Name: "a", Value: "c"}, {Name: "a", Value: "c"}}, "a") |
|
|
|
|
add(labels.Labels{{Name: "__name__", Value: "up"}, {Name: "job", Value: "prometheus"}, {Name: "le", Value: "500"}, {Name: "le", Value: "400"}, {Name: "unit", Value: "s"}}, "le") |
|
|
|
|
add(labels.FromStrings("a", "c", "a", "b"), "a") |
|
|
|
|
add(labels.FromStrings("a", "c", "a", "c"), "a") |
|
|
|
|
add(labels.FromStrings("__name__", "up", "job", "prometheus", "le", "500", "le", "400", "unit", "s"), "le") |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func TestMemSeriesIsolation(t *testing.T) { |
|
|
|
|
@ -2144,7 +2141,7 @@ func testHeadSeriesChunkRace(t *testing.T) { |
|
|
|
|
s2, err := app.Append(0, labels.FromStrings("foo2", "bar"), 5, 0) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
for ts := int64(6); ts < 11; ts++ { |
|
|
|
|
_, err = app.Append(s2, nil, ts, 0) |
|
|
|
|
_, err = app.Append(s2, labels.EmptyLabels(), ts, 0) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
} |
|
|
|
|
require.NoError(t, app.Commit()) |
|
|
|
|
@ -2191,7 +2188,7 @@ func TestHeadLabelNamesValuesWithMinMaxRange(t *testing.T) { |
|
|
|
|
|
|
|
|
|
app := head.Appender(context.Background()) |
|
|
|
|
for i, name := range expectedLabelNames { |
|
|
|
|
_, err := app.Append(0, labels.Labels{{Name: name, Value: expectedLabelValues[i]}}, seriesTimestamps[i], 0) |
|
|
|
|
_, err := app.Append(0, labels.FromStrings(name, expectedLabelValues[i]), seriesTimestamps[i], 0) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
} |
|
|
|
|
require.NoError(t, app.Commit()) |
|
|
|
|
@ -2234,10 +2231,10 @@ func TestHeadLabelValuesWithMatchers(t *testing.T) { |
|
|
|
|
|
|
|
|
|
app := head.Appender(context.Background()) |
|
|
|
|
for i := 0; i < 100; i++ { |
|
|
|
|
_, err := app.Append(0, labels.Labels{ |
|
|
|
|
{Name: "tens", Value: fmt.Sprintf("value%d", i/10)}, |
|
|
|
|
{Name: "unique", Value: fmt.Sprintf("value%d", i)}, |
|
|
|
|
}, 100, 0) |
|
|
|
|
_, err := app.Append(0, labels.FromStrings( |
|
|
|
|
"tens", fmt.Sprintf("value%d", i/10), |
|
|
|
|
"unique", fmt.Sprintf("value%d", i), |
|
|
|
|
), 100, 0) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
} |
|
|
|
|
require.NoError(t, app.Commit()) |
|
|
|
|
@ -2295,25 +2292,25 @@ func TestHeadLabelNamesWithMatchers(t *testing.T) { |
|
|
|
|
|
|
|
|
|
app := head.Appender(context.Background()) |
|
|
|
|
for i := 0; i < 100; i++ { |
|
|
|
|
_, err := app.Append(0, labels.Labels{ |
|
|
|
|
{Name: "unique", Value: fmt.Sprintf("value%d", i)}, |
|
|
|
|
}, 100, 0) |
|
|
|
|
_, err := app.Append(0, labels.FromStrings( |
|
|
|
|
"unique", fmt.Sprintf("value%d", i), |
|
|
|
|
), 100, 0) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
|
|
if i%10 == 0 { |
|
|
|
|
_, err := app.Append(0, labels.Labels{ |
|
|
|
|
{Name: "tens", Value: fmt.Sprintf("value%d", i/10)}, |
|
|
|
|
{Name: "unique", Value: fmt.Sprintf("value%d", i)}, |
|
|
|
|
}, 100, 0) |
|
|
|
|
_, err := app.Append(0, labels.FromStrings( |
|
|
|
|
"tens", fmt.Sprintf("value%d", i/10), |
|
|
|
|
"unique", fmt.Sprintf("value%d", i), |
|
|
|
|
), 100, 0) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if i%20 == 0 { |
|
|
|
|
_, err := app.Append(0, labels.Labels{ |
|
|
|
|
{Name: "tens", Value: fmt.Sprintf("value%d", i/10)}, |
|
|
|
|
{Name: "twenties", Value: fmt.Sprintf("value%d", i/20)}, |
|
|
|
|
{Name: "unique", Value: fmt.Sprintf("value%d", i)}, |
|
|
|
|
}, 100, 0) |
|
|
|
|
_, err := app.Append(0, labels.FromStrings( |
|
|
|
|
"tens", fmt.Sprintf("value%d", i/10), |
|
|
|
|
"twenties", fmt.Sprintf("value%d", i/20), |
|
|
|
|
"unique", fmt.Sprintf("value%d", i), |
|
|
|
|
), 100, 0) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
@ -2362,28 +2359,28 @@ func TestErrReuseAppender(t *testing.T) { |
|
|
|
|
}() |
|
|
|
|
|
|
|
|
|
app := head.Appender(context.Background()) |
|
|
|
|
_, err := app.Append(0, labels.Labels{{Name: "test", Value: "test"}}, 0, 0) |
|
|
|
|
_, err := app.Append(0, labels.FromStrings("test", "test"), 0, 0) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
require.NoError(t, app.Commit()) |
|
|
|
|
require.Error(t, app.Commit()) |
|
|
|
|
require.Error(t, app.Rollback()) |
|
|
|
|
|
|
|
|
|
app = head.Appender(context.Background()) |
|
|
|
|
_, err = app.Append(0, labels.Labels{{Name: "test", Value: "test"}}, 1, 0) |
|
|
|
|
_, err = app.Append(0, labels.FromStrings("test", "test"), 1, 0) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
require.NoError(t, app.Rollback()) |
|
|
|
|
require.Error(t, app.Rollback()) |
|
|
|
|
require.Error(t, app.Commit()) |
|
|
|
|
|
|
|
|
|
app = head.Appender(context.Background()) |
|
|
|
|
_, err = app.Append(0, labels.Labels{{Name: "test", Value: "test"}}, 2, 0) |
|
|
|
|
_, err = app.Append(0, labels.FromStrings("test", "test"), 2, 0) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
require.NoError(t, app.Commit()) |
|
|
|
|
require.Error(t, app.Rollback()) |
|
|
|
|
require.Error(t, app.Commit()) |
|
|
|
|
|
|
|
|
|
app = head.Appender(context.Background()) |
|
|
|
|
_, err = app.Append(0, labels.Labels{{Name: "test", Value: "test"}}, 3, 0) |
|
|
|
|
_, err = app.Append(0, labels.FromStrings("test", "test"), 3, 0) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
require.NoError(t, app.Rollback()) |
|
|
|
|
require.Error(t, app.Commit()) |
|
|
|
|
@ -2395,11 +2392,11 @@ func TestHeadMintAfterTruncation(t *testing.T) { |
|
|
|
|
head, _ := newTestHead(t, chunkRange, false) |
|
|
|
|
|
|
|
|
|
app := head.Appender(context.Background()) |
|
|
|
|
_, err := app.Append(0, labels.Labels{{Name: "a", Value: "b"}}, 100, 100) |
|
|
|
|
_, err := app.Append(0, labels.FromStrings("a", "b"), 100, 100) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
_, err = app.Append(0, labels.Labels{{Name: "a", Value: "b"}}, 4000, 200) |
|
|
|
|
_, err = app.Append(0, labels.FromStrings("a", "b"), 4000, 200) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
_, err = app.Append(0, labels.Labels{{Name: "a", Value: "b"}}, 8000, 300) |
|
|
|
|
_, err = app.Append(0, labels.FromStrings("a", "b"), 8000, 300) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
require.NoError(t, app.Commit()) |
|
|
|
|
|
|
|
|
|
@ -2433,7 +2430,7 @@ func TestHeadExemplars(t *testing.T) { |
|
|
|
|
// It is perfectly valid to add Exemplars before the current start time -
|
|
|
|
|
// histogram buckets that haven't been update in a while could still be
|
|
|
|
|
// exported exemplars from an hour ago.
|
|
|
|
|
ref, err := app.Append(0, labels.Labels{{Name: "a", Value: "b"}}, 100, 100) |
|
|
|
|
ref, err := app.Append(0, labels.FromStrings("a", "b"), 100, 100) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
_, err = app.AppendExemplar(ref, l, exemplar.Exemplar{ |
|
|
|
|
Labels: l, |
|
|
|
|
@ -2455,13 +2452,11 @@ func BenchmarkHeadLabelValuesWithMatchers(b *testing.B) { |
|
|
|
|
|
|
|
|
|
metricCount := 1000000 |
|
|
|
|
for i := 0; i < metricCount; i++ { |
|
|
|
|
// Note these series are not created in sort order: 'value2' sorts after 'value10'.
|
|
|
|
|
// This makes a big difference to the benchmark timing.
|
|
|
|
|
_, err := app.Append(0, labels.Labels{ |
|
|
|
|
{Name: "a_unique", Value: fmt.Sprintf("value%d", i)}, |
|
|
|
|
{Name: "b_tens", Value: fmt.Sprintf("value%d", i/(metricCount/10))}, |
|
|
|
|
{Name: "c_ninety", Value: fmt.Sprintf("value%d", i/(metricCount/10)/9)}, // "0" for the first 90%, then "1"
|
|
|
|
|
}, 100, 0) |
|
|
|
|
_, err := app.Append(0, labels.FromStrings( |
|
|
|
|
"a_unique", fmt.Sprintf("value%d", i), |
|
|
|
|
"b_tens", fmt.Sprintf("value%d", i/(metricCount/10)), |
|
|
|
|
"c_ninety", fmt.Sprintf("value%d", i/(metricCount/10)/9), // "0" for the first 90%, then "1"
|
|
|
|
|
), 100, 0) |
|
|
|
|
require.NoError(b, err) |
|
|
|
|
} |
|
|
|
|
require.NoError(b, app.Commit()) |
|
|
|
|
@ -2779,7 +2774,7 @@ func TestChunkSnapshot(t *testing.T) { |
|
|
|
|
e := ex{ |
|
|
|
|
seriesLabels: lbls, |
|
|
|
|
e: exemplar.Exemplar{ |
|
|
|
|
Labels: labels.Labels{{Name: "traceID", Value: fmt.Sprintf("%d", rand.Int())}}, |
|
|
|
|
Labels: labels.FromStrings("traceID", fmt.Sprintf("%d", rand.Int())), |
|
|
|
|
Value: rand.Float64(), |
|
|
|
|
Ts: ts, |
|
|
|
|
}, |
|
|
|
|
@ -2851,7 +2846,7 @@ func TestChunkSnapshot(t *testing.T) { |
|
|
|
|
// Add some initial samples with >=1 m-map chunk.
|
|
|
|
|
app := head.Appender(context.Background()) |
|
|
|
|
for i := 1; i <= numSeries; i++ { |
|
|
|
|
lbls := labels.Labels{labels.Label{Name: "foo", Value: fmt.Sprintf("bar%d", i)}} |
|
|
|
|
lbls := labels.FromStrings("foo", fmt.Sprintf("bar%d", i)) |
|
|
|
|
lblStr := lbls.String() |
|
|
|
|
// Should m-map at least 1 chunk.
|
|
|
|
|
for ts := int64(1); ts <= 200; ts++ { |
|
|
|
|
@ -2912,7 +2907,7 @@ func TestChunkSnapshot(t *testing.T) { |
|
|
|
|
// Add more samples.
|
|
|
|
|
app := head.Appender(context.Background()) |
|
|
|
|
for i := 1; i <= numSeries; i++ { |
|
|
|
|
lbls := labels.Labels{labels.Label{Name: "foo", Value: fmt.Sprintf("bar%d", i)}} |
|
|
|
|
lbls := labels.FromStrings("foo", fmt.Sprintf("bar%d", i)) |
|
|
|
|
lblStr := lbls.String() |
|
|
|
|
// Should m-map at least 1 chunk.
|
|
|
|
|
for ts := int64(201); ts <= 400; ts++ { |
|
|
|
|
@ -3009,7 +3004,7 @@ func TestSnapshotError(t *testing.T) { |
|
|
|
|
|
|
|
|
|
// Add a sample.
|
|
|
|
|
app := head.Appender(context.Background()) |
|
|
|
|
lbls := labels.Labels{labels.Label{Name: "foo", Value: "bar"}} |
|
|
|
|
lbls := labels.FromStrings("foo", "bar") |
|
|
|
|
_, err := app.Append(0, lbls, 99, 99) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
require.NoError(t, app.Commit()) |
|
|
|
|
@ -3078,11 +3073,11 @@ func TestChunkSnapshotReplayBug(t *testing.T) { |
|
|
|
|
} |
|
|
|
|
seriesRec := record.RefSeries{ |
|
|
|
|
Ref: ref, |
|
|
|
|
Labels: labels.Labels{ |
|
|
|
|
{Name: "__name__", Value: "request_duration"}, |
|
|
|
|
{Name: "status_code", Value: "200"}, |
|
|
|
|
{Name: "foo", Value: fmt.Sprintf("baz%d", rand.Int())}, |
|
|
|
|
}, |
|
|
|
|
Labels: labels.FromStrings( |
|
|
|
|
"__name__", "request_duration", |
|
|
|
|
"status_code", "200", |
|
|
|
|
"foo", fmt.Sprintf("baz%d", rand.Int()), |
|
|
|
|
), |
|
|
|
|
} |
|
|
|
|
// Add a sample so that the series is not garbage collected.
|
|
|
|
|
samplesRec := record.RefSample{Ref: ref, T: 1000, V: 1000} |
|
|
|
|
@ -3149,7 +3144,7 @@ func TestChunkSnapshotTakenAfterIncompleteSnapshot(t *testing.T) { |
|
|
|
|
|
|
|
|
|
// Add some samples for the snapshot.
|
|
|
|
|
app := head.Appender(context.Background()) |
|
|
|
|
_, err = app.Append(0, labels.Labels{{Name: "foo", Value: "bar"}}, 10, 10) |
|
|
|
|
_, err = app.Append(0, labels.FromStrings("foo", "bar"), 10, 10) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
require.NoError(t, app.Commit()) |
|
|
|
|
|
|
|
|
|
|