Openfire 3.4.5 bug in the max DB connection handling

Hi all,

I found a bug in the max DB connection handling.

After rebooting my server (openfire 3.4.5) I noticed many Anonymous sessions.

I have the Anonymous login disabled.

Looking at the error log, turns out that the DefaultUserProvider.loadUser() gets SQLException on hitting the max limit and throws UserNotFoundException. This misleads the check AuthToken.isAnonymous() and the whole processing goes in wrong direction.

This is a critical bug!

The error handling should not alter the logic.

Here is a stack trace:

2008.04.25 12:26:38 org.jivesoftware.database.DefaultConnectionProvider.getConnection(DefaultConnect ionProvider.java:74) DbConnectionProvider: Error while getting connection:

java.sql.SQLException: Couldn’t get connection because we are at maximum connection count (30/30) and there are none available

at org.logicalcobwebs.proxool.Prototyper.quickRefuse(Prototyper.java:309)

at org.logicalcobwebs.proxool.ConnectionPool.getConnection(ConnectionPool.java:152 )

at org.logicalcobwebs.proxool.ProxoolDriver.connect(ProxoolDriver.java:89)

at java.sql.DriverManager.getConnection(Unknown Source)

at java.sql.DriverManager.getConnection(Unknown Source)

at org.jivesoftware.database.DefaultConnectionProvider.getConnection(DefaultConnec tionProvider.java:71)

at org.jivesoftware.database.DbConnectionManager.getConnection(DbConnectionManager .java:92)

at org.jivesoftware.openfire.user.DefaultUserProvider.loadUser(DefaultUserProvider .java:75)

at org.jivesoftware.openfire.user.UserManager.getUser(UserManager.java:200)

at org.jivesoftware.openfire.user.UserManager.isRegisteredUser(UserManager.java:30 1)

at org.jivesoftware.openfire.auth.AuthToken.isAnonymous(AuthToken.java:89)

at org.jivesoftware.openfire.handler.IQBindHandler.handleIQ(IQBindHandler.java:99)

at org.jivesoftware.openfire.handler.IQHandler.process(IQHandler.java:48)

at org.jivesoftware.openfire.IQRouter.handle(IQRouter.java:348)

at org.jivesoftware.openfire.IQRouter.route(IQRouter.java:100)

at org.jivesoftware.openfire.spi.PacketRouterImpl.route(PacketRouterImpl.java:67)

at org.jivesoftware.openfire.net.StanzaHandler.processIQ(StanzaHandler.java:303)

at org.jivesoftware.openfire.net.ClientStanzaHandler.processIQ(ClientStanzaHandler .java:78)

at org.jivesoftware.openfire.net.StanzaHandler.process(StanzaHandler.java:268)

at org.jivesoftware.openfire.net.StanzaHandler.process(StanzaHandler.java:167)

at org.jivesoftware.openfire.nio.ConnectionHandler.messageReceived(ConnectionHandl er.java:132)

at org.apache.mina.common.support.AbstractIoFilterChain$TailFilter.messageReceived (AbstractIoFilterChain.java:570)

at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(Ab stractIoFilterChain.java:299)

at org.apache.mina.common.support.AbstractIoFilterChain.access$1100(AbstractIoFilt erChain.java:53)

at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceive d(AbstractIoFilterChain.java:648)

at org.apache.mina.filter.codec.support.SimpleProtocolDecoderOutput.flush(SimplePr otocolDecoderOutput.java:58)

at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecF ilter.java:173)

at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(Ab stractIoFilterChain.java:299)

at org.apache.mina.common.support.AbstractIoFilterChain.access$1100(AbstractIoFilt erChain.java:53)

at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceive d(AbstractIoFilterChain.java:648)

at org.apache.mina.filter.executor.ExecutorFilter.processEvent(ExecutorFilter.java :239)

at org.apache.mina.filter.executor.ExecutorFilter$ProcessEventsRunnable.run(Execut orFilter.java:283)

at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:51)

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

–Yavor

Hey Yavor,

That is a known issue with Openfire 3.4.5. The problem was fixed in Openfire 3.5.0 (issue JM-1298). Try updating to latest Openfire version and let us know if you are still seeing this problem.

Thanks,

– Gato