From 25feb7536520526f90f340e5f6ea6ff69b3201ad Mon Sep 17 00:00:00 2001 From: Ganesh Vernekar Date: Tue, 25 Jun 2019 11:15:42 +0530 Subject: [PATCH 1/2] Add BenchmarkChunkQueryableFromTar Signed-off-by: Ganesh Vernekar --- pkg/querier/querier_benchmark_test.go | 59 +++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/pkg/querier/querier_benchmark_test.go b/pkg/querier/querier_benchmark_test.go index 15f4cab45fe..0081dff2fbd 100644 --- a/pkg/querier/querier_benchmark_test.go +++ b/pkg/querier/querier_benchmark_test.go @@ -1,10 +1,18 @@ package querier import ( + "context" "fmt" + "math" + "os" "testing" + "time" + "github.com/cortexproject/cortex/pkg/querier/batch" + "github.com/cortexproject/cortex/pkg/util" "github.com/prometheus/prometheus/promql" + "github.com/stretchr/testify/require" + "github.com/weaveworks/common/user" ) var result *promql.Result @@ -28,3 +36,54 @@ func BenchmarkChunkQueryable(b *testing.B) { } } } + +func BenchmarkChunkQueryableFromTar(b *testing.B) { + chunksFilename := os.Getenv("CHUNKS") + if len(chunksFilename) == 0 { + return + } + + query := os.Getenv("QUERY") + if len(query) == 0 { + return + } + + userID := os.Getenv("USERID") + if len(query) == 0 { + return + } + + from, err := parseTime(os.Getenv("FROM")) + require.NoError(b, err) + + through, err := parseTime(os.Getenv("THROUGH")) + require.NoError(b, err) + + step, err := parseDuration(os.Getenv("STEP")) + require.NoError(b, err) + + chunks, err := loadChunks(userID, chunksFilename) + require.NoError(b, err) + + store := mockChunkStore{chunks} + + b.Run(fmt.Sprintf("file=\"%s\",query=%s,from=%d,to=%d,step=%f", chunksFilename, query, from.Unix(), through.Unix(), step.Seconds()), func(b *testing.B) { + b.ResetTimer() + b.ReportAllocs() + + queryable := newChunkStoreQueryable(store, batch.NewChunkMergeIterator) + engine := promql.NewEngine(promql.EngineOpts{ + Logger: util.Logger, + MaxConcurrent: 1, + MaxSamples: math.MaxInt32, + Timeout: 10 * time.Minute, + }) + rangeQuery, err := engine.NewRangeQuery(queryable, query, from, through, step) + require.NoError(b, err) + + ctx := user.InjectOrgID(context.Background(), "0") + r := rangeQuery.Exec(ctx) + _, err = r.Matrix() + require.NoError(b, err) + }) +} From e0c8232f8d30062606fccb7d293b01424c00f75d Mon Sep 17 00:00:00 2001 From: Ganesh Vernekar Date: Wed, 26 Jun 2019 18:17:22 +0530 Subject: [PATCH 2/2] Fix review comments Signed-off-by: Ganesh Vernekar --- pkg/querier/chunk_tar_test.go | 49 +++++++++++++---------- pkg/querier/querier_benchmark_test.go | 57 ++------------------------- 2 files changed, 31 insertions(+), 75 deletions(-) diff --git a/pkg/querier/chunk_tar_test.go b/pkg/querier/chunk_tar_test.go index 31a2fbd0b7f..fab91013af5 100644 --- a/pkg/querier/chunk_tar_test.go +++ b/pkg/querier/chunk_tar_test.go @@ -20,41 +20,43 @@ import ( "github.com/weaveworks/common/user" ) -func TestChunkTar(t *testing.T) { - chunksFilename := os.Getenv("CHUNKS") - if len(chunksFilename) == 0 { - return - } - - query := os.Getenv("QUERY") - if len(query) == 0 { - return +func getTarDataFromEnv(t testing.TB) (query string, from, through time.Time, step time.Duration, store ChunkStore) { + var ( + err error + chunksFilename = os.Getenv("CHUNKS") + userID = os.Getenv("USERID") + ) + query = os.Getenv("QUERY") + + if len(chunksFilename) == 0 || len(userID) == 0 || len(query) == 0 { + return query, from, through, step, store } - userID := os.Getenv("USERID") - if len(query) == 0 { - return - } - - from, err := parseTime(os.Getenv("FROM")) + chunks, err := loadChunks(userID, chunksFilename) require.NoError(t, err) - through, err := parseTime(os.Getenv("THROUGH")) + from, err = parseTime(os.Getenv("FROM")) require.NoError(t, err) - step, err := parseDuration(os.Getenv("STEP")) + through, err = parseTime(os.Getenv("THROUGH")) require.NoError(t, err) - chunks, err := loadChunks(userID, chunksFilename) + step, err = parseDuration(os.Getenv("STEP")) require.NoError(t, err) - store := mockChunkStore{chunks} + return query, from, through, step, &mockChunkStore{chunks} +} + +func runRangeQuery(t testing.TB, query string, from, through time.Time, step time.Duration, store ChunkStore) { + if len(query) == 0 || store == nil { + return + } queryable := newChunkStoreQueryable(store, batch.NewChunkMergeIterator) engine := promql.NewEngine(promql.EngineOpts{ Logger: util.Logger, MaxConcurrent: 1, - MaxSamples: 1e6, - Timeout: 1 * time.Minute, + MaxSamples: math.MaxInt32, + Timeout: 10 * time.Minute, }) rangeQuery, err := engine.NewRangeQuery(queryable, query, from, through, step) require.NoError(t, err) @@ -65,6 +67,11 @@ func TestChunkTar(t *testing.T) { require.NoError(t, err) } +func TestChunkTar(t *testing.T) { + query, from, through, step, store := getTarDataFromEnv(t) + runRangeQuery(t, query, from, through, step, store) +} + func parseTime(s string) (time.Time, error) { t, err := strconv.ParseFloat(s, 64) if err != nil { diff --git a/pkg/querier/querier_benchmark_test.go b/pkg/querier/querier_benchmark_test.go index 0081dff2fbd..03767394c31 100644 --- a/pkg/querier/querier_benchmark_test.go +++ b/pkg/querier/querier_benchmark_test.go @@ -1,18 +1,10 @@ package querier import ( - "context" "fmt" - "math" - "os" "testing" - "time" - "github.com/cortexproject/cortex/pkg/querier/batch" - "github.com/cortexproject/cortex/pkg/util" "github.com/prometheus/prometheus/promql" - "github.com/stretchr/testify/require" - "github.com/weaveworks/common/user" ) var result *promql.Result @@ -38,52 +30,9 @@ func BenchmarkChunkQueryable(b *testing.B) { } func BenchmarkChunkQueryableFromTar(b *testing.B) { - chunksFilename := os.Getenv("CHUNKS") - if len(chunksFilename) == 0 { - return - } - - query := os.Getenv("QUERY") - if len(query) == 0 { - return - } - - userID := os.Getenv("USERID") - if len(query) == 0 { - return - } - - from, err := parseTime(os.Getenv("FROM")) - require.NoError(b, err) - - through, err := parseTime(os.Getenv("THROUGH")) - require.NoError(b, err) - - step, err := parseDuration(os.Getenv("STEP")) - require.NoError(b, err) - - chunks, err := loadChunks(userID, chunksFilename) - require.NoError(b, err) - - store := mockChunkStore{chunks} - - b.Run(fmt.Sprintf("file=\"%s\",query=%s,from=%d,to=%d,step=%f", chunksFilename, query, from.Unix(), through.Unix(), step.Seconds()), func(b *testing.B) { + query, from, through, step, store := getTarDataFromEnv(b) + b.Run(fmt.Sprintf("query=%s,from=%d,to=%d,step=%f", query, from.Unix(), through.Unix(), step.Seconds()), func(b *testing.B) { b.ResetTimer() - b.ReportAllocs() - - queryable := newChunkStoreQueryable(store, batch.NewChunkMergeIterator) - engine := promql.NewEngine(promql.EngineOpts{ - Logger: util.Logger, - MaxConcurrent: 1, - MaxSamples: math.MaxInt32, - Timeout: 10 * time.Minute, - }) - rangeQuery, err := engine.NewRangeQuery(queryable, query, from, through, step) - require.NoError(b, err) - - ctx := user.InjectOrgID(context.Background(), "0") - r := rangeQuery.Exec(ctx) - _, err = r.Matrix() - require.NoError(b, err) + runRangeQuery(b, query, from, through, step, store) }) }