open-telemetry / opentelemetry-rust

The Rust OpenTelemetry implementation
https://opentelemetry.io
Apache License 2.0
1.81k stars 417 forks source link

Set TraceState in SpanContext #906

Open LukeMauldin opened 1 year ago

LukeMauldin commented 1 year ago

Attempting to set TraceState in a SpanContext but trace_state continues to be empty. See code example below.

        let mut ctx = opentelemetry::Context::new();
        let mut span_builder = opentelemetry::trace::SpanBuilder::from_name("testspan");
        span_builder = span_builder.with_trace_id(
            opentelemetry::trace::TraceId::from_hex("4bf92f3577b34da6a3ce929d0e0e4736").unwrap(),
        );
        span_builder = span_builder
            .with_span_id(opentelemetry::trace::SpanId::from_hex("00f067aa0ba902b7").unwrap());
        span_builder = span_builder.with_attributes(vec![opentelemetry_api::KeyValue::new(
            "statekey", "stateval",
        )]);
        let tracer = opentelemetry::global::tracer("test");
        let span = tracer.build_with_context(span_builder, &ctx);
        ctx = ctx.with_span(span);

       // ----  Break to another part of the code but the same ctx ---

        let ctx_span = ctx.span();
        let span_ctx = ctx_span.span_context();

        //trace_id has a value
        println!("app - trace_id: {}", span_ctx.trace_id().to_string());

        //trace_state is empty
        println!("app - trace_state: {}", span_ctx.trace_state().header());
marijana0 commented 1 year ago

@LukeMauldin Did you find any solution to this?

cijothomas commented 1 year ago

It does not look like you are setting trace_state into the SpanContext?

The "statekey", "stateval" is stored as span attribute, which would be unrelated to trace_state...