Skip to content

Commit b826f33

Browse files
authored
Update all tracing dependencies (#467)
* Update all tracing dependencies Those dependencies were really out of date. The opentelemetry-jaeger dependencies was even deprecated. This bumps all those dependencies to the latest version and replaces jaeger with otlp, like recommended by the opentelemetry project. * Fix Clippy warnings in tests and examples Now also uses --all-targets in the Clippy workflow to catch those on CI.
1 parent a26dca4 commit b826f33

File tree

11 files changed

+70
-49
lines changed

11 files changed

+70
-49
lines changed

.github/workflows/main.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ jobs:
102102
- uses: dtolnay/rust-toolchain@stable
103103
with:
104104
components: clippy
105-
- run: cargo clippy --all-features -- -D warnings
105+
- run: cargo clippy --all-features --all-targets -- -D warnings
106106

107107
# This job succeeds if all other tests and examples succeed. Otherwise, it fails. It is for use in
108108
# branch protection rules.

example-service/Cargo.toml

+6-5
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,16 @@ anyhow = "1.0"
1818
clap = { version = "4.4.18", features = ["derive"] }
1919
log = "0.4"
2020
futures = "0.3"
21-
opentelemetry = { version = "0.21.0" }
22-
opentelemetry-jaeger = { version = "0.20.0", features = ["rt-tokio"] }
21+
opentelemetry = { version = "0.24.0" }
22+
opentelemetry-otlp = "0.17.0"
2323
rand = "0.8"
2424
tarpc = { version = "0.34", path = "../tarpc", features = ["full"] }
2525
tokio = { version = "1", features = ["macros", "net", "rt-multi-thread"] }
2626
tracing = { version = "0.1" }
27-
tracing-opentelemetry = "0.22.0"
28-
tracing-subscriber = { version = "0.3.18", features = ["env-filter"] }
29-
opentelemetry_sdk = "0.21.2"
27+
tracing-opentelemetry = "0.25.0"
28+
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
29+
opentelemetry_sdk = { version = "0.24.1", features = ["rt-tokio"] }
30+
opentelemetry-semantic-conventions = "0.16.0"
3031

3132
[lib]
3233
name = "service"

example-service/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Example
22

3-
Example service to demonstrate how to set up `tarpc` with [Jaeger](https://www.jaegertracing.io). To see traces Jaeger, run the following with `RUST_LOG=trace`.
3+
Example service to demonstrate how to set up `tarpc` with [Jaeger](https://www.jaegertracing.io) using OTLP. To see traces Jaeger, run the following with `RUST_LOG=trace`.
44

55
## Server
66

example-service/src/lib.rs

+15-8
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
// license that can be found in the LICENSE file or at
55
// https://opensource.org/licenses/MIT.
66

7-
use std::env;
7+
use opentelemetry::trace::TracerProvider as _;
88
use tracing_subscriber::{fmt::format::FmtSpan, prelude::*};
99

1010
/// This is the service definition. It looks a lot like a trait definition.
@@ -15,14 +15,21 @@ pub trait World {
1515
async fn hello(name: String) -> String;
1616
}
1717

18-
/// Initializes an OpenTelemetry tracing subscriber with a Jaeger backend.
19-
pub fn init_tracing(service_name: &str) -> anyhow::Result<()> {
20-
env::set_var("OTEL_BSP_MAX_EXPORT_BATCH_SIZE", "12");
21-
22-
let tracer = opentelemetry_jaeger::new_agent_pipeline()
23-
.with_service_name(service_name)
24-
.with_max_packet_size(2usize.pow(13))
18+
/// Initializes an OpenTelemetry tracing subscriber with a OTLP backend.
19+
pub fn init_tracing(service_name: &'static str) -> anyhow::Result<()> {
20+
let tracer_provider = opentelemetry_otlp::new_pipeline()
21+
.tracing()
22+
.with_trace_config(opentelemetry_sdk::trace::Config::default().with_resource(
23+
opentelemetry_sdk::Resource::new([opentelemetry::KeyValue::new(
24+
opentelemetry_semantic_conventions::resource::SERVICE_NAME,
25+
service_name,
26+
)]),
27+
))
28+
.with_batch_config(opentelemetry_sdk::trace::BatchConfig::default())
29+
.with_exporter(opentelemetry_otlp::new_exporter().tonic())
2530
.install_batch(opentelemetry_sdk::runtime::Tokio)?;
31+
opentelemetry::global::set_tracer_provider(tracer_provider.clone());
32+
let tracer = tracer_provider.tracer(service_name);
2633

2734
tracing_subscriber::registry()
2835
.with(tracing_subscriber::EnvFilter::from_default_env())

plugins/tests/service.rs

+2-6
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,7 @@ fn att_service_trait() {
2020
s
2121
}
2222

23-
async fn baz(self, _: context::Context) {
24-
()
25-
}
23+
async fn baz(self, _: context::Context) {}
2624
}
2725
}
2826

@@ -52,9 +50,7 @@ fn raw_idents() {
5250
r#impl
5351
}
5452

55-
async fn r#async(self, _: context::Context) {
56-
()
57-
}
53+
async fn r#async(self, _: context::Context) {}
5854
}
5955
}
6056

