summary refs log tree commit diff
diff options
context:
space:
mode:
authorPatrick Cloke <clokep@users.noreply.github.com>2021-02-18 08:44:19 -0500
committerGitHub <noreply@github.com>2021-02-18 08:44:19 -0500
commit43f1c82457e4ce2ef9805829d86dc8791b56bbd5 (patch)
treea987fddf4b8891ff3de72db56a8af86284e896db
parentRevert "Update workers.md" (diff)
downloadsynapse-43f1c82457e4ce2ef9805829d86dc8791b56bbd5.tar.xz
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.
-rw-r--r--changelog.d/9428.bugfix1
-rw-r--r--synapse/handlers/user_directory.py4
-rw-r--r--synapse/storage/databases/main/user_directory.py8
3 files changed, 12 insertions, 1 deletions
diff --git a/changelog.d/9428.bugfix b/changelog.d/9428.bugfix
new file mode 100644
index 0000000000..132e35440a
--- /dev/null
+++ b/changelog.d/9428.bugfix
@@ -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.
diff --git a/synapse/handlers/user_directory.py b/synapse/handlers/user_directory.py
index 3dfb0a26c2..1a8340000a 100644
--- a/synapse/handlers/user_directory.py
+++ b/synapse/handlers/user_directory.py
@@ -143,6 +143,10 @@ class UserDirectoryHandler(StateDeltasHandler):
         if self.pos is None:
             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
         while True:
             with Measure(self.clock, "user_dir_delta"):
diff --git a/synapse/storage/databases/main/user_directory.py b/synapse/storage/databases/main/user_directory.py
index 3a1fe3ed52..63f88eac51 100644
--- a/synapse/storage/databases/main/user_directory.py
+++ b/synapse/storage/databases/main/user_directory.py
@@ -707,7 +707,13 @@ class UserDirectoryStore(UserDirectoryBackgroundUpdateStore):
 
         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(
             table="user_directory_stream_pos",
             keyvalues={},