This repository was archived by the owner on Apr 26, 2024. It is now read-only.
  
  
  - 
          
- 
                Notifications
    You must be signed in to change notification settings 
- Fork 2.1k
Faster joins: fix race where we can fail to persist an incoming event with partial state after _sync_partial_state_room clears the partial state flag for a room #12988
Copy link
Copy link
Closed
Labels
A-Federated-Joinjoins over federation generally suckjoins over federation generally suckT-DefectBugs, crashes, hangs, security vulnerabilities, or other reported issues.Bugs, crashes, hangs, security vulnerabilities, or other reported issues.
Description
synapse/synapse/handlers/federation.py
Lines 1553 to 1569 in e3163e2
| logger.info("Clearing partial-state flag for %s", room_id) | |
| success = await self.store.clear_partial_state_room(room_id) | |
| if success: | |
| logger.info("State resync complete for %s", room_id) | |
| self._storage_controllers.state.notify_room_un_partial_stated( | |
| room_id | |
| ) | |
| # TODO(faster_joins) update room stats and user directory? | |
| return | |
| # we raced against more events arriving with partial state. Go round | |
| # the loop again. We've already logged a warning, so no need for more. | |
| # TODO(faster_joins): there is still a race here, whereby incoming events which raced | |
| # with us will fail to be persisted after the call to `clear_partial_state_room` due to | |
| # having partial state. | |
| continue | 
When we are processing an incoming event while _sync_partial_state_room is running, _sync_partial_state_room may clear the partial state flag for the room before we try to persist the event with a partial state flag. This leads to a foreign key constraint failure because there's no longer a partial_state_room entry for the room.
See #12394 (comment) for an example.
Metadata
Metadata
Assignees
Labels
A-Federated-Joinjoins over federation generally suckjoins over federation generally suckT-DefectBugs, crashes, hangs, security vulnerabilities, or other reported issues.Bugs, crashes, hangs, security vulnerabilities, or other reported issues.