[ https://issues.apache.org/jira/browse/SUREFIRE-1157?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14550485#comment-14550485 ]
Dan Berindei commented on SUREFIRE-1157: ---------------------------------------- [~krosenvold] can you share a bit on why allocating ports is so bad? I realize there may be problems with a SecurityManager in place, but most of the alternatives you suggested won't work with a SecurityManager either. I was thinking that {{new ServerSocket(0, 50, InetAddress.getLoopbackAddress())}} gives you an ephemeral server socket which you can then pass on to the child process, and since the OS picks a free port for you, there's no need to coordinate with anyone. Anyway, I only suggested sockets because I assumed code changes to use them would be minimal. If that doesn't work, the parent could just create a file with {{File.createTempFile()}} (just like the surefirebooter jar), and use that to communicate with the child. Waiting for new content would require polling, because reading after the end of the file won't block, but I don't see the need for exotic alternatives like shared memory, named pipes or unix domain sockets. > Surefire fork communication fails when a native library writes to stdout > ------------------------------------------------------------------------ > > Key: SUREFIRE-1157 > URL: https://issues.apache.org/jira/browse/SUREFIRE-1157 > Project: Maven Surefire > Issue Type: Bug > Components: process forking > Affects Versions: 2.17 > Reporter: Dan Berindei > > We are seeing this exception in some of our CI builds: > {noformat} > [11:17:10]W: [Step 2/4] [ERROR] Failed to execute goal > org.apache.maven.plugins:maven-surefire-plugin:2.17:test (default-test) on > project infinispan-cachestore-leveldb: Execution default-test of goal > org.apache.maven.plugins:maven-surefire-plugin:2.17:test failed: > java.lang.RuntimeException: > 1,org.infinispan.persistence.leveldb.LevelDBStoreTest,testStoreAndRemove(org.infinispan.persistence.leveldb.LevelDBStoreTest),unit,null,null: > NoSuchElementException -> [Help 1] > [11:17:10] : [Step 2/4] > org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute > goal org.apache.maven.plugins:maven-surefire-plugin:2.17:test (default-test) > on project infinispan-cachestore-leveldb: Execution default-test of goal > org.apache.maven.plugins:maven-surefire-plugin:2.17:test failed: > java.lang.RuntimeException: > 1,org.infinispan.persistence.leveldb.LevelDBStoreTest,testStoreAndRemove(org.infinispan.persistence.leveldb.LevelDBStoreTest),unit,null,null > [11:17:10] : [Step 2/4] at > org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:224) > [11:17:10] : [Step 2/4] at > org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) > [11:17:10] : [Step 2/4] at > org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) > [11:17:10] : [Step 2/4] at > org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116) > [11:17:10] : [Step 2/4] at > org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80) > [11:17:10] : [Step 2/4] at > org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51) > [11:17:10] : [Step 2/4] at > org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:120) > [11:17:10] : [Step 2/4] at > org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:347) > [11:17:10] : [Step 2/4] at > org.apache.maven.DefaultMaven.execute(DefaultMaven.java:154) > [11:17:10] : [Step 2/4] at > org.apache.maven.cli.MavenCli.execute(MavenCli.java:582) > [11:17:10] : [Step 2/4] at > org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214) > [11:17:10] : [Step 2/4] at > org.apache.maven.cli.MavenCli.main(MavenCli.java:158) > [11:17:10] : [Step 2/4] at > sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > [11:17:10] : [Step 2/4] at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > [11:17:10] : [Step 2/4] at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > [11:17:10] : [Step 2/4] at > java.lang.reflect.Method.invoke(Method.java:483) > [11:17:10] : [Step 2/4] at > org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) > [11:17:10] : [Step 2/4] at > org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) > [11:17:10] : [Step 2/4] at > org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) > [11:17:10] : [Step 2/4] at > org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) > [11:17:10] : [Step 2/4] Caused by: > org.apache.maven.plugin.PluginExecutionException: Execution default-test of > goal org.apache.maven.plugins:maven-surefire-plugin:2.17:test failed: > java.lang.RuntimeException: > 1,org.infinispan.persistence.leveldb.LevelDBStoreTest,testStoreAndRemove(org.infinispan.persistence.leveldb.LevelDBStoreTest),unit,null,null > [11:17:10] : [Step 2/4] at > org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:143) > [11:17:10] : [Step 2/4] at > org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) > [11:17:10] : [Step 2/4] ... 19 more > [11:17:10] : [Step 2/4] Caused by: java.lang.RuntimeException: > java.lang.RuntimeException: > 1,org.infinispan.persistence.leveldb.LevelDBStoreTest,testStoreAndRemove(org.infinispan.persistence.leveldb.LevelDBStoreTest),unit,null,null > [11:17:10] : [Step 2/4] at > org.apache.maven.plugin.surefire.booterclient.output.ThreadedStreamConsumer.close(ThreadedStreamConsumer.java:123) > [11:17:10] : [Step 2/4] at > org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:463) > [11:17:10] : [Step 2/4] at > org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:352) > [11:17:10] : [Step 2/4] at > org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:158) > [11:17:10] : [Step 2/4] at > org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeProvider(AbstractSurefireMojo.java:967) > [11:17:10] : [Step 2/4] at > org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.java:831) > [11:17:10] : [Step 2/4] at > org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute(AbstractSurefireMojo.java:729) > [11:17:10] : [Step 2/4] at > org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:132) > [11:17:10] : [Step 2/4] ... 20 more > [11:17:10] : [Step 2/4] Caused by: java.lang.RuntimeException: > 1,org.infinispan.persistence.leveldb.LevelDBStoreTest,testStoreAndRemove(org.infinispan.persistence.leveldb.LevelDBStoreTest),unit,null,null > [11:17:10] : [Step 2/4] at > org.apache.maven.plugin.surefire.booterclient.output.ForkClient.createReportEntry(ForkClient.java:209) > [11:17:10] : [Step 2/4] at > org.apache.maven.plugin.surefire.booterclient.output.ForkClient.consumeLine(ForkClient.java:110) > [11:17:10] : [Step 2/4] at > org.apache.maven.plugin.surefire.booterclient.output.ThreadedStreamConsumer$Pumper.run(ThreadedStreamConsumer.java:67) > [11:17:10] : [Step 2/4] at java.lang.Thread.run(Thread.java:745) > [11:17:10] : [Step 2/4] Caused by: java.util.NoSuchElementException > [11:17:10] : [Step 2/4] at > java.util.StringTokenizer.nextToken(StringTokenizer.java:349) > [11:17:10] : [Step 2/4] at > org.apache.maven.plugin.surefire.booterclient.output.ForkClient.deserializeStackStraceWriter(ForkClient.java:217) > [11:17:10] : [Step 2/4] at > org.apache.maven.plugin.surefire.booterclient.output.ForkClient.createReportEntry(ForkClient.java:202) > [11:17:10] : [Step 2/4] ... 3 more > {noformat} > I believe this is caused by the native LevelDB library writing to stdout and > breaking the communication between {{ForkingRunListener}} and {{ForkClient}}. > It would be better if the communication between the main process and the fork > happened over a socket. -- This message was sent by Atlassian JIRA (v6.3.4#6332)