Socket block main thread on stop
pfouquet opened this issue · 3 comments
Hello,
embedded-jmxtrans sometimes blocks in stop when we have network problems, or the graphite server is in a zombie state.
The call of new Socket(inetSocketAddress.getAddress(), inetSocketAddress.getPort()); opens the socket with a timeout of 0 = infinite.
It would be better to open the socket with:
Socket socket = new Socket();
socket.connect(new InetSocketAddress(this.host, this.port), this.timeout);
and define a timeout value by a configuration or system property.
The following stacktrace shows the blocking thread
{code}
java.lang.Thread.State: RUNNABLE
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
- locked <0x000000079774bc88> (a java.net.SocksSocketImpl)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
at java.net.Socket.connect(Socket.java:579)
at java.net.Socket.connect(Socket.java:528)
at java.net.Socket.(Socket.java:425)
at java.net.Socket.(Socket.java:241)
at org.jmxtrans.embedded.util.pool.SocketWriterPoolFactory.makeObject(SocketWriterPoolFactory.java:53)
at org.jmxtrans.embedded.util.pool.SocketWriterPoolFactory.makeObject(SocketWriterPoolFactory.java:39)
at org.apache.commons.pool.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:1220)
at org.jmxtrans.embedded.output.GraphiteWriter.write(GraphiteWriter.java:129)
at org.jmxtrans.embedded.Query.exportCollectedMetrics(Query.java:208)
at org.jmxtrans.embedded.EmbeddedJmxTrans.exportCollectedMetrics(EmbeddedJmxTrans.java:220)
at org.jmxtrans.embedded.EmbeddedJmxTrans.stop(EmbeddedJmxTrans.java:186)
{code}
Kind regards
Peter
Hello Peter,
This weakness has been fixed in version 1.0.8 (see commit here). Can you confirm that your were using an older version of the lib?
Cyrille
Sorry, we use 1.0.7.
The version 1.0.8 should solve our problem.
Kind regards
Peter
No problem, thanks Peter!
Cyrille