Uploaded image for project: 'Maven Surefire'
  1. Maven Surefire
  2. SUREFIRE-1302

Surefire does not wait long enough for the forked VM and assumes it to be dead

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 2.19.1
    • Fix Version/s: 2.20.1
    • Component/s: Maven Surefire Plugin
    • Labels:
      None

      Description

      This issue happens because surefire kills the forked container if it times out waiting for the 'ping'.

      In org.apache.maven.surefire.booter.ForkedBooter class there is hardcoded constant PING_TIMEOUT_IN_SECONDS = 20 which is used in the following method:

      private static ScheduledFuture<?> listenToShutdownCommands( CommandReader reader )
          {
              reader.addShutdownListener( createExitHandler( reader ) );
              AtomicBoolean pingDone = new AtomicBoolean( true );
              reader.addNoopListener( createPingHandler( pingDone ) );
              return JVM_TERMINATOR.scheduleAtFixedRate( createPingJob( pingDone, reader ),
                                                         0,PING_TIMEOUT_IN_SECONDS, SECONDS );
          }
      

      to create ScheduledFuture.

      In some of the cases the forked container might respond a bit later than it's expected and surefire kills it

      private static Runnable createPingJob( final AtomicBoolean pingDone, final CommandReader reader  )
          {
              return new Runnable()
              {
                  public void run()
                  {
                      boolean hasPing = pingDone.getAndSet( false );
                      if ( !hasPing )
                      {
                          exit( 1, KILL, reader, true );
                      }
                  }
              };
          }
      

      As long as we need to terminate it anyway, It would be really helpful if the problem could be solved making the PING_TIMEOUT_IN_SECONDS configurable with the ability to specify the value from maven-surefire-plugin.

      It would help to configure this timeout based on needs and factors of the projects where surefire runs.

        Attachments

        1. tests_log_01.txt
          111 kB
          Yuriy Zaplavnov
        2. tests_log_02.txt
          1 kB
          Yuriy Zaplavnov
        3. surefire-tests-terminated-master-aa9330316038f6b46316ce36ff40714ffc7cf299.zip
          5 kB
          Yuriy Zaplavnov
        4. 2017-05-18T05-48-08_685-jvmRun1.dumpstream
          351 kB
          Olivier Peyrusse
        5. surefire-logs
          6 kB
          Olivier Peyrusse
        6. surefire-gclog.log
          1.26 MB
          Olivier Peyrusse

          Issue Links

            Activity

              People

              • Assignee:
                tibor17 Tibor Digana
                Reporter:
                xeagle Yuriy Zaplavnov
              • Votes:
                4 Vote for this issue
                Watchers:
                9 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: