Skip to content

Commit 5542f37

Browse files
authored
Fix span kind being always internal (#1576)
1 parent ab9415a commit 5542f37

File tree

3 files changed

+69
-8
lines changed

3 files changed

+69
-8
lines changed

opentelemetry-sdk/CHANGELOG.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
# Changelog
22

3-
43
## vNext
54

5+
### Fixed
6+
7+
- [#1576](https://github.com/open-telemetry/opentelemetry-rust/pull/1576)
8+
Fix Span kind is always set to "internal".
9+
610
## v0.22.0
711

812
### Deprecated

opentelemetry-sdk/src/trace/mod.rs

Lines changed: 63 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ mod tests {
5252
};
5353
use opentelemetry::testing::trace::TestSpan;
5454
use opentelemetry::trace::{
55-
SamplingDecision, SamplingResult, SpanKind, TraceContextExt, TraceState,
55+
SamplingDecision, SamplingResult, SpanKind, Status, TraceContextExt, TraceState,
5656
};
5757
use opentelemetry::{
5858
trace::{
@@ -63,7 +63,7 @@ mod tests {
6363
};
6464

6565
#[test]
66-
fn in_span() {
66+
fn tracer_in_span() {
6767
// Arrange
6868
let exporter = InMemorySpanExporterBuilder::new().build();
6969
let provider = TracerProvider::builder()
@@ -72,7 +72,13 @@ mod tests {
7272

7373
// Act
7474
let tracer = provider.tracer("test_tracer");
75-
tracer.in_span("span_name", |_cx| {});
75+
tracer.in_span("span_name", |cx| {
76+
let span = cx.span();
77+
assert!(span.is_recording());
78+
span.update_name("span_name_updated");
79+
span.set_attribute(KeyValue::new("attribute1", "value1"));
80+
span.add_event("test-event".to_string(), vec![]);
81+
});
7682

7783
provider.force_flush();
7884

@@ -82,8 +88,14 @@ mod tests {
8288
.expect("Spans are expected to be exported.");
8389
assert_eq!(exported_spans.len(), 1);
8490
let span = &exported_spans[0];
85-
assert_eq!(span.name, "span_name");
91+
assert_eq!(span.name, "span_name_updated");
8692
assert_eq!(span.instrumentation_lib.name, "test_tracer");
93+
assert_eq!(span.attributes.len(), 1);
94+
assert_eq!(span.events.len(), 1);
95+
assert_eq!(span.events[0].name, "test-event");
96+
assert_eq!(span.span_context.trace_flags(), TraceFlags::SAMPLED);
97+
assert!(!span.span_context.is_remote());
98+
assert_eq!(span.status, Status::Unset);
8799
}
88100

89101
#[test]
@@ -97,7 +109,46 @@ mod tests {
97109
// Act
98110
let tracer = provider.tracer("test_tracer");
99111
let mut span = tracer.start("span_name");
100-
span.set_attribute(KeyValue::new("key1", "value1"));
112+
span.set_attribute(KeyValue::new("attribute1", "value1"));
113+
span.add_event("test-event".to_string(), vec![]);
114+
span.set_status(Status::error("cancelled"));
115+
drop(span);
116+
provider.force_flush();
117+
118+
// Assert
119+
let exported_spans = exporter
120+
.get_finished_spans()
121+
.expect("Spans are expected to be exported.");
122+
assert_eq!(exported_spans.len(), 1);
123+
let span = &exported_spans[0];
124+
assert_eq!(span.name, "span_name");
125+
assert_eq!(span.instrumentation_lib.name, "test_tracer");
126+
assert_eq!(span.attributes.len(), 1);
127+
assert_eq!(span.events.len(), 1);
128+
assert_eq!(span.events[0].name, "test-event");
129+
assert_eq!(span.span_context.trace_flags(), TraceFlags::SAMPLED);
130+
assert!(!span.span_context.is_remote());
131+
let status_expected = Status::error("cancelled");
132+
assert_eq!(span.status, status_expected);
133+
}
134+
135+
#[test]
136+
fn tracer_span_builder() {
137+
// Arrange
138+
let exporter = InMemorySpanExporterBuilder::new().build();
139+
let provider = TracerProvider::builder()
140+
.with_span_processor(SimpleSpanProcessor::new(Box::new(exporter.clone())))
141+
.build();
142+
143+
// Act
144+
let tracer = provider.tracer("test_tracer");
145+
let mut span = tracer
146+
.span_builder("span_name")
147+
.with_kind(SpanKind::Server)
148+
.start(&tracer);
149+
span.set_attribute(KeyValue::new("attribute1", "value1"));
150+
span.add_event("test-event".to_string(), vec![]);
151+
span.set_status(Status::Ok);
101152
drop(span);
102153
provider.force_flush();
103154

@@ -108,7 +159,14 @@ mod tests {
108159
assert_eq!(exported_spans.len(), 1);
109160
let span = &exported_spans[0];
110161
assert_eq!(span.name, "span_name");
162+
assert_eq!(span.span_kind, SpanKind::Server);
111163
assert_eq!(span.instrumentation_lib.name, "test_tracer");
164+
assert_eq!(span.attributes.len(), 1);
165+
assert_eq!(span.events.len(), 1);
166+
assert_eq!(span.events[0].name, "test-event");
167+
assert_eq!(span.span_context.trace_flags(), TraceFlags::SAMPLED);
168+
assert!(!span.span_context.is_remote());
169+
assert_eq!(span.status, Status::Ok);
112170
}
113171

114172
#[test]

opentelemetry-sdk/src/trace/tracer.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,6 @@ impl opentelemetry::trace::Tracer for Tracer {
190190
.span_id
191191
.take()
192192
.unwrap_or_else(|| config.id_generator.new_span_id());
193-
let span_kind = builder.span_kind.take().unwrap_or(SpanKind::Internal);
194193
let trace_id;
195194
let mut psc = &SpanContext::empty_context();
196195

@@ -219,7 +218,7 @@ impl opentelemetry::trace::Tracer for Tracer {
219218
Some(parent_cx),
220219
trace_id,
221220
&builder.name,
222-
&span_kind,
221+
builder.span_kind.as_ref().unwrap_or(&SpanKind::Internal),
223222
builder.attributes.as_ref().unwrap_or(&Vec::new()),
224223
builder.links.as_deref().unwrap_or(&[]),
225224
)

0 commit comments

Comments
 (0)