tarpc/Cargo.toml

+7-7
Original file line numberDiff line numberDiff line change
@@ -58,20 +58,20 @@ tracing = { version = "0.1", default-features = false, features = [
5858
"attributes",
5959
"log",
6060
] }
61-
tracing-opentelemetry = { version = "0.22.0", default-features = false }
62-
opentelemetry = { version = "0.21.0", default-features = false }
63-
61+
tracing-opentelemetry = { version = "0.25.0", default-features = false }
62+
opentelemetry = { version = "0.24.0", default-features = false }
63+
opentelemetry-semantic-conventions = "0.16.0"
6464

6565
[dev-dependencies]
6666
assert_matches = "1.4"
6767
bincode = "1.3"
6868
bytes = { version = "1", features = ["serde"] }
6969
flate2 = "1.0"
7070
futures-test = "0.3"
71-
opentelemetry = { version = "0.21.0", default-features = false }
72-
opentelemetry-jaeger = { version = "0.20.0", features = ["rt-tokio"] }
73-
opentelemetry_sdk = "0.21.2"
74-
pin-utils = "0.1.0-alpha"
71+
opentelemetry = { version = "0.24.0", default-features = false }
72+
opentelemetry-otlp = "0.17.0"
73+
opentelemetry_sdk = { version = "0.24.1", features = ["rt-tokio"] }
74+
pin-utils = "0.1.0"
7575
serde_bytes = "0.11"
7676
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
7777
tokio = { version = "1", features = ["full", "test-util", "tracing"] }

tarpc/examples/pubsub.rs

+17-9
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,10 @@ use futures::{
3838
future::{self, AbortHandle},
3939
prelude::*,
4040
};
41+
use opentelemetry::trace::TracerProvider as _;
4142
use publisher::Publisher as _;
4243
use std::{
4344
collections::HashMap,
44-
env,
4545
error::Error,
4646
io,
4747
net::SocketAddr,
@@ -223,7 +223,7 @@ impl Publisher {
223223
for topic in topics {
224224
subscriptions
225225
.entry(topic)
226-
.or_insert_with(HashMap::new)
226+
.or_default()
227227
.insert(subscriber_addr, subscriber.clone());
228228
}
229229
}
@@ -283,16 +283,24 @@ impl publisher::Publisher for Publisher {
283283
}
284284
}
285285

