Skip to content

Commit 20119d7

Browse files
JohnMcLearclaude
andcommitted
fix: filter already-deleted sessions when deleting a group
deleteSession uses setSub(..., undefined) to remove session references from group2sessions and author2sessions, but this can leave null entries in the sessionIDs object. When deleteGroup later iterates Object.keys of sessionIDs and calls deleteSession on each, it throws "sessionID does not exist" for the already-deleted sessions. Now deleteGroup filters out null/falsy session entries before attempting to delete them. Fixes: #5798 Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
1 parent 32d9c89 commit 20119d7

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

src/node/db/GroupManager.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,10 @@ exports.deleteGroup = async (groupID: string): Promise<void> => {
5959

6060
// Delete associated sessions in parallel. This should be done before deleting the group2sessions
6161
// record because deleting a session updates the group2sessions record.
62+
// Filter out already-deleted sessions: deleteSession sets the value to null/undefined via setSub,
63+
// but the key remains in the object. See https://github.com/ether/etherpad-lite/issues/5798
6264
const {sessionIDs = {}} = await db.get(`group2sessions:${groupID}`) || {};
63-
await Promise.all(Object.keys(sessionIDs).map(async (sessionId) => {
65+
await Promise.all(Object.keys(sessionIDs).filter((id) => sessionIDs[id]).map(async (sessionId) => {
6466
await sessionManager.deleteSession(sessionId);
6567
}));
6668

0 commit comments

Comments
 (0)