Skip to content

Commit 873372b

Browse files
committed
Adjust JFR checks for J9
1 parent b8deefa commit 873372b

File tree

4 files changed

+15
-6
lines changed

4 files changed

+15
-6
lines changed

dd-java-agent/agent-profiling/profiling-uploader/src/test/java/com/datadog/profiling/uploader/ProfileUploaderTest.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import datadog.common.version.VersionInfo;
4343
import datadog.trace.api.Config;
4444
import datadog.trace.api.DDTags;
45+
import datadog.trace.api.Platform;
4546
import datadog.trace.api.profiling.ProfilingSnapshot;
4647
import datadog.trace.api.profiling.RecordingData;
4748
import datadog.trace.api.profiling.RecordingInputStream;
@@ -561,7 +562,10 @@ public void test413Response() throws Exception {
561562

562563
verify(recording).release();
563564

564-
if (Files.exists(Paths.get(System.getProperty("java.home"), "bin", "jfr"))) {
565+
// J9 has 'almost' implemented JFR, but not really
566+
// we need to skip this part for J9
567+
if (!Platform.isJ9()
568+
&& Files.exists(Paths.get(System.getProperty("java.home"), "bin", "jfr"))) {
565569
verify(ioLogger)
566570
.error(
567571
eq("Failed to upload profile, it's too big. Dumping information about the profile"));

dd-java-agent/agent-profiling/profiling-uploader/src/test/java/com/datadog/profiling/uploader/util/JfrCliHelperTest.java

+5
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import static org.mockito.Mockito.when;
1010
import static org.mockito.Mockito.withSettings;
1111

12+
import datadog.trace.api.Platform;
1213
import datadog.trace.api.profiling.RecordingData;
1314
import datadog.trace.api.profiling.RecordingInputStream;
1415
import datadog.trace.relocate.api.IOLogger;
@@ -24,6 +25,7 @@
2425
import java.util.Set;
2526
import java.util.zip.GZIPOutputStream;
2627
import org.apache.commons.io.IOUtils;
28+
import org.junit.jupiter.api.Assumptions;
2729
import org.junit.jupiter.api.Test;
2830
import org.junit.jupiter.api.extension.ExtendWith;
2931
import org.mockito.Mock;
@@ -44,6 +46,9 @@ public class JfrCliHelperTest {
4446

4547
@Test
4648
public void testInvokeOn() throws Exception {
49+
// J9 may have 'jfr' command present but it requires additional setup
50+
// Currently we don't support J9 JFR so we can safely skip this test
51+
Assumptions.assumeFalse(Platform.isJ9());
4752
final RecordingData recording = mockRecordingData();
4853

4954
JfrCliHelper.invokeOn(recording, ioLogger);

dd-java-agent/agent-profiling/src/main/java/com/datadog/profiling/agent/CompositeController.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -153,11 +153,10 @@ public static Controller build(ConfigProvider provider, ControllerContext contex
153153
}
154154
if (!isOracleJDK8) {
155155
try {
156-
Class<?> frClass = Class.forName("jdk.jfr.FlightRecorder");
157-
boolean isJfrAvailable =
158-
(boolean) frClass.getMethod("isAvailable", new Class<?>[0]).invoke(null);
159-
if (isJfrAvailable) {
156+
if (Platform.hasJfr()) {
160157
controllers.add(OpenJdkController.instance(provider));
158+
} else {
159+
log.debug("JFR is not available on this platform");
161160
}
162161
} catch (Throwable ignored) {
163162
log.debug("Failed to load openjdk profiler", ignored);

internal-api/src/main/java/datadog/trace/api/Platform.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ private static boolean checkForJfr() {
4242
* Need this custom check because ClassLoaderMatchers.hasClassNamed() does not support bootstrap class loader yet.
4343
* Note: the downside of this is that we load some JFR classes at startup.
4444
*/
45-
return ClassLoader.getSystemClassLoader().getResource("jdk/jfr/Event.class") != null;
45+
Class<?> frClass = Class.forName("jdk.jfr.FlightRecorder");
46+
return (boolean) frClass.getMethod("isAvailable", new Class<?>[0]).invoke(null);
4647
} catch (Throwable e) {
4748
return false;
4849
}

0 commit comments

Comments
 (0)