Skip to content

Commit 67d49fe

Browse files
authored
Don't use unsafe on jdk23+ (#15091)
1 parent d757dd8 commit 67d49fe

File tree

63 files changed

+921
-627
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+921
-627
lines changed

.github/workflows/build-common.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,7 @@ jobs:
247247
- 17
248248
- 21
249249
- 25 # renovate: datasource=java-version
250+
- 25-deny-unsafe
250251
vm:
251252
- hotspot
252253
- openj9
@@ -260,6 +261,8 @@ jobs:
260261
- true
261262
exclude:
262263
- vm: ${{ inputs.skip-openj9-tests && 'openj9' || '' }}
264+
- test-java-version: 25-deny-unsafe
265+
vm: openj9
263266
fail-fast: false
264267
steps:
265268
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
@@ -273,7 +276,7 @@ jobs:
273276
with:
274277
# using zulu because new releases get published quickly
275278
distribution: ${{ matrix.vm == 'hotspot' && 'zulu' || 'adopt-openj9'}}
276-
java-version: ${{ matrix.test-java-version }}
279+
java-version: ${{ matrix.test-java-version != '25-deny-unsafe' && matrix.test-java-version || '25' }}
277280

278281
- name: Set up JDK for running Gradle
279282
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
@@ -329,6 +332,7 @@ jobs:
329332
-PtestJavaVersion=${{ matrix.test-java-version }}
330333
-PtestJavaVM=${{ matrix.vm }}
331334
-PtestIndy=${{ matrix.test-indy }}
335+
-PdenyUnsafe=${{ matrix.test-java-version == '25-deny-unsafe' && 'true' || 'false' }}
332336
-Porg.gradle.java.installations.paths=${{ steps.setup-test-java.outputs.path }}
333337
-Porg.gradle.java.installations.auto-download=false
334338
${{ inputs.no-build-cache && ' --no-build-cache' || '' }}

conventions/src/main/kotlin/io.opentelemetry.instrumentation.javaagent-testing.gradle.kts

Lines changed: 38 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ plugins {
66
id("io.opentelemetry.instrumentation.javaagent-shadowing")
77
}
88

