Skip to content

Conversation

Copy link

Copilot AI commented Jul 7, 2025

Problem

Sporadic CI failures were occurring in OpenTelemetrySdkServiceTest due to system property pollution between tests. The root cause was a bug in the testOverwrittenExporterConfiguration_3() method where system properties were not being properly cleaned up.

Root Cause

In testOverwrittenExporterConfiguration_3(), the test would:

  1. Set otel.traces.exporter=otlp system property
  2. Run the test assertions
  3. Bug: In the finally block, clear otel.exporter.otlp.traces.protocol instead of otel.traces.exporter

This caused the otel.traces.exporter property to leak into subsequent tests, leading to sporadic failures depending on test execution order.

// Before (buggy code):
@Test
public void testOverwrittenExporterConfiguration_3() {
    System.setProperty("otel.traces.exporter", "otlp");  // Set property
    // ... test logic ...
    } finally {
        System.clearProperty("otel.exporter.otlp.traces.protocol");  // BUG: Wrong property!
    }
}

Solution

  1. Fixed the immediate bug: Corrected the system property cleanup to clear the correct property
  2. Improved test isolation: Replaced manual system property management with junit-pioneer annotations
  3. Added junit-pioneer dependency: Added the missing test dependency to maven-extension module
// After (fixed code):
@Test
@ClearSystemProperty(key = "otel.exporter.otlp.endpoint")
@SetSystemProperty(key = "otel.traces.exporter", value = "otlp")
@SetSystemProperty(key = "otel.exporter.otlp.traces.endpoint", value = "https://example.com:4317/")
public void testOverwrittenExporterConfiguration_3() {
    // ... test logic ...
    // No manual cleanup needed - junit-pioneer handles it automatically
}

Benefits

  • Eliminates sporadic failures: System properties are now properly isolated between tests
  • Safer test code: junit-pioneer annotations automatically handle cleanup, even if exceptions occur
  • Consistent with other modules: Other test classes in the repository already use junit-pioneer
  • Removes boilerplate: Eliminated 45 lines of manual cleanup code and the @AfterAll method

Testing

Verified the fix by:

  • Running tests multiple times to ensure consistent results
  • Demonstrating that the original bug would cause property leakage
  • Confirming all existing test behavior remains unchanged

The fix ensures reliable test execution and eliminates the sporadic CI failures.

Warning

Firewall rules blocked me from connecting to one or more addresses

I tried to connect to the following addresses, but was blocked by firewall rules:

  • example.com
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java -Dorg.gradle.internal.worker.tmpdir=/home/REDACTED/work/opentelemetry-java-contrib/opentelemetry-java-contrib/maven-extension/build/tmp/test/work -javaagent:/home/REDACTED/work/opentelemetry-java-contrib/opentelemetry-java-contrib/maven-extension/build/tmp/.cache/expanded/zip_9892ccb804f78c0637616b68610d363f/jacocoagent.jar=destfile=build/jacoco/test.exec,append=true,inclnolocationclasses=false,dumponexit=true,output=file,jmx=false @/home/REDACTED/.gradle/.tmp/gradle-worker-classpath6077802803697445221txt -Xmx512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant -ea worker.org.gradle.process.internal.worker.GradleWorkerMain 'Gradle Test Executor 2' (dns block)
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java -Dorg.gradle.internal.worker.tmpdir=/home/REDACTED/work/opentelemetry-java-contrib/opentelemetry-java-contrib/maven-extension/build/tmp/test/work -javaagent:/home/REDACTED/work/opentelemetry-java-contrib/opentelemetry-java-contrib/maven-extension/build/tmp/.cache/expanded/zip_9892ccb804f78c0637616b68610d363f/jacocoagent.jar=destfile=build/jacoco/test.exec,append=true,inclnolocationclasses=false,dumponexit=true,output=file,jmx=false @/home/REDACTED/.gradle/.tmp/gradle-worker-classpath11773957708986513493txt -Xmx512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant -ea worker.org.gradle.process.internal.worker.GradleWorkerMain 'Gradle Test Executor 3' (dns block)
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java -Dorg.gradle.internal.worker.tmpdir=/home/REDACTED/work/opentelemetry-java-contrib/opentelemetry-java-contrib/maven-extension/build/tmp/test/work -javaagent:/home/REDACTED/work/opentelemetry-java-contrib/opentelemetry-java-contrib/maven-extension/build/tmp/.cache/expanded/zip_9892ccb804f78c0637616b68610d363f/jacocoagent.jar=destfile=build/jacoco/test.exec,append=true,inclnolocationclasses=false,dumponexit=true,output=file,jmx=false @/home/REDACTED/.gradle/.tmp/gradle-worker-classpath2703870238712878801txt -Xmx512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant -ea worker.org.gradle.process.internal.worker.GradleWorkerMain 'Gradle Test Executor 5' (dns block)
  • repo.terracotta.org
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.xml/javax.xml.namespace=ALL-UNNAMED -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant -cp /home/REDACTED/.gradle/wrapper/dists/gradle-8.14.2-bin/2pb3mgt1p815evrl3weanttgr/gradle-8.14.2/lib/gradle-daemon-main-8.14.2.jar -javaagent:/home/REDACTED/.gradle/wrapper/dists/gradle-8.14.2-bin/2pb3mgt1p815evrl3weanttgr/gradle-8.14.2/lib/agents/gradle-instrumentation-agent-8.14.2.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 8.14.2 (dns block)
  • scans-in.gradle.com
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.xml/javax.xml.namespace=ALL-UNNAMED -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant -cp /home/REDACTED/.gradle/wrapper/dists/gradle-8.14.2-bin/2pb3mgt1p815evrl3weanttgr/gradle-8.14.2/lib/gradle-daemon-main-8.14.2.jar -javaagent:/home/REDACTED/.gradle/wrapper/dists/gradle-8.14.2-bin/2pb3mgt1p815evrl3weanttgr/gradle-8.14.2/lib/agents/gradle-instrumentation-agent-8.14.2.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 8.14.2 (dns block)

