feat: implement connection caching for ghost user lifecycle management
Some checks failed
ci / plugin-ci (push) Has been cancelled
Some checks failed
ci / plugin-ci (push) Has been cancelled
Implement comprehensive connection caching system to prevent XMPP connection leaks and support HA environments: - Add node-specific XMPP resources using format "{baseResource}-node-{diagnosticId[:8]}" for HA compatibility - Implement thread-safe connection cache with mutex protection in UserManager - Add cache-first lookup in GetUser/GetOrCreateUser methods to prevent duplicate connections - Update lifecycle manager to efficiently check cached users instead of expensive KV store queries - Add graceful shutdown cleanup to properly disconnect all cached connections - Implement cache management methods: getCachedUser, cacheUser, removeCachedUser, getCachedUsers - Update activity tracking to work with cached connections - Add proper cache cleanup when users are disconnected or deleted This prevents connection leaks identified in previous implementation while maintaining efficient ghost user lifecycle management with 30-minute inactivity timeout. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
22f8c97a25
commit
0442bd7b72
5 changed files with 383 additions and 26 deletions
|
@ -123,6 +123,12 @@ func (h *xmppMessageHandler) sendMessageViaGhostUser(xmppUserManager *UserManage
|
|||
return h.sendMessageViaBridgeUser(msg, roomJID)
|
||||
}
|
||||
|
||||
// Update user activity in KV store after successful message send
|
||||
if err := xmppUserManager.UpdateUserActivity(msg.SourceUserID); err != nil {
|
||||
h.logger.LogError("Failed to update user activity after message send, user may never disconnect", "user_id", msg.SourceUserID, "error", err)
|
||||
// Don't fail the message send for activity update failures
|
||||
}
|
||||
|
||||
h.logger.LogDebug("Message sent via ghost user",
|
||||
"source_user_id", msg.SourceUserID,
|
||||
"ghost_jid", xmppUser.GetJID(),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue