From 84b6fae1f512e37d36baf490f91b3062ce9495f7 Mon Sep 17 00:00:00 2001 From: Neil Johnson Date: Wed, 2 Jan 2019 10:19:59 +0000 Subject: [PATCH] Ensure synchrotrons can access is_support_user in the storage layer --- changelog.d/4344.bugfix | 1 + synapse/storage/registration.py | 50 ++++++++++++++++----------------- 2 files changed, 26 insertions(+), 25 deletions(-) create mode 100644 changelog.d/4344.bugfix diff --git a/changelog.d/4344.bugfix b/changelog.d/4344.bugfix new file mode 100644 index 000000000..cf9a873db --- /dev/null +++ b/changelog.d/4344.bugfix @@ -0,0 +1 @@ +Fix synchrotron exploding due to being unable to access is_support_user in storage layer diff --git a/synapse/storage/registration.py b/synapse/storage/registration.py index 10c3b9757..c9e11c313 100644 --- a/synapse/storage/registration.py +++ b/synapse/storage/registration.py @@ -114,6 +114,31 @@ class RegistrationWorkerStore(SQLBaseStore): return None + @cachedInlineCallbacks() + def is_support_user(self, user_id): + """Determines if the user is of type UserTypes.SUPPORT + + Args: + user_id (str): user id to test + + Returns: + Deferred[bool]: True if user is of type UserTypes.SUPPORT + """ + res = yield self.runInteraction( + "is_support_user", self.is_support_user_txn, user_id + ) + defer.returnValue(res) + + def is_support_user_txn(self, txn, user_id): + res = self._simple_select_one_onecol_txn( + txn=txn, + table="users", + keyvalues={"name": user_id}, + retcol="user_type", + allow_none=True, + ) + return True if res == UserTypes.SUPPORT else False + class RegistrationStore(RegistrationWorkerStore, background_updates.BackgroundUpdateStore): @@ -465,31 +490,6 @@ class RegistrationStore(RegistrationWorkerStore, defer.returnValue(res if res else False) - @cachedInlineCallbacks() - def is_support_user(self, user_id): - """Determines if the user is of type UserTypes.SUPPORT - - Args: - user_id (str): user id to test - - Returns: - Deferred[bool]: True if user is of type UserTypes.SUPPORT - """ - res = yield self.runInteraction( - "is_support_user", self.is_support_user_txn, user_id - ) - defer.returnValue(res) - - def is_support_user_txn(self, txn, user_id): - res = self._simple_select_one_onecol_txn( - txn=txn, - table="users", - keyvalues={"name": user_id}, - retcol="user_type", - allow_none=True, - ) - return True if res == UserTypes.SUPPORT else False - @defer.inlineCallbacks def user_add_threepid(self, user_id, medium, address, validated_at, added_at): yield self._simple_upsert("user_threepids", {