Skip to content

Commit 8f2bb8c

Browse files
feat: Support stacktrace selector for SelectMergeStacktraces requests (#4380)
* Add stack_trace_selector to SelectMergeStacktracesRequest * Implement stacktrace selectors for SelectMergeStacktraces Only implements for the small case * Implement the tree single pass * Use truncation mark instead of sentinel values * Make lint happy * Add tests and fix implementation for tree resolver * Test with max nodes active * Refactor tree matching for readability --------- Co-authored-by: Christian Simon <[email protected]>
1 parent 0c06993 commit 8f2bb8c

File tree

13 files changed

+971
-390
lines changed

13 files changed

+971
-390
lines changed

api/gen/proto/go/querier/v1/querier.pb.go

Lines changed: 297 additions & 280 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/gen/proto/go/querier/v1/querier_vtproto.pb.go

Lines changed: 92 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/gen/proto/go/query/v1/query.pb.go

Lines changed: 102 additions & 85 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/gen/proto/go/query/v1/query_vtproto.pb.go

Lines changed: 94 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/openapiv2/gen/phlare.swagger.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2108,6 +2108,10 @@
21082108
"format": {
21092109
"$ref": "#/definitions/v1ProfileFormat",
21102110
"description": "Profile format specifies the format of profile to be returned.\nIf not specified, the profile will be returned in flame graph format."
2111+
},
2112+
"stackTraceSelector": {
2113+
"$ref": "#/definitions/v1StackTraceSelector",
2114+
"description": "Select stack traces that match the provided selector."
21112115
}
21122116
}
21132117
},
@@ -2432,6 +2436,9 @@
24322436
"items": {
24332437
"type": "string"
24342438
}
2439+
},
2440+
"stackTraceSelector": {
2441+
"$ref": "#/definitions/v1StackTraceSelector"
24352442
}
24362443
}
24372444
},

api/querier/v1/querier.proto

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ message SelectMergeStacktracesRequest {
7171
// Profile format specifies the format of profile to be returned.
7272
// If not specified, the profile will be returned in flame graph format.
7373
ProfileFormat format = 6;
74+
// Select stack traces that match the provided selector.
75+
optional types.v1.StackTraceSelector stack_trace_selector = 7;
7476
}
7577

7678
enum ProfileFormat {

api/query/v1/query.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ message TimeSeriesReport {
171171
message TreeQuery {
172172
int64 max_nodes = 1;
173173
repeated string span_selector = 2;
174+
optional types.v1.StackTraceSelector stack_trace_selector = 3;
174175
}
175176

176177
message TreeReport {

pkg/frontend/readpath/queryfrontend/query_select_merge_stacktraces.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,10 @@ func (q *QueryFrontend) selectMergeStacktracesTree(
6464
LabelSelector: labelSelector,
6565
Query: []*queryv1.Query{{
6666
QueryType: queryv1.QueryType_QUERY_TREE,
67-
Tree: &queryv1.TreeQuery{MaxNodes: maxNodes},
67+
Tree: &queryv1.TreeQuery{
68+
MaxNodes: maxNodes,
69+
StackTraceSelector: c.Msg.StackTraceSelector,
70+
},
6871
}},
6972
})
7073
if err != nil {

pkg/phlaredb/symdb/resolver.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ func (r *Resolver) Tree() (*model.Tree, error) {
242242
var lock sync.Mutex
243243
tree := new(model.Tree)
244244
err := r.withSymbols(ctx, func(symbols *Symbols, appender *SampleAppender) error {
245-
resolved, err := symbols.Tree(ctx, appender, r.maxNodes)
245+
resolved, err := symbols.Tree(ctx, appender, r.maxNodes, SelectStackTraces(symbols, r.sts))
246246
if err != nil {
247247
return err
248248
}
@@ -336,6 +336,7 @@ func (r *Symbols) Tree(
336336
ctx context.Context,
337337
appender *SampleAppender,
338338
maxNodes int64,
339+
selection *SelectedStackTraces,
339340
) (*model.Tree, error) {
340-
return buildTree(ctx, r, appender, maxNodes)
341+
return buildTree(ctx, r, appender, maxNodes, selection)
341342
}

0 commit comments

Comments
 (0)