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

Patrick Reinhart commented on SUREFIRE-1881:
--------------------------------------------

[~tibordigana] I did some poking around the connect part further down in the 
{{ForkStarter}} and {{ForkBooter}} and having some debug outs as at the current 
state on the PR. I did observe that the VMC connection was made in the middle 
of JVM outputs of currently loaded classes.. It seems to me that we may 
encounter an lock if the process stream buffer is getting at its limit before 
we start consuming it on the plugin side. (that's may the reason I did not have 
any more blocking when moving the connect from the plugin beyond the command 
binder stage (causing the handshake no longer working correctly)

I might be a naive though, but could the command handler reading from the JVMs 
standard output switch it's operation mode based on the content he is 
receiving? Meaning as soon we hooked into default system out (ConsoleCapture) 
in the JVM we do send a special byte sequence that triggers the mode switch in 
the plugin? (Thinking of the way the end of an SMTP message is being signalled 
to trigger the MTA to start deliver as idea...)
{quote}4. if any native stream, after (3), contains messages then it means that 
JVM printed them and they are considered a GC messages or native error and we 
propagate them. (4) should not exist in healthy build.
{quote}
I'm not sure if any output from the JVM to the default output must be a error 
in any case, depending on the situation. If the JVM is in debug mode for 
example you always get a system out, as soon you detach from the JVM (I know 
that is not really OK for an build scenario) but I guess we need to be prepared 
to deal with such a situation though (even when we do not like it)

> Java agent printing to native console makes build block when using 
> SurefireForkNodeFactory
> ------------------------------------------------------------------------------------------
>
>                 Key: SUREFIRE-1881
>                 URL: https://issues.apache.org/jira/browse/SUREFIRE-1881
>             Project: Maven Surefire
>          Issue Type: Bug
>          Components: Maven Failsafe Plugin, Maven Surefire Plugin
>    Affects Versions: 3.0.0-M5
>            Reporter: Alexander Kriegisch
>            Assignee: Tibor Digana
>            Priority: Major
>         Attachments: Bildschirmfoto von 2021-03-29 21-50-25.png, 
> image-2021-02-08-12-07-34-183.png, image-2021-03-26-09-48-11-398.png, 
> image-2021-03-26-09-52-36-881.png, image-2021-03-26-18-00-37-889.png, 
> image-2021-03-31-11-22-50-682.png, image-2021-03-31-11-38-11-119.png, 
> image-2021-03-31-12-31-55-818.png, image-2021-03-31-12-32-41-589.png, 
> maven-failsafe-debug-log.txt, screenshot-1.png, screenshot-2.png
>
>
> This is a follow-up to SUREFIRE-1788 which was closed prematurely even though 
> there still were open issues which were discussed there initially. Basically 
> the situation is as follows:
>  * I use Java agents writing to stdOut and stdErr in my tests.
>  * I was annoyed that Surefire/Failsafe were writing lots of {{[WARNING] 
> Corrupted STDOUT by directly writing to native stream in forked JVM}} lines 
> into {{*-jvmRun1.dumpstream}} files. [~tibordigana] then told me to use 
> {{<forkNode 
> implementation="org.apache.maven.plugin.surefire.extensions.SurefireForkNodeFactory"/>}}
>  in my POM in order to fix the issue.
>  * I tried this in version 3.0.0-M5, but unfortunately, it makes 
> Surefire/Failsafe freeze if a Java agent prints something to stdOut or 
> stdErr. This happens both in M5 and in M6-SNAPSHOT after both SUREFIRE-1788 
> and SUREFIRE-1809 have been merged in already.
>  * My [sample 
> project|https://github.com/kriegaex/Maven_Surefire_PrintToConsoleProblems] 
> reproduces the issue as soon as you uncomment the option in the POM and run 
> {{mvn clean verify}}.
>  * The second issue is: *Not* using this option leads to garbled log output 
> when a Java agent writes to both stdOut and stdErr before/during tests. See 
> comments in class 
> [{{Agent.DummyTransformer}}|https://github.com/kriegaex/Maven_Surefire_PrintToConsoleProblems/blob/master/src/main/java/de/scrum_master/dummy/Agent.java]
>  for examples for garbled log lines and also comments in 
> [pom.xml|https://github.com/kriegaex/Maven_Surefire_PrintToConsoleProblems/blob/master/pom.xml#L36]
>  for further information.
>  * If the garbled output would also appear with this option activated, cannot 
> be tested at present due to the Surefire/Failsafe freeze. I will re-test that 
> after the freeze has been fixed and before this issue can be closed.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to