Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8211211 vmTestbase/metaspace/stressDictionary/StressDictionary.java timeout
  3. JDK-8212220

add code to verify results to metaspace/stressDictionary/StressDictionary.java

XMLWordPrintable

    • Icon: Sub-task Sub-task
    • Resolution: Fixed
    • Icon: P4 P4
    • 12
    • 12
    • hotspot
    • None
    • b17

      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() {

            dcubed Daniel Daugherty
            dcubed Daniel Daugherty
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: