Add back the guard against the user directory stream position not existing. (#9428)

As the comment says, this guard was there for when the
initial user directory update has yet to happen.
This commit is contained in:
Patrick Cloke 2021-02-18 08:44:19 -05:00 committed by GitHub
parent 626afd7e89
commit 43f1c82457
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 12 additions and 1 deletions

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

@ -0,0 +1 @@
Fix a bug introduced in v1.27.0: "TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType." related to the user directory.

View File

@ -143,6 +143,10 @@ class UserDirectoryHandler(StateDeltasHandler):
if self.pos is None: if self.pos is None:
self.pos = await self.store.get_user_directory_stream_pos() self.pos = await self.store.get_user_directory_stream_pos()
# If still None then the initial background update hasn't happened yet.
if self.pos is None:
return None
# Loop round handling deltas until we're up to date # Loop round handling deltas until we're up to date
while True: while True:
with Measure(self.clock, "user_dir_delta"): with Measure(self.clock, "user_dir_delta"):

View File

@ -707,7 +707,13 @@ class UserDirectoryStore(UserDirectoryBackgroundUpdateStore):
return {row["room_id"] for row in rows} return {row["room_id"] for row in rows}
async def get_user_directory_stream_pos(self) -> int: async def get_user_directory_stream_pos(self) -> Optional[int]:
"""
Get the stream ID of the user directory stream.
Returns:
The stream token or None if the initial background update hasn't happened yet.
"""
return await self.db_pool.simple_select_one_onecol( return await self.db_pool.simple_select_one_onecol(
table="user_directory_stream_pos", table="user_directory_stream_pos",
keyvalues={}, keyvalues={},