refactor: Ensure Celery leverages the Flask-SQLAlchemy session (#26186)

This commit is contained in:
John Bodley
2024-01-17 17:06:22 +13:00
committed by GitHub
parent aaa4a7b371
commit 7af82ae87d
19 changed files with 932 additions and 348 deletions

View File

@@ -39,10 +39,9 @@ from sqlalchemy.engine.base import Engine
from sqlalchemy.engine.reflection import Inspector
from sqlalchemy.engine.result import Row as ResultRow
from sqlalchemy.engine.url import URL
from sqlalchemy.orm import Session
from sqlalchemy.sql.expression import ColumnClause, Select
from superset import cache_manager, is_feature_enabled
from superset import cache_manager, db, is_feature_enabled
from superset.common.db_query_status import QueryStatus
from superset.constants import TimeGrain
from superset.databases.utils import make_url_safe
@@ -1288,11 +1287,11 @@ class PrestoEngineSpec(PrestoBaseEngineSpec):
return None
@classmethod
def handle_cursor(cls, cursor: Cursor, query: Query, session: Session) -> None:
def handle_cursor(cls, cursor: Cursor, query: Query) -> None:
"""Updates progress information"""
if tracking_url := cls.get_tracking_url(cursor):
query.tracking_url = tracking_url
session.commit()
db.session.commit()
query_id = query.id
poll_interval = query.database.connect_args.get(
@@ -1308,7 +1307,7 @@ class PrestoEngineSpec(PrestoBaseEngineSpec):
# Update the object and wait for the kill signal.
stats = polled.get("stats", {})
query = session.query(type(query)).filter_by(id=query_id).one()
query = db.session.query(type(query)).filter_by(id=query_id).one()
if query.status in [QueryStatus.STOPPED, QueryStatus.TIMED_OUT]:
cursor.cancel()
break
@@ -1332,7 +1331,7 @@ class PrestoEngineSpec(PrestoBaseEngineSpec):
)
if progress > query.progress:
query.progress = progress
session.commit()
db.session.commit()
time.sleep(poll_interval)
logger.info("Query %i: Polling the cursor for progress", query_id)
polled = cursor.poll()