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/09/17 19:22:43 UTC

(superset) branch ultraset-master-health-db2-timeout created (now 7bfb9c97406)

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

sadpandajoe pushed a change to branch ultraset-master-health-db2-timeout
in repository https://gitbox.apache.org/repos/asf/superset.git


      at 7bfb9c97406 Merge remote-tracking branch 'origin/master' into ultraset-master-health-db2-timeout

This branch includes the following new commits:

     new 467d00a1070 fix(ci): give the db2 testcontainer boot real wait headroom
     new 7bfb9c97406 Merge remote-tracking branch 'origin/master' into ultraset-master-health-db2-timeout

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: Merge remote-tracking branch 'origin/master' into ultraset-master-health-db2-timeout

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

sadpandajoe pushed a commit to branch ultraset-master-health-db2-timeout
in repository https://gitbox.apache.org/repos/asf/superset.git

commit 7bfb9c974063effbb5f72add019d6bad0a0b527a
Merge: 467d00a1070 77dbaafc2af
Author: sadpandajoe <47...@users.noreply.github.com>
AuthorDate: Thu Sep 17 19:21:59 2026 +0000

    Merge remote-tracking branch 'origin/master' into ultraset-master-health-db2-timeout

 .github/labeler.yml                                |  12 +
 .github/workflows/asf-allowlist-check.yml          |   2 +-
 .github/workflows/bump-python-package.yml          |   2 +-
 UPDATING.md                                        |  13 +
 docs/static/resources/openapi.json                 |  19 +-
 superset-embedded-sdk/package-lock.json            |   8 +-
 superset-embedded-sdk/package.json                 |   2 +-
 superset-frontend/package-lock.json                |  73 ++--
 superset-frontend/package.json                     |  10 +-
 .../packages/superset-ui-core/package.json         |   2 +-
 .../src/time-format/utils/stringifyTimeInput.ts    |  21 +-
 .../time-format/utils/stringifyTimeInput.test.ts   |  28 ++
 .../plugins/plugin-chart-echarts/package.json      |   2 +-
 .../src/react-pivottable/TableRenderers.tsx        |  15 +-
 .../test/react-pivottable/tableRenders.test.tsx    |  21 +
 .../PropertiesModal.lateFieldMount.test.tsx        |  94 ++++
 .../dashboard/components/PropertiesModal/index.tsx |   5 +-
 superset-websocket/package-lock.json               |   8 +-
 superset-websocket/package.json                    |   2 +-
 superset/commands/chart/importers/v1/utils.py      |  12 +-
 superset/daos/version.py                           |   4 +
 superset/datasets/api.py                           | 123 +++++-
 superset/migrations/shared/migrate_viz/base.py     |   7 +
 .../migrations/shared/migrate_viz/processors.py    |   6 +
 superset/security/manager.py                       |  39 +-
 superset/translations/messages.pot                 |   4 +
 superset/versioning/activity/queries.py            |  11 +-
 superset/versioning/api_helpers.py                 |  28 +-
 superset/versioning/changes/listener.py            | 176 ++++++--
 superset/versioning/db_errors.py                   |  75 ++++
 superset/versioning/metrics.py                     |  37 +-
 superset/versioning/queries.py                     |  74 +++-
 .../versioning/activity_write_after_read_tests.py  | 124 ++++++
 .../versioning/conditional_token_lock_tests.py     | 363 ++++++++++++++++
 .../charts/commands/importers/v1/utils_test.py     |  69 +++
 .../dashboards/semantic_view_access_test.py        |  80 +++-
 tests/unit_tests/datasets/api_tests.py             | 216 +++++++++-
 .../subjects/test_report_executor_remediation.py   | 148 +++++++
 tests/unit_tests/versioning/test_db_errors.py      | 205 ++++++++-
 tests/unit_tests/versioning/test_listener.py       | 475 ++++++++++++++++++++-
 .../versioning/test_version_info_locking.py        | 108 +++++
 41 files changed, 2545 insertions(+), 178 deletions(-)


