apache/superset · error · ReportScheduleDataFrameTimeout

A timeout occurred while generating a dataframe.

Error message

A timeout occurred while generating a dataframe.

What it means

ReportScheduleDataFrameTimeout: during dataframe generation (alert value computation) a Celery SoftTimeLimitExceeded fired. As with screenshots, REPORT-type schedules re-raise the raw signal for terminal cleanup, while ALERT schedules convert it to this typed timeout (chained from the original) and log 'DataFrame generation timeout' with elapsed seconds and the execution id.

Source

Thrown at superset/commands/report/execute.py:1142

            logger.info(
                "DataFrame generation from %s as user %s took %.2fs - execution_id: %s",
                url,
                username,
                elapsed_seconds,
                self._execution_id,
            )
        except SoftTimeLimitExceeded as ex:
            elapsed_seconds = (
                datetime.now(timezone.utc).replace(tzinfo=None) - start_time
            ).total_seconds()
            logger.warning(
                "DataFrame generation timeout after %.2fs - execution_id: %s",
                elapsed_seconds,
                self._execution_id,
            )
            if self._report_schedule.type == ReportScheduleType.REPORT:
                raise
            raise ReportScheduleDataFrameTimeout() from ex
        except ReportExecutionBudgetExceededError:
            raise
        except Exception as ex:
            elapsed_seconds = (
                datetime.now(timezone.utc).replace(tzinfo=None) - start_time
            ).total_seconds()
            logger.error(
                "DataFrame generation failed after %.2fs - execution_id: %s",
                elapsed_seconds,
                self._execution_id,
            )
            raise ReportScheduleDataFrameFailedError(
                f"Failed generating dataframe {str(ex)}"
            ) from ex
        if dataframe is None:
            raise ReportScheduleCsvFailedError()
        return dataframe

View on GitHub (pinned to f4587218dd)

Solutions

  1. Raise the Celery soft time limit for the report/alert execution task
  2. Enable and warm caching for the alert's chart so dataframe generation hits cache
  3. Optimize or pre-aggregate the target query; reduce the alert's dataset scope

Example fix

# before
CELERYD_TASK_SOFT_TIME_LIMIT = 120  # alert query needs 5 min -> timeout

# after
CELERYD_TASK_SOFT_TIME_LIMIT = 600
# plus: enable chart caching so most runs skip the query entirely
Defensive patterns

Strategy: retry

Validate before calling

# before scheduling an alert, ensure its query fits the Celery budget
assert estimated_query_seconds(chart) < celery_soft_time_limit * 0.7

Try / catch

try:
    _get_df()
except ReportScheduleDataFrameTimeout:
    # alert-type schedule: typed timeout; retry once, then notify owner to optimize
    retry_once_or_notify(report_schedule)

Prevention

When it happens

Trigger: An alert whose underlying chart query runs longer than the Celery soft time limit during dataframe generation — big tables, uncached aggregations, slow warehouses; the query itself doesn't fail, it just exceeds the worker's time budget.

Common situations: Alerts on large datasets without caching; SQL Lab / query timeouts looser than the Celery task limit; data growth over months pushing previously-fast alerts past the limit.

Understand the failure class

Related errors


AI-assisted analysis of apache/superset@f4587218dd (2026-08-14). Data as JSON: /api/errors/d62f8bae6a1bb2bf. Report an issue: GitHub.