Uploaded image for project: 'Lucene - Core'
  1. Lucene - Core
  2. LUCENE-4987

Test framework may fail internally under J9 (some serious JVM exclusive-section issue).


    • Bug
    • Status: Closed
    • Minor
    • Resolution: Fixed
    • None
    • 4.4, 6.0
    • None
    • None
    • New


      This was reported by Shai. The runner failed with an exception:

      [junit4:junit4] Caused by: java.util.NoSuchElementException
      [junit4:junit4]         at java.util.ArrayDeque.removeFirst(ArrayDeque.java:289)
      [junit4:junit4]         at java.util.ArrayDeque.pop(ArrayDeque.java:518)
      [junit4:junit4]         at com.carrotsearch.ant.tasks.junit4.JUnit4$1.onSlaveIdle(JUnit4.java:809)
      [junit4:junit4]         ... 17 more

      The problem is that this is impossible because the code around JUnit4.java:809 looks like this:

           final Deque<String> stealingQueue = new ArrayDeque<String>(...);
           aggregatedBus.register(new Object() {
              public void onSlaveIdle(SlaveIdle slave) {
                if (stealingQueue.isEmpty()) {
                } else {
                  String suiteName = stealingQueue.pop();

      and the contract on Guava's EventBus states that:

       * <p>The EventBus guarantees that it will not call a handler method from
       * multiple threads simultaneously, unless the method explicitly allows it by
       * bearing the {@link AllowConcurrentEvents} annotation.  If this annotation is
       * not present, handler methods need not worry about being reentrant, unless
       * also called from outside the EventBus

      I wrote a simple snippet of code that does it in a loop and indeed, two threads can appear in the critical section at once. This is not reproducible on Hotspot and only appears to be the problem on J9/1.7/Windows (J9 1.6 works fine).

      I'll provide a workaround in the runner (an explicit monitor seems to be working) but this is some serious J9 issue.


        1. j9.zip
          2.22 MB
          Dawid Weiss



            dweiss Dawid Weiss
            dweiss Dawid Weiss
            0 Vote for this issue
            1 Start watching this issue