apache/superset · error · ReportScheduleExecutorNotFoundError
Report Schedule executor user %(username)s was not found.
Error message
Report Schedule executor user %(username)s was not found.
What it means
ReportScheduleExecutorNotFoundError: during execution the command resolves which user runs the report via get_executor(ALERT_REPORTS_EXECUTORS, model) and then security_manager.find_user(username). If the resolved username no longer maps to a user (deleted, renamed, or a bad value in the config list), find_user returns None and this dedicated error replaces an opaque NoneType crash.
Source
Thrown at superset/commands/report/execute.py:136
Resolve the executor user for a report schedule.
Determines the configured executor username via ``get_executor`` and looks up
the corresponding user. A deleted/disabled user or a misconfigured
``ALERT_REPORTS_EXECUTORS`` makes ``security_manager.find_user`` return
``None``; rather than passing ``None`` into the webdriver/auth flow (which
fails with an opaque NoneType error), raise a dedicated, actionable error.
:returns: the ``(user, username)`` pair — the username is returned alongside
the user because several call sites log it after resolution.
:raises ReportScheduleExecutorNotFoundError: if the executor user is missing.
"""
_, username = get_executor(
executors=app.config["ALERT_REPORTS_EXECUTORS"],
model=model,
)
user = security_manager.find_user(username)
if user is None:
raise ReportScheduleExecutorNotFoundError(username)
return user, username
def log_report_delivery_phase(
report_context: ReportExecutionContext | None,
recipient_type: ReportRecipientType | None,
phase: str,
*,
enforce_budget: bool,
) -> None:
"""Enforce and log a notification phase when executing a report."""
if report_context is None:
return
deadline = report_context.deadline
if enforce_budget:
deadline.timeout_seconds(
"notification_delivery",View on GitHub (pinned to f4587218dd)
Solutions
- Set ALERT_REPORTS_EXECUTORS in superset_config.py to usernames that exist and will remain (a dedicated service account)
- Reassign ownership of affected reports to an active user (PUT owners on /api/v1/report/{id})
- Recreate or restore the missing user, then re-run the schedule
Example fix
# before ALERT_REPORTS_EXECUTORS = ['former_employee'] # user deleted -> executor not found # after ALERT_REPORTS_EXECUTORS = ['report_executor_svc'] # durable service account
Defensive patterns
Strategy: validation
Validate before calling
from superset import security_manager, app
for username in app.config['ALERT_REPORTS_EXECUTORS'] or ['ScheduledReports']:
if security_manager.find_user(username) is None:
raise ConfigError(f'ALERT_REPORTS_EXECUTORS references unknown user {username!r}') Type guard
def executor_exists(username: str) -> bool:
return security_manager.find_user(username) is not None Try / catch
try:
user, username = resolve_executor(model)
except ReportScheduleExecutorNotFoundError as ex:
# reassign report ownership / fix executor config, then re-run
logger.warning('executor %s missing; skipping run', ex.username) Prevention
- Pin ALERT_REPORTS_EXECUTORS to durable service accounts
- Add a startup/config check that every configured executor resolves via find_user
- Include report ownership transfer in your user-offboarding checklist
When it happens
Trigger: ALERT_REPORTS_EXECUTORS contains a username of a removed user and the report falls back to it; the report's owner/creator user row was deleted from the ABUser table; user renamed in an external auth store synced back to Superset.
Common situations: Offboarding deletes users who own reports; LDAP/OAuth sync renames accounts; misconfigured ALERT_REPORTS_EXECUTORS listing stale service accounts.
Related errors
- %(report_type)s schedule frequency exceeding limit. Please c
- Invalid crontab schedule: %(cron_schedule)s never matches a
- Report Schedule execution failed when generating a screensho
- validation_error
- security_error
AI-assisted analysis of apache/superset@f4587218dd (2026-08-14).
Data as JSON: /api/errors/bd88342ba43d9df0.
Report an issue: GitHub.