From ac707fae6ad499a91bda01ed471db995a608e71b Mon Sep 17 00:00:00 2001 From: Ilya Kreymer Date: Mon, 25 May 2026 10:24:00 -0400 Subject: [PATCH] drop invite indexes if 'invite_expire_seconds' is changed, as this change the expiry on the index and it needs to be recreated fixes #3327 --- backend/btrixcloud/invites.py | 17 +++++++++++++++++ backend/btrixcloud/migrations/__init__.py | 6 ++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/backend/btrixcloud/invites.py b/backend/btrixcloud/invites.py index d7729ce26e..af669e04d8 100644 --- a/backend/btrixcloud/invites.py +++ b/backend/btrixcloud/invites.py @@ -40,6 +40,7 @@ class InviteOps: def __init__(self, mdb, email: EmailSender): self.invites = mdb["invites"] self.orgs = mdb["organizations"] + self.versions = mdb["version"] self.email = email self.allow_dupe_invites = is_bool(os.environ.get("ALLOW_DUPE_INVITES", "0")) @@ -51,6 +52,22 @@ async def init_index(self) -> None: expire_after_seconds = int( os.environ.get("INVITE_EXPIRE_SECONDS", "1209600") ) + + res = await self.versions.find_one( + {"curr_invite_expire_seconds": {"$ne": None}} + ) + if ( + not res + or res.get("curr_invite_expire_seconds") != expire_after_seconds + ): + print("Invite Expiration Changed, Dropping Invite Index") + await self.invites.drop_indexes() + await self.versions.find_one_and_update( + {"curr_invite_expire_seconds": {"$ne": None}}, + {"$set": {"curr_invite_expire_seconds": expire_after_seconds}}, + upsert=True, + ) + await self.invites.create_index( "created", expireAfterSeconds=expire_after_seconds ) diff --git a/backend/btrixcloud/migrations/__init__.py b/backend/btrixcloud/migrations/__init__.py index b8c3b32310..afd283f3da 100644 --- a/backend/btrixcloud/migrations/__init__.py +++ b/backend/btrixcloud/migrations/__init__.py @@ -23,7 +23,7 @@ async def get_db_version(self): """Get current db version from database.""" db_version = None version_collection = self.mdb["version"] - version_record = await version_collection.find_one() + version_record = await version_collection.find_one({"version": {"$ne": None}}) if not version_record: return db_version try: @@ -36,7 +36,9 @@ async def set_db_version(self): """Set db version to migration_version.""" version_collection = self.mdb["version"] await version_collection.find_one_and_update( - {}, {"$set": {"version": self.migration_version}}, upsert=True + {"version": {"$ne": None}}, + {"$set": {"version": self.migration_version}}, + upsert=True, ) async def migrate_up_needed(self, ignore_rerun=False):