(superset) 01/02: fix(ci): give the db2 testcontainer boot real wait headroom

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

sadpandajoe pushed a commit to branch ultraset-master-health-db2-timeout
in repository https://gitbox.apache.org/repos/asf/superset.git

commit 467d00a10707778ef4eca45e2b1279f99194dc6a
Author: sadpandajoe <47...@users.noreply.github.com>
AuthorDate: Thu Sep 17 05:53:33 2026 +0000

    fix(ci): give the db2 testcontainer boot real wait headroom
    
    The nightly `testcontainers (db2, 25)` leg fails intermittently with
    `Wait time (120.0s) exceeded for _connect`.
    
    `Db2Container._connect` calls `wait_for_logs(self, predicate="Setup has
    completed")` with no explicit timeout, so it inherits testcontainers'
    global default -- `max_tries` (120) x `sleep_time` (1s) = 120s -- which
    is bound as a default argument when `core/waiting_utils` is imported and
    is not configurable through `Db2Container`'s constructor.
    
    A full Db2 instance bring-up varies widely. Across the retained nightly
    runs, the pytest session for this module measured 88s to 153s end to
    end, so a hard 120s cap on the boot wait alone has near-zero margin. In
    the failing run the container was still `running` and had just logged
    `(*) Creating database testdb ...` when the timer expired -- a slow
    boot, not a broken container or a stale predicate. The 25-minute job
    budget was never close to binding: that job used 4m02s.
    
    Attach an explicit wait strategy before starting the container, matching
    the idiom already used by test_databend.py, test_monetdb.py,
    test_oceanbase.py, test_risingwave.py and test_yugabytedb.py.
    `DbContainer.start()` delegates to `DockerContainer.start()`, which
    honors `_wait_strategy`, so this runs to completion before `_connect` is
    called; `_connect` then finds the line already present in the
    accumulated logs and returns on its first poll, leaving its own 120s
    window permanently off the critical path.
    
    Co-Authored-By: Claude Opus 5 <no...@anthropic.com>
---
 tests/testcontainers/db_engine_specs/test_db2.py | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/tests/testcontainers/db_engine_specs/test_db2.py b/tests/testcontainers/db_engine_specs/test_db2.py
index 7fbf4ec1b64..bdff13f6998 100644
--- a/tests/testcontainers/db_engine_specs/test_db2.py
+++ b/tests/testcontainers/db_engine_specs/test_db2.py
@@ -48,6 +48,7 @@ from ._driver import require_driver  # noqa: E402
 require_driver("testcontainers.community.db2")
 
 from testcontainers.community.db2 import Db2Container  # noqa: E402
+from testcontainers.core.wait_strategies import LogMessageWaitStrategy  # noqa: E402
 
 from ._pagination import (  # noqa: E402
     assert_paginated_query_returns_correct_rows_in_order,
@@ -56,7 +57,20 @@ from ._pagination import (  # noqa: E402
 
 @pytest.fixture(scope="module")
 def engine() -> Iterator[Engine]:
-    with Db2Container() as container:
+    container = Db2Container()
+    # Db2Container._connect waits for this same line, but hardcodes
+    # testcontainers' global 120s default (max_tries 120 x sleep_time 1s) and
+    # exposes no argument to widen it. A full Db2 instance bring-up varies
+    # widely -- nightly sessions for this module measure 88s to 153s -- so
+    # 120s has near-zero margin, and has timed out mid-"Creating database
+    # testdb" against a container that was still running and progressing.
+    # Matching the line here first means _connect finds it already logged.
+    # 900s stays well inside the job's 25-minute budget.
+    container.waiting_for(
+        LogMessageWaitStrategy("Setup has completed").with_startup_timeout(900)
+    )
+
+    with container:
         yield create_engine(container.get_connection_url())