Skip to content

Commit dcc5c06

Browse files
committed
Lift AWS SDK v1 SQS latest-deps cap
1 parent 1c8b53c commit dcc5c06

7 files changed

Lines changed: 59 additions & 36 deletions

File tree

docs/supported-libraries.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ These are the supported libraries and frameworks:
5151
| [AsyncHttpClient](https://github.com/AsyncHttpClient/async-http-client) | 1.8+ | N/A | [HTTP Client Spans], [HTTP Client Metrics] |
5252
| [Avaje Jex](https://avaje.io/jex/) | 3.0+ | N/A | Provides `http.route` [2] |
5353
| [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/java-handler.html) | 1.0+ | [opentelemetry-aws-lambda-core-1.0](../instrumentation/aws-lambda/aws-lambda-core-1.0/library),<br>[opentelemetry-aws-lambda-events-3.11](../instrumentation/aws-lambda/aws-lambda-events-3.11/library) | [FaaS Server Spans] |
54-
| [AWS SDK](https://aws.amazon.com/sdk-for-java/) | 1.11 - 1.12.583,<br>2.2+ | [opentelemetry-aws-sdk-1.11](../instrumentation/aws-sdk/aws-sdk-1.11/library),<br>[opentelemetry-aws-sdk-1.11-autoconfigure](../instrumentation/aws-sdk/aws-sdk-1.11/library-autoconfigure),<br>[opentelemetry-aws-sdk-2.2](../instrumentation/aws-sdk/aws-sdk-2.2/library),<br>[opentelemetry-aws-sdk-2.2-autoconfigure](../instrumentation/aws-sdk/aws-sdk-2.2/library-autoconfigure) | [Messaging Spans], [Database Client Spans], [Database Client Metrics]&nbsp;[6], [HTTP Client Spans], [GenAI Client Spans], [GenAI Client Metrics] |
54+
| [AWS SDK](https://aws.amazon.com/sdk-for-java/) | 1.11+,<br>2.2+ | [opentelemetry-aws-sdk-1.11](../instrumentation/aws-sdk/aws-sdk-1.11/library),<br>[opentelemetry-aws-sdk-1.11-autoconfigure](../instrumentation/aws-sdk/aws-sdk-1.11/library-autoconfigure),<br>[opentelemetry-aws-sdk-2.2](../instrumentation/aws-sdk/aws-sdk-2.2/library),<br>[opentelemetry-aws-sdk-2.2-autoconfigure](../instrumentation/aws-sdk/aws-sdk-2.2/library-autoconfigure) | [Messaging Spans], [Database Client Spans], [Database Client Metrics]&nbsp;[6], [HTTP Client Spans], [GenAI Client Spans], [GenAI Client Metrics] |
5555
| [Azure Core](https://docs.microsoft.com/en-us/java/api/overview/azure/core-readme) | 1.14+ | N/A | Context propagation |
5656
| [Cassandra Driver](https://github.com/datastax/java-driver) | 3.0+ | [opentelemetry-cassandra-4.4](../instrumentation/cassandra/cassandra-4.4/library) | [Database Client Spans], [Database Client Metrics]&nbsp;[6] |
5757
| [Clickhouse Client V1](https://github.com/ClickHouse/clickhouse-java) | 0.5+ | N/A | [Database Client Spans], [Database Client Metrics]&nbsp;[6] |

instrumentation/aws-sdk/aws-sdk-1.11/javaagent/build.gradle.kts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,7 @@ dependencies {
6666
// needed by S3
6767
testImplementation("javax.xml.bind:jaxb-api:2.3.1")
6868

69-
// 1.12.584 switches SQS to JSON protocol; these tests cover the query protocol path.
70-
latestDepTestLibrary("com.amazonaws:aws-java-sdk-sqs:1.12.583") // documented limitation
69+
latestDepTestLibrary("com.amazonaws:aws-java-sdk-sqs:latest.release")
7170
}
7271

7372
testing {
@@ -101,8 +100,7 @@ testing {
101100
dependencies {
102101
implementation(project(":instrumentation:aws-sdk:aws-sdk-1.11:testing"))
103102

104-
// 1.12.584 switches SQS to JSON protocol; these tests cover the query protocol path.
105-
implementation("com.amazonaws:aws-java-sdk-sqs:${baseVersion("1.11.106").orLatest("1.12.583")}")
103+
implementation("com.amazonaws:aws-java-sdk-sqs:${baseVersion("1.11.106").orLatest()}")
106104
}
107105

108106
targets {
@@ -118,8 +116,7 @@ testing {
118116
dependencies {
119117
implementation(project(":instrumentation:aws-sdk:aws-sdk-1.11:testing"))
120118

121-
// 1.12.584 switches SQS to JSON protocol; these tests cover the query protocol path.
122-
implementation("com.amazonaws:aws-java-sdk-sqs:${baseVersion("1.11.106").orLatest("1.12.583")}")
119+
implementation("com.amazonaws:aws-java-sdk-sqs:${baseVersion("1.11.106").orLatest()}")
123120
}
124121
}
125122
}

instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/awssdk/v1_11/AwsConnector.java

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import com.amazonaws.services.sqs.model.PurgeQueueRequest;
3131
import com.amazonaws.services.sqs.model.ReceiveMessageRequest;
3232
import com.amazonaws.services.sqs.model.ReceiveMessageResult;
33+
import java.net.URI;
3334
import java.time.Duration;
3435
import java.util.EnumSet;
3536
import org.slf4j.LoggerFactory;
@@ -45,10 +46,11 @@ class AwsConnector {
4546

4647
AwsConnector() {
4748
localStack =
48-
new LocalStackContainer(DockerImageName.parse("localstack/localstack:2.0.2"))
49+
new LocalStackContainer(DockerImageName.parse("localstack/localstack:4.14.0"))
4950
.withServices("sqs", "sns", "s3")
5051
.withEnv("DEBUG", "1")
5152
.withEnv("SQS_PROVIDER", "elasticmq")
53+
.withEnv("SQS_ENDPOINT_STRATEGY", "path")
5254
.withStartupTimeout(Duration.ofMinutes(2));
5355
localStack.start();
5456
localStack.followOutput(new Slf4jLogConsumer(LoggerFactory.getLogger("test")));
@@ -83,12 +85,14 @@ static AwsClientBuilder.EndpointConfiguration getEndpointConfiguration(
8385
}
8486

8587
String createQueue(String queueName) {
86-
return sqsClient.createQueue(queueName).getQueueUrl();
88+
return externalQueueUrl(sqsClient.createQueue(queueName).getQueueUrl());
8789
}
8890

8991
String getQueueArn(String queueUrl) {
9092
return sqsClient
91-
.getQueueAttributes(new GetQueueAttributesRequest(queueUrl).withAttributeNames("QueueArn"))
93+
.getQueueAttributes(
94+
new GetQueueAttributesRequest(externalQueueUrl(queueUrl))
95+
.withAttributeNames("QueueArn"))
9296
.getAttributes()
9397
.get("QueueArn");
9498
}
@@ -113,7 +117,7 @@ void setTopicPublishingPolicy(String topicArn) {
113117

114118
void setQueuePublishingPolicy(String queueUrl, String queueArn) {
115119
sqsClient.setQueueAttributes(
116-
queueUrl,
120+
externalQueueUrl(queueUrl),
117121
singletonMap(
118122
"Policy",
119123
String.format(
@@ -168,11 +172,12 @@ String createTopicAndSubscribeQueue(String topicName, String queueArn) {
168172
}
169173

170174
ReceiveMessageResult receiveMessage(String queueUrl) {
171-
return sqsClient.receiveMessage(new ReceiveMessageRequest(queueUrl).withWaitTimeSeconds(20));
175+
return sqsClient.receiveMessage(
176+
new ReceiveMessageRequest(externalQueueUrl(queueUrl)).withWaitTimeSeconds(20));
172177
}
173178

174179
void purgeQueue(String queueUrl) {
175-
sqsClient.purgeQueue(new PurgeQueueRequest(queueUrl));
180+
sqsClient.purgeQueue(new PurgeQueueRequest(externalQueueUrl(queueUrl)));
176181
}
177182

178183
void putSampleData(String bucketName) {
@@ -188,4 +193,10 @@ void disconnect() {
188193
localStack.stop();
189194
}
190195
}
196+
197+
private String externalQueueUrl(String queueUrl) {
198+
URI endpoint = localStack.getEndpoint();
199+
URI queueUri = URI.create(queueUrl);
200+
return endpoint.resolve(queueUri.getRawPath()).toString();
201+
}
191202
}

instrumentation/aws-sdk/aws-sdk-1.11/library-autoconfigure/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@ dependencies {
1919
testLibrary("com.amazonaws:aws-java-sdk-sns:1.11.106")
2020
testLibrary("com.amazonaws:aws-java-sdk-sqs:1.11.106")
2121

22-
// last version that does not use json protocol
23-
latestDepTestLibrary("com.amazonaws:aws-java-sdk-sqs:1.12.583") // documented limitation
22+
latestDepTestLibrary("com.amazonaws:aws-java-sdk-sqs:latest.release")
2423
}
2524

2625
tasks {
2726
withType<Test>().configureEach {
2827
systemProperty("otel.instrumentation.aws-sdk.experimental-span-attributes", "true")
2928
systemProperty("otel.instrumentation.messaging.experimental.capture-headers", "Test-Message-Header")
29+
systemProperty("testLatestDeps", otelProps.testLatestDeps)
3030
}
3131

3232
val testReceiveSpansDisabled by registering(Test::class) {

instrumentation/aws-sdk/aws-sdk-1.11/library/build.gradle.kts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@ dependencies {
2020
testLibrary("com.amazonaws:aws-java-sdk-sns:1.11.106")
2121
testLibrary("com.amazonaws:aws-java-sdk-stepfunctions:1.11.106")
2222

23-
// last version that does not use json protocol
24-
latestDepTestLibrary("com.amazonaws:aws-java-sdk-sqs:1.12.583") // documented limitation
23+
latestDepTestLibrary("com.amazonaws:aws-java-sdk-sqs:latest.release")
2524
}
2625

2726
if (!otelProps.testLatestDeps) {
@@ -51,6 +50,10 @@ testing {
5150
}
5251

5352
tasks {
53+
withType<Test>().configureEach {
54+
systemProperty("testLatestDeps", otelProps.testLatestDeps)
55+
}
56+
5457
val testStableSemconv by registering(Test::class) {
5558
testClassesDirs = sourceSets.test.get().output.classesDirs
5659
classpath = sourceSets.test.get().runtimeClasspath

instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsSuppressReceiveSpansTest.java

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
package io.opentelemetry.instrumentation.awssdk.v1_11;
77

88
import static io.opentelemetry.api.common.AttributeKey.stringKey;
9+
import static io.opentelemetry.instrumentation.testing.util.TestLatestDeps.testLatestDeps;
910
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
1011
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies;
1112
import static io.opentelemetry.semconv.HttpAttributes.HTTP_REQUEST_METHOD;
@@ -38,6 +39,7 @@
3839
import io.opentelemetry.api.trace.SpanKind;
3940
import io.opentelemetry.instrumentation.test.utils.PortUtils;
4041
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
42+
import io.opentelemetry.sdk.testing.assertj.AttributeAssertion;
4143
import org.elasticmq.rest.sqs.SQSRestServer;
4244
import org.elasticmq.rest.sqs.SQSRestServerBuilder;
4345
import org.junit.jupiter.api.AfterEach;
@@ -56,6 +58,12 @@ public abstract class AbstractSqsSuppressReceiveSpansTest {
5658
protected abstract AmazonSQSAsyncClientBuilder configureClient(
5759
AmazonSQSAsyncClientBuilder client);
5860

61+
private static AttributeAssertion requestId() {
62+
return testLatestDeps()
63+
? equalTo(AWS_REQUEST_ID, null)
64+
: satisfies(AWS_REQUEST_ID, val -> val.isInstanceOf(String.class));
65+
}
66+
5967
@BeforeEach
6068
void setUp() {
6169
sqsPort = PortUtils.findOpenPort();
@@ -105,7 +113,7 @@ void testSimpleSqsProducerConsumerServices() {
105113
.hasAttributesSatisfyingExactly(
106114
equalTo(stringKey("aws.agent"), "java-aws-sdk"),
107115
equalTo(stringKey("aws.queue.name"), "testSdkSqs"),
108-
satisfies(AWS_REQUEST_ID, val -> val.isInstanceOf(String.class)),
116+
requestId(),
109117
equalTo(RPC_SYSTEM, "aws-api"),
110118
equalTo(RPC_SERVICE, "AmazonSQS"),
111119
equalTo(RPC_METHOD, "CreateQueue"),
@@ -126,7 +134,7 @@ void testSimpleSqsProducerConsumerServices() {
126134
equalTo(
127135
AWS_SQS_QUEUE_URL,
128136
"http://localhost:" + sqsPort + "/000000000000/testSdkSqs"),
129-
satisfies(AWS_REQUEST_ID, val -> val.isInstanceOf(String.class)),
137+
requestId(),
130138
equalTo(RPC_SYSTEM, "aws-api"),
131139
equalTo(RPC_SERVICE, "AmazonSQS"),
132140
equalTo(RPC_METHOD, "SendMessage"),
@@ -150,7 +158,7 @@ void testSimpleSqsProducerConsumerServices() {
150158
equalTo(
151159
AWS_SQS_QUEUE_URL,
152160
"http://localhost:" + sqsPort + "/000000000000/testSdkSqs"),
153-
satisfies(AWS_REQUEST_ID, val -> val.isInstanceOf(String.class)),
161+
requestId(),
154162
equalTo(RPC_SYSTEM, "aws-api"),
155163
equalTo(RPC_SERVICE, "AmazonSQS"),
156164
equalTo(RPC_METHOD, "ReceiveMessage"),
@@ -202,7 +210,7 @@ void testSimpleSqsProducerConsumerServicesWithParentSpan() {
202210
.hasAttributesSatisfyingExactly(
203211
equalTo(stringKey("aws.agent"), "java-aws-sdk"),
204212
equalTo(stringKey("aws.queue.name"), "testSdkSqs"),
205-
satisfies(AWS_REQUEST_ID, val -> val.isInstanceOf(String.class)),
213+
requestId(),
206214
equalTo(RPC_SYSTEM, "aws-api"),
207215
equalTo(RPC_SERVICE, "AmazonSQS"),
208216
equalTo(RPC_METHOD, "CreateQueue"),
@@ -223,7 +231,7 @@ void testSimpleSqsProducerConsumerServicesWithParentSpan() {
223231
equalTo(
224232
AWS_SQS_QUEUE_URL,
225233
"http://localhost:" + sqsPort + "/000000000000/testSdkSqs"),
226-
satisfies(AWS_REQUEST_ID, val -> val.isInstanceOf(String.class)),
234+
requestId(),
227235
equalTo(RPC_SYSTEM, "aws-api"),
228236
equalTo(RPC_SERVICE, "AmazonSQS"),
229237
equalTo(RPC_METHOD, "SendMessage"),
@@ -247,7 +255,7 @@ void testSimpleSqsProducerConsumerServicesWithParentSpan() {
247255
equalTo(
248256
AWS_SQS_QUEUE_URL,
249257
"http://localhost:" + sqsPort + "/000000000000/testSdkSqs"),
250-
satisfies(AWS_REQUEST_ID, val -> val.isInstanceOf(String.class)),
258+
requestId(),
251259
equalTo(RPC_SYSTEM, "aws-api"),
252260
equalTo(RPC_SERVICE, "AmazonSQS"),
253261
equalTo(RPC_METHOD, "ReceiveMessage"),
@@ -282,7 +290,7 @@ void testSimpleSqsProducerConsumerServicesWithParentSpan() {
282290
equalTo(
283291
AWS_SQS_QUEUE_URL,
284292
"http://localhost:" + sqsPort + "/000000000000/testSdkSqs"),
285-
satisfies(AWS_REQUEST_ID, val -> val.isInstanceOf(String.class)),
293+
requestId(),
286294
equalTo(RPC_SYSTEM, "aws-api"),
287295
equalTo(RPC_SERVICE, "AmazonSQS"),
288296
equalTo(RPC_METHOD, "ReceiveMessage"),

0 commit comments

Comments
 (0)