Skip to content

Instantly share code, notes, and snippets.

@metalmatze
Created March 12, 2021 16:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save metalmatze/46b9cc0aa674029c9cc5cffc61e2e3d4 to your computer and use it in GitHub Desktop.
Save metalmatze/46b9cc0aa674029c9cc5cffc61e2e3d4 to your computer and use it in GitHub Desktop.
Benchmarking the Thanos Receiver Handler for a memory leak
// Trying to reproduce https://github.com/thanos-io/thanos/issues/3726
// Add this somewhere (at the end) in the pkg/receive/handler_test.go
// Run go test -bench=BenchmarkHandler ./pkg/receive
func BenchmarkHandler(b *testing.B) {
wreq1 := &prompb.WriteRequest{
Timeseries: []prompb.TimeSeries{
{
Labels: []labelpb.ZLabel{{Name: "foo", Value: "bar"}},
Samples: []prompb.Sample{
{Value: 1, Timestamp: 1},
{Value: 2, Timestamp: 2},
{Value: 3, Timestamp: 3},
},
},
},
}
handlers, _ := newHandlerHashring(
[]*fakeAppendable{
{appender: newFakeAppender(nil, nil, nil, nil)},
{appender: newFakeAppender(nil, nil, nil, nil)},
{appender: newFakeAppender(nil, nil, nil, nil)},
{appender: newFakeAppender(nil, nil, nil, nil)},
{appender: newFakeAppender(nil, nil, nil, nil)},
{appender: newFakeAppender(nil, nil, nil, nil)},
},
3,
)
handler := handlers[0]
server := httptest.NewServer(handler)
defer server.Close()
client := &http.Client{}
b.ReportAllocs()
b.ResetTimer()
buf, err := proto.Marshal(wreq1)
if err != nil {
b.Fatal(err)
}
for i := 0; i < b.N; i++ {
req, err := http.NewRequest("POST", server.URL+"/api/v1/receive", bytes.NewBuffer(snappy.Encode(nil, buf)))
if err != nil {
b.Fatal(err)
}
req.Header.Add(handler.options.TenantHeader, "test")
req.Header.Add("X-Request-ID", fmt.Sprintf("%d", i))
resp, err := client.Do(req)
if err != nil {
b.Fatal(err)
}
defer resp.Body.Close()
if resp.StatusCode/100 != 2 {
body, _ := ioutil.ReadAll(resp.Body)
b.Log(string(body))
b.Fatal("no 200 OK", resp.Status)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment