aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Toyonaga <rtoyonag@redhat.com>2024-04-30 16:57:16 +0000
committerSeverin Gehwolf <sgehwolf@openjdk.org>2024-04-30 16:57:16 +0000
commitcabaf7482681fb17cb7722377da6baab0ed2fed3 (patch)
treeda9b297129cdcdade9e986ef6ae45c1c46405f6e
parent137a8b9dcfaad4a96dfd22f57c759dfc4ea71f05 (diff)
downloadlibcore-upstream-openjdk11u.tar.gz
8305931: jdk/jfr/jcmd/TestJcmdDumpPathToGCRoots.java failed with "Expected chains but found none"jdk11u/jdk-11.0.24+1upstream-openjdk11u
Backport-of: 65be5e0c547d74ca7de288b164aa9bd6d6855685
-rw-r--r--test/jdk/jdk/jfr/jcmd/TestJcmdDumpPathToGCRoots.java71
1 files changed, 39 insertions, 32 deletions
diff --git a/test/jdk/jdk/jfr/jcmd/TestJcmdDumpPathToGCRoots.java b/test/jdk/jdk/jfr/jcmd/TestJcmdDumpPathToGCRoots.java
index ea1eba1c621..322e1146871 100644
--- a/test/jdk/jdk/jfr/jcmd/TestJcmdDumpPathToGCRoots.java
+++ b/test/jdk/jdk/jfr/jcmd/TestJcmdDumpPathToGCRoots.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2023, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -76,43 +76,50 @@ public class TestJcmdDumpPathToGCRoots {
}
private static void testDump(String pathToGcRoots, Map<String, String> settings, boolean expectedChains) throws Exception {
- try (Recording r = new Recording()) {
- Map<String, String> p = new HashMap<>(settings);
- p.put(EventNames.OldObjectSample + "#" + Enabled.NAME, "true");
- r.setName("dodo");
- r.setSettings(p);
- r.setToDisk(true);
- r.start();
- clearLeak();
- System.out.println("Recording id: " + r.getId());
- System.out.println("Settings: " + settings.toString());
- System.out.println("Command: JFR.dump " + pathToGcRoots);
- System.out.println("Chains expected: " + expectedChains);
- buildLeak();
- System.gc();
- System.gc();
- File recording = new File("TestJcmdDumpPathToGCRoots" + r.getId() + ".jfr");
- recording.delete();
- JcmdHelper.jcmd("JFR.dump", "name=dodo", pathToGcRoots, "filename=" + recording.getAbsolutePath());
- r.setSettings(Collections.emptyMap());
- List<RecordedEvent> events = RecordingFile.readAllEvents(recording.toPath());
- if (events.isEmpty()) {
- throw new Exception("No events found in recoding");
- }
- boolean chains = hasChains(events);
- if (expectedChains && !chains) {
- System.out.println(events);
- throw new Exception("Expected chains but found none");
- }
- if (!expectedChains && chains) {
- System.out.println(events);
- throw new Exception("Didn't expect chains but found some");
+ while (true) {
+ try (Recording r = new Recording()) {
+ Map<String, String> p = new HashMap<>(settings);
+ p.put(EventNames.OldObjectSample + "#" + Enabled.NAME, "true");
+ r.setName("dodo");
+ r.setSettings(p);
+ r.setToDisk(true);
+ r.start();
+ clearLeak();
+ System.out.println("Recording id: " + r.getId());
+ System.out.println("Settings: " + settings.toString());
+ System.out.println("Command: JFR.dump " + pathToGcRoots);
+ System.out.println("Chains expected: " + expectedChains);
+ buildLeak();
+ System.gc();
+ System.gc();
+ File recording = new File("TestJcmdDumpPathToGCRoots" + r.getId() + ".jfr");
+ recording.delete();
+ JcmdHelper.jcmd("JFR.dump", "name=dodo", pathToGcRoots, "filename=" + recording.getAbsolutePath());
+ r.setSettings(Collections.emptyMap());
+ List<RecordedEvent> events = RecordingFile.readAllEvents(recording.toPath());
+ if (events.isEmpty()) {
+ System.out.println("No events found in recording. Retrying.");
+ continue;
+ }
+ boolean chains = hasChains(events);
+ if (expectedChains && !chains) {
+ System.out.println(events);
+ System.out.println("Expected chains but found none. Retrying.");
+ continue;
+ }
+ if (!expectedChains && chains) {
+ System.out.println(events);
+ System.out.println("Didn't expect chains but found some. Retrying.");
+ continue;
+ }
+ return; // Success
}
}
}
private static void clearLeak() {
leak.clear();
+ System.gc();
}
private static boolean hasChains(List<RecordedEvent> events) throws IOException {