jmxtrans/embedded-jmxtrans

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