Skip to content

test(cluster): skip the MSETEX multi-shard test below 8.3.224 - #4601

Merged
petyaslavova merged 3 commits into
redis:masterfrom
BlueX888:contrib/cluster-msetex-skip
Nov 9, 2026
Merged

petyaslavova merged 3 commits into
redis:masterfrom
BlueX888:contrib/cluster-msetex-skip

Conversation

@BlueX888

@BlueX888 BlueX888 commented Nov 9, 2026 •

Copy link
Copy Markdown
Contributor

Description of change

master CI has been failing since 393ec3c (#4569) added test_keys_that_cannot_be_located_are_not_split for both cluster clients. The test sends MSETEX, which the push-only CI cells (Redis 8.0.6 and 8.2.11) do not have, so CommandsParser raises RedisError: MSETEX command doesn't exist in Redis commands before the test reaches the split logic. The pull-request matrix omits those two server versions, which is why #4569's own run was green.

MSETEX is a new command. Gate both tests on the official 8.4 release (@skip_if_server_version_lt("8.4")) in tests/test_cluster.py and tests/test_asyncio/test_cluster.py; per review, pre-release numbers such as 8.3.224 are only used for milestone builds. The test still runs on the 8.4+ cells (8.4.8, 8.6.8, 8.8.4, current 8.10.3, 8.12.0) and skips only where the command does not exist. The class-level >= 8.0.0 gate skips the 7.2.14 pull-request cell.

Verified with a Redis 8.2.11 server (the failing CI version) and Redis 7.4.11: on both, the sync test skips (1 skipped) and the async test skips (2 skipped) with Redis version required >= 8.4; on 8.2.11 the class-level >= 8.0.0 gate is false, so the new gate is what skips them. ruff check and ruff format --check pass. The main CI failure (run 42544303863 on 4fe8a8c) shows only these two tests failing.

Pull Request check-list

  • Do tests and lints pass with this change? (skip verified against Redis 8.2.11 and 7.4.11; ruff clean)
  • Do the CI tests pass with this change? (waiting for fork workflow approval)
  • Is the new or changed code fully tested? (test-only gate; the test runs on the >= 8.4 cells)
  • Is a documentation update included? (N/A)
  • Is an example added to the examples folder? (N/A)

Note

Low Risk
Test-only version gating with no production or library behavior changes.

Overview
Both cluster test_keys_that_cannot_be_located_are_not_split cases (sync in tests/test_cluster.py, asyncio in tests/test_asyncio/test_cluster.py) now use @skip_if_server_version_lt("8.4") so they only run when MSETEX exists on the server.

CI on Redis 8.0.6 and 8.2.11 was failing because CommandsParser rejects MSETEX before the test exercises multi-shard split behavior; those matrix cells now skip instead of erroring. The tests still run on 8.4+ CI images.

Reviewed by Cursor Bugbot for commit c3a2fa8. Bugbot is set up for automated code reviews on this repo. Configure here.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 9, 2026 •

Copy link
Copy Markdown
Codex Review Summary: ✅ Completed

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-09T13:51:32.367286Z c3a2fa8 New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@BlueX888

BlueX888 commented Nov 9, 2026

Copy link
Copy Markdown
Contributor Author

The only failing check is test_hybrid_search_query_with_timeout in the standalone phase of Redis 8.10.3; Python 3.15; Config:2-unified_responses (TimeoutError: Timeout reading from 127.0.0.1:6379). The same job's cluster phase passed (2179 passed, 1100 skipped), including the MSETEX test, and the other checks are green. This looks like the timeout test flaking rather than the change; a rerun of that job should be enough.

Comment thread tests/test_asyncio/test_cluster.py Outdated
assert await pipe.execute() == [0]
assert keyslot.call_count == len(keys)

@skip_if_server_version_lt("8.3.224")

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @BlueX888, thank you for your contribution!
Please gate the tests with 8.4 - we already have this officially released. Those pre-release versions are used only while we test the milestone build before the official releases. After the GA is out, we can safely use the release version, which in this case is 8.4.

@petyaslavova petyaslavova added maintenance Maintenance (CI, Releases, etc) waiting-for-response labels Nov 9, 2026
@BlueX888

BlueX888 commented Nov 9, 2026

Copy link
Copy Markdown
Contributor Author

Done in 8f53b33: both gates now use the 8.4 release instead of 8.3.224. Verified against a Redis 8.2.11 server — both tests skip with Redis version required >= 8.4 — and ruff check/format pass. The 8.4+ cells will keep running the test.

@petyaslavova petyaslavova left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great, thanks @BlueX888. LGTM.

@petyaslavova
petyaslavova merged commit c48e972 into redis:master Nov 9, 2026
132 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

maintenance Maintenance (CI, Releases, etc)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants