mirror of
https://github.com/apache/superset.git
synced 2026-05-22 00:05:15 +00:00
Both `cypress-run-all` and `playwright-run` started the Superset backend with `flask run --no-debugger -p $port`. The Flask development server is single-threaded and has no crash-recovery, so heavy tests — most notably `playwright/tests/dashboard/export.spec.ts:61` (Export YAML) and `dashboard-list.spec.ts:266` (Import zip) — can knock the backend offline for the rest of the run. Subsequent tests then cascade-fail with `ECONNREFUSED`, `socket hang up`, `Missing CSRF token`, and `page.goto: net::ERR_ABORTED; maybe frame was detached`. Across the last 50 master runs of the E2E workflow, 6 failed (12%), every single one with this signature. Switch both runners to gunicorn with the same shape used in `docker/entrypoints/run-server.sh`: - `--workers 4 --worker-class gthread --threads 20` — concurrency that matches what the real product runs. - `--timeout 120` — kill stuck workers instead of letting them hang the entire suite. - `--max-requests 500 --max-requests-jitter 50` — recycle workers periodically so memory accumulation from long suites doesn't OOM the process. - `--access-logfile - --error-logfile -` — keep the same per-run log capture pattern. Only frontend (JS) coverage is captured in E2E (verified — bashlib.sh only instruments the JS assets), so multi-worker gunicorn doesn't break the existing coverage path.