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

Commit

Permalink
Start application service stream token tracking from 1 (#12193)
Browse files Browse the repository at this point in the history
Co-authored-by: Erik Johnston <[email protected]>
  • Loading branch information
anoadragon453 and erikjohnston authored Mar 30, 2022
1 parent 9b67715 commit c8cbd66
Show file tree
Hide file tree
Showing 4 changed files with 6 additions and 4 deletions.
1 change: 1 addition & 0 deletions changelog.d/12193.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Omit sending "offline" presence updates to application services after they are initially configured.
2 changes: 1 addition & 1 deletion synapse/handlers/presence.py
Original file line number Diff line number Diff line change
Expand Up @@ -1625,7 +1625,7 @@ async def get_new_events(
# We'll actually pull the presence updates for these users at the end.
interested_and_updated_users: Union[Set[str], FrozenSet[str]] = set()

if from_key:
if from_key is not None:
# First get all users that have had a presence update
updated_users = stream_change_cache.get_all_entities_changed(from_key)

Expand Down
3 changes: 2 additions & 1 deletion synapse/storage/databases/main/appservice.py
Original file line number Diff line number Diff line change
Expand Up @@ -446,7 +446,8 @@ def get_type_stream_id_for_appservice_txn(txn):
)
last_stream_id = txn.fetchone()
if last_stream_id is None or last_stream_id[0] is None: # no row exists
return 0
# Stream tokens always start from 1, to avoid foot guns around `0` being falsey.
return 1
else:
return int(last_stream_id[0])

Expand Down
4 changes: 2 additions & 2 deletions tests/storage/test_appservice.py
Original file line number Diff line number Diff line change
Expand Up @@ -476,12 +476,12 @@ def test_get_type_stream_id_for_appservice_no_value(self) -> None:
value = self.get_success(
self.store.get_type_stream_id_for_appservice(self.service, "read_receipt")
)
self.assertEqual(value, 0)
self.assertEqual(value, 1)

value = self.get_success(
self.store.get_type_stream_id_for_appservice(self.service, "presence")
)
self.assertEqual(value, 0)
self.assertEqual(value, 1)

def test_get_type_stream_id_for_appservice_invalid_type(self) -> None:
self.get_failure(
Expand Down

0 comments on commit c8cbd66

Please sign in to comment.