286-
/// Initializes an OpenTelemetry tracing subscriber with a Jaeger backend.
287-
fn init_tracing(service_name: &str) -> anyhow::Result<()> {
288-
env::set_var("OTEL_BSP_MAX_EXPORT_BATCH_SIZE", "12");
289-
let tracer = opentelemetry_jaeger::new_agent_pipeline()
290-
.with_service_name(service_name)
291-
.with_max_packet_size(2usize.pow(13))
286+
/// Initializes an OpenTelemetry tracing subscriber with a OTLP backend.
287+
pub fn init_tracing(service_name: &'static str) -> anyhow::Result<()> {
288+
let tracer_provider = opentelemetry_otlp::new_pipeline()
289+
.tracing()
290+
.with_batch_config(opentelemetry_sdk::trace::BatchConfig::default())
291+
.with_exporter(opentelemetry_otlp::new_exporter().tonic())
292+
.with_trace_config(opentelemetry_sdk::trace::Config::default().with_resource(
293+
opentelemetry_sdk::Resource::new([opentelemetry::KeyValue::new(
294+
opentelemetry_semantic_conventions::resource::SERVICE_NAME,
295+
service_name,
296+
)]),
297+
))
292298
.install_batch(opentelemetry_sdk::runtime::Tokio)?;
299+
opentelemetry::global::set_tracer_provider(tracer_provider.clone());
300+
let tracer = tracer_provider.tracer(service_name);
293301

294302
tracing_subscriber::registry()
295-
.with(tracing_subscriber::filter::EnvFilter::from_default_env())
303+
.with(tracing_subscriber::EnvFilter::from_default_env())
296304
.with(tracing_subscriber::fmt::layer())
297305
.with(tracing_opentelemetry::layer().with_tracer(tracer))
298306
.try_init()?;

tarpc/examples/tls_over_tcp.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ async fn main() -> anyhow::Result<()> {
102102

103103
let config = rustls::ServerConfig::builder()
104104
.with_client_cert_verifier(client_auth) // use .with_no_client_auth() instead if you don't want client-auth
105-
.with_single_cert(cert, key.into())
105+
.with_single_cert(cert, key)
106106
.unwrap();
107107
let acceptor = TlsAcceptor::from(Arc::new(config));
108108
let listener = TcpListener::bind(&server_addr).await.unwrap();

tarpc/examples/tracing.rs

+17-8
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use crate::{
99
double::Double as DoubleService,
1010
};
1111
use futures::{future, prelude::*};
12+
use opentelemetry::trace::TracerProvider as _;
1213
use std::{
1314
io,
1415
sync::{
@@ -76,12 +77,21 @@ where
7677
}
7778
}
7879

79-
fn init_tracing(service_name: &str) -> anyhow::Result<()> {
80-
let tracer = opentelemetry_jaeger::new_agent_pipeline()
81-
.with_service_name(service_name)
82-
.with_auto_split_batch(true)
83-
.with_max_packet_size(2usize.pow(13))
80+
/// Initializes an OpenTelemetry tracing subscriber with a OTLP backend.
81+
pub fn init_tracing(service_name: &'static str) -> anyhow::Result<()> {
82+
let tracer_provider = opentelemetry_otlp::new_pipeline()
83+
.tracing()
84+
.with_batch_config(opentelemetry_sdk::trace::BatchConfig::default())
85+
.with_exporter(opentelemetry_otlp::new_exporter().tonic())
86+
.with_trace_config(opentelemetry_sdk::trace::Config::default().with_resource(
87+
opentelemetry_sdk::Resource::new([opentelemetry::KeyValue::new(
88+
opentelemetry_semantic_conventions::resource::SERVICE_NAME,
89+
service_name,
90+
)]),
91+
))
8492
.install_batch(opentelemetry_sdk::runtime::Tokio)?;
93+
opentelemetry::global::set_tracer_provider(tracer_provider.clone());
94+
let tracer = tracer_provider.tracer(service_name);
8595

8696
tracing_subscriber::registry()
8797
.with(tracing_subscriber::EnvFilter::from_default_env())
@@ -124,15 +134,14 @@ where
124134
.map(|transport| tarpc::client::new(client::Config::default(), transport).spawn())
125135
.collect(),
126136
);
127-
let stub = retry::Retry::new(stub, |resp, attempts| {
137+
retry::Retry::new(stub, |resp, attempts| {
128138
if let Err(e) = resp {
129139
tracing::warn!("Got an error: {e:?}");
130140
attempts < 3
131141
} else {
132142
false
133143
}
134-
});
135-
stub
144+
})
136145
}
137146

138147
#[tokio::main]

tarpc/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
//! - Distributed tracing: tarpc is instrumented with
4242
//! [tracing](https://github.com/tokio-rs/tracing) primitives extended with
4343
//! [OpenTelemetry](https://opentelemetry.io/) traces. Using a compatible tracing subscriber like
44-
//! [Jaeger](https://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-jaeger),
44+
//! [OTLP](https://github.com/open-telemetry/opentelemetry-rust/tree/main/opentelemetry-otlp),
4545
//! each RPC can be traced through the client, server, and other dependencies downstream of the
4646
//! server. Even for applications not connected to a distributed tracing collector, the
4747
//! instrumentation can also be ingested by regular loggers like

tarpc/src/server/limits/requests_per_channel.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ mod tests {
249249
throttler.inner.push_req(1, 1);
250250
assert!(throttler.as_mut().poll_next(&mut testing::cx()).is_done());
251251
assert_eq!(throttler.inner.sink.len(), 1);
252-
let resp = throttler.inner.sink.get(0).unwrap();
252+
let resp = throttler.inner.sink.front().unwrap();
253253
assert_eq!(resp.request_id, 1);
254254
assert!(resp.message.is_err());
255255
}
@@ -331,7 +331,7 @@ mod tests {
331331
.unwrap();
332332
assert_eq!(throttler.inner.in_flight_requests.len(), 0);
333333
assert_eq!(
334-
throttler.inner.sink.get(0),
334+
throttler.inner.sink.front(),
335335
Some(&Response {
336336
request_id: 0,
337337
message: Ok(1),

0 commit comments

Comments
 (0)