mirror of
https://github.com/prometheus/prometheus.git
synced 2024-12-25 05:34:05 -08:00
[TESTS] Remote-Write: Fix BenchmarkStartup
It was crashing due to uninitialized metrics, and not terminating due to incorrectly reading segment names. We need to export `SetMetrics` to avoid the first problem. Signed-off-by: Bryan Boreham <bjboreham@gmail.com>
This commit is contained in:
parent
789c9b1a5e
commit
0ef0b75a4f
|
@ -20,6 +20,7 @@ import (
|
|||
"math"
|
||||
"math/rand"
|
||||
"os"
|
||||
"path"
|
||||
"runtime/pprof"
|
||||
"sort"
|
||||
"strconv"
|
||||
|
@ -48,6 +49,7 @@ import (
|
|||
"github.com/prometheus/prometheus/scrape"
|
||||
"github.com/prometheus/prometheus/tsdb/chunks"
|
||||
"github.com/prometheus/prometheus/tsdb/record"
|
||||
"github.com/prometheus/prometheus/tsdb/wlog"
|
||||
"github.com/prometheus/prometheus/util/runutil"
|
||||
"github.com/prometheus/prometheus/util/testutil"
|
||||
)
|
||||
|
@ -1407,12 +1409,12 @@ func BenchmarkStartup(b *testing.B) {
|
|||
|
||||
// Find the second largest segment; we will replay up to this.
|
||||
// (Second largest as WALWatcher will start tailing the largest).
|
||||
dirents, err := os.ReadDir(dir)
|
||||
dirents, err := os.ReadDir(path.Join(dir, "wal"))
|
||||
require.NoError(b, err)
|
||||
|
||||
var segments []int
|
||||
for _, dirent := range dirents {
|
||||
if i, err := strconv.Atoi(dirent.Name()); err != nil {
|
||||
if i, err := strconv.Atoi(dirent.Name()); err == nil {
|
||||
segments = append(segments, i)
|
||||
}
|
||||
}
|
||||
|
@ -1424,13 +1426,15 @@ func BenchmarkStartup(b *testing.B) {
|
|||
mcfg := config.DefaultMetadataConfig
|
||||
for n := 0; n < b.N; n++ {
|
||||
metrics := newQueueManagerMetrics(nil, "", "")
|
||||
watcherMetrics := wlog.NewWatcherMetrics(nil)
|
||||
c := NewTestBlockedWriteClient()
|
||||
// todo: test with new proto type(s)
|
||||
m := NewQueueManager(metrics, nil, nil, logger, dir,
|
||||
m := NewQueueManager(metrics, watcherMetrics, nil, logger, dir,
|
||||
newEWMARate(ewmaWeight, shardUpdateDuration),
|
||||
cfg, mcfg, labels.EmptyLabels(), nil, c, 1*time.Minute, newPool(), newHighestTimestampMetric(), nil, false, false, config.RemoteWriteProtoMsgV1)
|
||||
m.watcher.SetStartTime(timestamp.Time(math.MaxInt64))
|
||||
m.watcher.MaxSegment = segments[len(segments)-2]
|
||||
m.watcher.SetMetrics()
|
||||
err := m.watcher.Run()
|
||||
require.NoError(b, err)
|
||||
}
|
||||
|
|
|
@ -206,7 +206,7 @@ func (w *Watcher) Notify() {
|
|||
}
|
||||
}
|
||||
|
||||
func (w *Watcher) setMetrics() {
|
||||
func (w *Watcher) SetMetrics() {
|
||||
// Setup the WAL Watchers metrics. We do this here rather than in the
|
||||
// constructor because of the ordering of creating Queue Managers's,
|
||||
// stopping them, and then starting new ones in storage/remote/storage.go ApplyConfig.
|
||||
|
@ -221,7 +221,7 @@ func (w *Watcher) setMetrics() {
|
|||
|
||||
// Start the Watcher.
|
||||
func (w *Watcher) Start() {
|
||||
w.setMetrics()
|
||||
w.SetMetrics()
|
||||
w.logger.Info("Starting WAL watcher", "queue", w.name)
|
||||
|
||||
go w.loop()
|
||||
|
|
|
@ -234,7 +234,7 @@ func TestTailSamples(t *testing.T) {
|
|||
watcher.SetStartTime(now)
|
||||
|
||||
// Set the Watcher's metrics so they're not nil pointers.
|
||||
watcher.setMetrics()
|
||||
watcher.SetMetrics()
|
||||
for i := first; i <= last; i++ {
|
||||
segment, err := OpenReadSegment(SegmentName(watcher.walDir, i))
|
||||
require.NoError(t, err)
|
||||
|
@ -548,7 +548,7 @@ func TestReadCheckpointMultipleSegments(t *testing.T) {
|
|||
watcher.MaxSegment = -1
|
||||
|
||||
// Set the Watcher's metrics so they're not nil pointers.
|
||||
watcher.setMetrics()
|
||||
watcher.SetMetrics()
|
||||
|
||||
lastCheckpoint, _, err := LastCheckpoint(watcher.walDir)
|
||||
require.NoError(t, err)
|
||||
|
@ -699,7 +699,7 @@ func TestRun_StartupTime(t *testing.T) {
|
|||
watcher := NewWatcher(wMetrics, nil, nil, "", wt, dir, false, false, false)
|
||||
watcher.MaxSegment = segments
|
||||
|
||||
watcher.setMetrics()
|
||||
watcher.SetMetrics()
|
||||
startTime := time.Now()
|
||||
|
||||
err = watcher.Run()
|
||||
|
@ -768,7 +768,7 @@ func TestRun_AvoidNotifyWhenBehind(t *testing.T) {
|
|||
// Set up the watcher and run it in the background.
|
||||
wt := newWriteToMock(time.Millisecond)
|
||||
watcher := NewWatcher(wMetrics, nil, nil, "", wt, dir, false, false, false)
|
||||
watcher.setMetrics()
|
||||
watcher.SetMetrics()
|
||||
watcher.MaxSegment = segmentsToRead
|
||||
|
||||
var g errgroup.Group
|
||||
|
|
Loading…
Reference in a new issue