Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Fix sending server up commands from workers #6811

Merged
merged 6 commits into from
Jan 30, 2020
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/6811.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix waking waking up other servers when remote server is detected to have come back online from other workers.
erikjohnston marked this conversation as resolved.
Show resolved Hide resolved
5 changes: 4 additions & 1 deletion synapse/federation/transport/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
# limitations under the License.

import logging
from typing import Any, Dict

from six.moves import urllib

Expand Down Expand Up @@ -352,7 +353,9 @@ def get_public_rooms(
else:
path = _create_v1_path("/publicRooms")

args = {"include_all_networks": "true" if include_all_networks else "false"}
args = {
"include_all_networks": "true" if include_all_networks else "false"
} # type: Dict[str, Any]
anoadragon453 marked this conversation as resolved.
Show resolved Hide resolved
if third_party_instance_id:
args["third_party_instance_id"] = (third_party_instance_id,)
if limit:
Expand Down
26 changes: 15 additions & 11 deletions synapse/federation/transport/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import functools
import logging
import re
from typing import Optional, Tuple, Type

from twisted.internet.defer import maybeDeferred

Expand Down Expand Up @@ -267,6 +268,8 @@ class BaseFederationServlet(object):
returned.
"""

PATH = "" # Overriden in subclasses, the regex to match against the path.
erikjohnston marked this conversation as resolved.
Show resolved Hide resolved

REQUIRE_AUTH = True

PREFIX = FEDERATION_V1_PREFIX # Allows specifying the API version
Expand Down Expand Up @@ -347,9 +350,6 @@ async def new_func(request, *args, **kwargs):

return response

# Extra logic that functools.wraps() doesn't finish
new_func.__self__ = func.__self__

return new_func

def register(self, server):
Expand Down Expand Up @@ -824,7 +824,7 @@ async def on_POST(self, origin, content, query):
if not self.allow_access:
raise FederationDeniedError(origin)

limit = int(content.get("limit", 100))
limit = int(content.get("limit", 100)) # type: Optional[int]
anoadragon453 marked this conversation as resolved.
Show resolved Hide resolved
since_token = content.get("since", None)
search_filter = content.get("filter", None)

Expand Down Expand Up @@ -971,7 +971,7 @@ async def on_POST(self, origin, content, query, group_id, room_id, config_key):
if get_domain_from_id(requester_user_id) != origin:
raise SynapseError(403, "requester_user_id doesn't match origin")

result = await self.groups_handler.update_room_in_group(
result = await self.handler.update_room_in_group(
group_id, requester_user_id, room_id, config_key, content
)

Expand Down Expand Up @@ -1422,11 +1422,13 @@ async def on_GET(self, origin, content, query, room_id):
On3pidBindServlet,
FederationVersionServlet,
RoomComplexityServlet,
)
) # type: Tuple[Type[BaseFederationServlet], ...]

OPENID_SERVLET_CLASSES = (OpenIdUserInfo,)
OPENID_SERVLET_CLASSES = (
OpenIdUserInfo,
) # type: Tuple[Type[BaseFederationServlet], ...]

ROOM_LIST_CLASSES = (PublicRoomList,)
ROOM_LIST_CLASSES = (PublicRoomList,) # type: Tuple[Type[PublicRoomList], ...]

GROUP_SERVER_SERVLET_CLASSES = (
FederationGroupsProfileServlet,
Expand All @@ -1447,17 +1449,19 @@ async def on_GET(self, origin, content, query, room_id):
FederationGroupsAddRoomsServlet,
FederationGroupsAddRoomsConfigServlet,
FederationGroupsSettingJoinPolicyServlet,
)
) # type: Tuple[Type[BaseFederationServlet], ...]


GROUP_LOCAL_SERVLET_CLASSES = (
FederationGroupsLocalInviteServlet,
FederationGroupsRemoveLocalUserServlet,
FederationGroupsBulkPublicisedServlet,
)
) # type: Tuple[Type[BaseFederationServlet], ...]


GROUP_ATTESTATION_SERVLET_CLASSES = (FederationGroupsRenewAttestaionServlet,)
GROUP_ATTESTATION_SERVLET_CLASSES = (
FederationGroupsRenewAttestaionServlet,
) # type: Tuple[Type[BaseFederationServlet], ...]

DEFAULT_SERVLET_GROUPS = (
"federation",
Expand Down
4 changes: 4 additions & 0 deletions synapse/replication/tcp/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
Command,
FederationAckCommand,
InvalidateCacheCommand,
RemoteServerUpCommand,
RemovePusherCommand,
UserIpCommand,
UserSyncCommand,
Expand Down Expand Up @@ -210,6 +211,9 @@ def send_user_ip(self, user_id, access_token, ip, user_agent, device_id, last_se
cmd = UserIpCommand(user_id, access_token, ip, user_agent, device_id, last_seen)
self.send_command(cmd)

def send_remote_server_up(self, server: str):
self.send_command(RemoteServerUpCommand(server))

def await_sync(self, data):
"""Returns a deferred that is resolved when we receive a SYNC command
with given data.
Expand Down
12 changes: 11 additions & 1 deletion synapse/server.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ import twisted.internet

import synapse.api.auth
import synapse.config.homeserver
import synapse.crypto.keyring
import synapse.federation.sender
import synapse.federation.transaction_queue
import synapse.federation.transport.client
import synapse.handlers
import synapse.handlers.auth
Expand All @@ -17,6 +17,7 @@ import synapse.handlers.room_member
import synapse.handlers.set_password
import synapse.http.client
import synapse.notifier
import synapse.replication.tcp.client
import synapse.rest.media.v1.media_repository
import synapse.server_notices.server_notices_manager
import synapse.server_notices.server_notices_sender
Expand All @@ -27,6 +28,9 @@ class HomeServer(object):
@property
def config(self) -> synapse.config.homeserver.HomeServerConfig:
pass
@property
def hostname(self) -> str:
pass
def get_auth(self) -> synapse.api.auth.Auth:
pass
def get_auth_handler(self) -> synapse.handlers.auth.AuthHandler:
Expand Down Expand Up @@ -97,3 +101,9 @@ class HomeServer(object):
pass
def get_reactor(self) -> twisted.internet.base.ReactorBase:
pass
def get_keyring(self) -> synapse.crypto.keyring.Keyring:
pass
def get_tcp_replication(
self,
) -> synapse.replication.tcp.client.ReplicationClientHandler:
pass
1 change: 1 addition & 0 deletions tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,7 @@ extras = all
commands = mypy \
synapse/api \
synapse/config/ \
synapse/federation/transport \
synapse/handlers/ui_auth \
synapse/logging/ \
synapse/module_api \
Expand Down