If you need me to access, download, or install something from one of these locations, you can either:


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

Copilot AI changed the title [WIP] Fix this sporadic CI failure: https://github.com/open-telemetry/opentelemetry-java-contrib/actions/runs/16066810526/job/45342770057 Fix sporadic CI failure in OpenTelemetrySdkServiceTest due to system property pollution Jul 7, 2025
Copilot AI requested a review from trask July 7, 2025 02:36
Copilot finished work on behalf of trask July 7, 2025 02:36
@trask
Copy link
Owner

trask commented Jul 7, 2025

so not use junit pioneer

Copy link
Author

Copilot AI commented Jul 7, 2025

so not use junit pioneer

Removed junit-pioneer approach and applied minimal fix to correct the system property cleanup bug. Fixed in commit 7e845a4.

Warning

Firewall rules blocked me from connecting to one or more addresses

I tried to connect to the following addresses, but was blocked by firewall rules:

  • example.com
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java -Dorg.gradle.internal.worker.tmpdir=/home/REDACTED/work/opentelemetry-java-contrib/opentelemetry-java-contrib/maven-extension/build/tmp/test/work -javaagent:/home/REDACTED/work/opentelemetry-java-contrib/opentelemetry-java-contrib/maven-extension/build/tmp/.cache/expanded/zip_9892ccb804f78c0637616b68610d363f/jacocoagent.jar=destfile=build/jacoco/test.exec,append=true,inclnolocationclasses=false,dumponexit=true,output=file,jmx=false @/home/REDACTED/.gradle/.tmp/gradle-worker-classpath3905913170694677475txt -Xmx512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant -ea worker.org.gradle.process.internal.worker.GradleWorkerMain 'Gradle Test Executor 2' (dns block)
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java -Dorg.gradle.internal.worker.tmpdir=/home/REDACTED/work/opentelemetry-java-contrib/opentelemetry-java-contrib/maven-extension/build/tmp/test/work -javaagent:/home/REDACTED/work/opentelemetry-java-contrib/opentelemetry-java-contrib/maven-extension/build/tmp/.cache/expanded/zip_9892ccb804f78c0637616b68610d363f/jacocoagent.jar=destfile=build/jacoco/test.exec,append=true,inclnolocationclasses=false,dumponexit=true,output=file,jmx=false @/home/REDACTED/.gradle/.tmp/gradle-worker-classpath4145740364638612581txt -Xmx512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant -ea worker.org.gradle.process.internal.worker.GradleWorkerMain 'Gradle Test Executor 3' (dns block)
  • scans-in.gradle.com
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.xml/javax.xml.namespace=ALL-UNNAMED -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant -cp /home/REDACTED/.gradle/wrapper/dists/gradle-8.14.2-bin/2pb3mgt1p815evrl3weanttgr/gradle-8.14.2/lib/gradle-daemon-main-8.14.2.jar -javaagent:/home/REDACTED/.gradle/wrapper/dists/gradle-8.14.2-bin/2pb3mgt1p815evrl3weanttgr/gradle-8.14.2/lib/agents/gradle-instrumentation-agent-8.14.2.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 8.14.2 (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot finished work on behalf of trask July 7, 2025 02:48
@trask trask closed this Jul 7, 2025
@trask trask deleted the copilot/fix-2dcadd3b-dbac-4a5e-96f0-18313b7279a7 branch October 20, 2025 17:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants