Compare commits

...

4 Commits

Author SHA1 Message Date
Richard van der Hoff 0bbbd10513
Stub out GET presence requests in the frontend proxy (#7545)
We don't really make any promises about returning accurate presence data when
presence is disabled, so we may as well just return a static response, rather
than making the master handle a request.
2020-05-21 14:36:46 +01:00
David Vo d74cdc1a42
Ensure worker config exists in systemd service (#7528) 2020-05-21 13:47:23 +01:00
Richard van der Hoff 075375bbc9 add a comment 2020-05-21 13:25:41 +01:00
Erik Johnston f6f92845f8
Fix bug in persist events when dealing with non member types. (#7548)
`_is_server_still_joined` will throw if it is given state updates with non-user ID state keys with local user leaves. This is actually rarely a problem since local leaves almost always get persisted by themselves.

(I discovered this on a branch that was otherwise broken, so I haven't seen this in the wild)
2020-05-21 13:20:10 +01:00
7 changed files with 13 additions and 20 deletions

1
changelog.d/7528.doc Normal file
View File

@ -0,0 +1 @@
Change the systemd worker service to check that the worker config file exists instead of silently failing. Contributed by David Vo.

1
changelog.d/7545.misc Normal file
View File

@ -0,0 +1 @@
Make worker processes return a stubbed-out response to `GET /presence` requests.

1
changelog.d/7548.bugfix Normal file
View File

@ -0,0 +1 @@
Fix bug where a local user leaving a room could fail under rare circumstances.

View File

@ -1,6 +1,6 @@
[Unit] [Unit]
Description=Synapse %i Description=Synapse %i
AssertPathExists=/etc/matrix-synapse/workers/%i.yaml
# This service should be restarted when the synapse target is restarted. # This service should be restarted when the synapse target is restarted.
PartOf=matrix-synapse.target PartOf=matrix-synapse.target

View File

@ -26,7 +26,7 @@ from twisted.web.resource import NoResource
import synapse import synapse
import synapse.events import synapse.events
from synapse.api.errors import HttpResponseException, SynapseError from synapse.api.errors import SynapseError
from synapse.api.urls import ( from synapse.api.urls import (
CLIENT_API_PREFIX, CLIENT_API_PREFIX,
FEDERATION_PREFIX, FEDERATION_PREFIX,
@ -137,31 +137,18 @@ logger = logging.getLogger("synapse.app.generic_worker")
class PresenceStatusStubServlet(RestServlet): class PresenceStatusStubServlet(RestServlet):
"""If presence is disabled this servlet can be used to stub out setting """If presence is disabled this servlet can be used to stub out setting
presence status, while proxying the getters to the master instance. presence status.
""" """
PATTERNS = client_patterns("/presence/(?P<user_id>[^/]*)/status") PATTERNS = client_patterns("/presence/(?P<user_id>[^/]*)/status")
def __init__(self, hs): def __init__(self, hs):
super(PresenceStatusStubServlet, self).__init__() super(PresenceStatusStubServlet, self).__init__()
self.http_client = hs.get_simple_http_client()
self.auth = hs.get_auth() self.auth = hs.get_auth()
self.main_uri = hs.config.worker_main_http_uri
async def on_GET(self, request, user_id): async def on_GET(self, request, user_id):
# Pass through the auth headers, if any, in case the access token await self.auth.get_user_by_req(request)
# is there. return 200, {"presence": "offline"}
auth_headers = request.requestHeaders.getRawHeaders("Authorization", [])
headers = {"Authorization": auth_headers}
try:
result = await self.http_client.get_json(
self.main_uri + request.uri.decode("ascii"), headers=headers
)
except HttpResponseException as e:
raise e.to_synapse_error()
return 200, result
async def on_PUT(self, request, user_id): async def on_PUT(self, request, user_id):
await self.auth.get_user_by_req(request) await self.auth.get_user_by_req(request)

View File

@ -80,6 +80,9 @@ class PerDestinationQueue(object):
# a list of tuples of (pending pdu, order) # a list of tuples of (pending pdu, order)
self._pending_pdus = [] # type: List[Tuple[EventBase, int]] self._pending_pdus = [] # type: List[Tuple[EventBase, int]]
# XXX this is never actually used: see
# https://github.com/matrix-org/synapse/issues/7549
self._pending_edus = [] # type: List[Edu] self._pending_edus = [] # type: List[Edu]
# Pending EDUs by their "key". Keyed EDUs are EDUs that get clobbered # Pending EDUs by their "key". Keyed EDUs are EDUs that get clobbered

View File

@ -740,8 +740,8 @@ class EventsPersistenceStorage(object):
# whose state has changed as we've already their new state above. # whose state has changed as we've already their new state above.
users_to_ignore = [ users_to_ignore = [
state_key state_key
for _, state_key in itertools.chain(delta.to_insert, delta.to_delete) for typ, state_key in itertools.chain(delta.to_insert, delta.to_delete)
if self.is_mine_id(state_key) if typ == EventTypes.Member and self.is_mine_id(state_key)
] ]
if await self.main_store.is_local_host_in_room_ignoring_users( if await self.main_store.is_local_host_in_room_ignoring_users(