Getting IOException from MINA Zlib.inflate when smack clients using compression disconnect

Hi.

Trying out Openfire 3.10.2 and Smack 4.1.2.

Previously using Openfire 3.9.3.

We need to use compression to lower traffic costs, but enabling compression on Openfire 3.9.3 triggered MINA not-threadsafe bug.

So trying out Openfire 3.10.2. Here, compression seems to work,

but every time a client disconnects, I get this exception in the Openfire warn.log:

org.jivesoftware.openfire.nio.ConnectionHandler - Closing connection due to exception in session: (0x0000026F: nio socket, server, null => 0.0.0.0/0.0.0.0:2101)

java.io.IOException: Unknown error. Error code : 1

at org.apache.mina.filter.compression.Zlib.inflate(Zlib.java:150)

at org.apache.mina.filter.compression.CompressionFilter.messageReceived(Compressio nFilter.java:154)

at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(D efaultIoFilterChain.java:417)

at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilt erChain.java:47)

at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceiv ed(DefaultIoFilterChain.java:765)

at org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:74)

at org.apache.mina.core.session.IoEvent.run(IoEvent.java:63)

at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTask(Ordere dThreadPoolExecutor.java:769)

at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTasks(Order edThreadPoolExecutor.java:761)

at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.run(OrderedThr eadPoolExecutor.java:703)

at java.lang.Thread.run(Unknown Source)

It still seems to work, but it is annoying and the log files gets big in a hurry if you have a lot of clients connecting/disconnecting.

I assume this happens when the clients disconnect, which should mean they will sever the TCP connection quite abruptly.

I call XMPPTCPConnection.disconnect() when the client logs out, but that doesn’t really sever the connection,

it only “disconnects” it from the server, and it can be later connected with XMPPTCPConnection.connect(), as far as I understand it.

So is there a way I can get rid of this IOException?

I don’t think it is a Smack issue, because we got the same exception with Smack 3.4.1 against Openfire 3.10.2.

We get the same repeadetly in our logs:

015.11.03 12:20:50 org.jivesoftware.openfire.nio.ConnectionHandler - Closing connection due to exception in session: (0x00000C8F: nio socket, server, /192.168.1.1:55698 => 0.0.0.0/0.0.0.0:5222)

java.io.IOException: Unknown error. Error code : 1

at org.apache.mina.filter.compression.Zlib.inflate(Zlib.java:150)

at org.apache.mina.filter.compression.CompressionFilter.messageReceived(Compressio nFilter.java:154)

at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(D efaultIoFilterChain.java:417)

at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilt erChain.java:47)

at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceiv ed(DefaultIoFilterChain.java:765)

at org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:74)

at org.apache.mina.core.session.IoEvent.run(IoEvent.java:63)

at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTask(Ordere dThreadPoolExecutor.java:769)

at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTasks(Order edThreadPoolExecutor.java:761)

at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.run(OrderedThr eadPoolExecutor.java:703)

*at java.lang.Thread.run(Thread.java:745) *

In the above, 192.168.1.1 is the client that sends out a packet to openfire, but the latter has already closed the connection?? It reports an issue with org.apache.mina.filter.compression.Zlib.inflate