Skip to content

Stuck Notification Badges on Blocked-User Invite #19909

Description

@pkulak

Description

First thing: I've had this issue for YEARS, and thought I would throw Fable at it while it's in it's trial period. I even took a snapshot of my DB and gave it full access (yes, I got a bit desperate). It found the problem (I'm pretty confident because the fix did indeed fix it, I confirmed the block + invite, etc). Below is the clanker text after I asked it to summarize the issue for me:

One way to get a permanently stuck badge: an invite from an ignored user. All sync implementations filter these invites out (handlers/sliding_sync/room_lists.py and the equivalent in handlers/sync.py), so no client will ever display the invite. But get_badge_count in push/push_tools.py counts len(get_invited_rooms_for_local_user(...)) with no ignored-user filtering, so the invite adds +1 to the push badge forever. I confirmed this on my own homeserver (the invite sat hidden for 4.5 years) and cleared it by rejecting the invite via a raw POST /_matrix/client/v3/rooms/{roomId}/leave with the room ID pulled from the database.

Anyway, apologies for what amounts to an AI issue, but I felt this was a pretty decent find. I never thought I could be so excited to see a badge notification go away!

Steps to reproduce

  • user A ignores user B
  • B invites A to a room
  • A's badge never reaches zero and nothing in any client explains why

Homeserver

kulak.us

Synapse Version

1.153.0

Installation Method

Docker (matrixdotorg/synapse)

Database

Postrgres (single server)

Workers

Single process

Platform

Docker container running on a NAS. The database runs on a separate machine in the same local network.

Configuration

No, very vanilla setup.

Relevant log output

I don't have anything to share here, sorry.

Anything else that would be useful to know?

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions