Skip to content

Commit 5d642c1

Browse files
committed
fix local fingerprints check; pprof bin debug
1 parent 3360e4f commit 5d642c1

File tree

4 files changed

+44
-16
lines changed

4 files changed

+44
-16
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,4 @@ node_modules
1111
/wasm_parts/wasm_parts.iml
1212
/test/qryn_test_env/clickhouse/_data/
1313
/test/qryn_test_env/grafana/_data/
14+
/test/qryn_test_cluster_env/grafana/_data/

parser/registry/common.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -445,7 +445,7 @@ module.exports.preJoinLabels = (token, query, dist) => {
445445
dist = dist || ''
446446
const timeSeriesReq = new Sql.Select()
447447
.select('fingerprint', 'labels')
448-
.from([`${DATABASE_NAME()}.time_series${dist}`, 'time_series'])
448+
.from([`${DATABASE_NAME()}.time_series`, 'time_series'])
449449
.where(new Sql.And(
450450
new Sql.In('time_series.fingerprint', 'in', inRightSide),
451451
Sql.Gte(new Sql.Raw('date'), sqlFrom),
2.01 KB
Binary file not shown.

pyroscope/pprof-bin/src/lib.rs

+42-15
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use pprof_pb::querier::v1::FlameGraphDiff;
1515
use pprof_pb::querier::v1::Level;
1616
use pprof_pb::querier::v1::SelectMergeStacktracesResponse;
1717
use prost::Message;
18-
use std::collections::{HashMap, HashSet};
18+
use std::collections::{HashMap, HashSet, VecDeque};
1919
use std::io::Read;
2020
use std::panic;
2121
use std::sync::Arc;
@@ -655,28 +655,33 @@ fn compute_flame_graph_diff(t1: &Tree, t2: &Tree) -> FlameGraphDiff {
655655
res.right_ticks = t2.total()[0];
656656
res.total = res.left_ticks + res.right_ticks;
657657

658-
let mut left_nodes = vec![Arc::new(TreeNodeV2 {
658+
let mut left_nodes: VecDeque<Arc<TreeNodeV2>> = VecDeque::new();
659+
left_nodes.push_back(Arc::new(TreeNodeV2 {
659660
fn_id: 0,
660661
node_id: 0,
661662
slf: vec![0],
662663
total: vec![res.left_ticks],
663-
})];
664+
}));
664665

665-
let mut right_nodes = vec![Arc::new(TreeNodeV2 {
666+
let mut right_nodes: VecDeque<Arc<TreeNodeV2>> = VecDeque::new();
667+
right_nodes.push_back(Arc::new(TreeNodeV2 {
666668
fn_id: 0,
667669
node_id: 0,
668670
slf: vec![0],
669671
total: vec![res.right_ticks],
670-
})];
672+
}));
671673

672674
let mut levels = vec![0];
673-
let mut x_left_offsets = vec![0];
674-
let mut x_right_offsets = vec![0];
675+
let mut x_left_offsets: VecDeque<i64> = VecDeque::new();
676+
x_left_offsets.push_back(0);
677+
let mut x_right_offsets = VecDeque::new();
678+
x_right_offsets.push_back(0);
675679
let mut name_location_cache: HashMap<String, i64> = HashMap::new();
676680

677-
while let (Some(left), Some(right)) = (left_nodes.pop(), right_nodes.pop()) {
678-
let x_left_offset = x_left_offsets.pop().unwrap();
679-
let x_right_offset = x_right_offsets.pop().unwrap();
681+
while let (Some(left), Some(right)) =
682+
(left_nodes.pop_back(), right_nodes.pop_back()) {
683+
let mut x_left_offset = x_left_offsets.pop_back().unwrap().clone();
684+
let mut x_right_offset = x_right_offsets.pop_back().unwrap().clone();
680685
let level = levels.pop().unwrap();
681686

682687
let name = if left.fn_id == 0 {
@@ -694,6 +699,13 @@ fn compute_flame_graph_diff(t1: &Tree, t2: &Tree) -> FlameGraphDiff {
694699
res.levels.push(Level::default());
695700
}
696701

702+
if res.max_self < left.slf[0] {
703+
res.max_self = left.slf[0];
704+
}
705+
if res.max_self < right.slf[0] {
706+
res.max_self = right.slf[0];
707+
}
708+
697709
res.levels[level].values.extend_from_slice(&[
698710
x_left_offset,
699711
left.total[0],
@@ -708,15 +720,30 @@ fn compute_flame_graph_diff(t1: &Tree, t2: &Tree) -> FlameGraphDiff {
708720
let empty_vec = Vec::new();
709721
let children_right = t2.nodes.get(&right.node_id).unwrap_or(&empty_vec);
710722
for (child_left, child_right) in children_left.iter().zip(children_right.iter()) {
711-
left_nodes.push(child_left.clone());
712-
right_nodes.push(child_right.clone());
713-
x_left_offsets.push(x_left_offset + child_left.total[0]);
714-
x_right_offsets.push(x_right_offset + child_right.total[0]);
715-
levels.push(level + 1);
723+
left_nodes.push_front(child_left.clone());
724+
right_nodes.push_front(child_right.clone());
725+
x_left_offsets.push_front(x_left_offset.clone());
726+
x_right_offsets.push_front(x_right_offset.clone());
727+
x_left_offset += child_left.total[0].clone();
728+
x_right_offset += child_right.total[0].clone();
729+
levels.insert(0,level + 1);
716730
}
717731
}
718732
}
719733

734+
for i in 0..res.levels.len() {
735+
let mut j = 0;
736+
let mut prev0 = 0i64;
737+
let mut prev3 = 0i64;
738+
while j < res.levels[i].values.len() {
739+
res.levels[i].values[j] -= prev0;
740+
prev0 += res.levels[i].values[j] + res.levels[i].values[j+1];
741+
res.levels[i].values[j+3] -= prev3;
742+
prev3 += res.levels[i].values[j+3] + res.levels[i].values[j+4];
743+
j += 7;
744+
}
745+
}
746+
720747
res
721748
}
722749

0 commit comments

Comments
 (0)