Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[4.x] Fix how hash slot assignment is retrieved and stored #407

Merged
merged 2 commits into from
Oct 11, 2023

Commits on Sep 25, 2023

  1. Fix how hash slot assignment is retrieved and stored

    Previously, the `RedisClusterClient` used to obtain the hash slot
    assignment as the first step of each `connect()` call. This is fairly
    expensive and increases the load on the first endpoint in the list
    (because we target the first endpoint when issuing `CLUSTER SLOTS`).
    
    It is also unnecessary. Redis always sends a redirection when the node
    to which a command is sent is not assigned the hash slot targetted
    by the command. Until we observe such redirection, the hash slot
    assignment we observed before is still valid. Hence, we can store
    the hash slot assignment in the `RedisClusterClient` and reuse it
    for all `RedisClusterConnection` objects, until the `MOVED` error
    is seen. In such case, we reset the hash slot assignment so that
    the next `connect()` call fetches it again.
    
    To avoid spurious failures (it could happen that the cluster is
    resharded such that a command that would fail under the existing
    hash slot assignment will no longer fail, because the hash slots
    that were previously assigned to multiple nodes are now assigned
    to a single node), the hash slot assignment is not kept permanently.
    Instead, it is treated as a cache with configurable TTL, defaulting
    to 1 second.
    Ladicek committed Sep 25, 2023
    Configuration menu
    Copy the full SHA
    61ae496 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    7a25220 View commit details
    Browse the repository at this point in the history