diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ea5afa94f3..f9a4e7ca089 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,8 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - When using WithNewRoot, don't use the parent context for making sampling decisions. (#2032) - `oteltest.Tracer` now creates a valid `SpanContext` when using `WithNewRoot`. (#2073) - OS type detector now sets the correct `dragonflybsd` value for DragonFly BSD. (#2092) +- The OTel span status is correctly transformed into the OTLP status in the `go.opentelemetry.io/otel/exporters/otlp/otlptrace` package. + This fix will by default set the status to `Unset` if it is not explicitly set to `Ok` or `Error`. (#2099 #2102) ### Security diff --git a/exporters/otlp/otlptrace/internal/tracetransform/span.go b/exporters/otlp/otlptrace/internal/tracetransform/span.go index 5e455204a42..d6ac6377ed2 100644 --- a/exporters/otlp/otlptrace/internal/tracetransform/span.go +++ b/exporters/otlp/otlptrace/internal/tracetransform/span.go @@ -132,10 +132,12 @@ func span(sd tracesdk.ReadOnlySpan) *tracepb.Span { func status(status codes.Code, message string) *tracepb.Status { var c tracepb.Status_StatusCode switch status { + case codes.Ok: + c = tracepb.Status_STATUS_CODE_OK case codes.Error: c = tracepb.Status_STATUS_CODE_ERROR default: - c = tracepb.Status_STATUS_CODE_OK + c = tracepb.Status_STATUS_CODE_UNSET } return &tracepb.Status{ Code: c, diff --git a/exporters/otlp/otlptrace/internal/tracetransform/span_test.go b/exporters/otlp/otlptrace/internal/tracetransform/span_test.go index cd0f8feff2f..62b7cc161f7 100644 --- a/exporters/otlp/otlptrace/internal/tracetransform/span_test.go +++ b/exporters/otlp/otlptrace/internal/tracetransform/span_test.go @@ -169,7 +169,11 @@ func TestStatus(t *testing.T) { { codes.Unset, "test Unset", - tracepb.Status_STATUS_CODE_OK, + tracepb.Status_STATUS_CODE_UNSET, + }, + { + message: "default code is unset", + otlpStatus: tracepb.Status_STATUS_CODE_UNSET, }, { codes.Error,