From cc3d0d2a58b45c8d0687d80dc2c0f33ca2f5e043 Mon Sep 17 00:00:00 2001 From: "Michael S. Molina" Date: Thu, 24 Oct 2024 08:54:26 -0300 Subject: [PATCH] fix: Nested transaction is inactive when embedding dashboard --- superset/cachekeys/api.py | 5 +++-- superset/dashboards/api.py | 19 +++++++++++-------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/superset/cachekeys/api.py b/superset/cachekeys/api.py index 093d81b1c3f7d..365b79c423239 100644 --- a/superset/cachekeys/api.py +++ b/superset/cachekeys/api.py @@ -114,8 +114,8 @@ def invalidate(self) -> Response: CacheKey.cache_key.in_(cache_keys) ) - with db.session.begin_nested(): - db.session.execute(delete_stmt) + db.session.execute(delete_stmt) + db.session.commit() # pylint: disable=consider-using-transaction stats_logger_manager.instance.gauge( "invalidated_cache", len(cache_keys) @@ -126,6 +126,7 @@ def invalidate(self) -> Response: len(datasource_uids), ) except SQLAlchemyError as ex: # pragma: no cover + db.session.rollback() # pylint: disable=consider-using-transaction logger.error(ex, exc_info=True) return self.response_500(str(ex)) return self.response(201) diff --git a/superset/dashboards/api.py b/superset/dashboards/api.py index a9191abacf4d6..733cc555a4314 100644 --- a/superset/dashboards/api.py +++ b/superset/dashboards/api.py @@ -1125,9 +1125,11 @@ def trigger_celery() -> WerkzeugResponse: logger.info("Triggering screenshot ASYNC") cache_dashboard_screenshot.delay( username=get_current_user(), - guest_token=g.user.guest_token - if get_current_user() and isinstance(g.user, GuestUser) - else None, + guest_token=( + g.user.guest_token + if get_current_user() and isinstance(g.user, GuestUser) + else None + ), dashboard_id=dashboard.id, dashboard_url=dashboard_url, cache_key=cache_key, @@ -1595,15 +1597,16 @@ def set_embedded(self, dashboard: Dashboard) -> Response: try: body = self.embedded_config_schema.load(request.json) - with db.session.begin_nested(): - embedded = EmbeddedDashboardDAO.upsert( - dashboard, - body["allowed_domains"], - ) + embedded = EmbeddedDashboardDAO.upsert( + dashboard, + body["allowed_domains"], + ) + db.session.commit() # pylint: disable=consider-using-transaction result = self.embedded_response_schema.dump(embedded) return self.response(200, result=result) except ValidationError as error: + db.session.rollback() # pylint: disable=consider-using-transaction return self.response_400(message=error.messages) @expose("//embedded", methods=("DELETE",))