Hi,
We have upgraded openfire to version 5.0.1 but on our tests we notice that resource policy doesn’t have the correct behavior!
We have set the resource policy to “Always kick” so a new connection with the same resource should kick the old session and keep the new, but what happens is old session is gone and new session is also not there.
In our case the client thinks it is connected but in reality there is no session on openfire. We did the same test on openfire 4.7.5 and there it is working as expected.
Some logs that we collect:
2025.07.17 11:16:47 DEBUG [socket_c2s_ssl-worker-15]: org.jivesoftware.openfire.handler.IQBindHandler - Found a pre-existing, non-closed session for 'MY_USER@MY_DOMAIN/test-resource'. Performing resource conflict resolution.
2025.07.17 11:16:47 DEBUG [socket_c2s_ssl-worker-15]: org.jivesoftware.openfire.handler.IQBindHandler - Kick out an old connection that is conflicting with a new one. Old session: LocalClientSession{address=MY_USER@MY_DOMAIN/test-resource, streamID=5qabgg48xd, status=AUTHENTICATED, isEncrypted=true, isDetached=false, serverName='MY_DOMAIN', isInitialized=true, hasAuthToken=true, peer address='CLIENT_IP', presence='<presence id="a0dc111fdb7142518299aa567f0de1ba" xml:lang="en" from="MY_USER@MY_DOMAIN/test-resource"/>'}
2025.07.17 11:16:47 TRACE [socket_c2s_ssl-worker-15]: org.jivesoftware.openfire.nio.NettyConnection - Sending: <stream:error xmlns:stream="http://etherx.jabber.org/streams"><conflict xmlns="urn:ietf:params:xml:ns:xmpp-streams"/></stream:error>
2025.07.17 11:16:47 TRACE [socket_c2s_ssl-worker-15]: org.jivesoftware.openfire.nio.NettyConnection - Closing NettyConnection{peer: /CLIENT_IP:59952, state: CLOSED, session: LocalClientSession{address=MY_USER@MY_DOMAIN/test-resource, streamID=5qabgg48xd, status=AUTHENTICATED, isEncrypted=true, isDetached=false, serverName='MY_DOMAIN', isInitialized=true, hasAuthToken=true, peer address='CLIENT_IP', presence='<presence id="a0dc111fdb7142518299aa567f0de1ba" xml:lang="en" from="MY_USER@MY_DOMAIN/test-resource"/>'}, Netty channel handler context name: NettyClientConnectionHandler#0} with optional error: null
2025.07.17 11:16:47 DEBUG [socket_c2s_ssl-worker-15]: org.jivesoftware.openfire.spi.RoutingTableImpl - Adding client route MY_USER@MY_DOMAIN/test-resource
2025.07.17 11:16:47 TRACE [socket_c2s_ssl-worker-17]: org.jivesoftware.openfire.nio.NettyConnection - Flushed any final bytes, closing connection.
2025.07.17 11:16:47 TRACE [socket_c2s_ssl-worker-17]: org.jivesoftware.openfire.nio.NettyConnection - Notifying close listeners.
2025.07.17 11:16:47 DEBUG [socket_c2s_ssl-worker-17]: org.jivesoftware.openfire.net.AbstractConnection - Notifying close listeners of connection NettyConnection{peer: /CLIENT_IP:59952, state: CLOSED, session: LocalClientSession{address=MY_USER@MY_DOMAIN/test-resource, streamID=5qabgg48xd, status=CLOSED, isEncrypted=true, isDetached=false, serverName='MY_DOMAIN', isInitialized=true, hasAuthToken=true, peer address='CLIENT_IP', presence='<presence id="a0dc111fdb7142518299aa567f0de1ba" xml:lang="en" from="MY_USER@MY_DOMAIN/test-resource"/>'}, Netty channel handler context name: NettyClientConnectionHandler#0}
2025.07.17 11:16:47 TRACE [socket_c2s_ssl-worker-15]: org.jivesoftware.openfire.spi.RoutingTableImpl - Adding client route MY_USER@MY_DOMAIN/test-resource to local routing table
2025.07.17 11:16:47 TRACE [socket_c2s_ssl-worker-15]: org.jivesoftware.openfire.spi.LocalRoutingTable - Route 'MY_USER@MY_DOMAIN/test-resource' (for pair: '{ -> MY_USER@MY_DOMAIN/test-resource}') added
2025.07.17 11:16:47 TRACE [socket_c2s_ssl-worker-15]: org.jivesoftware.openfire.spi.RoutingTableImpl - Adding client route ClientRoute{nodeID=3b12efa4-5d4b-4e79-9e80-9e87230f80ef, available=false} to users cache under key MY_USER@MY_DOMAIN/test-resource
2025.07.17 11:16:47 TRACE [socket_c2s_ssl-worker-15]: org.jivesoftware.openfire.spi.RoutingTableImpl - Adding client full JID MY_USER@MY_DOMAIN/test-resource to users sessions cache under key MY_USER@MY_DOMAIN
2025.07.17 11:16:47 TRACE [socket_c2s_ssl-worker-17]: org.jivesoftware.openfire.nio.NettyConnection - Finished closing connection.
2025.07.17 11:16:47 DEBUG [Thread-1544]: org.jivesoftware.openfire.SessionManager - Closing client session with address MY_USER@MY_DOMAIN/test-resource and streamID 5qabgg48xd that does not have SM resume.
2025.07.17 11:16:47 TRACE [socket_c2s_ssl-worker-17]: org.jivesoftware.openfire.nio.NettyConnectionHandler - Netty XMPP handler removed: /SERVER_IP:5223--/CLIENT_IP:59952
2025.07.17 11:16:47 TRACE [Thread-1545]: org.jivesoftware.openfire.csi.CsiManager - Cannot delay delivery of stanza. Push 1 stanza.
2025.07.17 11:16:47 DEBUG [Thread-1545]: org.jivesoftware.openfire.spi.PresenceManagerImpl - Recording 'last activity' for user 'MY_USER'.
2025.07.17 11:16:47 TRACE [socket_c2s_ssl-worker-15]: org.jivesoftware.openfire.csi.CsiManager - Cannot delay delivery of stanza. Push 1 stanza.
2025.07.17 11:16:47 DEBUG [socket_c2s_ssl-worker-15]: com.reucon.openfire.plugins.userstatus.SessionListener - Resource bound for user MY_USER
2025.07.17 11:16:48 DEBUG [Thread-1545]: org.jivesoftware.openfire.spi.RoutingTableImpl - Removing client route MY_USER@MY_DOMAIN/test-resource
2025.07.17 11:16:48 TRACE [Thread-1545]: org.jivesoftware.openfire.spi.RoutingTableImpl - Removed client route MY_USER@MY_DOMAIN/test-resource from users cache under key ClientRoute{nodeID=3b12efa4-5d4b-4e79-9e80-9e87230f80ef, available=false}
2025.07.17 11:16:48 TRACE [Thread-1545]: org.jivesoftware.openfire.spi.RoutingTableImpl - Removing client full JID MY_USER@MY_DOMAIN/test-resource from users sessions cache under key MY_USER@MY_DOMAIN
2025.07.17 11:16:48 TRACE [Thread-1545]: org.jivesoftware.openfire.spi.RoutingTableImpl - Removing client route MY_USER@MY_DOMAIN/test-resource from local routing table
2025.07.17 11:16:48 TRACE [Thread-1545]: org.jivesoftware.openfire.spi.LocalRoutingTable - Remove local route 'MY_USER@MY_DOMAIN/test-resource' (for pair: '{ -> MY_USER@MY_DOMAIN/test-resource}') removed
2025.07.17 11:16:48 DEBUG [Thread-1545]: org.jivesoftware.openfire.spi.RoutingTableImpl - Failed to route packet to JID: MY_USER@MY_DOMAIN/test-resource packet: <presence from="MY_USER@MY_DOMAIN/test-resource" to="MY_USER@MY_DOMAIN/test-resource" type="unavailable"/>
2025.07.17 11:16:48 DEBUG [Thread-1545]: org.jivesoftware.openfire.PresenceRouter - Presence sent to unreachable address: <presence from="MY_USER@MY_DOMAIN/test-resource" to="MY_USER@MY_DOMAIN/test-resource" type="unavailable"/>
2025.07.17 11:16:48 TRACE [Thread-1545]: org.jivesoftware.openfire.PresenceRouter - Not bouncing a presence stanza of type unavailable
2025.07.17 11:16:48 TRACE [socket_c2s_ssl-worker-15]: org.jivesoftware.openfire.nio.NettyConnectionHandler - Handler on /SERVER_IP:5223--/CLIENT_IP:63706 received: <presence id="747fee8738a74f4eb2614b5cecac481c" xml:lang="en" />
2025.07.17 11:16:48 DEBUG [socket_c2s_ssl-worker-15]: org.jivesoftware.openfire.spi.RoutingTableImpl - Failed to route packet to JID: MY_USER@MY_DOMAIN/test-resource packet: <presence id="747fee8738a74f4eb2614b5cecac481c" xml:lang="en" from="MY_USER@MY_DOMAIN/test-resource" to="MY_USER@MY_DOMAIN/test-resource"/>
2025.07.17 11:16:48 DEBUG [socket_c2s_ssl-worker-15]: org.jivesoftware.openfire.PresenceRouter - Presence sent to unreachable address: <presence id="747fee8738a74f4eb2614b5cecac481c" xml:lang="en" from="MY_USER@MY_DOMAIN/test-resource" to="MY_USER@MY_DOMAIN/test-resource"/>
2025.07.17 11:16:48 TRACE [socket_c2s_ssl-worker-15]: org.jivesoftware.openfire.PresenceRouter - Not bouncing a presence stanza of type null
2025.07.17 11:16:48 TRACE [socket_c2s_ssl-worker-15]: org.jivesoftware.openfire.nio.NettyConnectionHandler - Handler on /SERVER_IP:5223--/CLIENT_IP:63706 received: <iq id="571ec7b70f3540cb8387aa82d8eaf1e1" type="get"><query xmlns="jabber:iq:roster" ver="" /></iq>
2025.07.17 11:16:48 DEBUG [socket_c2s_ssl-worker-15]: org.jivesoftware.openfire.spi.RoutingTableImpl - Failed to route packet to JID: MY_USER@MY_DOMAIN/test-resource packet: <iq type="result" id="571ec7b70f3540cb8387aa82d8eaf1e1" to="MY_USER@MY_DOMAIN/test-resource"><query xmlns="jabber:iq:roster" ver="792186439"/></iq>
2025.07.17 11:16:48 DEBUG [socket_c2s_ssl-worker-15]: org.jivesoftware.openfire.IQRouter - IQ sent to unreachable address 'MY_USER@MY_DOMAIN/test-resource': <iq type="result" id="571ec7b70f3540cb8387aa82d8eaf1e1" to="MY_USER@MY_DOMAIN/test-resource"><query xmlns="jabber:iq:roster" ver="792186439"/></iq>
we think it could be related to this change OF-3044: When resource binding, ensure that old detached sessions are… · igniterealtime/Openfire@d918634 · GitHub