Search code examples
pythonapache-superset

500 error when deleting entities from Apache Superset


I am stuck with a problem where when I try to delete a chart or a user or dashboard from Apache Superset throw the web UI (installed using helm on Kubernetes), the browser gets a 500 error and the logs indicated the following:

 superset-prod-6785cd75df-zqp5j superset] [SQL: SELECT report_schedule.created_on AS report_schedule_created_on, report_schedule.changed_on AS report_schedule_changed_on, report_schedule.id AS report_schedule_id, report_schedule.type AS report_schedule_type, report_schedule.name AS report_schedule_name, report_schedule.description AS report_schedule_description, report_schedule.context_markdown AS report_schedule_context_markdown, report_schedule.active AS report_schedule_active, report_schedule.crontab AS report_schedule_crontab, report_schedule.sql AS report_schedule_sql, report_schedule.chart_id AS report_schedule_chart_id, report_schedule.dashboard_id AS report_schedule_dashboard_id, report_schedule.database_id AS report_schedule_database_id, report_schedule.last_eval_dttm AS report_schedule_last_eval_dttm, report_schedule.last_state AS report_schedule_last_state, report_schedule.last_value AS report_schedule_last_value, report_schedule.last_value_row_json AS report_schedule_last_value_row_json, report_schedule.validator_type AS report_schedule_validator_type, report_schedule.validator_config_json AS report_schedule_validator_config_json, report_schedule.log_retention AS report_schedule_log_retention, report_schedule.grace_period AS report_schedule_grace_period, report_schedule.working_timeout AS report_schedule_working_timeout, report_schedule.created_by_fk AS report_schedule_created_by_fk, report_schedule.changed_by_fk AS report_schedule_changed_by_fk
  FROM report_schedule
  WHERE report_schedule.chart_id = %(chart_id_1)s]
  [parameters: {'chart_id_1': '51'}]
  (Background on this error at: http://sqlalche.me/e/13/f405)
  Traceback (most recent call last):
    File "/usr/local/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1277, in _execute_context
      cursor, statement, parameters, context
    File "/usr/local/lib/python3.7/site-packages/sqlalchemy/engine/default.py", line 593, in do_execute
      cursor.execute(statement, parameters)
  psycopg2.errors.UndefinedColumn: column report_schedule.working_timeout does not exist
  LINE 1: ...ule.grace_period AS report_schedule_grace_period, report_sch...
                                                               ^
 
 
  The above exception was the direct cause of the following exception:
 
  Traceback (most recent call last):
    File "/usr/local/lib/python3.7/site-packages/flask_appbuilder/api/__init__.py", line 84, in wraps
      return f(self, *args, **kwargs)
    File "/app/superset/views/base_api.py", line 80, in wraps
      duration, response = time_function(f, self, *args, **kwargs)
    File "/app/superset/utils/core.py", line 1484, in time_function
      response = func(*args, **kwargs)
    File "/app/superset/utils/log.py", line 125, in wrapper
      value = f(*args, **kwargs)
    File "/app/superset/charts/api.py", line 383, in delete
      DeleteChartCommand(g.user, pk).run()
    File "/app/superset/charts/commands/delete.py", line 49, in run
      self.validate()
    File "/app/superset/charts/commands/delete.py", line 64, in validate
      reports = ReportScheduleDAO.find_by_chart_id(self._model_id)
    File "/app/superset/reports/dao.py", line 45, in find_by_chart_id
      .filter(ReportSchedule.chart_id == chart_id)
    File "/usr/local/lib/python3.7/site-packages/sqlalchemy/orm/query.py", line 3373, in all
      return list(self)
    File "/usr/local/lib/python3.7/site-packages/sqlalchemy/orm/query.py", line 3535, in __iter__
      return self._execute_and_instances(context)
    File "/usr/local/lib/python3.7/site-packages/sqlalchemy/orm/query.py", line 3560, in _execute_and_instances
      result = conn.execute(querycontext.statement, self._params)
    File "/usr/local/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1011, in execute
      return meth(self, multiparams, params)
    File "/usr/local/lib/python3.7/site-packages/sqlalchemy/sql/elements.py", line 298, in _execute_on_connection
      return connection._execute_clauseelement(self, multiparams, params)
    File "/usr/local/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1130, in _execute_clauseelement
      distilled_params,
    File "/usr/local/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1317, in _execute_context
      e, statement, parameters, cursor, context
    File "/usr/local/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1511, in _handle_dbapi_exception
      sqlalchemy_exception, with_traceback=exc_info[2], from_=e
    File "/usr/local/lib/python3.7/site-packages/sqlalchemy/util/compat.py", line 182, in raise_
      raise exception
    File "/usr/local/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1277, in _execute_context
      cursor, statement, parameters, context
    File "/usr/local/lib/python3.7/site-packages/sqlalchemy/engine/default.py", line 593, in do_execute
      cursor.execute(statement, parameters)
  sqlalchemy.exc.ProgrammingError: (psycopg2.errors.UndefinedColumn) column report_schedule.working_timeout does not exist
  LINE 1: ...ule.grace_period AS report_schedule_grace_period, report_sch...
                                                  ^

It seems like there is a mismatch between the backing database for Superset and the python code.


Solution

  • This issue seems to have been resolved after upgrading the superset docker image version to apache/superset:latest around 17 Jan 2021. Open to more in-depth answers, but felt it important to state this issue is no longer an issue for me.