feat: enable console subscriber layer for tracing spawn tasks on `127.0.0.1:6669` when log level is TRACE (#1275)
Signed-off-by: Gaius <gaius.qi@gmail.com>
This commit is contained in:
parent
848737e327
commit
e415df936d
|
|
@ -0,0 +1,2 @@
|
||||||
|
[build]
|
||||||
|
rustflags = ["--cfg", "tokio_unstable"]
|
||||||
|
|
@ -660,6 +660,45 @@ dependencies = [
|
||||||
"windows-sys 0.60.2",
|
"windows-sys 0.60.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "console-api"
|
||||||
|
version = "0.8.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8030735ecb0d128428b64cd379809817e620a40e5001c54465b99ec5feec2857"
|
||||||
|
dependencies = [
|
||||||
|
"futures-core",
|
||||||
|
"prost 0.13.5",
|
||||||
|
"prost-types 0.13.5",
|
||||||
|
"tonic",
|
||||||
|
"tracing-core",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "console-subscriber"
|
||||||
|
version = "0.4.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6539aa9c6a4cd31f4b1c040f860a1eac9aa80e7df6b05d506a6e7179936d6a01"
|
||||||
|
dependencies = [
|
||||||
|
"console-api",
|
||||||
|
"crossbeam-channel",
|
||||||
|
"crossbeam-utils",
|
||||||
|
"futures-task",
|
||||||
|
"hdrhistogram",
|
||||||
|
"humantime",
|
||||||
|
"hyper-util",
|
||||||
|
"prost 0.13.5",
|
||||||
|
"prost-types 0.13.5",
|
||||||
|
"serde",
|
||||||
|
"serde_json",
|
||||||
|
"thread_local",
|
||||||
|
"tokio",
|
||||||
|
"tokio-stream",
|
||||||
|
"tonic",
|
||||||
|
"tracing",
|
||||||
|
"tracing-core",
|
||||||
|
"tracing-subscriber",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "const-oid"
|
name = "const-oid"
|
||||||
version = "0.9.6"
|
version = "0.9.6"
|
||||||
|
|
@ -954,13 +993,14 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dragonfly-client"
|
name = "dragonfly-client"
|
||||||
version = "1.0.9"
|
version = "1.0.10"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bytes",
|
"bytes",
|
||||||
"bytesize",
|
"bytesize",
|
||||||
"chrono",
|
"chrono",
|
||||||
"clap",
|
"clap",
|
||||||
|
"console-subscriber",
|
||||||
"dashmap",
|
"dashmap",
|
||||||
"dragonfly-api",
|
"dragonfly-api",
|
||||||
"dragonfly-client-backend",
|
"dragonfly-client-backend",
|
||||||
|
|
@ -1025,7 +1065,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dragonfly-client-backend"
|
name = "dragonfly-client-backend"
|
||||||
version = "1.0.9"
|
version = "1.0.10"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"dragonfly-api",
|
"dragonfly-api",
|
||||||
"dragonfly-client-core",
|
"dragonfly-client-core",
|
||||||
|
|
@ -1056,7 +1096,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dragonfly-client-config"
|
name = "dragonfly-client-config"
|
||||||
version = "1.0.9"
|
version = "1.0.10"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytesize",
|
"bytesize",
|
||||||
"bytesize-serde",
|
"bytesize-serde",
|
||||||
|
|
@ -1086,7 +1126,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dragonfly-client-core"
|
name = "dragonfly-client-core"
|
||||||
version = "1.0.9"
|
version = "1.0.10"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"headers 0.4.1",
|
"headers 0.4.1",
|
||||||
"hyper 1.6.0",
|
"hyper 1.6.0",
|
||||||
|
|
@ -1104,7 +1144,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dragonfly-client-init"
|
name = "dragonfly-client-init"
|
||||||
version = "1.0.9"
|
version = "1.0.10"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"clap",
|
"clap",
|
||||||
|
|
@ -1121,7 +1161,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dragonfly-client-storage"
|
name = "dragonfly-client-storage"
|
||||||
version = "1.0.9"
|
version = "1.0.10"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode",
|
"bincode",
|
||||||
"bytes",
|
"bytes",
|
||||||
|
|
@ -1148,7 +1188,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dragonfly-client-util"
|
name = "dragonfly-client-util"
|
||||||
version = "1.0.9"
|
version = "1.0.10"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"base64 0.22.1",
|
"base64 0.22.1",
|
||||||
"bytesize",
|
"bytesize",
|
||||||
|
|
@ -1545,13 +1585,26 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hdfs"
|
name = "hdfs"
|
||||||
version = "1.0.9"
|
version = "1.0.10"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"dragonfly-client-backend",
|
"dragonfly-client-backend",
|
||||||
"dragonfly-client-core",
|
"dragonfly-client-core",
|
||||||
"tonic",
|
"tonic",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hdrhistogram"
|
||||||
|
version = "7.5.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d"
|
||||||
|
dependencies = [
|
||||||
|
"base64 0.21.7",
|
||||||
|
"byteorder",
|
||||||
|
"flate2",
|
||||||
|
"nom",
|
||||||
|
"num-traits",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "headers"
|
name = "headers"
|
||||||
version = "0.3.9"
|
version = "0.3.9"
|
||||||
|
|
@ -1861,7 +1914,7 @@ dependencies = [
|
||||||
"hyper 1.6.0",
|
"hyper 1.6.0",
|
||||||
"libc",
|
"libc",
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
"socket2 0.5.9",
|
"socket2 0.6.0",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tower-service",
|
"tower-service",
|
||||||
"tracing",
|
"tracing",
|
||||||
|
|
@ -4858,6 +4911,7 @@ dependencies = [
|
||||||
"slab",
|
"slab",
|
||||||
"socket2 0.6.0",
|
"socket2 0.6.0",
|
||||||
"tokio-macros",
|
"tokio-macros",
|
||||||
|
"tracing",
|
||||||
"windows-sys 0.59.0",
|
"windows-sys 0.59.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
||||||
18
Cargo.toml
18
Cargo.toml
|
|
@ -12,7 +12,7 @@ members = [
|
||||||
]
|
]
|
||||||
|
|
||||||
[workspace.package]
|
[workspace.package]
|
||||||
version = "1.0.9"
|
version = "1.0.10"
|
||||||
authors = ["The Dragonfly Developers"]
|
authors = ["The Dragonfly Developers"]
|
||||||
homepage = "https://d7y.io/"
|
homepage = "https://d7y.io/"
|
||||||
repository = "https://github.com/dragonflyoss/client.git"
|
repository = "https://github.com/dragonflyoss/client.git"
|
||||||
|
|
@ -22,13 +22,13 @@ readme = "README.md"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[workspace.dependencies]
|
[workspace.dependencies]
|
||||||
dragonfly-client = { path = "dragonfly-client", version = "1.0.9" }
|
dragonfly-client = { path = "dragonfly-client", version = "1.0.10" }
|
||||||
dragonfly-client-core = { path = "dragonfly-client-core", version = "1.0.9" }
|
dragonfly-client-core = { path = "dragonfly-client-core", version = "1.0.10" }
|
||||||
dragonfly-client-config = { path = "dragonfly-client-config", version = "1.0.9" }
|
dragonfly-client-config = { path = "dragonfly-client-config", version = "1.0.10" }
|
||||||
dragonfly-client-storage = { path = "dragonfly-client-storage", version = "1.0.9" }
|
dragonfly-client-storage = { path = "dragonfly-client-storage", version = "1.0.10" }
|
||||||
dragonfly-client-backend = { path = "dragonfly-client-backend", version = "1.0.9" }
|
dragonfly-client-backend = { path = "dragonfly-client-backend", version = "1.0.10" }
|
||||||
dragonfly-client-util = { path = "dragonfly-client-util", version = "1.0.9" }
|
dragonfly-client-util = { path = "dragonfly-client-util", version = "1.0.10" }
|
||||||
dragonfly-client-init = { path = "dragonfly-client-init", version = "1.0.9" }
|
dragonfly-client-init = { path = "dragonfly-client-init", version = "1.0.10" }
|
||||||
dragonfly-api = "2.1.55"
|
dragonfly-api = "2.1.55"
|
||||||
thiserror = "2.0"
|
thiserror = "2.0"
|
||||||
futures = "0.3.31"
|
futures = "0.3.31"
|
||||||
|
|
@ -71,7 +71,7 @@ serde_yaml = "0.9"
|
||||||
http = "1"
|
http = "1"
|
||||||
tonic = { version = "0.12.2", features = ["tls"] }
|
tonic = { version = "0.12.2", features = ["tls"] }
|
||||||
tonic-reflection = "0.12.3"
|
tonic-reflection = "0.12.3"
|
||||||
tokio = { version = "1.47.1", features = ["full"] }
|
tokio = { version = "1.47.1", features = ["full", "tracing"] }
|
||||||
tokio-util = { version = "0.7.16", features = ["full"] }
|
tokio-util = { version = "0.7.16", features = ["full"] }
|
||||||
tokio-stream = "0.1.17"
|
tokio-stream = "0.1.17"
|
||||||
validator = { version = "0.16", features = ["derive"] }
|
validator = { version = "0.16", features = ["derive"] }
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ RUN apt-get update && apt-get install -y \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
COPY Cargo.toml Cargo.lock ./
|
COPY Cargo.toml Cargo.lock ./
|
||||||
|
COPY .cargo ./cargo
|
||||||
|
|
||||||
COPY dragonfly-client/Cargo.toml ./dragonfly-client/Cargo.toml
|
COPY dragonfly-client/Cargo.toml ./dragonfly-client/Cargo.toml
|
||||||
COPY dragonfly-client/src ./dragonfly-client/src
|
COPY dragonfly-client/src ./dragonfly-client/src
|
||||||
|
|
@ -40,6 +41,8 @@ RUN case "${TARGETPLATFORM}" in \
|
||||||
esac && \
|
esac && \
|
||||||
cargo build --release --verbose --bin dfget --bin dfdaemon --bin dfcache
|
cargo build --release --verbose --bin dfget --bin dfdaemon --bin dfcache
|
||||||
|
|
||||||
|
RUN cargo install tokio-console --locked --root /usr/local
|
||||||
|
|
||||||
FROM public.ecr.aws/docker/library/alpine:3.20 AS health
|
FROM public.ecr.aws/docker/library/alpine:3.20 AS health
|
||||||
|
|
||||||
ENV GRPC_HEALTH_PROBE_VERSION=v0.4.24
|
ENV GRPC_HEALTH_PROBE_VERSION=v0.4.24
|
||||||
|
|
@ -67,6 +70,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends iperf3 fio curl
|
||||||
COPY --from=builder /app/client/target/release/dfget /usr/local/bin/dfget
|
COPY --from=builder /app/client/target/release/dfget /usr/local/bin/dfget
|
||||||
COPY --from=builder /app/client/target/release/dfdaemon /usr/local/bin/dfdaemon
|
COPY --from=builder /app/client/target/release/dfdaemon /usr/local/bin/dfdaemon
|
||||||
COPY --from=builder /app/client/target/release/dfcache /usr/local/bin/dfcache
|
COPY --from=builder /app/client/target/release/dfcache /usr/local/bin/dfcache
|
||||||
|
COPY --from=builder /usr/local/bin/tokio-console /usr/local/bin/
|
||||||
COPY --from=pprof /go/bin/pprof /bin/pprof
|
COPY --from=pprof /go/bin/pprof /bin/pprof
|
||||||
COPY --from=health /bin/grpc_health_probe /bin/grpc_health_probe
|
COPY --from=health /bin/grpc_health_probe /bin/grpc_health_probe
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ RUN apt-get update && apt-get install -y \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
COPY Cargo.toml Cargo.lock ./
|
COPY Cargo.toml Cargo.lock ./
|
||||||
|
COPY .cargo ./cargo
|
||||||
|
|
||||||
COPY dragonfly-client/Cargo.toml ./dragonfly-client/Cargo.toml
|
COPY dragonfly-client/Cargo.toml ./dragonfly-client/Cargo.toml
|
||||||
COPY dragonfly-client/src ./dragonfly-client/src
|
COPY dragonfly-client/src ./dragonfly-client/src
|
||||||
|
|
@ -42,6 +43,7 @@ RUN case "${TARGETPLATFORM}" in \
|
||||||
|
|
||||||
RUN cargo install flamegraph --root /usr/local
|
RUN cargo install flamegraph --root /usr/local
|
||||||
RUN cargo install bottom --locked --root /usr/local
|
RUN cargo install bottom --locked --root /usr/local
|
||||||
|
RUN cargo install tokio-console --locked --root /usr/local
|
||||||
|
|
||||||
FROM public.ecr.aws/docker/library/alpine:3.20 AS health
|
FROM public.ecr.aws/docker/library/alpine:3.20 AS health
|
||||||
|
|
||||||
|
|
@ -72,6 +74,7 @@ COPY --from=builder /app/client/target/debug/dfdaemon /usr/local/bin/dfdaemon
|
||||||
COPY --from=builder /app/client/target/debug/dfcache /usr/local/bin/dfcache
|
COPY --from=builder /app/client/target/debug/dfcache /usr/local/bin/dfcache
|
||||||
COPY --from=builder /usr/local/bin/flamegraph /usr/local/bin/
|
COPY --from=builder /usr/local/bin/flamegraph /usr/local/bin/
|
||||||
COPY --from=builder /usr/local/bin/btm /usr/local/bin/
|
COPY --from=builder /usr/local/bin/btm /usr/local/bin/
|
||||||
|
COPY --from=builder /usr/local/bin/tokio-console /usr/local/bin/
|
||||||
COPY --from=pprof /go/bin/pprof /bin/pprof
|
COPY --from=pprof /go/bin/pprof /bin/pprof
|
||||||
COPY --from=health /bin/grpc_health_probe /bin/grpc_health_probe
|
COPY --from=health /bin/grpc_health_probe /bin/grpc_health_probe
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ RUN apt-get update && apt-get install -y \
|
||||||
WORKDIR /app/client
|
WORKDIR /app/client
|
||||||
|
|
||||||
COPY Cargo.toml Cargo.lock ./
|
COPY Cargo.toml Cargo.lock ./
|
||||||
|
COPY .cargo ./cargo
|
||||||
|
|
||||||
COPY dragonfly-client/Cargo.toml ./dragonfly-client/Cargo.toml
|
COPY dragonfly-client/Cargo.toml ./dragonfly-client/Cargo.toml
|
||||||
COPY dragonfly-client/src ./dragonfly-client/src
|
COPY dragonfly-client/src ./dragonfly-client/src
|
||||||
|
|
|
||||||
|
|
@ -50,6 +50,17 @@ impl HTTP {
|
||||||
.with_custom_certificate_verifier(NoVerifier::new())
|
.with_custom_certificate_verifier(NoVerifier::new())
|
||||||
.with_no_client_auth();
|
.with_no_client_auth();
|
||||||
|
|
||||||
|
// Disable automatic compression to prevent double-decompression issues.
|
||||||
|
//
|
||||||
|
// Problem scenario:
|
||||||
|
// 1. Origin server supports gzip and returns "content-encoding: gzip" header.
|
||||||
|
// 2. Backend decompresses the response and stores uncompressed content to disk.
|
||||||
|
// 3. When user's client downloads via dfdaemon proxy, the original "content-encoding: gzip".
|
||||||
|
// header is forwarded to it.
|
||||||
|
// 4. User's client attempts to decompress the already-decompressed content, causing errors.
|
||||||
|
//
|
||||||
|
// Solution: Disable all compression formats (gzip, brotli, zstd, deflate) to ensure
|
||||||
|
// we receive and store uncompressed content, eliminating the double-decompression issue.
|
||||||
let client = reqwest::Client::builder()
|
let client = reqwest::Client::builder()
|
||||||
.no_gzip()
|
.no_gzip()
|
||||||
.no_brotli()
|
.no_brotli()
|
||||||
|
|
@ -88,6 +99,17 @@ impl HTTP {
|
||||||
.with_root_certificates(root_cert_store)
|
.with_root_certificates(root_cert_store)
|
||||||
.with_no_client_auth();
|
.with_no_client_auth();
|
||||||
|
|
||||||
|
// Disable automatic compression to prevent double-decompression issues.
|
||||||
|
//
|
||||||
|
// Problem scenario:
|
||||||
|
// 1. Origin server supports gzip and returns "content-encoding: gzip" header.
|
||||||
|
// 2. Backend decompresses the response and stores uncompressed content to disk.
|
||||||
|
// 3. When user's client downloads via dfdaemon proxy, the original "content-encoding: gzip".
|
||||||
|
// header is forwarded to it.
|
||||||
|
// 4. User's client attempts to decompress the already-decompressed content, causing errors.
|
||||||
|
//
|
||||||
|
// Solution: Disable all compression formats (gzip, brotli, zstd, deflate) to ensure
|
||||||
|
// we receive and store uncompressed content, eliminating the double-decompression issue.
|
||||||
let client = reqwest::Client::builder()
|
let client = reqwest::Client::builder()
|
||||||
.no_gzip()
|
.no_gzip()
|
||||||
.no_brotli()
|
.no_brotli()
|
||||||
|
|
|
||||||
|
|
@ -85,6 +85,7 @@ path-absolutize = "3.1.1"
|
||||||
dashmap = "6.1.0"
|
dashmap = "6.1.0"
|
||||||
fastrand = "2.3.0"
|
fastrand = "2.3.0"
|
||||||
glob = "0.3.2"
|
glob = "0.3.2"
|
||||||
|
console-subscriber = "0.4.1"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
tempfile.workspace = true
|
tempfile.workspace = true
|
||||||
|
|
|
||||||
|
|
@ -102,8 +102,16 @@ pub fn init_tracing(
|
||||||
let env_filter = EnvFilter::try_from_default_env()
|
let env_filter = EnvFilter::try_from_default_env()
|
||||||
.unwrap_or_else(|_| EnvFilter::default().add_directive(log_level.into()));
|
.unwrap_or_else(|_| EnvFilter::default().add_directive(log_level.into()));
|
||||||
|
|
||||||
|
// Enable console subscriber layer for tracing spawn tasks on `127.0.0.1:6669` when log level is TRACE.
|
||||||
|
let console_subscriber_layer = if log_level == Level::TRACE {
|
||||||
|
Some(console_subscriber::spawn())
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
|
||||||
let subscriber = Registry::default()
|
let subscriber = Registry::default()
|
||||||
.with(env_filter)
|
.with(env_filter)
|
||||||
|
.with(console_subscriber_layer)
|
||||||
.with(file_logging_layer)
|
.with(file_logging_layer)
|
||||||
.with(stdout_logging_layer);
|
.with(stdout_logging_layer);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue