maven-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Tibor Digana (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (SUREFIRE-1302) Surefire does not wait long enough for the forked VM and assumes it to be dead
Date Sat, 10 Jun 2017 08:26:18 GMT

    [ https://issues.apache.org/jira/browse/SUREFIRE-1302?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16045455#comment-16045455
] 

Tibor Digana commented on SUREFIRE-1302:
----------------------------------------

[~elecharny]
[~opeyrusse]
[~xeagle]
[~michael-o]
I have pushed a branch.
https://git-wip-us.apache.org/repos/asf?p=maven-surefire.git;a=shortlog;h=refs/heads/SUREFIRE-1302_2
Pls put your comments in the code if you want to change something.
It is only a prototype. The class {{PpdiChecker}} will recognize etime of PPID. If it is longer
or the same like uptime of current PID, the parent process is still alive. This way the the
fork JVM does not need to have any timeout like PING. If the commands throw exception or another
than Unix/Windows platform, we fallback to the old mechanism.
I want to split version 2.20.1, release it on Friday and include this issue. Other big issues
like JDK 9 should go to 2.20.2.

> Surefire does not wait long enough for the forked VM and assumes it to be dead
> ------------------------------------------------------------------------------
>
>                 Key: SUREFIRE-1302
>                 URL: https://issues.apache.org/jira/browse/SUREFIRE-1302
>             Project: Maven Surefire
>          Issue Type: Request
>          Components: Maven Surefire Plugin
>    Affects Versions: 2.19.1
>            Reporter: Yuriy Zaplavnov
>            Assignee: Tibor Digana
>             Fix For: 2.20.1
>
>         Attachments: 2017-05-18T05-48-08_685-jvmRun1.dumpstream, surefire-gclog.log,
surefire-logs, surefire-tests-terminated-master-aa9330316038f6b46316ce36ff40714ffc7cf299.zip,
tests_log_01.txt, tests_log_02.txt
>
>
> 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:
> {code}
> 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
);
>     }
> {code}
> to create ScheduledFuture.
> In some of the cases the forked container might respond a bit later than it's expected
and surefire kills it
> {code}
> 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 );
>                 }
>             }
>         };
>     }
> {code}
> 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.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Mime
View raw message