Need to add some code to verify the results in:
vmTestbase/metaspace/stressDictionary/StressDictionary.java
in order to figure out why the test does not terminate
even when JTREG has reported "STATUS:Passed."
Here's my current proposal:
$ cat 8211211.diff.debug.txt.01
diff -r 934969c63223 test/hotspot/jtreg/vmTestbase/metaspace/stressDictionary/StressDictionary.java
--- a/test/hotspot/jtreg/vmTestbase/metaspace/stressDictionary/StressDictionary.java
+++ b/test/hotspot/jtreg/vmTestbase/metaspace/stressDictionary/StressDictionary.java
@@ -123,11 +123,54 @@
tasks.add(this.new RegularWorker());
}
ExecutorService executorService = Executors.newCachedThreadPool();
+ List<Future<Object>> results = null;
try {
- executorService.invokeAll(tasks);
+ results = executorService.invokeAll(tasks);
} catch (InterruptedException e) {
e.printStackTrace();
}
+
+ int act_results = results.size();
+ int exp_results = NUMBER_OF_CORRUPTING_THREADS +
+ NUMBER_OF_NOT_CORRUPTING_THREADS;
+ if (act_results == exp_results) {
+ System.out.println("INFO: There are " + act_results + " results.");
+ } else {
+ throw new RuntimeException("Wrong # of results from invokeAll(); "
+ + "exp_results=" + exp_results + "; "
+ + "act_results=" + act_results + ".");
+ }
+
+ int cancelled_cnt = 0;
+ int not_done_cnt = 0;
+ for (int i = 0; i < act_results; i++) {
+ if (!results.get(i).isDone()) {
+ not_done_cnt++;
+ System.err.println("ERROR: task #" + i + " is not done.");
+ }
+ if (results.get(i).isCancelled()) {
+ cancelled_cnt++;
+ System.err.println("ERROR: task #" + i + " was canceled.");
+ }
+ }
+
+ if (cancelled_cnt == 0) {
+ System.out.println("INFO: no tasks were cancelled.");
+ }
+ if (not_done_cnt == 0) {
+ System.out.println("INFO: all tasks are done.");
+ }
+ if (cancelled_cnt != 0 && not_done_cnt != 0) {
+ throw new RuntimeException(cancelled_cnt
+ + " tasks were cancelled and "
+ + not_done_cnt
+ + " tasks are not done.");
+ } else if (cancelled_cnt != 0) {
+ throw new RuntimeException(cancelled_cnt
+ + " tasks were cancelled.");
+ } else if (not_done_cnt != 0) {
+ throw new RuntimeException(not_done_cnt + " tasks are not done.");
+ }
}
private byte[] generateAndCompile() {
vmTestbase/metaspace/stressDictionary/StressDictionary.java
in order to figure out why the test does not terminate
even when JTREG has reported "STATUS:Passed."
Here's my current proposal:
$ cat 8211211.diff.debug.txt.01
diff -r 934969c63223 test/hotspot/jtreg/vmTestbase/metaspace/stressDictionary/StressDictionary.java
--- a/test/hotspot/jtreg/vmTestbase/metaspace/stressDictionary/StressDictionary.java
+++ b/test/hotspot/jtreg/vmTestbase/metaspace/stressDictionary/StressDictionary.java
@@ -123,11 +123,54 @@
tasks.add(this.new RegularWorker());
}
ExecutorService executorService = Executors.newCachedThreadPool();
+ List<Future<Object>> results = null;
try {
- executorService.invokeAll(tasks);
+ results = executorService.invokeAll(tasks);
} catch (InterruptedException e) {
e.printStackTrace();
}
+
+ int act_results = results.size();
+ int exp_results = NUMBER_OF_CORRUPTING_THREADS +
+ NUMBER_OF_NOT_CORRUPTING_THREADS;
+ if (act_results == exp_results) {
+ System.out.println("INFO: There are " + act_results + " results.");
+ } else {
+ throw new RuntimeException("Wrong # of results from invokeAll(); "
+ + "exp_results=" + exp_results + "; "
+ + "act_results=" + act_results + ".");
+ }
+
+ int cancelled_cnt = 0;
+ int not_done_cnt = 0;
+ for (int i = 0; i < act_results; i++) {
+ if (!results.get(i).isDone()) {
+ not_done_cnt++;
+ System.err.println("ERROR: task #" + i + " is not done.");
+ }
+ if (results.get(i).isCancelled()) {
+ cancelled_cnt++;
+ System.err.println("ERROR: task #" + i + " was canceled.");
+ }
+ }
+
+ if (cancelled_cnt == 0) {
+ System.out.println("INFO: no tasks were cancelled.");
+ }
+ if (not_done_cnt == 0) {
+ System.out.println("INFO: all tasks are done.");
+ }
+ if (cancelled_cnt != 0 && not_done_cnt != 0) {
+ throw new RuntimeException(cancelled_cnt
+ + " tasks were cancelled and "
+ + not_done_cnt
+ + " tasks are not done.");
+ } else if (cancelled_cnt != 0) {
+ throw new RuntimeException(cancelled_cnt
+ + " tasks were cancelled.");
+ } else if (not_done_cnt != 0) {
+ throw new RuntimeException(not_done_cnt + " tasks are not done.");
+ }
}
private byte[] generateAndCompile() {