On Sat, Oct 27, 2012 at 12:04 PM, Dawid Weiss <dawid.we...@cs.put.poznan.pl> wrote: > I think I know what this is... holy crap, the complexity of software > testing never ceases to amaze me. Uwe -- you'll like it ;) > > So, the way my deduction was up till now was that if all forked JVMs > completed normally (with a "quit" event) then the slave's controller > just HAD to call System.exit() which in turn just HAD to terminate the > JVM... > > What I forgot about is the freaking shutdown hooks! Take a look at > this stack trace: > > [junit4:junit4] "main" prio=5 tid=0x00000008011e0000 nid=0x801007c00 > in Object.wait() [0x00007fffffbfd000] > [junit4:junit4] java.lang.Thread.State: WAITING (on object monitor) > [junit4:junit4] at java.lang.Object.wait(Native Method) > [junit4:junit4] at java.lang.Thread.join(Thread.java:1258) > [junit4:junit4] - locked <0x00000008119b43f8> (a > org.eclipse.jetty.util.thread.ShutdownThread) > [junit4:junit4] at java.lang.Thread.join(Thread.java:1332) > [junit4:junit4] at > java.lang.ApplicationShutdownHooks.runHooks(ApplicationShutdownHooks.java:106) > [junit4:junit4] at > java.lang.ApplicationShutdownHooks$1.run(ApplicationShutdownHooks.java:46) > [junit4:junit4] at java.lang.Shutdown.runHooks(Shutdown.java:123) > [junit4:junit4] at java.lang.Shutdown.sequence(Shutdown.java:167) > [junit4:junit4] at java.lang.Shutdown.exit(Shutdown.java:212) > [junit4:junit4] - locked <0x00000008150231c0> (a java.lang.Class for > java.lang.Shutdown) > [junit4:junit4] at java.lang.Runtime.exit(Runtime.java:107) > [junit4:junit4] at java.lang.System.exit(System.java:960) > [junit4:junit4] at > com.carrotsearch.ant.tasks.junit4.slave.SlaveMain.main(SlaveMain.java:275) > [junit4:junit4] at > com.carrotsearch.ant.tasks.junit4.slave.SlaveMainSafe.main(SlaveMainSafe.java:12) > > Nice, isn't it? The JVM never quits because the shutdown hook from > jetty falls into a deadlock (most likely; my wild guess). > > My resolutions in the order of preference: > > 1) change system.exit to runtime.halt call in randomized testing's > SlaveMain. Whether there is a finalization queue or shutdown handlers > -- we shouldn't care much. Alternatively, I can spin a System.exit and > then wait a bit in a background thread, then halt if this isn't > successful, but this seems dirty to me. > > 2) forbid adding shutdown hooks entirely. This won't solve the problem > because there's still finalization queue but it may detect places > where shutdown hooks are installed... it may be a problem for > zookeeper and jetty though (don't know how they'll react to us > forbidding shutdown hooks). >
we should work towards both. afaik at least solr used to have its own shutdown hooks, so #2 likely needs some work. #1 we could do now right? --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org For additional commands, e-mail: dev-h...@lucene.apache.org