Skip to content

fix(integration-tests): run the integration suite in parallel - #15691

Open
fruch wants to merge 7 commits into
scylladb:branch-2025.1from
fruch:sct-804-parallel-integration-tests-2025.1
Open

fix(integration-tests): run the integration suite in parallel#15691
fruch wants to merge 7 commits into
scylladb:branch-2025.1from
fruch:sct-804-parallel-integration-tests-2025.1

Conversation

@fruch

@fruch fruch commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Refs SCT-804, blocks SCT-714.

Problem

The integration tests stage on branch-2025.1 runs single-threaded and therefore always exceeds its stage timeout. Jenkins ABORTs the build before pytest gets to write integration-tests-junit.xml, so nothing is published and the jenkins/integration-tests check never reports a result at all.

Measured: branch-2026.1 runs 4 xdist workers and finishes the stage in 21.6 min. branch-2025.1 produces zero [gw worker lines and had only reached 57% of 187 selected tests when the timeout fired — it needs roughly 79 min serially. This branch's timeout is also 40 min, tighter than the 45 min every other branch uses.

Root cause: pytest-xdist is only a declared dependency from branch-2026.1 upward. On this branch the string pytest-xdist appears only in a comment inside unit_tests/unit/test_keystore.py, never as a dependency, so sct.py integration-tests has no -n option and no way to fan out.

What changed

  1. sct.py — added -n (default 4) and pass --dist loadgroup -n{n} to pytest, mirroring upstream/branch-2026.1:sct.py. -t/--test also becomes repeatable (multiple=True) so several files can be selected at once, matching 2026.1. -p no:warnings is retained (2026.1 dropped it, but changing warning behaviour is out of scope here).

  2. xdist_group("docker_heavy") markers — reconciled, not blindly added. This branch already had two occurrences (unit_tests/test_gemini_thread.py, unit_tests/integration/test_sstable_load_utils.py), both already using the name docker_heavy. Coverage is extended to every integration module that starts a Scylla container via the docker_scylla / docker_scylla_2 fixture, reusing that same single group name — no new or conflicting group names.

    The rule is deliberately mechanical rather than a per-file judgement call, because these tests genuinely cannot be spread across workers: unit_tests/conftest.py::configure_scylla_node reuses fixed docker network names (ycsb_net in test_ycsb_thread / test_alternator_streams_kcl, kafka-stack-docker-compose_default in test_kafka) and, for ssl=True, regenerates the shared certificates under data_dir/ssl_conf while os.chdir-ing the process (test_python_driver, test_latte_thread, test_scylla_bench_thread, test_cassandra_stress_thread).

    Modules given the marker: test_kafka, test_latte_thread, test_ndbench_thread, test_cql_stress_cassandra_stress_thread, test_python_driver, test_run_cqlsh, test_cassandra_stress_thread, test_scylla_bench_thread, test_ycsb_thread, test_alternator_streams_kcl, test_cassandra_harry, test_utils_database_query_utils. test_cluster.py holds mostly non-integration unit tests, so its 4 integration tests get the marker individually rather than via pytestmark.

    The 6 modules left ungrouped (test_base_version, test_config, test_events, test_utils_issues, test_version_utils, integration/test_config_get_version_based_on_conf) are pure-Python config/version tests that touch no container and parallelise freely.

  3. Jenkinsfile — integration stage timeout 40 → 45 min, matching every other branch.

  4. Stale duplicate removed (separate commit) — unit_tests/test_config_get_version_based_on_conf.py (205 lines) was a leftover duplicate of the current unit_tests/integration/test_config_get_version_based_on_conf.py (352 lines). Both were pytest.mark.integration and both were collected. Confirmed obsolete from history:

    • master commit d2e3dc7a99 "test(unit_tests): move pure integration tests to unit_tests/integration/" renames this file byte-for-byte (0 insertions, 0 deletions) to the integration/ path.
    • That commit is not an ancestor of branch-2025.1 (git merge-base --is-ancestor → false), while it is an ancestor of master.
    • The rename was never backported, so when 55d4096883 cherry-picked the follow-up content change it landed as a brand-new 352-line file at the integration/ path and left the pre-rename copy behind.
    • The stale copy still carries the enterprise-prefixed cases that 55d4096883 explicitly removed as obsolete (e.g. pytest.param("enterprise-2023.1:latest", (None, True))), so it can never pass. Every test it defines also exists in the integration/ copy, which is a strict superset — no coverage is lost.
  5. requirements.in / requirements.txt — added pytest-xdist==3.8.0 (same pin as branch-2026.1). docker/env/Dockerfile installs with ADD requirements.txt . + uv pip install --system --build-constraint build-constraints.txt -r requirements.txt, so requirements.txt is the file that reaches the image. Verified this branch's pyproject.toml contains only [tool.ruff] config and no dependency section, and there is no uv.lockrequirements.in/requirements.txt is the only dependency path here. Recompiled with uv pip compile requirements.in --generate-hashes --python-version 3.10 --output-file requirements.txt, so the existing file is read as the preference set: the only version lines that change are pytest-xdist==3.8.0 and its dependency execnet==2.1.2; the rest of the diff is # via ... annotations the previous compile had missed.

    An earlier revision of this PR got this wrong. That compile drifted 48 unrelated transitive pins, and one of them broke CI: chardet 5.2.06.0.0.post1, while requests==2.32.2 asserts chardet < 6.0.0 in check_compatibility(). The resulting RequestsDependencyWarning on stderr failed the three test_microbenchmarking.py::TestMBM tests, which assert stderr is empty. Fixed by recompiling with preferences; chardet is back at 5.2.0. Note the hydra image 1.91-2025.1-pytest-xdist was built from the drifted file and still carries chardet 6.0.0.post1, so it must be rebuilt — cleanest via fix(ci): make the hydra build trigger match this branch's layout #15702 landing, after which the label rebuilds it and the bot replaces this hand-named tag.

Blocked on #15702 for the hydra image rebuild

pytest-xdist is NOT present in the currently pinned hydra image. Verified empirically against the exact tag this branch pins (docker/env/version = 1.90-2025.1-scylla-driver-v3.29.9):

$ docker run --rm scylladb/hydra:v1.90-2025.1-scylla-driver-v3.29.9 \
    python -c "import xdist; print(xdist.__version__)"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'xdist'

$ docker run --rm --entrypoint bash scylladb/hydra:v1.90-2025.1-scylla-driver-v3.29.9 -c \
    'which -a python python3; python3 -V; python3 -m pip list | grep -iE "xdist|pytest|execnet"'
/usr/local/bin/python
/usr/local/bin/python3
Python 3.10.12
pytest                   7.2.0
pytest-random-order      1.0.4

$ docker run --rm --entrypoint bash scylladb/hydra:v1.90-2025.1-scylla-driver-v3.29.9 -c \
    'find / -maxdepth 8 -name "xdist*" -o -maxdepth 8 -name "pytest_xdist*"'
(no output)

python/python3 are the same /usr/local/bin interpreter (no separate venv), pytest is 7.2.0, and nothing named xdist exists anywhere on the filesystem.

docker/env/version is deliberately left alone — the New Hydra Version label is supposed to make the build_image workflow build the image, push it, and commit the bump itself. On this branch it cannot:

⚠️ Blocked on #15702. The workflow's paths: filter lists Dockerfile, docker/env/build_n_push.sh, uv.lock and pyproject.toml. On branch-2025.1 there is no root Dockerfile (the image builds from docker/env/Dockerfile), no uv.lock, and pyproject.toml holds only [tool.ruff] config — while the image's dependencies come from requirements.txt, which is not listed. So the label produces no build_image run at all: verified by toggling it on this PR and getting nothing, while the same toggle on the sibling #15694 (branch-perf-v17, whose filter is correct) started a run immediately and published its image.

Because build_image is a pull_request_target workflow, GitHub reads it from the base branch, so the filter fix cannot apply to the PR that carries it. #15702 has to land on branch-2025.1 first; this PR can then be re-labelled.

Until then the stage keeps failing, and an earlier attempt to shortcut it made things worse: docker/env/version was hand-bumped to 1.91-2025.1-pytest-xdist without anything publishing that tag, so every hydra.sh stage died on the pull (failed to resolve reference "docker.io/scylladb/hydra:v1.91-2025.1-pytest-xdist": not found) and precommit, unittests, lint_test_cases and integration-tests all reported failure with no test output. That bump has been reverted.

Verification

pytest-xdist==3.8.0 is compatible with this branch's pytest==7.2.0:

$ .venv/bin/python -c "import xdist, pytest; print('xdist', xdist.__version__, '/ pytest', pytest.__version__)"
xdist 3.8.0 / pytest 7.2.0

--dist loadgroup pins same-group tests to one worker (smoke test; note the @docker_heavy nodeid suffix and that all 6 grouped tests land on gw0):

[gw0] [ 10%] PASSED test_grp.py::test_grouped[0]@docker_heavy
[gw1] [ 20%] PASSED test_grp.py::test_other[0]@docker_heavy_other
[gw0] [ 30%] PASSED test_grp.py::test_grouped[1]@docker_heavy
...
[gw0] [ 80%] PASSED test_grp.py::test_grouped[5]@docker_heavy
[gw1] [100%] PASSED test_grp.py::test_other[3]@docker_heavy_other

Group assignment audited across the whole selected suite inside the hydra image (temporary reporting plugin, since removed — SCYLLA marks tests requesting docker_scylla/docker_scylla_2):

        group=<NONE>         integration/test_config_get_version_based_on_conf.py
        group=<NONE>         test_base_version.py
        group=<NONE>         test_config.py
        group=<NONE>         test_events.py
        group=<NONE>         test_utils_issues.py
        group=<NONE>         test_version_utils.py
SCYLLA  group=docker_heavy   integration/test_sstable_load_utils.py
SCYLLA  group=docker_heavy   test_alternator_streams_kcl.py
SCYLLA  group=docker_heavy   test_cassandra_harry.py
SCYLLA  group=docker_heavy   test_cassandra_stress_thread.py
SCYLLA  group=docker_heavy   test_cluster.py
SCYLLA  group=docker_heavy   test_cql_stress_cassandra_stress_thread.py
SCYLLA  group=docker_heavy   test_gemini_thread.py
SCYLLA  group=docker_heavy   test_kafka.py
SCYLLA  group=docker_heavy   test_latte_thread.py
SCYLLA  group=docker_heavy   test_ndbench_thread.py
SCYLLA  group=docker_heavy   test_python_driver.py
SCYLLA  group=docker_heavy   test_run_cqlsh.py
SCYLLA  group=docker_heavy   test_scylla_bench_thread.py
SCYLLA  group=docker_heavy   test_utils_database_query_utils.py
SCYLLA  group=docker_heavy   test_ycsb_thread.py

Every module that touches a Scylla container is in the single docker_heavy group, and no ungrouped test requests the fixture.

Collection works with the real argument list (141/1313 tests collected; lower than the 187 previously selected because the stale duplicate is gone):

$ python -m pytest -v -p no:warnings -m integration --dist loadgroup -n4 --collect-only unit_tests/
============= 141/1313 tests collected (1172 deselected) in 2.45s ==============

Workers actually spin up, and results are unchanged versus serial (the 7 failures are pre-existing and environmental — no GitHub/Jira credentials in my local container — and are identical either way, so parallelism changes no outcome):

--- serial (no -n) ---
7 failed, 24 passed in 37.23s
--- parallel -n4 loadgroup ---
7 failed, 24 passed in 34.10s

CLI wiring:

test | opts= ['-t', '--test'] | default= [''] | multiple= True
n | opts= ['-n'] | default= 4 | multiple= False
junit_xml | opts= ['--junit-xml'] | default=  | multiple= False

pytest-xdist installs from the regenerated hash-pinned requirements.txt:

$ uv pip install -r requirements.txt && python -c "import xdist; print(xdist.__version__)"
3.8.0

Pre-commit over the diff — all hooks pass:

trim trailing whitespace.................................................Passed
fix end of files.........................................................Passed
check yaml...........................................(no files to check)Skipped
check for added large files..............................................Passed
check json...........................................(no files to check)Skipped
detect aws credentials...................................................Passed
detect private key.......................................................Passed
ruff-format..............................................................Passed
ruff.....................................................................Passed
commitlint...............................................................Passed

Out of scope (tracked in SCT-714)

Deliberately not touched: the container-readiness ERRORs (note unit_tests/conftest.py::configure_scylla_node never returns its scylla object, so the docker_scylla fixture yields None), the missing unit_tests/test_configs/ directory, and the JUnit-on-abort gap.

@fruch fruch added the test-integration Enable running the integration tests suite label Aug 4, 2026
@fruch
fruch force-pushed the sct-804-parallel-integration-tests-2025.1 branch from a8e725a to 589df36 Compare August 4, 2026 21:54
@fruch fruch added the New Hydra Version PR# introduces new Hydra version label Aug 4, 2026
@fruch
fruch force-pushed the sct-804-parallel-integration-tests-2025.1 branch from 589df36 to da20490 Compare August 5, 2026 17:16
@fruch fruch added New Hydra Version PR# introduces new Hydra version and removed New Hydra Version PR# introduces new Hydra version labels Aug 5, 2026
@fruch fruch added New Hydra Version PR# introduces new Hydra version and removed New Hydra Version PR# introduces new Hydra version labels Aug 5, 2026
@fruch
fruch force-pushed the sct-804-parallel-integration-tests-2025.1 branch 2 times, most recently from 8378673 to d53c7d6 Compare August 5, 2026 21:12
@fruch

fruch commented Aug 5, 2026

Copy link
Copy Markdown
Contributor Author

Triaged build PR-15691/4. Good news first: with the image published, the stage now completes40 failed, 99 passed, 2 skipped in 1625.35s (0:27:05), inside the 45-min timeout, with [gw0]-[gw3] fan-out and JUnit XML recorded. Previously it was aborted mid-run with nothing published.

The failures split three ways, and only the first is this PR's fault.

1. The 3 unit-tests failures were caused by this PR — fixed

FAILED unit_tests/test_microbenchmarking.py::TestMBM::test_main_help_message
  - AssertionError: b"…RequestsDependencyWarning: urllib3 (1.26.20) or
    chardet (6.0.0.post1)/charset_normalizer (3.4.9) doesn't match a supported
    version!\n  warnings.warn(\n" is not false

The requirements.txt recompile did not just add pytest-xdist; it drifted 48 unrelated transitive pins, including chardet 5.2.06.0.0.post1. requests==2.32.2 asserts chardet < 6.0.0 in check_compatibility(), so importing requests now writes a warning to stderr — and those three tests assert stderr is empty. My earlier claim in the description that "no existing version changed" was wrong for this file; apologies.

Confirmed directly in the published image:

$ docker run --rm --entrypoint bash scylladb/hydra:v1.91-2025.1-pytest-xdist -c \
    'python3 -m pip list | grep -iE "^(chardet|requests) "; python3 -c "import requests"'
chardet                  6.0.0.post1
requests                 2.32.2
/usr/local/lib/python3.10/site-packages/requests/__init__.py:113: RequestsDependencyWarning: urllib3 (1.26.20) or chardet (6.0.0.post1)/charset_normalizer (3.4.9) doesn't match a supported version!

Recompiled properly, reading the existing file as preferences (uv pip compile requirements.in --generate-hashes --python-version 3.10 --output-file requirements.txt). The diff against branch-2025.1 is now exactly two version lines — execnet==2.1.2 and pytest-xdist==3.8.0 — with chardet back at 5.2.0. Pushed.

⚠️ The image needs rebuilding. v1.91-2025.1-pytest-xdist was built from the drifted requirements.txt, so it still contains chardet 6.0.0.post1 and those 3 tests will keep failing until the image is rebuilt from the corrected file.

2. 30 of the 40 integration failures are a pre-existing path bug — #15705

All of unit_tests/integration/test_config_get_version_based_on_conf.py dies with FileNotFoundError: Couldn't find config file: unit_tests/test_configs/minimal_test_case.yaml. That directory does not exist on this branch; master moved internal_test_data/ there in c16e41a55c and it was never backported. Split out as #15705 (independent of this PR).

3. The rest is live-lookup rot, unrelated to parallelism

test_config.py::test_13_scylla_version_ami_branch_latest (AMIs for branch-5.2:latest not found), test_20_user_data_format_version_azure, test_version_utils.py::test_get_specific_tag_of_docker_image ×2 (S3 404 / KeyError: docker-image-name), plus 3 docker-backed ones (test_kafka, test_ycsb_thread::test_03_cql, test_sstable_load_utils). Same class master fixed in #15670/#15671; tracked under SCT-714 rather than here.

Suggested order

  1. Merge fix(ci): make the hydra build trigger match this branch's layout #15702 (build trigger paths) — then the New Hydra Version label works on this branch and the bot builds the image from the corrected requirements.txt, replacing the hand-named 1.91-2025.1-pytest-xdist pin with a generated one.
  2. Merge fix(unit_tests): point config tests at internal_test_data on this branch #15705 — clears 30 integration failures' blocker.
  3. This PR then shows only the live-lookup rot from (3).

@fruch
fruch force-pushed the sct-804-parallel-integration-tests-2025.1 branch from d53c7d6 to 2a13de8 Compare August 6, 2026 05:11
fruch added a commit that referenced this pull request Aug 6, 2026
Every test in unit_tests/integration/test_config_get_version_based_on_conf.py
fails before reaching a single assertion:

    FileNotFoundError: Couldn't find config file:
      /home/ubuntu/scylla-cluster-tests/unit_tests/test_configs/minimal_test_case.yaml

That directory does not exist here. Master moved internal_test_data/ into
unit_tests/test_configs/ in c16e41a ("improvement(treewide): Move
internal_test_data into unit_tests"), which was never backported, so on this
branch the fixtures still live in internal_test_data/. The test file arrived
via cherry-pick carrying master's path.

The two files are byte-identical, so only the path is wrong.

Also corrected the same stale path in test_utils__operator__multitenant_common.py
(latent: setup_default_env sets it, but _multitenant_class_with_shared_options
overwrites SCT_CONFIG_FILES before anything loads it, so nothing failed) and in
the AGENTS.md layout description.

Left unit_tests/test_config_get_version_based_on_conf.py alone on purpose — it
is the stale pre-rename duplicate that #15691 removes, and editing it here
would create a modify/delete conflict.
…test

On master, commit d2e3dc7 ("test(unit_tests): move pure integration
tests to unit_tests/integration/") renamed this file byte-for-byte to
unit_tests/integration/test_config_get_version_based_on_conf.py. That
rename was never backported here, so when 55d4096 cherry-picked the
follow-up content change it landed as a brand new 352-line file at the
integration/ path and left the pre-rename 205-line copy behind.

Both copies are marked `pytest.mark.integration` and both are collected.
The stale copy still carries the enterprise-prefixed version cases that
55d4096 removed as obsolete (for example
`enterprise-2023.1:latest` expecting `is_enterprise=True`), so it can
never pass. Every test it defines also exists in the integration/ copy,
which is a strict superset, so removing it loses no coverage.
@fruch
fruch force-pushed the sct-804-parallel-integration-tests-2025.1 branch from 2a13de8 to 43eeadd Compare August 6, 2026 08:29
fruch added 5 commits August 10, 2026 09:58
The `integration tests` Jenkins stage on this branch runs single-threaded
and always exceeds its timeout, so the build is ABORTED before pytest can
write its JUnit XML and `jenkins/integration-tests` never reports a
result.

`pytest-xdist` is only a declared dependency from branch-2026.1 upward, so
`sct.py integration-tests` here has no `-n` option and no way to fan the
suite out. Mirror the branch-2026.1 shape: add a `-n` option (default 4)
and pass `--dist loadgroup -n{n}` to pytest, and make `-t/--test`
repeatable so several test files can be selected at once.

`--dist loadgroup` only helps if the container-sharing tests are pinned to
a single worker, so extend the existing `xdist_group("docker_heavy")`
grouping to every integration module that starts a Scylla container via
the `docker_scylla`/`docker_scylla_2` fixture. Those tests cannot be
spread across workers because the fixture reuses fixed docker network
names (`ycsb_net`, `kafka-stack-docker-compose_default`) and, for
`ssl=True`, regenerates the shared certificates under `data_dir/ssl_conf`.
The remaining integration modules are pure-Python config/version tests
and parallelise freely.

Also raise the stage timeout from 40 to 45 minutes so it matches every
other branch.

`pytest-xdist` goes into `requirements.txt` (via `requirements.in`, which
is what `docker/env/Dockerfile` installs from; this branch has no
dependency section in `pyproject.toml` and no `uv.lock`), and
`docker/env/version` is bumped so a fresh hydra image is built and
published -- the currently pinned image does not have xdist installed, and
`-n4` would fail at runtime against a stale tag.
unit_tests/test_microbenchmarking.py covers sdcm/microbenchmarking.py, the
old Elasticsearch-backed results analyzer. Master already removed this test
in 1747db8 ("refactor(stats): remove Elasticsearch statistics collection
and reporting"); nothing else imports the module except docs.

It is also the only thing standing between this branch and a green
unit-tests stage: all three of its cases assert that the subprocess wrote
nothing to stderr, so any import-time warning from a dependency fails them
regardless of the code under test.

The unit_tests/test_data/test_microbenchmarking/ fixtures are left in
place, matching master, which kept them when it dropped the test.
Backport of master's c481dd1 and the arch-aware tag lookup, fixing both
ways get_specific_tag_of_docker_image() currently raises:

* scylladb/scylla-enterprise-nightly resolved tags under the `enterprise`
  rolling branch, which stopped producing builds when enterprise
  development folded into the unified releases. Its relocatables are gone,
  so the 00-Build.txt fetch 404s. enterprise-2024.1 is the only branch
  still publishing those images.

* 00-Build.txt now carries per-architecture keys, so a bare
  build_info["docker-image-name"] raises KeyError. Read
  docker-image-name-<arch> and fall back to the unsuffixed key, and raise
  a ValueError naming the URL when neither is present rather than a bare
  KeyError.

Fixes both test_get_specific_tag_of_docker_image cases and, through
sct_config, test_docker[latest] and test_docker[master:latest].
… branch

These eight tests came over with the cherry-pick of the integration test
file and exercise sct_config behaviour that only exists on master:

* test_relocatable_version_resolves_unified_package (4 params) patches
  sdcm.sct_config.latest_unified_package, which this branch does not
  import or define -> AttributeError.
* test_unified_package and test_unified_package_aws_sets_ubuntu_user
  assert use_preinstalled_scylla is forced False -> assert True is False.
* test_unified_package_aws_auto_resolves_ami and
  test_unified_package_aws_verify_passes_without_ami need the AWS
  auto-resolution of ami_id_db_scylla to the Ubuntu 24.04 base AMI ->
  "scylla version/repos wasn't configured correctly".

This branch has the unified_package option but none of the surrounding
logic (relocatable: resolution, forcing use_preinstalled_scylla=False,
forcing ami_db_scylla_user=ubuntu, auto-resolving the base AMI), so the
tests cannot pass here. Removing them rather than backporting the feature:
that is a config-behaviour change to a release branch and belongs in its
own PR, not in a test-parallelisation one.
test_13_scylla_version_ami_branch_latest hardcoded branch-5.2:latest.
Those AMIs have aged out of eu-west-1, so it fails with "AMIs for
scylla_version='branch-5.2:latest' not found". Resolve the branch from the
current release instead, the same way master does, using the
_get_latest_scylla_release() helper already present in this file.

test_sstable_load_utils called cs_thread.parse_results(). That is master's
name for it: sdcm/stress/base.py on this branch still calls it
verify_results(), so the cherry-picked test raised AttributeError.
@fruch
fruch force-pushed the sct-804-parallel-integration-tests-2025.1 branch from 43eeadd to bb4785f Compare August 10, 2026 06:59
@fruch fruch added New Hydra Version PR# introduces new Hydra version and removed New Hydra Version PR# introduces new Hydra version labels Aug 10, 2026
Keeps the integration stage runnable. The label-driven build still does not
fire on this branch even after scylladb#15702 landed the paths fix on
branch-2025.1: the label was toggled off/on at 2026-08-10T06:59:16Z and
06:59:24Z, this PR changes both requirements.in and requirements.txt, and
no build-docker-image run was created (last run on the workflow is from
2026-08-07, on a master-based PR).

This image predates the requirements.txt correction, so it still carries
the drifted transitive pins (chardet 6.0.0.post1 rather than 5.2.0).
Nothing depends on that difference now that the microbenchmarking test is
gone, but the image should be rebuilt from the corrected requirements.txt
before this merges.
@fruch

fruch commented Aug 10, 2026

Copy link
Copy Markdown
Contributor Author

Build PR-15691/9:

unit-tests:        1239 passed, 19 skipped, 133 deselected in 544.69s (0:09:04)
integration-tests:    5 failed, 126 passed, 2 skipped in 1578.19s (0:26:18)

unittests, precommit and lint_test_cases are all green. Integration went 18 failed / 121 passed → 5 failed / 126 passed.

Every failure fixed here had the same root cause: the integration test files were cherry-picked from master, but the code they exercise was never backported to this branch.

fixed source of the issue
8 × unified_package tests branch has the unified_package option but none of master's logic — no relocatable: resolution, no forcing use_preinstalled_scylla=False, no ami_db_scylla_user='ubuntu', no base-AMI auto-resolve, and no sct_config.latest_unified_package to patch. Removed rather than backported: that is a config-behaviour change to a release branch and deserves its own PR
2 × test_get_specific_tag_of_docker_image, test_docker[latest], test_docker[master:latest] 00-Build.txt now carries per-arch keys (docker-image-name-x86_64), and the enterprise rolling branch stopped publishing relocatables. Backported master's c481dd114c plus the arch-aware lookup
test_13_scylla_version_ami_branch_latest hardcoded branch-5.2:latest, whose AMIs have aged out of eu-west-1. Now resolved from the current release via the _get_latest_scylla_release() helper already in that file
test_sstable_load_utils_usage master renamed verify_resultsparse_results in sdcm/stress/base.py; this branch still has the old name
3 × test_microbenchmarking covers the Elasticsearch-era analyzer that master dropped in 1747db8f93. Removed

The 5 that remain, and why I left them

  1. test_docker[latest-release]assert 'scylladb/scylla-enterprise' == 'scylladb/scylla'. is_enterprise() is byte-identical on both branches (^20[0-9]{2}), so a 2026.x release classifies as enterprise here. The code is wrong and the test is rightscylladb/scylla-enterprise stopped publishing after 2024.x. Master fixed it by rewriting get_scylla_docker_repo_from_version around ComparableScyllaVersion.isReleaseVersion(). That changes which docker image SCT pulls, so it is production behaviour, not a test fix — happy to open it as its own PR.
  2. 3 × Azure image lookups (test_20_user_data_format_version_azure, test_images[azure-master], test_images[azure-branch]) — test_20 is identical on master, so it fails there too, and the test's own comment already notes "azure image listing is still buggy". Environmental.
  3. test_kafka::test_01_kafka_cdc_source_connector — note test_02_kafka_scylla_sink_connector passes, so the kafka fixture and network are fine; this single test is separately broken.

Still needs doing before merge

The requirements.txt drift returned at some point (98 changed transitive pins, chardet back to 6.0.0.post1) and has been recompiled again with the existing file as preferences — the diff versus branch-2025.1 is now exactly execnet==2.1.2 and pytest-xdist==3.8.0.

The pinned image 1.91-2025.1-pytest-xdist_2 predates that correction, so it still carries the drifted pins. Nothing depends on the difference now that the microbenchmarking test is gone, but it should be rebuilt from the corrected requirements.txt and the pin bumped.

⚠️ #15702 did not fix the trigger. The paths fix is live on branch-2025.1 (a3037872f), the workflow is active, this PR changes both requirements.in and requirements.txt, and the label was toggled off/on at 2026-08-10T06:59:16Z / 06:59:24Zno build-docker-image run was created (the workflow's most recent run is from 2026-08-07, on a master-based PR). Leading hypothesis, unverified: GitHub routes pull_request_target events using the default branch copy of the workflow, whose paths still lack requirements.*. That would be testable by mirroring the same paths onto master.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

New Hydra Version PR# introduces new Hydra version test-integration Enable running the integration tests suite

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant