mapledan opened a new issue, #30064:
URL: https://github.com/apache/superset/issues/30064

   ### Bug description
   
   In version 4.0.2, my sql_lab async tasks were functioning correctly with 
Celery. However, after upgrading to version 4.1.0rc2, I started encountering 
errors when executing sql_lab.get_sql_results. The tasks are now failing with a 
psycopg2.errors.SerializationFailure.
   
   My databse is PostgreSQL 15.
   Here is my current super_config:
   ```
   GLOBAL_ASYNC_QUERIES_REDIS_CONFIG = {
       "port": f"{REDIS_PORT}",
       "host": f"{REDIS_HOST}",
       "db": 0,
       "ssl": False,
   }
   GLOBAL_ASYNC_QUERIES_REDIS_STREAM_PREFIX = "async-events-"
   GLOBAL_ASYNC_QUERIES_REDIS_STREAM_LIMIT = 1000
   GLOBAL_ASYNC_QUERIES_REDIS_STREAM_LIMIT_FIREHOSE = 1000000
   GLOBAL_ASYNC_QUERIES_JWT_COOKIE_NAME = "async-token"
   GLOBAL_ASYNC_QUERIES_JWT_COOKIE_SECURE = True
   GLOBAL_ASYNC_QUERIES_JWT_COOKIE_SAMESITE: None
   GLOBAL_ASYNC_QUERIES_JWT_COOKIE_DOMAIN = None
   GLOBAL_ASYNC_QUERIES_JWT_SECRET = "..."
   GLOBAL_ASYNC_QUERIES_TRANSPORT = "ws"
   GLOBAL_ASYNC_QUERIES_WEBSOCKET_URL = "wss://.../ws"
   
   RESULTS_BACKEND = RedisCache(
       host=REDIS_HOST, port=REDIS_PORT, db=REDIS_RESULTS_DB, 
key_prefix='superset_result_')
   
   class CeleryConfig(object):
       broker_url = f"redis://{REDIS_HOST}:{REDIS_PORT}/{REDIS_CELERY_DB}"
       imports = ("superset.sql_lab", "superset.tasks.scheduler")
       result_backend = f"redis://{REDIS_HOST}:{REDIS_PORT}/{REDIS_RESULTS_DB}"
       log_level = "DEBUG"
       worker_concurrency = 64
       worker_prefetch_multiplier = 2
       task_acks_late = False
       task_time_limit = 600
       task_annotations = {
           "sql_lab.get_sql_results": {
               "rate_limit": "5/s",
           },
           "email_reports.send": {
               "rate_limit": "5/s",
               "time_limit": 180,
               "soft_time_limit": 240,
               "ignore_result": True,
           },
       }
   
   CELERY_CONFIG = CeleryConfig
   ```
   
   ### How to reproduce the bug
   
   1. Upgrade from version 4.0.2 to 4.1.0rc2.
   2. Set the async query setting.
   3. Run query in SQL Lab.
   
   ### Screenshots/recordings
   
   ```
   Traceback (most recent call last):
     File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", 
line 1910, in _execute_context
       self.dialect.do_execute(
     File 
"/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 
736, in do_execute
       cursor.execute(statement, parameters)
   psycopg2.errors.SerializationFailure: could not serialize access due to 
concurrent update
   
   
   The above exception was the direct cause of the following exception:
   
   Traceback (most recent call last):
     File "/app/superset/sql_lab.py", line 182, in get_sql_results
       return execute_sql_statements(
     File "/app/superset/sql_lab.py", line 440, in execute_sql_statements
       db.session.commit()
     File "<string>", line 2, in commit
     File "/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/session.py", 
line 1454, in commit
       self._transaction.commit(_to_root=self.future)
     File "/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/session.py", 
line 832, in commit
       self._prepare_impl()
     File "/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/session.py", 
line 811, in _prepare_impl
       self.session.flush()
     File "/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/session.py", 
line 3449, in flush
       self._flush(objects)
     File "/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/session.py", 
line 3588, in _flush
       with util.safe_reraise():
     File 
"/usr/local/lib/python3.10/site-packages/sqlalchemy/util/langhelpers.py", line 
70, in __exit__
       compat.raise_(
     File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/compat.py", 
line 211, in raise_
       raise exception
     File "/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/session.py", 
line 3549, in _flush
       flush_context.execute()
     File 
"/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/unitofwork.py", line 
456, in execute
       rec.execute(self)
     File 
"/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/unitofwork.py", line 
630, in execute
       util.preloaded.orm_persistence.save_obj(
     File 
"/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/persistence.py", line 
237, in save_obj
       _emit_update_statements(
     File 
"/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/persistence.py", line 
1001, in _emit_update_statements
       c = connection._execute_20(
     File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", 
line 1710, in _execute_20
       return meth(self, args_10style, kwargs_10style, execution_options)
     File "/usr/local/lib/python3.10/site-packages/sqlalchemy/sql/elements.py", 
line 334, in _execute_on_connection
       return connection._execute_clauseelement(
     File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", 
line 1577, in _execute_clauseelement
       ret = self._execute_context(
     File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", 
line 1953, in _execute_context
       self._handle_dbapi_exception(
     File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", 
line 2134, in _handle_dbapi_exception
       util.raise_(
     File "/usr/local/lib/python3.10/site-packages/sqlalchemy/util/compat.py", 
line 211, in raise_
       raise exception
     File "/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/base.py", 
line 1910, in _execute_context
       self.dialect.do_execute(
     File 
"/usr/local/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 
736, in do_execute
       cursor.execute(statement, parameters)
   sqlalchemy.exc.OperationalError: (psycopg2.errors.SerializationFailure) 
could not serialize access due to concurrent update
   
   [SQL: UPDATE query SET status=%(status)s, 
start_running_time=%(start_running_time)s, changed_on=%(changed_on)s WHERE 
query.id = %(query_id)s]
   [parameters: {'status': <QueryStatus.RUNNING: 'running'>, 
'start_running_time': 1725005762062.906, 'changed_on': datetime.datetime(2024, 
8, 30, 8, 16, 2, 66679), 'query_id': 77114}]
   (Background on this error at: https://sqlalche.me/e/14/e3q8)
   
   During handling of the above exception, another exception occurred:
   
   Traceback (most recent call last):
     File "/app/superset/sql_lab.py", line 157, in get_query
       return db.session.query(Query).filter_by(id=query_id).one()
     File "/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/query.py", 
line 2870, in one
       return self._iter().one()
     File "/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/query.py", 
line 2916, in _iter
       result = self.session.execute(
     File "/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/session.py", 
line 1716, in execute
       conn = self._connection_for_bind(bind)
     File "/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/session.py", 
line 1555, in _connection_for_bind
       return self._transaction._connection_for_bind(
     File "/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/session.py", 
line 724, in _connection_for_bind
       self._assert_active()
     File "/usr/local/lib/python3.10/site-packages/sqlalchemy/orm/session.py", 
line 604, in _assert_active
       raise sa_exc.PendingRollbackError(
   sqlalchemy.exc.PendingRollbackError: This Session's transaction has been 
rolled back due to a previous exception during flush. To begin a new 
transaction with this Session, first issue Session.rollback(). Original 
exception was: (psycopg2.errors.SerializationFailure) could not serialize 
access due to concurrent update
   
   [SQL: UPDATE query SET status=%(status)s, 
start_running_time=%(start_running_time)s, changed_on=%(changed_on)s WHERE 
query.id = %(query_id)s]
   [parameters: {'status': <QueryStatus.RUNNING: 'running'>, 
'start_running_time': 1725005762062.906, 'changed_on': datetime.datetime(2024, 
8, 30, 8, 16, 2, 66679), 'query_id': 77114}]
   (Background on this error at: https://sqlalche.me/e/14/e3q8) (Background on 
this error at: https://sqlalche.me/e/14/7s2a)
   
   The above exception was the direct cause of the following exception:
   
   Traceback (most recent call last):
     File "/usr/local/lib/python3.10/site-packages/celery/app/trace.py", line 
453, in trace_task
       R = retval = fun(*args, **kwargs)
     File "/app/superset/initialization/__init__.py", line 111, in __call__
       return task_base.__call__(self, *args, **kwargs)
     File "/usr/local/lib/python3.10/site-packages/celery/app/trace.py", line 
736, in __protected_call__
       return self.run(*args, **kwargs)
     File "/app/superset/sql_lab.py", line 194, in get_sql_results
       query = get_query(query_id)
     File "/usr/local/lib/python3.10/site-packages/backoff/_sync.py", line 105, 
in retry
       ret = target(*args, **kwargs)
     File "/app/superset/sql_lab.py", line 159, in get_query
       raise SqlLabException("Failed at getting query") from ex
   superset.sql_lab.SqlLabException: Failed at getting query
   ```
   
   
![image](https://github.com/user-attachments/assets/8791c6dd-cea5-44f7-b238-3b4fe0e6fd9c)
   
   
   ### Superset version
   
   master / latest-dev
   
   ### Python version
   
   3.10
   
   ### Node version
   
   16
   
   ### Browser
   
   Chrome
   
   ### Additional context
   
   _No response_
   
   ### Checklist
   
   - [X] I have searched Superset docs and Slack and didn't find a solution to 
my problem.
   - [X] I have searched the GitHub issue tracker and didn't find a similar bug 
report.
   - [X] I have checked Superset's logs for errors and if I found a relevant 
Python stacktrace, I included it here as text in the "additional context" 
section.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscr...@superset.apache.org.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscr...@superset.apache.org
For additional commands, e-mail: notifications-h...@superset.apache.org

Reply via email to