diff --git a/core/Cargo.lock b/core/Cargo.lock index 5d499885c637..6797045e4bd3 100644 --- a/core/Cargo.lock +++ b/core/Cargo.lock @@ -2619,6 +2619,33 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" +[[package]] +name = "fastrace" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfd798348670042f0628810b10bc11b767c1f42aafbd3b1ae31f282740c549fe" +dependencies = [ + "fastrace-macro", + "minstant", + "once_cell", + "parking_lot 0.12.3", + "pin-project", + "rand 0.8.5", + "rtrb", +] + +[[package]] +name = "fastrace-macro" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eea27de901dc6b14aa952aeefcc41144da4dc97e4db3eb3593c19f3b80406786" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "fastrand" version = "1.9.0" @@ -4292,33 +4319,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" -[[package]] -name = "minitrace" -version = "0.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "197d538cd69839d49a593c8c72df44291b0ea3296ecc0c85529002c53c8fbc6f" -dependencies = [ - "minitrace-macro", - "minstant", - "once_cell", - "parking_lot 0.12.3", - "pin-project", - "rand 0.8.5", - "rtrb", -] - -[[package]] -name = "minitrace-macro" -version = "0.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14efd4b574325fcb981bce1ac700b9ccf071ec2eb94f7a6a6b583a84f228ba47" -dependencies = [ - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "miniz_oxide" version = "0.7.4" @@ -4797,6 +4797,7 @@ dependencies = [ "dashmap", "dotenvy", "etcd-client", + "fastrace", "flagset", "foundationdb", "futures", @@ -4812,7 +4813,6 @@ dependencies = [ "md-5", "metrics", "mini-moka", - "minitrace", "moka", "mongodb", "monoio", diff --git a/core/Cargo.toml b/core/Cargo.toml index 846a5301ca6e..4117188d8e91 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -83,8 +83,8 @@ layers-metrics = ["dep:metrics"] layers-prometheus = ["dep:prometheus"] # Enable layers prometheus support, with prometheus-client crate layers-prometheus-client = ["dep:prometheus-client"] -# Enable layers minitrace support. -layers-minitrace = ["dep:minitrace"] +# Enable layers fastrace support. +layers-fastrace = ["dep:fastrace"] # Enable layers tracing support. layers-tracing = ["dep:tracing"] # Enable layers oteltrace support. @@ -358,8 +358,8 @@ await-tree = { version = "0.1.1", optional = true } governor = { version = "0.6.0", optional = true, features = ["std"] } # for layers-metrics metrics = { version = "0.23", optional = true } -# for layers-minitrace -minitrace = { version = "0.6", optional = true } +# for layers-fastrace +fastrace = { version = "0.6", optional = true } # for layers-opentelemetry opentelemetry = { version = "0.21.0", optional = true } # for layers-prometheus @@ -377,8 +377,8 @@ getrandom = { version = "0.2", features = ["js"] } [dev-dependencies] criterion = { version = "0.5", features = ["async", "async_tokio"] } dotenvy = "0.15" +fastrace = { version = "0.6", features = ["enable"] } libtest-mimic = "0.6" -minitrace = { version = "0.6", features = ["enable"] } opentelemetry = { version = "0.21", default-features = false, features = [ "trace", ] } diff --git a/core/README.md b/core/README.md index eb31e363a16f..0766bc7b8045 100644 --- a/core/README.md +++ b/core/README.md @@ -115,7 +115,7 @@ OpenDAL supports the following storage [layers](https://docs.rs/opendal/latest/o | [`DtraceLayer`] | [probe] | Support User Statically-Defined Tracing(aka USDT) on Linux | | [`LoggingLayer`] | [log] | Add log for every operations. | | [`MetricsLayer`] | [metrics] | Add metrics for every operations. | -| [`MinitraceLayer`] | [minitrace] | Add minitrace for every operations. | +| [`FastraceLayer`] | [fastrace] | Add fastrace for every operations. | | [`OtelTraceLayer`] | [opentelemetry::trace] | Add opentelemetry::trace for every operations. | | [`PrometheusClientLayer`] | [prometheus_client] | Add prometheus metrics for every operations. | | [`PrometheusLayer`] | [prometheus] | Add prometheus metrics for every operations. | @@ -139,8 +139,8 @@ OpenDAL supports the following storage [layers](https://docs.rs/opendal/latest/o [log]: https://github.com/rust-lang/log [`MetricsLayer`]: https://docs.rs/opendal/latest/opendal/layers/struct.MetricsLayer.html [metrics]: https://github.com/metrics-rs/metrics -[`MinitraceLayer`]: https://docs.rs/opendal/latest/opendal/layers/struct.MinitraceLayer.html -[minitrace]: https://github.com/tikv/minitrace-rust +[`FastraceLayer`]: https://docs.rs/opendal/latest/opendal/layers/struct.FastraceLayer.html +[fastrace]: https://github.com/fastracelabs/fastrace [`OtelTraceLayer`]: https://docs.rs/opendal/latest/opendal/layers/struct.OtelTraceLayer.html [opentelemetry::trace]: https://docs.rs/opentelemetry/latest/opentelemetry/trace/index.html [`PrometheusClientLayer`]: https://docs.rs/opendal/latest/opendal/layers/struct.PrometheusClientLayer.html diff --git a/core/src/layers/minitrace.rs b/core/src/layers/fastrace.rs similarity index 76% rename from core/src/layers/minitrace.rs rename to core/src/layers/fastrace.rs index a06e9890fdb3..5e7119a0e5a8 100644 --- a/core/src/layers/minitrace.rs +++ b/core/src/layers/fastrace.rs @@ -19,8 +19,8 @@ use std::fmt::Debug; use std::future::Future; use std::sync::Arc; +use fastrace::prelude::*; use futures::FutureExt; -use minitrace::prelude::*; use crate::raw::oio::ListOperation; use crate::raw::oio::ReadOperation; @@ -28,7 +28,7 @@ use crate::raw::oio::WriteOperation; use crate::raw::*; use crate::*; -/// Add [minitrace](https://docs.rs/minitrace/) for every operations. +/// Add [fastrace](https://docs.rs/fastrace/) for every operations. /// /// # Examples /// @@ -36,13 +36,13 @@ use crate::*; /// /// ```no_build /// use anyhow::Result; -/// use opendal::layers::MinitraceLayer; +/// use opendal::layers::FastraceLayer; /// use opendal::services; /// use opendal::Operator; /// /// let _ = Operator::new(services::Memory::default()) /// .expect("must init") -/// .layer(MinitraceLayer) +/// .layer(FastraceLayer) /// .finish(); /// ``` /// @@ -53,17 +53,17 @@ use crate::*; /// /// use anyhow::Result; /// use futures::executor::block_on; -/// use minitrace::collector::Config; -/// use minitrace::prelude::*; -/// use opendal::layers::MinitraceLayer; +/// use fastrace::collector::Config; +/// use fastrace::prelude::*; +/// use opendal::layers::FastraceLayer; /// use opendal::services; /// use opendal::Operator; /// /// fn main() -> Result<(), Box> { /// let reporter = -/// minitrace_jaeger::JaegerReporter::new("127.0.0.1:6831".parse().unwrap(), "opendal") +/// fastrace_jaeger::JaegerReporter::new("127.0.0.1:6831".parse().unwrap(), "opendal") /// .unwrap(); -/// minitrace::set_reporter(reporter, Config::default()); +/// fastrace::set_reporter(reporter, Config::default()); /// /// { /// let root = Span::root("op", SpanContext::random()); @@ -73,7 +73,7 @@ use crate::*; /// let _ = dotenvy::dotenv(); /// let op = Operator::new(services::Memory::default()) /// .expect("init operator must succeed") -/// .layer(MinitraceLayer) +/// .layer(FastraceLayer) /// .finish(); /// op.write("test", "0".repeat(16 * 1024 * 1024).into_bytes()) /// .await @@ -85,7 +85,7 @@ use crate::*; /// ); /// } /// -/// minitrace::flush(); +/// fastrace::flush(); /// /// Ok(()) /// } @@ -93,47 +93,47 @@ use crate::*; /// /// # Output /// -/// OpenDAL is using [`minitrace`](https://docs.rs/minitrace/latest/minitrace/) for tracing internally. +/// OpenDAL is using [`fastrace`](https://docs.rs/fastrace/latest/fastrace/) for tracing internally. /// -/// To enable minitrace output, please init one of the reporter that `minitrace` supports. +/// To enable fastrace output, please init one of the reporter that `fastrace` supports. /// /// For example: /// /// ```no_build -/// extern crate minitrace_jaeger; +/// extern crate fastrace_jaeger; /// -/// use minitrace::collector::Config; +/// use fastrace::collector::Config; /// /// let reporter = -/// minitrace_jaeger::JaegerReporter::new("127.0.0.1:6831".parse().unwrap(), "opendal") +/// fastrace_jaeger::JaegerReporter::new("127.0.0.1:6831".parse().unwrap(), "opendal") /// .unwrap(); -/// minitrace::set_reporter(reporter, Config::default()); +/// fastrace::set_reporter(reporter, Config::default()); /// ``` /// -/// For real-world usage, please take a look at [`minitrace-datadog`](https://crates.io/crates/minitrace-datadog) or [`minitrace-jaeger`](https://crates.io/crates/minitrace-jaeger) . -pub struct MinitraceLayer; +/// For real-world usage, please take a look at [`fastrace-datadog`](https://crates.io/crates/fastrace-datadog) or [`fastrace-jaeger`](https://crates.io/crates/fastrace-jaeger) . +pub struct FastraceLayer; -impl Layer for MinitraceLayer { - type LayeredAccess = MinitraceAccessor; +impl Layer for FastraceLayer { + type LayeredAccess = FastraceAccessor; fn layer(&self, inner: A) -> Self::LayeredAccess { - MinitraceAccessor { inner } + FastraceAccessor { inner } } } #[derive(Debug)] -pub struct MinitraceAccessor { +pub struct FastraceAccessor { inner: A, } -impl LayeredAccess for MinitraceAccessor { +impl LayeredAccess for FastraceAccessor { type Inner = A; - type Reader = MinitraceWrapper; - type BlockingReader = MinitraceWrapper; - type Writer = MinitraceWrapper; - type BlockingWriter = MinitraceWrapper; - type Lister = MinitraceWrapper; - type BlockingLister = MinitraceWrapper; + type Reader = FastraceWrapper; + type BlockingReader = FastraceWrapper; + type Writer = FastraceWrapper; + type BlockingWriter = FastraceWrapper; + type Lister = FastraceWrapper; + type BlockingLister = FastraceWrapper; fn inner(&self) -> &Self::Inner { &self.inner @@ -157,7 +157,7 @@ impl LayeredAccess for MinitraceAccessor { v.map(|(rp, r)| { ( rp, - MinitraceWrapper::new(Span::enter_with_local_parent("ReadOperation"), r), + FastraceWrapper::new(Span::enter_with_local_parent("ReadOperation"), r), ) }) }) @@ -172,7 +172,7 @@ impl LayeredAccess for MinitraceAccessor { v.map(|(rp, r)| { ( rp, - MinitraceWrapper::new(Span::enter_with_local_parent("WriteOperation"), r), + FastraceWrapper::new(Span::enter_with_local_parent("WriteOperation"), r), ) }) }) @@ -207,7 +207,7 @@ impl LayeredAccess for MinitraceAccessor { v.map(|(rp, s)| { ( rp, - MinitraceWrapper::new(Span::enter_with_local_parent("ListOperation"), s), + FastraceWrapper::new(Span::enter_with_local_parent("ListOperation"), s), ) }) }) @@ -234,7 +234,7 @@ impl LayeredAccess for MinitraceAccessor { self.inner.blocking_read(path, args).map(|(rp, r)| { ( rp, - MinitraceWrapper::new(Span::enter_with_local_parent("ReadOperation"), r), + FastraceWrapper::new(Span::enter_with_local_parent("ReadOperation"), r), ) }) } @@ -244,7 +244,7 @@ impl LayeredAccess for MinitraceAccessor { self.inner.blocking_write(path, args).map(|(rp, r)| { ( rp, - MinitraceWrapper::new(Span::enter_with_local_parent("WriteOperation"), r), + FastraceWrapper::new(Span::enter_with_local_parent("WriteOperation"), r), ) }) } @@ -274,31 +274,31 @@ impl LayeredAccess for MinitraceAccessor { self.inner.blocking_list(path, args).map(|(rp, it)| { ( rp, - MinitraceWrapper::new(Span::enter_with_local_parent("PageOperation"), it), + FastraceWrapper::new(Span::enter_with_local_parent("PageOperation"), it), ) }) } } -pub struct MinitraceWrapper { +pub struct FastraceWrapper { span: Span, inner: R, } -impl MinitraceWrapper { +impl FastraceWrapper { fn new(span: Span, inner: R) -> Self { Self { span, inner } } } -impl oio::Read for MinitraceWrapper { +impl oio::Read for FastraceWrapper { #[trace(enter_on_poll = true)] async fn read(&mut self) -> Result { self.inner.read().await } } -impl oio::BlockingRead for MinitraceWrapper { +impl oio::BlockingRead for FastraceWrapper { fn read(&mut self) -> Result { let _g = self.span.set_local_parent(); let _span = LocalSpan::enter_with_local_parent(ReadOperation::BlockingRead.into_static()); @@ -306,7 +306,7 @@ impl oio::BlockingRead for MinitraceWrapper { } } -impl oio::Write for MinitraceWrapper { +impl oio::Write for FastraceWrapper { fn write(&mut self, bs: Buffer) -> impl Future> + MaybeSend { let _g = self.span.set_local_parent(); let _span = LocalSpan::enter_with_local_parent(WriteOperation::Write.into_static()); @@ -326,7 +326,7 @@ impl oio::Write for MinitraceWrapper { } } -impl oio::BlockingWrite for MinitraceWrapper { +impl oio::BlockingWrite for FastraceWrapper { fn write(&mut self, bs: Buffer) -> Result<()> { let _g = self.span.set_local_parent(); let _span = LocalSpan::enter_with_local_parent(WriteOperation::BlockingWrite.into_static()); @@ -340,14 +340,14 @@ impl oio::BlockingWrite for MinitraceWrapper { } } -impl oio::List for MinitraceWrapper { +impl oio::List for FastraceWrapper { #[trace(enter_on_poll = true)] async fn next(&mut self) -> Result> { self.inner.next().await } } -impl oio::BlockingList for MinitraceWrapper { +impl oio::BlockingList for FastraceWrapper { fn next(&mut self) -> Result> { let _g = self.span.set_local_parent(); let _span = LocalSpan::enter_with_local_parent(ListOperation::BlockingNext.into_static()); diff --git a/core/src/layers/mod.rs b/core/src/layers/mod.rs index 9adcde1ae924..478d03935414 100644 --- a/core/src/layers/mod.rs +++ b/core/src/layers/mod.rs @@ -72,10 +72,10 @@ mod tracing; #[cfg(feature = "layers-tracing")] pub use self::tracing::TracingLayer; -#[cfg(feature = "layers-minitrace")] -mod minitrace; -#[cfg(feature = "layers-minitrace")] -pub use self::minitrace::MinitraceLayer; +#[cfg(feature = "layers-fastrace")] +mod fastrace; +#[cfg(feature = "layers-fastrace")] +pub use self::fastrace::FastraceLayer; #[cfg(feature = "layers-otel-trace")] mod oteltrace;