Skip to content

[Python][Flaky Test] test_migrate / test_pipeline_migrate - TimeoutError on standalone mode #6738

Description

@xShinnRyuu

Test Name

test_migrate / test_pipeline_migrate / test_sync_pipeline_migrate / test_sync_migrate

Test Location

python/tests/async_tests/test_async_client.py::TestCommands::test_migrate
python/tests/async_tests/test_batch.py::TestBatch::test_pipeline_migrate
python/tests/sync_tests/test_sync_batch.py::TestSyncBatch::test_sync_pipeline_migrate
python/tests/sync_tests/test_sync_client.py::TestCommands::test_sync_migrate

Failure Permlink

https://github.com/valkey-io/valkey-glide/actions/runs/31292520864/job/93192043406#logs

Frequency

Observed in scheduled CI run on 2026-08-09. Failed in 11 out of ~10000 tests in the Python 3.12 / EngineVersion 7.0 / x86_64-unknown-linux-gnu job. Failure occurs specifically on standalone mode (cluster_mode=False) variants.

Steps to Reproduce

  1. Run the FMT Python workflow on schedule
  2. Observe failure in Python Tests - 3.12, EngineVersion - 7.0, Target - x86_64-unknown-linux-gnu
  3. The test_migrate and test_pipeline_migrate tests timeout during glide_client.set() calls in standalone mode

System Information

GitHub Actions (ubuntu-24.04, x86_64-unknown-linux-gnu)

Language and Version

Python 3.12

Engine Version

Redis 7.0

Logs

=================================== FAILURES ===================================
________ TestCommands.test_migrate[asyncio-ProtocolVersion.RESP3-False] ________

self = <test_async_client.TestCommands object at 0x7f1dc8d58050>
glide_client = <glide.glide_client.GlideClient object at 0x7f1dc1972570>

    @pytest.mark.parametrize("cluster_mode", [True, False])
    @pytest.mark.parametrize("protocol", [ProtocolVersion.RESP2, ProtocolVersion.RESP3])
    async def test_migrate(self, glide_client: TGlideClient):
        key = get_random_string(10)
        value = get_random_string(5)
        await glide_client.set(key, value)
    
        with pytest.raises(RequestError):
            await glide_client.migrate("invalid-host", 6379, key, 0, 5000)
    
        with pytest.raises(RequestError):
            await glide_client.migrate(
                "invalid-host", 6379, key, 0, 5000, MigrateOptions(copy=True)
            )
    
        with pytest.raises(ValueError):
            MigrateOptions(username="user").to_args()
    
        # Multi-key: only available on standalone clients
        if not isinstance(glide_client, GlideClusterClient):
            hash_tag = get_random_string(5)
            key2 = f"{hash_tag}a"
            key3 = f"{hash_tag}b"
>           await glide_client.set(key2, "value2")

tests/async_tests/test_async_client.py:9736: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
glide-async/python/glide/async_commands/core.py:359: in set
    await self._execute_command(RequestType.Set, args),
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

E           glide_shared.exceptions.TimeoutError: timed out

glide-async/python/glide/glide_client.py:890: TimeoutError

=========================== short test summary info ============================
FAILED tests/async_tests/test_async_client.py::TestCommands::test_migrate[asyncio-ProtocolVersion.RESP3-False] - glide_shared.exceptions.TimeoutError: timed out
FAILED tests/async_tests/test_async_client.py::TestCommands::test_migrate[trio-ProtocolVersion.RESP2-False] - glide_shared.exceptions.TimeoutError: timed out
FAILED tests/async_tests/test_async_client.py::TestCommands::test_migrate[trio-ProtocolVersion.RESP3-False] - glide_shared.exceptions.TimeoutError: timed out
FAILED tests/async_tests/test_batch.py::TestBatch::test_pipeline_migrate[asyncio-ProtocolVersion.RESP2-False] - glide_shared.exceptions.TimeoutError: timed out
FAILED tests/async_tests/test_batch.py::TestBatch::test_pipeline_migrate[asyncio-ProtocolVersion.RESP3-False] - glide_shared.exceptions.TimeoutError: timed out
FAILED tests/async_tests/test_batch.py::TestBatch::test_pipeline_migrate[trio-ProtocolVersion.RESP2-False] - glide_shared.exceptions.TimeoutError: timed out
FAILED tests/async_tests/test_batch.py::TestBatch::test_pipeline_migrate[trio-ProtocolVersion.RESP3-False] - glide_shared.exceptions.TimeoutError: timed out
FAILED tests/sync_tests/test_sync_batch.py::TestSyncBatch::test_sync_pipeline_migrate[ProtocolVersion.RESP2-False] - glide_shared.exceptions.TimeoutError: timed out
FAILED tests/sync_tests/test_sync_batch.py::TestSyncBatch::test_sync_pipeline_migrate[ProtocolVersion.RESP3-False] - glide_shared.exceptions.TimeoutError: timed out
FAILED tests/sync_tests/test_sync_client.py::TestCommands::test_sync_migrate[ProtocolVersion.RESP2-False] - glide_shared.exceptions.TimeoutError: timed out
FAILED tests/sync_tests/test_sync_client.py::TestCommands::test_sync_migrate[ProtocolVersion.RESP3-False] - glide_shared.exceptions.TimeoutError: timed out
= 11 failed, 5762 passed, 2381 skipped, 2234 deselected, 43 warnings in 3087.52s (0:51:27) =

Screenshots

No response

Glide Version

main

Expected Behavior

Test should pass reliably. The glide_client.set() call during the multi-key migrate test on standalone clients should not time out.

Actual Behavior

The test times out during a simple SET command in the multi-key section of the test. This happens after earlier migrate("invalid-host", ...) calls which may leave the standalone client in a degraded state. All 11 failures are specifically on standalone mode (cluster_mode=False) and the timeout occurs on the set() call following the failed migrate attempts.

Possible Fixes

The failed migrate() calls to "invalid-host" may be leaving the client connection in a bad state, causing subsequent commands to time out. Consider adding a client reconnection or health check between the error-case tests and the multi-key tests, or increasing the timeout for this specific test.

Metadata

Metadata

Assignees

No one assigned

    Labels

    AI GeneratedFor any AI generated content from our own workflows/maintainers.CI/CD ⚒️CI/CD relatedFlaky-tests 🐦Flaky-testspython 🐍Python wrapper

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions