apache/superset · error · ReportScheduleScreenshotFailedError

Screenshot failed; aborting to avoid sending a partial repor

Error message

Screenshot failed; aborting to avoid sending a partial report

What it means

ReportScheduleScreenshotFailedError('Screenshot failed; aborting to avoid sending a partial report'): in _get_screenshots each screenshot.playwright capture returns via get_screenshot; a None result (playwright wrapper signaling failure without an exception) triggers this raise so a multi-URL report does not email some panels and silently omit others.

Source

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

            screenshots = [
                DashboardScreenshot(
                    url,
                    self._report_schedule.dashboard.digest,
                    window_size=window_size,
                    thumb_size=app.config["WEBDRIVER_WINDOW"]["dashboard"],
                )
                for url in urls
            ]
        try:
            imges = []
            for screenshot in screenshots:
                imge = screenshot.get_screenshot(
                    user=user,
                    log_context=self._log_context,
                    report_execution_context=self._report_execution_context,
                )
                if imge is None:
                    raise ReportScheduleScreenshotFailedError(
                        "Screenshot failed; aborting to avoid sending a partial report"
                    )
                imges.append(imge)
            elapsed_seconds: float = (
                datetime.now(timezone.utc).replace(tzinfo=None) - start_time
            ).total_seconds()
            logger.info(
                "report_capture_complete %s elapsed_seconds=%.2f "
                "remaining_seconds=%s screenshot_count=%s",
                self._log_context,
                elapsed_seconds,
                (
                    f"{self._report_execution_context.deadline.remaining_seconds:.2f}"
                    if self._report_execution_context
                    else None
                ),
                len(imges),
            )

View on GitHub (pinned to f4587218dd)

Solutions

  1. Re-run the schedule — transient playwright failures usually succeed on retry
  2. Check worker logs for playwright errors near the failure; raise SCREENSHOT_* timeouts or worker memory if pages crash
  3. Reduce tab count or dashboard weight (fewer/faster charts) if the failure is consistent on one specific tab
Defensive patterns

Strategy: retry

Try / catch

try:
    screenshots = _get_screenshots()
except ReportScheduleScreenshotFailedError as ex:
    if 'partial report' in str(ex):
        retry_with_backoff(_get_screenshots, attempts=2)  # transient playwright flake
    else:
        raise

Prevention

When it happens

Trigger: Tabbed dashboard reports where one tab's screenshot.get_screenshot returns None (playwright page crash, navigation failure, target element missing); rate-limited or memory-starved playwright worker returning None instead of raising.

Common situations: Heavy dashboards under worker memory pressure; flaky internal network between worker and the screenshot service; playwright/browser version mismatch after upgrades.

Related errors


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