Thanks Josh. That explanation makes sense. I added the referenced ClientThreads.shutdownNow() method to my code and ran into the following:
java.lang.SecurityException: sealing violation: package org.apache.accumulo.core.util is sealed I can live with this issue until v2.0 since it happens when the JVM is exiting. And I'm just writing demonstration code for no particular reason. At the least, we'll have a small project to test the fix against. On Sat, Nov 29, 2014 at 10:35 PM, Josh Elser <[email protected]> wrote: > From http://mojo.codehaus.org/exec-maven-plugin/usage.html, > > "By default daemon threads are joined and interrupted once all known non > daemon threads have quitted" > > So, your main thread finished, but before the exec plugin stopped the > application, it tried to interrupt the other non-daemon threads that were > still running (which should be a sign for them quit on their own). > > However, it's a known issue[1] that we have ZooKeeper and Thrift resources > that are not cleaned up (a problem which is slated to be fixed by > Christopher's 2.0 API refactoring). > > Hope that makes sense. > > [1] https://issues.apache.org/jira/browse/ACCUMULO-2113 > > > David Medinets wrote: >> >> This might be a stupid David issue but it's at least marginally >> related to Accumulo so I'm hoping someone will recognize the problem >> and help. >> >> I am seeing this error when my program is run via maven: >> >> java.lang.InterruptedException: sleep interrupted >> >> The program connects to a MiniAccumuloCluster and creates a table if >> it does not exist. The program works fine inside Netbeans. >> >> In both NetBeans and Maven, the program connects to the >> MiniAccumuloCluster just fine. The shutdown is the problem. >> >> I have a github project which should demonstrate the issue. >> >> # First clone the project >> git clone https://github.com/medined/jodoc.git >> cd jodoc >> >> # Then build the java image >> cd java_zulu7 >> ./build_image.sh >> >> # Then compile and create a jar file >> mvn package >> >> # Then build the jodoc image >> ./build_image.sh >> >> # And run the jodoc image. This image runs a MiniAccumuloCluster >> # using port 20000 for Zookeeper. >> ./run_image.sh >> >> # Finally run the client program via Maven >> mvn exec:java -Dexec.mainClass="com.codebits.jodoc.WriteAndReadDriver" >> -DZOOKEEPER_PORT=20000 >> >> Here is the full error stack: >> >> java.lang.InterruptedException: sleep interrupted >> at java.lang.Thread.sleep(Native Method) >> at >> org.apache.accumulo.core.client.impl.ThriftTransportPool$Closer.closeConnections(ThriftTransportPool.java:137) >> at >> org.apache.accumulo.core.client.impl.ThriftTransportPool$Closer.run(ThriftTransportPool.java:147) >> at java.lang.Thread.run(Thread.java:745) >> 2014-11-29 21:05:18,011 ERROR >> [com.codebits.jodoc.WriteAndReadDriver.main()-EventThread] >> zookeeper.ClientCnxn (ClientCnxn.java:run(513)) - Event thread exiting >> due to interruption >> java.lang.InterruptedException >> at >> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:2014) >> at >> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2048) >> at >> java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442) >> at >> org.apache.zookeeper.ClientCnxn$EventThread.run(ClientCnxn.java:498) >> 2014-11-29 21:05:18,012 INFO >> [com.codebits.jodoc.WriteAndReadDriver.main()-EventThread] >> zookeeper.ClientCnxn (ClientCnxn.java:run(516)) - EventThread shut >> down >> 2014-11-29 21:05:28,010 WARN >> [com.codebits.jodoc.WriteAndReadDriver.main(localhost:20000)] >> zookeeper.ClientCnxn (ClientCnxn.java:run(1185)) - Session >> 0x149fe6a2c5a0007 for server localhost/127.0.0.1:20000, unexpected >> error, closing socket connection and attempting reconnect >> java.nio.channels.ClosedByInterruptException >> at >> java.nio.channels.spi.AbstractInterruptibleChannel.end(AbstractInterruptibleChannel.java:202) >> at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:477) >> at >> org.apache.zookeeper.ClientCnxn$SendThread.doIO(ClientCnxn.java:890) >> at >> org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1154) >> 2014-11-29 21:05:29,596 INFO >> [com.codebits.jodoc.WriteAndReadDriver.main(localhost:20000)] >> zookeeper.ClientCnxn (ClientCnxn.java:startConnect(1058)) - Opening >> socket connection to server localhost/127.0.0.1:20000 >> 2014-11-29 21:05:29,596 INFO >> [com.codebits.jodoc.WriteAndReadDriver.main(localhost:20000)] >> zookeeper.ClientCnxn (ClientCnxn.java:primeConnection(947)) - Socket >> connection established to localhost/127.0.0.1:20000, initiating >> session >> 2014-11-29 21:05:29,598 INFO >> [com.codebits.jodoc.WriteAndReadDriver.main(localhost:20000)] >> zookeeper.ClientCnxn (ClientCnxn.java:readConnectResult(736)) - >> Session establishment complete on server localhost/127.0.0.1:20000, >> sessionid = 0x149fe6a2c5a0007, negotiated timeout = 30000 >> [WARNING] thread >> >> Thread[com.codebits.jodoc.WriteAndReadDriver.main(localhost:20000),5,com.codebits.jodoc.WriteAndReadDriver] >> was interrupted but is still alive after waiting at least 15000msecs >> [WARNING] thread >> >> Thread[com.codebits.jodoc.WriteAndReadDriver.main(localhost:20000),5,com.codebits.jodoc.WriteAndReadDriver] >> will linger despite being asked to die via interruption >> [WARNING] thread Thread[Thrift Connection Pool >> Checker,5,com.codebits.jodoc.WriteAndReadDriver] will linger despite >> being asked to die via interruption >> [WARNING] NOTE: 2 thread(s) did not finish despite being asked to via >> interruption. This is not a problem with exec:java, it is a problem >> with the running code. Although not serious, it should be remedied. >> [WARNING] Couldn't destroy threadgroup >> >> org.codehaus.mojo.exec.ExecJavaMojo$IsolatedThreadGroup[name=com.codebits.jodoc.WriteAndReadDriver,maxpri=10] >> java.lang.IllegalThreadStateException >> at java.lang.ThreadGroup.destroy(ThreadGroup.java:778) >> at org.codehaus.mojo.exec.ExecJavaMojo.execute(ExecJavaMojo.java:328) >> at >> org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:133) >> at >> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) >> at >> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) >> at >> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) >> at >> org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:108) >> at >> org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:76) >> at >> org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51) >> at >> org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:116) >> at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:361) >> at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:155) >> at org.apache.maven.cli.MavenCli.execute(MavenCli.java:584) >> at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:213) >> at org.apache.maven.cli.MavenCli.main(MavenCli.java:157) >> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >> at >> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) >> at >> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) >> at java.lang.reflect.Method.invoke(Method.java:483) >> at >> org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) >> at >> org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) >> at >> org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) >> at >> org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) >> >> ---- >> >> Any ideas?
