You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by di...@apache.org on 2024/02/02 07:54:08 UTC
(superset) 01/01: Change order of operations
This is an automated email from the ASF dual-hosted git repository.
diegopucci pushed a commit to branch diego/ch78526/ssh-tunnel-db-id-dep
in repository https://gitbox.apache.org/repos/asf/superset.git
commit 38f009e7a3ccf09aecd6a4fab8d5782ca69c284d
Author: geido <di...@gmail.com>
AuthorDate: Fri Feb 2 08:53:52 2024 +0100
Change order of operations
---
superset/commands/database/create.py | 6 ++++--
superset/commands/database/ssh_tunnel/create.py | 9 ---------
2 files changed, 4 insertions(+), 11 deletions(-)
diff --git a/superset/commands/database/create.py b/superset/commands/database/create.py
index a012e9b2a5..b6ad4772dc 100644
--- a/superset/commands/database/create.py
+++ b/superset/commands/database/create.py
@@ -80,14 +80,14 @@ class CreateDatabaseCommand(BaseCommand):
database = DatabaseDAO.create(attributes=self._properties, commit=False)
database.set_sqlalchemy_uri(database.sqlalchemy_uri)
+ db.session.add(database)
+
ssh_tunnel = None
if ssh_tunnel_properties := self._properties.get("ssh_tunnel"):
if not is_feature_enabled("SSH_TUNNELING"):
db.session.rollback()
raise SSHTunnelingNotEnabledError()
try:
- # So database.id is not None
- db.session.flush()
ssh_tunnel = CreateSSHTunnelCommand(
database.id, ssh_tunnel_properties
).run()
@@ -96,6 +96,7 @@ class CreateDatabaseCommand(BaseCommand):
action=f"db_creation_failed.{ex.__class__.__name__}.ssh_tunnel",
engine=self._properties.get("sqlalchemy_uri", "").split(":")[0],
)
+ db.session.rollback()
# So we can show the original message
raise ex
except Exception as ex:
@@ -103,6 +104,7 @@ class CreateDatabaseCommand(BaseCommand):
action=f"db_creation_failed.{ex.__class__.__name__}.ssh_tunnel",
engine=self._properties.get("sqlalchemy_uri", "").split(":")[0],
)
+ db.session.rollback()
raise DatabaseCreateFailedError() from ex
# adding a new database we always want to force refresh schema list
diff --git a/superset/commands/database/ssh_tunnel/create.py b/superset/commands/database/ssh_tunnel/create.py
index 07209f010b..fc4d667e35 100644
--- a/superset/commands/database/ssh_tunnel/create.py
+++ b/superset/commands/database/ssh_tunnel/create.py
@@ -40,20 +40,11 @@ class CreateSSHTunnelCommand(BaseCommand):
def run(self) -> Model:
try:
- # Start nested transaction since we are always creating the tunnel
- # through a DB command (Create or Update). Without this, we cannot
- # safely rollback changes to databases if any, i.e, things like
- # test_do_not_create_database_if_ssh_tunnel_creation_fails test will fail
- db.session.begin_nested()
self.validate()
return SSHTunnelDAO.create(attributes=self._properties, commit=False)
except DAOCreateFailedError as ex:
- # Rollback nested transaction
- db.session.rollback()
raise SSHTunnelCreateFailedError() from ex
except SSHTunnelInvalidError as ex:
- # Rollback nested transaction
- db.session.rollback()
raise ex
def validate(self) -> None: