@@ -108,7 +108,8 @@ func (q *QueryFrontend) Query(
108
108
if shouldSymbolize && originalQuery .QueryType == queryv1 .QueryType_QUERY_TREE {
109
109
modifiedQueries [i ].QueryType = queryv1 .QueryType_QUERY_PPROF
110
110
modifiedQueries [i ].Pprof = & queryv1.PprofQuery {
111
- MaxNodes : 0 ,
111
+ MaxNodes : 0 ,
112
+ OutputMode : queryv1 .PprofOutputMode_PPROF_BYTES ,
112
113
}
113
114
modifiedQueries [i ].Tree = nil
114
115
}
@@ -239,12 +240,17 @@ func (q *QueryFrontend) processAndSymbolizeProfiles(
239
240
}
240
241
241
242
var prof googlev1.Profile
242
- if err := pprof .Unmarshal (r .Pprof .Pprof , & prof ); err != nil {
243
- return fmt .Errorf ("failed to unmarshal profile: %w" , err )
244
- }
245
-
246
- if err := q .symbolizer .SymbolizePprof (ctx , & prof ); err != nil {
247
- return fmt .Errorf ("failed to symbolize profile: %w" , err )
243
+ if r .Pprof .TypedPprof != nil {
244
+ if err := q .symbolizer .SymbolizePprof (ctx , r .Pprof .TypedPprof ); err != nil {
245
+ return fmt .Errorf ("failed to symbolize profile: %w" , err )
246
+ }
247
+ } else {
248
+ if err := pprof .Unmarshal (r .Pprof .Pprof , & prof ); err != nil {
249
+ return fmt .Errorf ("failed to unmarshal profile: %w" , err )
250
+ }
251
+ if err := q .symbolizer .SymbolizePprof (ctx , & prof ); err != nil {
252
+ return fmt .Errorf ("failed to symbolize profile: %w" , err )
253
+ }
248
254
}
249
255
250
256
// Convert back to tree if originally a tree
@@ -256,7 +262,7 @@ func (q *QueryFrontend) processAndSymbolizeProfiles(
256
262
r .Tree = & queryv1.TreeReport {Tree : treeBytes }
257
263
r .ReportType = queryv1 .ReportType_REPORT_TREE
258
264
r .Pprof = nil
259
- } else {
265
+ } else if len ( prof . Sample ) > 0 {
260
266
symbolizedBytes , err := pprof .Marshal (& prof , true )
261
267
if err != nil {
262
268
return fmt .Errorf ("failed to marshal symbolized profile: %w" , err )
0 commit comments