Skip to content
Snippets Groups Projects
Commit 50e328d1 authored by Richard van der Hoff's avatar Richard van der Hoff
Browse files

Remove redundant database locks for device list updates

We can rely on the application-level per-user linearizer.
parent c68aab15
No related branches found
No related tags found
No related merge requests found
...@@ -239,7 +239,19 @@ class DeviceStore(SQLBaseStore): ...@@ -239,7 +239,19 @@ class DeviceStore(SQLBaseStore):
def update_remote_device_list_cache_entry(self, user_id, device_id, content, def update_remote_device_list_cache_entry(self, user_id, device_id, content,
stream_id): stream_id):
"""Updates a single user's device in the cache. """Updates a single device in the cache of a remote user's devicelist.
Note: assumes that we are the only thread that can be updating this user's
device list.
Args:
user_id (str): User to update device list for
device_id (str): ID of decivice being updated
content (dict): new data on this device
stream_id (int): the version of the device list
Returns:
Deferred[None]
""" """
return self.runInteraction( return self.runInteraction(
"update_remote_device_list_cache_entry", "update_remote_device_list_cache_entry",
...@@ -272,7 +284,11 @@ class DeviceStore(SQLBaseStore): ...@@ -272,7 +284,11 @@ class DeviceStore(SQLBaseStore):
}, },
values={ values={
"content": json.dumps(content), "content": json.dumps(content),
} },
# we don't need to lock, because we assume we are the only thread
# updating this user's devices.
lock=False,
) )
txn.call_after(self._get_cached_user_device.invalidate, (user_id, device_id,)) txn.call_after(self._get_cached_user_device.invalidate, (user_id, device_id,))
...@@ -289,11 +305,26 @@ class DeviceStore(SQLBaseStore): ...@@ -289,11 +305,26 @@ class DeviceStore(SQLBaseStore):
}, },
values={ values={
"stream_id": stream_id, "stream_id": stream_id,
} },
# again, we can assume we are the only thread updating this user's
# extremity.
lock=False,
) )
def update_remote_device_list_cache(self, user_id, devices, stream_id): def update_remote_device_list_cache(self, user_id, devices, stream_id):
"""Replace the cache of the remote user's devices. """Replace the entire cache of the remote user's devices.
Note: assumes that we are the only thread that can be updating this user's
device list.
Args:
user_id (str): User to update device list for
devices (list[dict]): list of device objects supplied over federation
stream_id (int): the version of the device list
Returns:
Deferred[None]
""" """
return self.runInteraction( return self.runInteraction(
"update_remote_device_list_cache", "update_remote_device_list_cache",
...@@ -338,7 +369,11 @@ class DeviceStore(SQLBaseStore): ...@@ -338,7 +369,11 @@ class DeviceStore(SQLBaseStore):
}, },
values={ values={
"stream_id": stream_id, "stream_id": stream_id,
} },
# we don't need to lock, because we can assume we are the only thread
# updating this user's extremity.
lock=False,
) )
def get_devices_by_remote(self, destination, from_stream_id): def get_devices_by_remote(self, destination, from_stream_id):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment