element-hq / element-hq/synapse

DELETE room API fails when room exists in sliding_sync_joined_rooms_to_recalculate

Open
#19,822 0 comments 0 reactions 0 assignees View on GitHub
A-Admin-API A-Database A-purge-room A-Sync
Dominant language
Python
Stars
4.6k
Forks
600
Avg merge
5d 22h
Merged PRs (30d)
51

Description

### Description

See title. When I try to delete a room via `'https://'"$matrixServer":"$matrixServerPort"'/_synapse/admin/v2/rooms/!'"$1"` it fails in 50 % of the cases with following error:

/var/log/matrix-synapse/homeserver.log:DETAIL: Key (room_id)=(!someroomid) is still referenced from table "sliding_sync_joined_rooms_to_recalculate".

After a `delete from sliding_sync_joined_rooms_to_recalculate where room_id='!zxWLnBMJtBomyQlnRV:tang.ents.ca';` it works.

### Steps to reproduce

- run synapse 1.153.0+bookworm1
- run
```
curl -s ${CURLOPTS_ADMIN} \
-H "${MATRIX_ADMIN_AUTH_HEADERNAME}: Bearer $accessToken" \
--data '{ "new_room_user_id": "'$admin'", "room_name": "Room replaced", "message": "Room replaced, try rejoining !'$1' in a couple of minutes.","block":false,"purge":true }' \
-X DELETE 'https://'"$matrixServer":"$matrixServerPort"'/_synapse/admin/v2/rooms/!'"$1"
```
- query
```
curl -s ${CURLOPTS_ADMIN} \
-H "${MATRIX_ADMIN_AUTH_HEADERNAME}: Bearer $accessToken" \
-X GET 'https://'"$matrixServer":"$matrixServerPort"'/_synapse/admin/v2/rooms/delete_status/'"$1"
```
- see pipe result through `jq .status`
- see "failed"
- see logs: DETAIL: Key (room_id)=(!someroomid) is still referenced from table "sliding_sync_joined_rooms_to_recalculate".
- run `delete from sliding_sync_joined_rooms_to_recalculate where room_id='!someroomid';
- repeat previous steps
- see "completed"

### Homeserver

asra.gr

### Synapse Version

1.153.0+bookworm1

### Installation Method

Debian packages from packages.matrix.org

### Database

psql (17.8 (Debian 17.8-0+deb13u1)), single server, not ported from sqlite, restored from a pg_dump because of db migration to new hardware

### Workers

Multiple workers

### Platform

see above

### Configuration

_No response_

### Relevant log output

```shell
2026-06-04 14:08:10,914 - synapse.util.task_scheduler - 422 - INFO - task-shutdown_and_purge_room-7-deleteid - Task failed: 120.030sec (0.894sec, 0.827sec) (0.039sec/119.570sec/61) [0 dbevts] '!someroomid', {'new_room_user_id': '@abuse:asra.gr', 'new_room_name': 'Room replaced', 'message': 'Room replaced, try rejoining !someroomid in a couple of minutes.', 'requester_user_id': '@abuse:asra.gr', 'block': False, 'purge': True, 'force_purge': False}
DETAIL: Key (room_id)=(!someroomid) is still referenced from table "sliding_sync_joined_rooms_to_recalculate".

Reason for the purge is another error:
2026-06-04 13:41:28,216 - synapse.http.server - 131 - INFO - GET-367685 - SynapseError: 403 - User @someuser:asra.gr not in room !someroom, and room previews are disabled
```

### Anything else that would be useful to know?

_No response_

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.