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
- Raise the Celery soft time limit for the report/alert execution task
- Enable and warm caching for the alert's chart so dataframe generation hits cache
- 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
- Raise the Celery soft time limit on the reporting worker to fit your slowest alert query
- Enable and warm caching for alert charts
- Track alert query durations over time; data growth silently crosses time limits
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
- Timeouts: ETIMEDOUT, deadlines, and hung requests — what actually expires when a request times out.
Related errors
- A timeout occurred while taking a screenshot.
- Report schedule was modified or deleted by another process d
- validation_error
- security_error
- There are associated alerts or reports: %(report_names)s
AI-assisted analysis of apache/superset@f4587218dd (2026-08-14).
Data as JSON: /api/errors/d62f8bae6a1bb2bf.
Report an issue: GitHub.