From c7fd4d4b1ce281a0955c754c410ec1e588852c77 Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Wed, 13 Dec 2023 18:32:55 +0200 Subject: [PATCH] Implement forEach support for aws sqs tracing list (#10062) --- .../instrumentation/awssdk/v1_11/TracingList.java | 8 ++++++++ .../awssdk/v1_11/AbstractSqsTracingTest.groovy | 11 +++++++++-- .../instrumentation/awssdk/v2_2/TracingList.java | 8 ++++++++ .../awssdk/v2_2/AbstractAws2SqsTracingTest.groovy | 3 ++- 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/TracingList.java b/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/TracingList.java index 769a52d895..a0977017aa 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/TracingList.java +++ b/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/TracingList.java @@ -13,6 +13,7 @@ import io.opentelemetry.context.Context; import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import java.util.Iterator; import java.util.List; +import java.util.function.Consumer; class TracingList extends SdkInternalList { private static final long serialVersionUID = 1L; @@ -57,6 +58,13 @@ class TracingList extends SdkInternalList { return it; } + @Override + public void forEach(Consumer action) { + for (Message message : this) { + action.accept(message); + } + } + private static boolean inAwsClient() { for (Class caller : CallerClass.INSTANCE.getClassContext()) { if (AmazonSQSClient.class == caller) { diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsTracingTest.groovy b/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsTracingTest.groovy index eb7c83e09f..92650ccac0 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsTracingTest.groovy +++ b/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsTracingTest.groovy @@ -68,8 +68,15 @@ abstract class AbstractSqsTracingTest extends InstrumentationSpecification { receiveMessageRequest.withMessageAttributeNames("test-message-header") } def receiveMessageResult = client.receiveMessage(receiveMessageRequest) - receiveMessageResult.messages.each {message -> - runWithSpan("process child") {} + // test different ways of iterating the messages list + if (testCaptureHeaders) { + receiveMessageResult.messages.each { message -> + runWithSpan("process child") {} + } + } else { + receiveMessageResult.messages.forEach { message -> + runWithSpan("process child") {} + } } then: diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/TracingList.java b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/TracingList.java index 7199468890..46491f501b 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/TracingList.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/TracingList.java @@ -10,6 +10,7 @@ import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.function.Consumer; import software.amazon.awssdk.core.interceptor.ExecutionAttributes; import software.amazon.awssdk.services.sqs.model.Message; @@ -59,4 +60,11 @@ class TracingList extends ArrayList { return it; } + + @Override + public void forEach(Consumer action) { + for (Message message : this) { + action.accept(message); + } + } } diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsTracingTest.groovy b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsTracingTest.groovy index d27a3ada3d..973e5df649 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsTracingTest.groovy +++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsTracingTest.groovy @@ -300,7 +300,8 @@ abstract class AbstractAws2SqsTracingTest extends InstrumentationSpecification { then: resp.messages.size() == 1 - resp.messages.each {message -> runWithSpan("process child") {}} + // using forEach instead of each here to test different ways of iterating messages list + resp.messages.forEach {message -> runWithSpan("process child") {}} assertSqsTraces(false, true) }