diff options
| author | Quentin Gliech <quenting@element.io> | 2024-03-06 16:00:20 +0100 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-06 16:00:20 +0100 | 
| commit | 4af33015af280b4716e812e47d5631fcac088128 (patch) | |
| tree | 45e0633969e26f4137a539134bc63ab59925ffdb /tests/api/test_errors.py | |
| parent | Merge remote-tracking branch 'origin/release-v1.102' into develop (diff) | |
| download | synapse-4af33015af280b4716e812e47d5631fcac088128.tar.xz | |
Fix joining remote rooms when a `on_new_event` callback is registered (#16973)
Since Synapse 1.76.0, any module which registers a `on_new_event`
callback would brick the ability to join remote rooms.
This is because this callback tried to get the full state of the room,
which would end up in a deadlock.
Related:
https://github.com/matrix-org/synapse-auto-accept-invite/issues/18
The following module would brick the ability to join remote rooms:
```python
from typing import Any, Dict, Literal, Union
import logging
from synapse.module_api import ModuleApi, EventBase
logger = logging.getLogger(__name__)
class MyModule:
    def __init__(self, config: None, api: ModuleApi):
        self._api = api
        self._config = config
        self._api.register_third_party_rules_callbacks(
            on_new_event=self.on_new_event,
        )
    async def on_new_event(self, event: EventBase, _state_map: Any) -> None:
        logger.info(f"Received new event: {event}")
    @staticmethod
    def parse_config(_config: Dict[str, Any]) -> None:
        return None
```
This is technically a breaking change, as we are now passing partial
state on the `on_new_event` callback.
However, this callback was broken for federated rooms since 1.76.0, and
local rooms have full state anyway, so it's unlikely that it would
change anything.Diffstat (limited to 'tests/api/test_errors.py')
0 files changed, 0 insertions, 0 deletions
