From d996002f32e036ebf20f884e84ff665e7c940f70 Mon Sep 17 00:00:00 2001 From: Brice Dutheil Date: Thu, 4 Dec 2025 17:55:35 +0100 Subject: [PATCH 1/3] fix: Try using a test task specific folder for user preference to avoid locks --- .../src/main/kotlin/dd-trace-java.configure-tests.gradle.kts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/buildSrc/src/main/kotlin/dd-trace-java.configure-tests.gradle.kts b/buildSrc/src/main/kotlin/dd-trace-java.configure-tests.gradle.kts index d0060bbf278..23289cb08e6 100644 --- a/buildSrc/src/main/kotlin/dd-trace-java.configure-tests.gradle.kts +++ b/buildSrc/src/main/kotlin/dd-trace-java.configure-tests.gradle.kts @@ -42,6 +42,10 @@ tasks.withType().configureEach { !rootProject.providers.gradleProperty("rerun.tests.${project.name}").isPresent } + // Trick to avoid on CI: "Couldn't flush user prefs: java.util.prefs.BackingStoreException: Couldn't get file lock." + // Use a task-specific user prefs directory + systemProperty("java.util.prefs.userRoot", "$buildDir/tmp/userPrefs/${name}") + // Split up tests that want to run forked in their own separate JVM for generated tasks if (name.startsWith("forkedTest") || name.endsWith("ForkedTest")) { setExcludes(emptyList()) From 494569698dd4e78aebb12c0e30069e2cfbe49709 Mon Sep 17 00:00:00 2001 From: Brice Dutheil Date: Fri, 5 Dec 2025 18:58:33 +0100 Subject: [PATCH 2/3] fix: Use a temporary preference folder for gradle smoke tests --- .../trace/civisibility/CiVisibilitySmokeTest.groovy | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/src/main/groovy/datadog/trace/civisibility/CiVisibilitySmokeTest.groovy b/dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/src/main/groovy/datadog/trace/civisibility/CiVisibilitySmokeTest.groovy index 31e4d6a67af..6682d04cfc1 100644 --- a/dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/src/main/groovy/datadog/trace/civisibility/CiVisibilitySmokeTest.groovy +++ b/dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/src/main/groovy/datadog/trace/civisibility/CiVisibilitySmokeTest.groovy @@ -7,8 +7,11 @@ import datadog.trace.api.config.GeneralConfig import datadog.trace.api.config.TraceInstrumentationConfig import datadog.trace.api.config.TracerConfig import spock.lang.Specification +import spock.lang.TempDir import spock.util.environment.Jvm +import java.nio.file.Path + import static datadog.trace.util.ConfigStrings.propertyNameToSystemPropertyName abstract class CiVisibilitySmokeTest extends Specification { @@ -21,6 +24,9 @@ abstract class CiVisibilitySmokeTest extends Specification { private static final Map DEFAULT_TRACER_CONFIG = defaultJvmArguments() + @TempDir + protected Path prefsDir + protected static String buildJavaHome() { if (Jvm.current.isJava8()) { return System.getenv("JAVA_8_HOME") @@ -69,6 +75,10 @@ abstract class CiVisibilitySmokeTest extends Specification { protected List buildJvmArguments(String mockBackendIntakeUrl, String serviceName, Map additionalArgs) { List arguments = [] + + // Trick to avoid on CI: "Couldn't flush user prefs: java.util.prefs.BackingStoreException: Couldn't get file lock." + arguments += "-Djava.util.prefs.userRoot=${prefsDir.toAbsolutePath()}" + Map argMap = buildJvmArgMap(mockBackendIntakeUrl, serviceName, additionalArgs) // for convenience when debugging locally From 6daaf0107edd39f8c55a01b90b382026f8c75711 Mon Sep 17 00:00:00 2001 From: Alexey Kuznetsov Date: Sat, 6 Dec 2025 09:46:15 -0500 Subject: [PATCH 3/3] Fixed temp folder for prefs. --- .../trace/civisibility/CiVisibilitySmokeTest.groovy | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/src/main/groovy/datadog/trace/civisibility/CiVisibilitySmokeTest.groovy b/dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/src/main/groovy/datadog/trace/civisibility/CiVisibilitySmokeTest.groovy index 6682d04cfc1..5cba421fb76 100644 --- a/dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/src/main/groovy/datadog/trace/civisibility/CiVisibilitySmokeTest.groovy +++ b/dd-java-agent/agent-ci-visibility/civisibility-test-fixtures/src/main/groovy/datadog/trace/civisibility/CiVisibilitySmokeTest.groovy @@ -6,6 +6,7 @@ import datadog.trace.api.config.CiVisibilityConfig import datadog.trace.api.config.GeneralConfig import datadog.trace.api.config.TraceInstrumentationConfig import datadog.trace.api.config.TracerConfig +import spock.lang.Shared import spock.lang.Specification import spock.lang.TempDir import spock.util.environment.Jvm @@ -27,6 +28,10 @@ abstract class CiVisibilitySmokeTest extends Specification { @TempDir protected Path prefsDir + @Shared + @TempDir + protected Path prefsDirShared + protected static String buildJavaHome() { if (Jvm.current.isJava8()) { return System.getenv("JAVA_8_HOME") @@ -77,7 +82,9 @@ abstract class CiVisibilitySmokeTest extends Specification { List arguments = [] // Trick to avoid on CI: "Couldn't flush user prefs: java.util.prefs.BackingStoreException: Couldn't get file lock." - arguments += "-Djava.util.prefs.userRoot=${prefsDir.toAbsolutePath()}" + // Some tests can setup arguments on spec level, so `prefsDir` will be `null` during `setupSpec()`. + String prefsPath = (prefsDir ?: prefsDirShared).toAbsolutePath() + arguments += "-Djava.util.prefs.userRoot=$prefsPath".toString() Map argMap = buildJvmArgMap(mockBackendIntakeUrl, serviceName, additionalArgs)