You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by jl...@apache.org on 2026/08/06 22:36:41 UTC

(superset) branch pw-e2e-followups created (now 7e772fd6188)

This is an automated email from the ASF dual-hosted git repository.

sadpandajoe pushed a change to branch pw-e2e-followups
in repository https://gitbox.apache.org/repos/asf/superset.git


      at 7e772fd6188 test(dashboard): give the mixed-chart filter spec the slow-test budget

This branch includes the following new commits:

     new b0bc04a4761 ci(e2e): stop recycling the single gunicorn worker mid-run
     new 7e772fd6188 test(dashboard): give the mixed-chart filter spec the slow-test budget

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(superset) 02/02: test(dashboard): give the mixed-chart filter spec the slow-test budget

Posted by jl...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

sadpandajoe pushed a commit to branch pw-e2e-followups
in repository https://gitbox.apache.org/repos/asf/superset.git

commit 7e772fd6188fbd0b39f590b0291213e33bea1696
Author: Joe Li <jo...@preset.io>
AuthorDate: Fri Jul 31 15:09:24 2026 -0700

    test(dashboard): give the mixed-chart filter spec the slow-test budget
    
    Every other dashboard spec that builds its fixtures over the API — the
    clear-all-filters, gauge-interval, and dashboard-controls specs — raises
    its budget to TIMEOUT.SLOW_TEST. This one did not, so it ran on the 30s
    config default despite doing four API round-trips before a full
    dashboard load with a preselected native filter.
    
    Co-Authored-By: Claude Opus 5 <no...@anthropic.com>
---
 .../tests/dashboard/mixed-chart-dashboard-filters.spec.ts           | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/superset-frontend/playwright/tests/dashboard/mixed-chart-dashboard-filters.spec.ts b/superset-frontend/playwright/tests/dashboard/mixed-chart-dashboard-filters.spec.ts
index f912b7581db..0219b8ffd9d 100644
--- a/superset-frontend/playwright/tests/dashboard/mixed-chart-dashboard-filters.spec.ts
+++ b/superset-frontend/playwright/tests/dashboard/mixed-chart-dashboard-filters.spec.ts
@@ -42,6 +42,7 @@ import {
 import { getDatasetByName } from '../../helpers/api/dataset';
 import { extractIdFromResponse } from '../../helpers/api/assertions';
 import { DashboardPage } from '../../pages/DashboardPage';
+import { TIMEOUT } from '../../utils/constants';
 import {
   buildFilterJsonMetadata,
   buildSelectFilter,
@@ -54,6 +55,11 @@ const FILTER_VALUE = 'boy';
 testWithAssets(
   'Mixed chart applies dashboard filter to both queries (#29519)',
   async ({ page, testAssets }) => {
+    // Four API round-trips of setup precede a full dashboard load with a
+    // preselected native filter, matching the other dashboard specs that build
+    // their fixtures over the API rather than importing them.
+    testWithAssets.setTimeout(TIMEOUT.SLOW_TEST);
+
     const dataset = await getDatasetByName(page, DATASET_NAME);
     if (!dataset) {
       throw new Error(`Dataset ${DATASET_NAME} not found`);


(superset) 01/02: ci(e2e): stop recycling the single gunicorn worker mid-run

Posted by jl...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

sadpandajoe pushed a commit to branch pw-e2e-followups
in repository https://gitbox.apache.org/repos/asf/superset.git

commit b0bc04a4761230207b70a32161c6650a55b15947
Author: Joe Li <jo...@preset.io>
AuthorDate: Fri Jul 31 15:09:16 2026 -0700

    ci(e2e): stop recycling the single gunicorn worker mid-run
    
    The E2E backend runs with `--workers 1` (deliberately — multi-worker
    exposes races in the SQL Lab to Explore flow) alongside `--max-requests
    500 --max-requests-jitter 50`. With one worker there is nothing to roll
    over to, so every recycle takes the whole backend offline: gunicorn
    drains for the full 30s graceful timeout because browser keep-alive
    connections stay open, then the replacement worker spends ~5s booting
    Superset.
    
    A Playwright run issues roughly 3800 requests over ~8 minutes, so the
    cap fired seven times, producing seven ~35s total outages. Specs that
    happened to navigate during one timed out waiting for the page to
    render and were rescued by retries — visible as "flaky" rather than as
    failures. Cypress runs hit the same windows, absorbed by
    `cypress_run.py --retries 5`.
    
    Lowering `--graceful-timeout` is not sufficient: even at 5s the gap
    exceeds the 6-10s a dashboard load plus chart render needs. Removing
    the recycle removes the outage, and there is no leak evidence to
    justify keeping it for an 8-minute process.
    
    Co-Authored-By: Claude Opus 5 <no...@anthropic.com>
---
 .github/workflows/bashlib.sh | 19 +++++++++++--------
 1 file changed, 11 insertions(+), 8 deletions(-)

diff --git a/.github/workflows/bashlib.sh b/.github/workflows/bashlib.sh
index d36369f4353..93a62185d57 100644
--- a/.github/workflows/bashlib.sh
+++ b/.github/workflows/bashlib.sh
@@ -201,18 +201,23 @@ cypress-run-all() {
   # navigation flow under E2E. We diverge from the entrypoint on:
   #   --timeout 120: heavy dashboard import/export specs exceed the 60s
   #     default
-  #   --max-requests / --max-requests-jitter: recycle the worker under
-  #     test load to avoid leaks accumulating across the run
   #   superset.app:create_app(): explicit factory so we don't depend on
   #     FLASK_APP being exported
+  #
+  # No --max-requests, matching the entrypoint's default of 0 (recycling
+  # off). With a single worker a recycle takes the whole backend offline for
+  # the graceful-timeout drain — browser keep-alive connections hold it open
+  # for the full 30s — plus ~5s of app boot. A run issues ~3800 requests in
+  # ~8 minutes, so recycling every 500 produced seven ~35s outages per run
+  # and flaked whichever specs happened to navigate into one. Lowering
+  # --graceful-timeout is not enough: a dashboard load plus chart render
+  # needs 6-10s, which still lands inside the window.
   nohup gunicorn \
     --bind "127.0.0.1:$port" \
     --workers 1 \
     --worker-class gthread \
     --threads 20 \
     --timeout 120 \
-    --max-requests 500 \
-    --max-requests-jitter 50 \
     --access-logfile - \
     --error-logfile - \
     "superset.app:create_app()" \
@@ -294,16 +299,14 @@ playwright-run() {
   export PLAYWRIGHT_BASE_URL
 
   # See cypress-run-all() above for the args rationale (1 worker × 20
-  # gthread threads matching docker/entrypoints/run-server.sh, plus a
-  # 120s timeout and request-recycling for heavy E2E load).
+  # gthread threads matching docker/entrypoints/run-server.sh, a 120s
+  # timeout for heavy E2E load, and why worker recycling is off).
   nohup gunicorn \
     --bind "127.0.0.1:$port" \
     --workers 1 \
     --worker-class gthread \
     --threads 20 \
     --timeout 120 \
-    --max-requests 500 \
-    --max-requests-jitter 50 \
     --access-logfile - \
     --error-logfile - \
     "superset.app:create_app()" \