Skip to content

fix(sentinel): preserve zero preferred slave priority - #2129

Merged
PavelPashov merged 1 commit into
redis:mainfrom
PavelPashov:fix/sentinel-preferred-slave-zero-priority
Jul 16, 2026
Merged

PavelPashov merged 1 commit into
redis:mainfrom
PavelPashov:fix/sentinel-preferred-slave-zero-priority

Conversation

@PavelPashov

@PavelPashov PavelPashov commented Jun 29, 2026 •

Copy link
Copy Markdown
Contributor

Fixes #2128


Note

Low Risk
Small, localized change to Sentinel slave selection with a targeted regression test; affects only role: "slave" preferred-slave ordering.

Overview
Fixes preferred slave selection when prio is 0 and stops mutating the caller鈥檚 preferredSlaves option during sorting.

selectPreferredSentinel now copies the preferred-slaves array before sort, uses a.prio ?? 1 / b.prio ?? 1 for ordering (so 0 sorts ahead of default 1), and no longer writes prio onto the original option objects. A functional test asserts a prio: 0 entry is chosen over a default-priority peer and that preferredSlaves is unchanged after connect.

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

@PavelPashov
PavelPashov force-pushed the fix/sentinel-preferred-slave-zero-priority branch from 814f920 to 9c93677 Compare June 29, 2026 14:14
@PavelPashov
PavelPashov merged commit a3f9f2d into redis:main Jul 16, 2026
19 checks passed
@PavelPashov
PavelPashov deleted the fix/sentinel-preferred-slave-zero-priority branch July 16, 2026 11:16
github-actions Bot pushed a commit that referenced this pull request Jul 29, 2026
# [6.0.0-beta.1](v5.11.1...v6.0.0-beta.1) (2026-07-29)

* Add RESP3 ([#2127](#2127)) ([5d0862e](5d0862e))

### Bug Fixes

* clear stale socket timeout on reconnect ([#2148](#2148)) ([6455dbe](6455dbe))
* **cluster:** recreate stale connection on circular MOVED ([#2135](#2135)) ([08c8967](08c8967))
* **cluster:** validate MOVED slot to prevent Array.prototype pollution ([#2151](#2151)) ([9618206](9618206)), closes [#1267](#1267)
* **command:** serialize large integer arguments in decimal notation ([#2136](#2136)) ([09b8d04](09b8d04))
* **redis:** keep reconnecting when connection closes during client setup ([#2099](#2099)) ([#2123](#2123)) ([f9a66bc](f9a66bc))
* **sentinel:** preserve zero preferred slave priority ([#2129](#2129)) ([a3f9f2d](a3f9f2d))
* **tracing:** redact values for GETSET and PSETEX ([#2134](#2134)) ([832765d](832765d))

### Features

* add LMOVEM and BLMOVEM command support ([#2144](#2144)) ([c26af46](c26af46))
* add Redis 8.10 set cardinality commands ([#2143](#2143)) ([301099b](301099b))
* support MAXCOUNT and MAXSIZE for stream reads ([#2142](#2142)) ([ae5e41b](ae5e41b))

### BREAKING CHANGES

* ioredis now requires Node.js 20 or newer and uses RESP3 by default. Set `protocol: 2` to retain the v5 wire protocol.
@github-actions

Copy link
Copy Markdown

馃帀 This PR is included in version 6.0.0-beta.1 馃帀

The release is available on:

Your semantic-release bot 馃摝馃殌

github-actions Bot pushed a commit that referenced this pull request Jul 31, 2026
# [6.0.0](v5.11.1...v6.0.0) (2026-07-31)

* Add RESP3 ([#2127](#2127)) ([5d0862e](5d0862e))

### Bug Fixes

* clear stale socket timeout on reconnect ([#2148](#2148)) ([6455dbe](6455dbe))
* **cluster:** recreate stale connection on circular MOVED ([#2135](#2135)) ([08c8967](08c8967))
* **cluster:** validate MOVED slot to prevent Array.prototype pollution ([#2151](#2151)) ([9618206](9618206)), closes [#1267](#1267)
* **command:** serialize large integer arguments in decimal notation ([#2136](#2136)) ([09b8d04](09b8d04))
* **redis:** keep reconnecting when connection closes during client setup ([#2099](#2099)) ([#2123](#2123)) ([f9a66bc](f9a66bc))
* **sentinel:** preserve zero preferred slave priority ([#2129](#2129)) ([a3f9f2d](a3f9f2d))
* **tracing:** redact values for GETSET and PSETEX ([#2134](#2134)) ([832765d](832765d))
* **types:** export ScanStreamOptions, RedisStatus and ClusterStatus ([#2158](#2158)) ([cf3bf71](cf3bf71))

### Features

* add LMOVEM and BLMOVEM command support ([#2144](#2144)) ([c26af46](c26af46))
* add Redis 8.10 set cardinality commands ([#2143](#2143)) ([301099b](301099b))
* himport managed fieldsets ([#2159](#2159)) ([729f174](729f174))
* improve default connection resilience ([#2160](#2160)) ([6d0716e](6d0716e))
* support MAXCOUNT and MAXSIZE for stream reads ([#2142](#2142)) ([ae5e41b](ae5e41b))

### BREAKING CHANGES

* ioredis now requires Node.js 20 or newer and uses RESP3 by default. Set `protocol: 2` to retain the v5 wire protocol.
@github-actions

Copy link
Copy Markdown

馃帀 This PR is included in version 6.0.0 馃帀

The release is available on:

Your semantic-release bot 馃摝馃殌

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

preferredSlaves treats prio: 0 as missing and selects a different Sentinel slave

2 participants