mirror of
https://github.com/element-hq/synapse.git
synced 2026-05-23 02:25:25 +00:00
87d70c4de1
1 new file created, 5 new tests with real TCP connections, all passing, mypy clean, no regressions. synapse/replication/tcp/native_protocol.py — asyncio-native replication protocol: NativeReplicationProtocol — Replaces BaseReplicationStreamProtocol (Twisted LineOnlyReceiver): - Uses asyncio.StreamReader/asyncio.StreamWriter instead of Twisted transport - Line-based protocol: reads \n-delimited lines, parses via existing parse_command_from_line() - Ping/keepalive: 5s ping interval, 25s timeout — same constants as Twisted version - Command dispatch: two-phase (protocol-level on_<CMD> then handler-level), same as Twisted - Backpressure: buffers commands during CONNECTING state, closes if buffer exceeds 10000 - Connection lifecycle: start(), close(), on_connection_made(), on_connection_lost() hooks - Graceful shutdown: waits for clean close, force-aborts after PING_TIMEOUT start_native_replication_server() — asyncio equivalent of ReplicationStreamProtocolFactory: - Uses asyncio.start_server() to listen for connections - Creates new protocol per connection via factory callable connect_native_replication_client() — asyncio equivalent of ReconnectingClientFactory: - Uses asyncio.open_connection() with automatic reconnection loop - Configurable reconnect interval (default 5s) --- Running totals across Phases 0-6: - 8 new files, ~2500 lines of asyncio-native implementation - 128 tests all passing - All mypy clean - Existing 4462-test suite unaffected