diff --git a/instrumentation/aws_lambda/lib/opentelemetry/instrumentation/aws_lambda/wrap.rb b/instrumentation/aws_lambda/lib/opentelemetry/instrumentation/aws_lambda/wrap.rb index 655fb7b2b8..8b02685190 100644 --- a/instrumentation/aws_lambda/lib/opentelemetry/instrumentation/aws_lambda/wrap.rb +++ b/instrumentation/aws_lambda/lib/opentelemetry/instrumentation/aws_lambda/wrap.rb @@ -43,7 +43,7 @@ def wrap_lambda(event:, context:, handler:, flush_timeout: DEFAULT_FLUSH_TIMEOUT begin response = yield - unless span.attributes.key?(OpenTelemetry::SemanticConventions::Trace::HTTP_STATUS_CODE) + if span.recording? && !span.attributes.key?(OpenTelemetry::SemanticConventions::Trace::HTTP_STATUS_CODE) status_code = response['statusCode'] || response[:statusCode] if response.is_a?(Hash) span.set_attribute(OpenTelemetry::SemanticConventions::Trace::HTTP_STATUS_CODE, status_code) if status_code end diff --git a/instrumentation/aws_lambda/test/opentelemetry/instrumentation_test.rb b/instrumentation/aws_lambda/test/opentelemetry/instrumentation_test.rb index 928419ac49..361c72cca5 100644 --- a/instrumentation/aws_lambda/test/opentelemetry/instrumentation_test.rb +++ b/instrumentation/aws_lambda/test/opentelemetry/instrumentation_test.rb @@ -215,6 +215,25 @@ end end end + + describe 'no raise error when the span is not recording' do + it 'no raise error' do + otel_wrapper = OpenTelemetry::Instrumentation::AwsLambda::Handler.new + tracer = OpenTelemetry.tracer_provider.tracer + + OpenTelemetry::Trace.stub(:with_span, lambda { |_span, &block| + block.call(OpenTelemetry::Trace::Span::INVALID, OpenTelemetry::Context.current) + }) do + tracer.stub(:in_span, lambda { |_name, **_kwargs, &block| + block.call(OpenTelemetry::Trace::Span::INVALID, OpenTelemetry::Context.current) + }) do + otel_wrapper.stub(:call_original_handler, {}) do + assert otel_wrapper.call_wrapped(event: sqs_record, context: context) + end + end + end + end + end end describe 'validate_if_span_is_registered' do