Pyroscope: Fix backend panic when querying out of bounds (#76053)

This commit is contained in:
Andrej Ocenas
2023-10-06 15:03:20 +02:00
committed by GitHub
parent 41bcb5e07f
commit 1cbae72a9e
3 changed files with 52 additions and 13 deletions
@@ -51,10 +51,21 @@ func Test_PyroscopeClient(t *testing.T) {
}
require.Equal(t, series, resp)
})
t.Run("GetProfile with empty response", func(t *testing.T) {
connectClient.SendEmptyProfileResponse = true
maxNodes := int64(-1)
resp, err := client.GetProfile(context.Background(), "memory:alloc_objects:count:space:bytes", "{}", 0, 100, &maxNodes)
require.Nil(t, err)
// Mainly ensuring this does not panic like before
require.Nil(t, resp)
connectClient.SendEmptyProfileResponse = false
})
}
type FakePyroscopeConnectClient struct {
Req any
Req any
SendEmptyProfileResponse bool
}
func (f *FakePyroscopeConnectClient) ProfileTypes(ctx context.Context, c *connect.Request[querierv1.ProfileTypesRequest]) (*connect.Response[querierv1.ProfileTypesResponse], error) {
@@ -75,6 +86,9 @@ func (f *FakePyroscopeConnectClient) Series(ctx context.Context, c *connect.Requ
func (f *FakePyroscopeConnectClient) SelectMergeStacktraces(ctx context.Context, c *connect.Request[querierv1.SelectMergeStacktracesRequest]) (*connect.Response[querierv1.SelectMergeStacktracesResponse], error) {
f.Req = c
if f.SendEmptyProfileResponse {
return &connect.Response[querierv1.SelectMergeStacktracesResponse]{Msg: &querierv1.SelectMergeStacktracesResponse{}}, nil
}
return &connect.Response[querierv1.SelectMergeStacktracesResponse]{
Msg: &querierv1.SelectMergeStacktracesResponse{
Flamegraph: &querierv1.FlameGraph{