Skip to content
Snippets Groups Projects
Unverified Commit 3f06bbc0 authored by Erik Johnston's avatar Erik Johnston Committed by GitHub
Browse files

Always return OTK counts (#17275)

parent fcbc79bb
No related branches found
No related tags found
No related merge requests found
Fix bug where OTKs were not always included in `/sync` response when using workers.
...@@ -285,7 +285,11 @@ class SyncResult: ...@@ -285,7 +285,11 @@ class SyncResult:
) )
@staticmethod @staticmethod
def empty(next_batch: StreamToken) -> "SyncResult": def empty(
next_batch: StreamToken,
device_one_time_keys_count: JsonMapping,
device_unused_fallback_key_types: List[str],
) -> "SyncResult":
"Return a new empty result" "Return a new empty result"
return SyncResult( return SyncResult(
next_batch=next_batch, next_batch=next_batch,
...@@ -297,8 +301,8 @@ class SyncResult: ...@@ -297,8 +301,8 @@ class SyncResult:
archived=[], archived=[],
to_device=[], to_device=[],
device_lists=DeviceListUpdates(), device_lists=DeviceListUpdates(),
device_one_time_keys_count={}, device_one_time_keys_count=device_one_time_keys_count,
device_unused_fallback_key_types=[], device_unused_fallback_key_types=device_unused_fallback_key_types,
) )
...@@ -523,7 +527,28 @@ class SyncHandler: ...@@ -523,7 +527,28 @@ class SyncHandler:
logger.warning( logger.warning(
"Timed out waiting for worker to catch up. Returning empty response" "Timed out waiting for worker to catch up. Returning empty response"
) )
return SyncResult.empty(since_token) device_id = sync_config.device_id
one_time_keys_count: JsonMapping = {}
unused_fallback_key_types: List[str] = []
if device_id:
user_id = sync_config.user.to_string()
# TODO: We should have a way to let clients differentiate between the states of:
# * no change in OTK count since the provided since token
# * the server has zero OTKs left for this device
# Spec issue: https://github.com/matrix-org/matrix-doc/issues/3298
one_time_keys_count = await self.store.count_e2e_one_time_keys(
user_id, device_id
)
unused_fallback_key_types = list(
await self.store.get_e2e_unused_fallback_key_types(
user_id, device_id
)
)
cache_context.should_cache = False # Don't cache empty responses
return SyncResult.empty(
since_token, one_time_keys_count, unused_fallback_key_types
)
# If we've spent significant time waiting to catch up, take it off # If we've spent significant time waiting to catch up, take it off
# the timeout. # the timeout.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment