From 148bdccf264e4afa12e5780ee24924b2abf48394 Mon Sep 17 00:00:00 2001 From: Kevin Chung Date: Mon, 18 May 2020 11:46:15 -0400 Subject: [PATCH] Improve import_ctf reliability (#1419) * Improve `import_ctf()` reliability by closing all connections before dropping & recreating database * Close database session in IP tracking code in failure situations --- CTFd/utils/exports/__init__.py | 5 +++++ CTFd/utils/initialization/__init__.py | 1 + 2 files changed, 6 insertions(+) diff --git a/CTFd/utils/exports/__init__.py b/CTFd/utils/exports/__init__.py index 0fc162d3..a327b490 100644 --- a/CTFd/utils/exports/__init__.py +++ b/CTFd/utils/exports/__init__.py @@ -123,6 +123,11 @@ def import_ctf(backup, erase=True): ) if erase: + # Clear out existing connections to release any locks + db.session.close() + db.engine.dispose() + + # Drop database and recreate it to get to a clean state drop_database() create_database() # We explicitly do not want to upgrade or stamp here. diff --git a/CTFd/utils/initialization/__init__.py b/CTFd/utils/initialization/__init__.py index b92af1eb..fd266156 100644 --- a/CTFd/utils/initialization/__init__.py +++ b/CTFd/utils/initialization/__init__.py @@ -201,6 +201,7 @@ def init_request_processors(app): db.session.commit() except (InvalidRequestError, IntegrityError): db.session.rollback() + db.session.close() logout_user() else: clear_user_recent_ips(user_id=session["id"])