9+
val denyUnsafe = gradle.startParameter.projectProperties["denyUnsafe"] == "true"
10+
extra["denyUnsafe"] = denyUnsafe
11+
912
dependencies {
1013
/*
1114
Dependencies added to this configuration will be found by the muzzle gradle plugin during code
@@ -72,31 +75,41 @@ class JavaagentTestArgumentsProvider(
7275
@PathSensitive(PathSensitivity.RELATIVE)
7376
val shadowJar: File,
7477
) : CommandLineArgumentProvider {
75-
override fun asArguments(): Iterable<String> = listOf(
76-
"-Dotel.javaagent.debug=true",
77-
"-javaagent:${agentShadowJar.absolutePath}",
78-
// make the path to the javaagent available to tests
79-
"-Dotel.javaagent.testing.javaagent-jar-path=${agentShadowJar.absolutePath}",
80-
"-Dotel.javaagent.experimental.initializer.jar=${shadowJar.absolutePath}",
81-
"-Dotel.javaagent.testing.additional-library-ignores.enabled=false",
82-
"-Dotel.javaagent.testing.fail-on-context-leak=${findProperty("failOnContextLeak") != false}",
83-
// prevent sporadic gradle deadlocks, see SafeLogger for more details
84-
"-Dotel.javaagent.testing.transform-safe-logging.enabled=true",
85-
// Reduce noise in assertion messages since we don't need to verify this in most tests. We check
86-
// in smoke tests instead.
87-
"-Dotel.javaagent.add-thread-details=false",
88-
"-Dotel.javaagent.experimental.indy=${findProperty("testIndy") == "true"}",
89-
// suppress repeated logging of "No metric data to export - skipping export."
90-
// since PeriodicMetricReader is configured with a short interval
91-
"-Dio.opentelemetry.javaagent.slf4j.simpleLogger.log.io.opentelemetry.sdk.metrics.export.PeriodicMetricReader=INFO",
92-
// suppress a couple of verbose ClassNotFoundException stack traces logged at debug level
93-
"-Dio.opentelemetry.javaagent.slf4j.simpleLogger.log.io.grpc.internal.ServerImplBuilder=INFO",
94-
"-Dio.opentelemetry.javaagent.slf4j.simpleLogger.log.io.grpc.internal.ManagedChannelImplBuilder=INFO",
95-
"-Dio.opentelemetry.javaagent.slf4j.simpleLogger.log.io.perfmark.PerfMark=INFO",
96-
"-Dio.opentelemetry.javaagent.slf4j.simpleLogger.log.io.grpc.Context=INFO",
97-
"-Dotel.java.experimental.span-attributes.copy-from-baggage.include=test-baggage-key-1,test-baggage-key-2",
98-
"-Dotel.instrumentation.common.peer-service-mapping=127.0.0.1=test-peer-service,localhost=test-peer-service,192.0.2.1=test-peer-service"
99-
)
78+
override fun asArguments(): Iterable<String> {
79+
val list = mutableListOf(
80+
"-Dotel.javaagent.debug=true",
81+
"-javaagent:${agentShadowJar.absolutePath}",
82+
// make the path to the javaagent available to tests
83+
"-Dotel.javaagent.testing.javaagent-jar-path=${agentShadowJar.absolutePath}",
84+
"-Dotel.javaagent.experimental.initializer.jar=${shadowJar.absolutePath}",
85+
"-Dotel.javaagent.testing.additional-library-ignores.enabled=false",
86+
"-Dotel.javaagent.testing.fail-on-context-leak=${findProperty("failOnContextLeak") != false}",
87+
// prevent sporadic gradle deadlocks, see SafeLogger for more details
88+
"-Dotel.javaagent.testing.transform-safe-logging.enabled=true",
89+
// Reduce noise in assertion messages since we don't need to verify this in most tests. We check
90+
// in smoke tests instead.
91+
"-Dotel.javaagent.add-thread-details=false",
92+
"-Dotel.javaagent.experimental.indy=${findProperty("testIndy") == "true"}",
93+
// suppress repeated logging of "No metric data to export - skipping export."
94+
// since PeriodicMetricReader is configured with a short interval
95+
"-Dio.opentelemetry.javaagent.slf4j.simpleLogger.log.io.opentelemetry.sdk.metrics.export.PeriodicMetricReader=INFO",
96+
// suppress a couple of verbose ClassNotFoundException stack traces logged at debug level
97+
"-Dio.opentelemetry.javaagent.slf4j.simpleLogger.log.io.grpc.internal.ServerImplBuilder=INFO",
98+
"-Dio.opentelemetry.javaagent.slf4j.simpleLogger.log.io.grpc.internal.ManagedChannelImplBuilder=INFO",
99+
"-Dio.opentelemetry.javaagent.slf4j.simpleLogger.log.io.perfmark.PerfMark=INFO",
100+
"-Dio.opentelemetry.javaagent.slf4j.simpleLogger.log.io.grpc.Context=INFO",
101+
"-Dotel.java.experimental.span-attributes.copy-from-baggage.include=test-baggage-key-1,test-baggage-key-2",
102+
"-Dotel.instrumentation.common.peer-service-mapping=127.0.0.1=test-peer-service,localhost=test-peer-service,192.0.2.1=test-peer-service"
103+
)
104+
if (denyUnsafe) {
105+
list += listOf(
106+
"-Dsun.misc.unsafe.memory.access=deny",
107+
"-Dotel.instrumentation.deny-unsafe.enabled=true",
108+
"-Dio.netty.noUnsafe=true"
109+
)
110+
}
111+
return list
112+
}
100113
}
101114

102115
// need to run this after evaluate because testSets plugin adds new test tasks

instrumentation/akka/akka-actor-2.3/javaagent/build.gradle.kts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,9 @@ if (findProperty("testLatestDeps") as Boolean) {
4141
}
4242
}
4343
}
44+
45+
if (findProperty("denyUnsafe") as Boolean) {
46+
tasks.withType<Test>().configureEach {
47+
enabled = false
48+
}
49+
}

instrumentation/akka/akka-actor-fork-join-2.5/javaagent/build.gradle.kts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,9 @@ dependencies {
3232

3333
testImplementation(project(":instrumentation:executors:testing"))
3434
}
35+
36+
if (findProperty("denyUnsafe") as Boolean) {
37+
tasks.withType<Test>().configureEach {
38+
enabled = false
39+
}
40+
}

instrumentation/akka/akka-http-10.0/javaagent/build.gradle.kts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,12 @@ tasks {
7171
check {
7272
dependsOn(testing.suites)
7373
}
74+
75+
if (findProperty("denyUnsafe") as Boolean) {
76+
withType<Test>().configureEach {
77+
enabled = false
78+
}
79+
}
7480
}
7581

7682
if (findProperty("testLatestDeps") as Boolean) {

instrumentation/armeria/armeria-1.3/javaagent/build.gradle.kts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,10 @@ tasks {
2929
systemProperty("testLatestDeps", findProperty("testLatestDeps") as Boolean)
3030
systemProperty("collectMetadata", findProperty("collectMetadata")?.toString() ?: "false")
3131
}
32+
33+
if (findProperty("denyUnsafe") as Boolean) {
34+
withType<Test>().configureEach {
35+
enabled = false
36+
}
37+
}
3238
}

instrumentation/armeria/armeria-grpc-1.14/javaagent/build.gradle.kts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,9 @@ afterEvaluate {
6262
tasks.test {
6363
systemProperty("collectMetadata", findProperty("collectMetadata")?.toString() ?: "false")
6464
}
65+
66+
if (findProperty("denyUnsafe") as Boolean) {
67+
tasks.withType<Test>().configureEach {
68+
enabled = false
69+
}
70+
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,13 @@ tasks {
167167
check {
168168
dependsOn(testStableSemconv)
169169
}
170+
171+
if (findProperty("denyUnsafe") as Boolean) {
172+
// org.elasticmq:elasticmq-rest-sqs_2.13 uses unsafe. Future versions are likely to fix this.
173+
withType<Test>().configureEach {
174+
enabled = false
175+
}
176+
}
170177
}
171178

172179
if (!(findProperty("testLatestDeps") as Boolean)) {

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,4 +237,12 @@ tasks {
237237
duplicatesStrategy = DuplicatesStrategy.INCLUDE
238238
}
239239
}
240+
241+
if (findProperty("denyUnsafe") as Boolean) {
242+
// Aws2SqsTracingTest uses org.elasticmq:elasticmq-rest-sqs_2.13 that uses unsafe. Future
243+
// versions are likely to fix this.
244+
withType<Test>().configureEach {
245+
enabled = false
246+
}
247+
}
240248
}

instrumentation/camel-2.20/javaagent/build.gradle.kts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,12 @@ tasks {
104104
check {
105105
dependsOn(testStableSemconv, testExperimental)
106106
}
107+
108+
if (findProperty("denyUnsafe") as Boolean) {
109+
withType<Test>().configureEach {
110+
enabled = false
111+
}
112+
}
107113
}
108114

109115
configurations.testRuntimeClasspath {

0 commit comments

Comments
 (0)