Skip to content

Commit 10aa902

Browse files
authored
Fix trace id is not transmitted. (#47)
1 parent 49f6d76 commit 10aa902

File tree

2 files changed

+56
-1
lines changed

2 files changed

+56
-1
lines changed

src/trace/trace_context.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@ impl TracingContext {
231231
propagation: &PropagationContext,
232232
) -> Span {
233233
let mut span = self.create_entry_span(operation_name);
234+
self.trace_id = propagation.parent_trace_id.clone();
234235
span.with_span_object_mut(|span| {
235236
span.refs.push(SegmentReference {
236237
ref_type: RefType::CrossProcess as i32,

tests/trace_context.rs

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ use std::{
3131
sync::{Arc, Mutex},
3232
thread,
3333
};
34+
use tokio::{runtime::Handle, task};
3435

3536
/// Serialize from A should equal Serialize from B
3637
#[allow(dead_code)]
@@ -217,7 +218,7 @@ async fn create_span_from_context() {
217218
}
218219

219220
#[test]
220-
fn crossprocess_test() {
221+
fn cross_process_test() {
221222
let tracer = Tracer::new("service", "instance", PrintReporter::new());
222223
let mut context1 = tracer.create_trace_context();
223224
assert_eq!(context1.service(), "service");
@@ -239,6 +240,7 @@ fn crossprocess_test() {
239240

240241
let span3 = context2.last_span().unwrap();
241242

243+
assert_eq!(context1.trace_id(), context2.trace_id());
242244
assert_eq!(span3.span_id, 0);
243245
assert_eq!(span3.parent_span_id, -1);
244246
assert_eq!(span3.refs.len(), 1);
@@ -259,6 +261,58 @@ fn crossprocess_test() {
259261
}
260262
}
261263

264+
#[tokio::test(flavor = "multi_thread", worker_threads = 1)]
265+
async fn cross_process_test_1() {
266+
let propagation = Mutex::new(String::new());
267+
268+
MockReporter::with(
269+
|reporter| {
270+
let tracer = Tracer::new("service1", "instance1", reporter);
271+
let mut context = tracer.create_trace_context();
272+
let _span1 = context.create_entry_span("entry_1");
273+
let _span2 = context.create_exit_span("exit_1", "peer_1");
274+
*propagation.try_lock().unwrap() = encode_propagation(&context, "exit_1", "peer_1");
275+
tracer
276+
},
277+
|segment1| {
278+
let propagation = propagation.lock().unwrap().clone();
279+
task::block_in_place(move || {
280+
Handle::current().block_on(async move {
281+
MockReporter::with(
282+
|reporter| {
283+
let tracer = Tracer::new("service2", "instance2", reporter);
284+
let mut context = tracer.create_trace_context();
285+
let _span1 = context.create_entry_span_with_propagation(
286+
"entry_1",
287+
&decode_propagation(&propagation).unwrap(),
288+
);
289+
tracer
290+
},
291+
|segment2| {
292+
assert_eq!(segment1.trace_id, segment2.trace_id);
293+
assert_eq!(
294+
segment2.spans[0].refs[0],
295+
SegmentReference {
296+
ref_type: RefType::CrossProcess as i32,
297+
trace_id: segment1.trace_id.clone(),
298+
parent_trace_segment_id: segment1.trace_segment_id.clone(),
299+
parent_span_id: 1,
300+
parent_service: segment1.service.clone(),
301+
parent_service_instance: segment1.service_instance.clone(),
302+
parent_endpoint: segment1.spans[0].operation_name.clone(),
303+
network_address_used_at_peer: segment1.spans[0].peer.clone(),
304+
}
305+
);
306+
},
307+
)
308+
.await;
309+
});
310+
});
311+
},
312+
)
313+
.await;
314+
}
315+
262316
#[tokio::test(flavor = "multi_thread", worker_threads = 1)]
263317
async fn cross_threads_test() {
264318
MockReporter::with_many(

0 commit comments

Comments
 (0)