JDK-8211844 [aix] ProcessBuilder: Piping between created processes does not work.

Volker Simonis volker.simonis at gmail.com
Fri Dec 7 18:16:00 UTC 2018


It fails as shown below (I've added an additional line "res:..." to
print the actual content of "test.out"). For the failing test,
"test.out" is always zero bytes. I think the problem is that the first
process finishes before the second process in the pipe is started. In
very few cases I saw the "t2_translatePipeline" test succeeding on AIX
as well. I assume that was for cases where the first "tr" process was
still alive when the second one was started.

 in: Now is the time to check!
out: Now is the time to check!
res: Now is the time to check!
 in: Now is the time to check!
out: Now is the time to check!
res:
result not as expected
java.lang.Exception: Stack trace
        at java.base/java.lang.Thread.dumpStack(Thread.java:1383)
        at PipelineTest.fail(PipelineTest.java:275)
        at PipelineTest.fail(PipelineTest.java:276)
        at PipelineTest.check(PipelineTest.java:279)
        at PipelineTest.verify(PipelineTest.java:189)
        at PipelineTest.t1_simplePipeline(PipelineTest.java:68)
        at PipelineTest.realMain(PipelineTest.java:42)
        at PipelineTest.main(PipelineTest.java:286)
 in: Now is the time to check!
out: Now is the time to check!
res:
result not as expected
java.lang.Exception: Stack trace
        at java.base/java.lang.Thread.dumpStack(Thread.java:1383)
        at PipelineTest.fail(PipelineTest.java:275)
        at PipelineTest.fail(PipelineTest.java:276)
        at PipelineTest.check(PipelineTest.java:279)
        at PipelineTest.verify(PipelineTest.java:189)
        at PipelineTest.t1_simplePipeline(PipelineTest.java:71)
        at PipelineTest.realMain(PipelineTest.java:42)
        at PipelineTest.main(PipelineTest.java:286)
 in: Now is the time to check!
out: NOw is thE timE tO chEck!
res:
result not as expected
java.lang.Exception: Stack trace
        at java.base/java.lang.Thread.dumpStack(Thread.java:1383)
        at PipelineTest.fail(PipelineTest.java:275)
        at PipelineTest.fail(PipelineTest.java:276)
        at PipelineTest.check(PipelineTest.java:279)
        at PipelineTest.verify(PipelineTest.java:189)
        at PipelineTest.t2_translatePipeline(PipelineTest.java:87)
        at PipelineTest.realMain(PipelineTest.java:43)
        at PipelineTest.main(PipelineTest.java:286)
The error from the first process should be in the output of the second:
java.lang.Exception: Stack trace
        at java.base/java.lang.Thread.dumpStack(Thread.java:1383)
        at PipelineTest.fail(PipelineTest.java:275)
        at PipelineTest.fail(PipelineTest.java:276)
        at PipelineTest.check(PipelineTest.java:279)
        at PipelineTest.t3_redirectErrorStream(PipelineTest.java:114)
        at PipelineTest.realMain(PipelineTest.java:44)
        at PipelineTest.main(PipelineTest.java:286)

Passed = 15, failed = 4

Exception in thread "main" java.lang.AssertionError: Some tests failed
        at PipelineTest.main(PipelineTest.java:288)

On Fri, Dec 7, 2018 at 6:56 PM Roger Riggs <Roger.Riggs at oracle.com> wrote:
>
> Hi,
>
> I'd be interested in how PipelineTest failed on AIX?
>
> It looks like PipelineTest is flawed in that verifyProcesses() does not
> check
> all of the 1..n Processes getInputStreams for being a null stream, only
> the nth Process.
> And the test is incorrectly applied to the last Process, which returns a
> null
> stream not because of the pipeline but because the output is redirected
> to a file.
>
> Thanks, Roger
>
>
> On 12/07/2018 09:52 AM, Roger Riggs wrote:
> > Hi,
> >
> > I notice that the Solaris case also does not include "||
> > forceNullOutputStream".
> > I'll have to investigate why the Pipeline test didn't fail on Solaris.
> >
> > Please add that to the patch and I'll run it through our tests.
> >
> > Thanks, Roger
> >
> > On 12/07/2018 03:05 AM, Volker Simonis wrote:
> >> Hi Steve,
> >>
> >> thanks a lot for this fix. I'm forwarding this to core-libs-dev as
> >> well, because that's where the review has to take place. The
> >> "ppc-aix-port-dev" list is mostly a marker for the port maintainers to
> >> get their attention on relevant changes (so cross-posting is fine in
> >> this case :)
> >>
> >> On Thu, Dec 6, 2018 at 4:26 PM Steve Groeger <GROEGES at uk.ibm.com> wrote:
> >>> Hi all,
> >>>
> >>> I have been investigating the issue
> >>> https://bugs.openjdk.java.net/browse/JDK-8211844 raised by Goetz
> >>> Lindenmaier which is related to the
> >>> jdk/java/lang/ProcessBuilder/PipelineTest.java JTReg test failing on
> >>> AIX. Having done some investigation I have a potential fix fore the
> >>> issue:
> >>>
> >>>
> >>> diff -r 9501a7b59111
> >>> src/java.base/unix/classes/java/lang/ProcessImpl.java
> >>> --- a/src/java.base/unix/classes/java/lang/ProcessImpl.java Mon Dec
> >>> 03 14:28:19 2018 +0300
> >>> +++ b/src/java.base/unix/classes/java/lang/ProcessImpl.java Thu Dec
> >>> 06 15:01:03 2018 +0000
> >>> @@ -446,7 +446,7 @@
> >>> ProcessBuilder.NullOutputStream.INSTANCE :
> >>>                           new ProcessPipeOutputStream(fds[0]);
> >>>
> >>> -                stdout = (fds[1] == -1) ?
> >>> +                stdout = (fds[1] == -1 || forceNullOutputStream) ?
> >>> ProcessBuilder.NullInputStream.INSTANCE :
> >>>                            new
> >>> DeferredCloseProcessPipeInputStream(fds[1]);
> >>>
> >> Your change looks good and I can sponsor it. Just as a hint for other
> >> reviewers I'd like to mention that this change, albeit in a shared
> >> Java file, is still AIX-only because it is in the "AIX" case of a
> >> switch statement.
> >>
> >> @Steve: can you please verify, that your change introduces no
> >> regression by running the complete jtreg test suite.
> >>
> >> Thank you and best regards,
> >> Volker
> >>
> >>> I would appreciate any feedback please, and for someone to be a
> >>> sponsor for this and to contributute it to OpenJDK.
> >>>
> >>> Steve Groeger
> >>> IBM Runtime Technologies
> >>> Hursley, Winchester
> >>> Tel: (44) 1962 816911  Mobex: 279990  Mobile: 07718 517 129
> >>> Fax (44) 1962 816800
> >>> Lotus Notes: Steve Groeger/UK/IBM
> >>> Internet: groeges at uk.ibm.com
> >>>
> >>> Unless stated otherwise above:
> >>> IBM United Kingdom Limited - Registered in England and Wales with
> >>> number 741598.
> >>> Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire
> >>> PO6 3AU
> >>> Unless stated otherwise above:
> >>> IBM United Kingdom Limited - Registered in England and Wales with
> >>> number 741598.
> >>> Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire
> >>> PO6 3AU
> >
>


More information about the core-libs-dev mailing list