diff --git a/Cargo.lock b/Cargo.lock index 5a56f6220c2b..573705ad4c48 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1823,7 +1823,7 @@ version = "0.2.0" dependencies = [ "common-error", "pprof", - "protobuf", + "prost", "snafu", "tokio", ] @@ -6603,8 +6603,11 @@ dependencies = [ "nix 0.26.2", "once_cell", "parking_lot 0.12.1", + "prost", + "prost-build", + "prost-derive", "protobuf", - "protobuf-codegen-pure", + "sha2", "smallvec", "symbolic-demangle", "tempfile", @@ -6888,16 +6891,6 @@ dependencies = [ "protobuf", ] -[[package]] -name = "protobuf-codegen-pure" -version = "2.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a29399fc94bcd3eeaa951c715f7bea69409b2445356b00519740bcd6ddd865" -dependencies = [ - "protobuf", - "protobuf-codegen", -] - [[package]] name = "ptr_meta" version = "0.1.4" diff --git a/src/common/pprof/Cargo.toml b/src/common/pprof/Cargo.toml index d5202974e598..0a29893097dc 100644 --- a/src/common/pprof/Cargo.toml +++ b/src/common/pprof/Cargo.toml @@ -8,9 +8,9 @@ license.workspace = true common-error = { path = "../error" } pprof = { version = "0.11.1", features = [ "flamegraph", - "protobuf-codec", + "prost-codec", "protobuf", ] } -protobuf = "2" +prost.workspace = true snafu.workspace = true tokio.workspace = true diff --git a/src/common/pprof/src/lib.rs b/src/common/pprof/src/lib.rs index 62ccdd543faf..b6f1af477e92 100644 --- a/src/common/pprof/src/lib.rs +++ b/src/common/pprof/src/lib.rs @@ -16,7 +16,7 @@ use std::any::Any; use std::time::Duration; use common_error::prelude::{ErrorExt, StatusCode}; -use pprof::protos::Message; +use prost::Message; use snafu::{ResultExt, Snafu}; #[derive(Debug, Snafu)] @@ -32,9 +32,6 @@ pub enum Error { #[snafu(display("Failed to create pprof report, source: {}", source))] ReportPprof { source: pprof::Error }, - - #[snafu(display("Failed to write report, source: {}", source))] - WriteReport { source: protobuf::ProtobufError }, } pub type Result = std::result::Result; @@ -93,12 +90,10 @@ impl Profiling { /// Profiles and returns a generated proto. pub async fn dump_proto(&self) -> Result> { - let mut body: Vec = Vec::new(); - let report = self.report().await?; // Generate google’s pprof format report. let profile = report.pprof().context(ReportPprofSnafu)?; - profile.write_to_vec(&mut body).context(WriteReportSnafu)?; + let body = profile.encode_to_vec(); Ok(body) }