1
0
mirror of https://github.com/redis/node-redis.git synced 2025-12-09 21:21:11 +03:00
Commit Graph

625 Commits

Author SHA1 Message Date
Bob Burden III
d7c6544d3a fix: multi-byte character corruption when converting Buffers to strings (#3100)
* add tests for multi-byte character buffer
* support multi-byte characters when decoding buffers

fixes: #2993
2025-10-13 13:19:45 +03:00
Nikolay Karadzhov
96d6445d66 fix(ssubscribe): properly resubscribe in case of shard failover (#3098)
* fix(ssubscribe): properly resubscribe in case of shard failover

1) when RE failover happens, there is a disconnect
2) affected Client reconnects and tries to resubscribe all existing listeners
ISSUE #1: CROSSSLOT Error - client was doing ssubscribe ch1 ch2.. chN which, after the failover could result in CROSSSLOT ( naturally, becasuse now some slots could be owned by other shards )
FIX: send one ssubscribe command per channel instead of one ssubscribe for all channels
ISSUE #2: MOVED Error - some/all of the channels might be moved somewhere else
FIX: 1: Propagate the error to the Cluster. 2: Cluster rediscovers topology.
3: Cluster resubscribes all listeners of the failed client ( possibly some/all of those will end up in a different client after the rediscovery ) 

fixes: #2902
2025-10-13 11:59:08 +03:00
Trofymenko Vladyslav
bd11e382d0 feat: add cluster/node events (#1855) (#3083)
* add cluster/node events
* add test for cluster events positive branch
* add cluster events docs section

fixes: #1855

---------

Co-authored-by: Nikolay Karadzhov <nkaradzhov89@gmail.com>
2025-10-09 16:06:57 +03:00
blackman
d6d8d8e8ed fix(client): export various enum values (#3074)
Certain command parameter enums, specifically ClientKillFilters for the CLIENT KILL command, were not publicly exported by the @redis/client package. The purpose of this change is to make the ClientKillFilters enum accessible to all package consumers, eliminating the need for users to rely on an unstable internal import path.

This matters because it provides a reliable and supported way for developers to use commands that require these enums, improving the package's usability and API stability.

fixes: #2805



Co-authored-by: Nikolay Karadzhov <nkaradzhov89@gmail.com>
2025-10-08 16:47:57 +03:00
Stef Schoonderwoerd
5b63382e6a feat(client): Emit invalidate events from client (#3076)
* add emitInvalidate option

* Add documentation for event

* Re-write emitInvalidate logic

* Fix issues after merge

---------

Co-authored-by: Nikolay Karadzhov <nkaradzhov89@gmail.com>
2025-10-07 12:43:38 +03:00
Nikolay Karadzhov
8a1b4b4091 fix(pool): make createClientPool use provided options (#3095)
fixes: #3094
2025-10-07 12:31:24 +03:00
Nikolay Karadzhov
bab26b08a7 test(maint): touch up wrong assertions (#3096) 2025-10-07 12:26:13 +03:00
Nikolay Karadzhov
adb19c5c5f tests: Adjust scenario tests according to latest maint naming changes (#3090)
* rename maint options according to the latest client options
* adjust env variables
cae repo uses RE_FAULT_INJECTOR_URL for fault injector
DATABASE_NAME is needed to choose from the many databases in cae
* fix connection cleanup test
2025-10-06 18:30:18 +03:00
Bobby I.
0438865b8a chore: Update default Redis version to 8.4-M01-pre in tests (#3092) 2025-10-06 13:53:37 +03:00
Vuong Ngo (Viktor)
73413e086c fix: resolve doubly linked list push issue (#3085)
* fix redis sentinel failover

* fix: resolve doubly linked list push issue

* fix semicolon syntax

* correctly set the removed node ref

* fix linked list node iterator

* revert push logic and refactor remove logic

* add linked list tests
2025-10-02 13:39:39 +03:00
GitHub Action
17fc725536 Release redis@5.9.0-beta.2 2025-10-01 13:47:14 +00:00
GitHub Action
a95d559889 Release entraid@5.9.0-beta.2 2025-10-01 13:47:07 +00:00
GitHub Action
43e5a582dd Release time-series@5.9.0-beta.2 2025-10-01 13:47:01 +00:00
GitHub Action
4d986d42cc Release search@5.9.0-beta.2 2025-10-01 13:46:54 +00:00
GitHub Action
4693782973 Release json@5.9.0-beta.2 2025-10-01 13:46:48 +00:00
GitHub Action
fcdac2e47f Release bloom@5.9.0-beta.2 2025-10-01 13:46:40 +00:00
GitHub Action
3b0fb9a161 Release client@5.9.0-beta.2 2025-10-01 13:46:33 +00:00
Pavel Pashov
e588eab249 fix: add typed/untyped mode support for multi-commands (#3084) 2025-10-01 16:33:22 +03:00
killa
dee7955579 fix: add default modules in createClientPool (#3088) 2025-09-30 21:50:24 +03:00
GitHub Action
f33568e4bf Release redis@5.9.0-beta.1 2025-09-26 08:53:23 +00:00
GitHub Action
f37cba43e8 Release entraid@5.9.0-beta.1 2025-09-26 08:53:17 +00:00
GitHub Action
87d0e4f3f9 Release time-series@5.9.0-beta.1 2025-09-26 08:53:11 +00:00
GitHub Action
e8109cc74c Release search@5.9.0-beta.1 2025-09-26 08:53:04 +00:00
GitHub Action
2a91b6614b Release json@5.9.0-beta.1 2025-09-26 08:52:56 +00:00
GitHub Action
55a4980fa1 Release bloom@5.9.0-beta.1 2025-09-26 08:52:50 +00:00
GitHub Action
e7ff3b5142 Release client@5.9.0-beta.1 2025-09-26 08:52:43 +00:00
Nikolay Karadzhov
e138cbd05b fix(init): option parsing (#3086)
* refactor(maint): rename options

* fix(init): option parsing

* refactor(client): #options cannot be undefined
2025-09-23 14:24:37 +03:00
Pavel Pashov
b97bbbe8c6 refactor(test): improve test scenario reliability and maintainability (#3077)
* refactor(test): improve test scenario reliability and maintainability

* tests: add resp3 check test (#1)

* test: refactor connection handoff tests with enhanced spy utility (#2)

* test: add comprehensive push notification disabled scenarios (#3)

* tests: add params config tests (#4)

* tests: add feature enablement tests (#5)

---------

Co-authored-by: Nikolay Karadzhov <nikolay.karadzhov@redis.com>
2025-09-18 12:45:55 +03:00
Caiuri Uller
073db12dbb docs: update RedisJSON documentation link (#3079)
* docs: update RedisJSON documentation link

* docs: update RedisJSON path syntax documentation link
2025-09-16 16:41:40 +03:00
Nikolay Karadzhov
6eed1ee7ad fix(cluster): prevent infinite loop (#3078)
getRandomNode could end up in an infinite loop if
this.masters is empty and this.replicas is empty.

fixes: #3075
2025-09-12 14:47:57 +03:00
GitHub Action
e2702b63f2 Release redis@5.9.0-beta.0 2025-09-10 09:04:52 +00:00
GitHub Action
1df34a4b11 Release entraid@5.9.0-beta.0 2025-09-10 09:04:46 +00:00
GitHub Action
aee6f05853 Release time-series@5.9.0-beta.0 2025-09-10 09:04:41 +00:00
GitHub Action
35cf484462 Release search@5.9.0-beta.0 2025-09-10 09:04:35 +00:00
GitHub Action
24ec2606b0 Release json@5.9.0-beta.0 2025-09-10 09:04:30 +00:00
GitHub Action
ceeca035d0 Release bloom@5.9.0-beta.0 2025-09-10 09:04:24 +00:00
GitHub Action
550767e3ae Release client@5.9.0-beta.0 2025-09-10 09:04:19 +00:00
Nikolay Karadzhov
208a0d250f Hitless upgrades (#3021)
* feat(errors): Add specialized timeout error types for maintenance scenarios

- Added `SocketTimeoutDuringMaintananceError`, a subclass of `TimeoutError`, to handle socket timeouts during maintenance.
- Added `CommandTimeoutDuringMaintenanceError`, another subclass of `TimeoutError`, to address command write timeouts during maintenance.

* feat(linked-list): Add EmptyAwareSinglyLinkedList and enhance DoublyLinkedList functionality

- Introduced `EmptyAwareSinglyLinkedList`, a subclass of `SinglyLinkedList` that emits an `empty` event when the list becomes empty due to `reset`, `shift`, or `remove` operations.
- Added `nodes()` iterator method to `DoublyLinkedList` for iterating over nodes directly.
- Enhanced unit tests for `DoublyLinkedList` and `SinglyLinkedList` to cover edge cases and new functionality.
- Added comprehensive tests for `EmptyAwareSinglyLinkedList` to validate `empty` event emission under various scenarios.
- Improved code formatting and consistency.

* refactor(commands-queue): Improve push notification handling

- Replaced `setInvalidateCallback` with a more flexible `addPushHandler` method, allowing multiple handlers for push notifications.
- Introduced the `PushHandler` type to standardize push notification processing.
- Refactored `RedisCommandsQueue` to use a `#pushHandlers` array, enabling dynamic and modular handling of push notifications.
- Updated `RedisClient` to leverage the new handler mechanism for `invalidate` push notifications, simplifying and decoupling logic.

* feat(commands-queue): Add method to wait for in-flight commands to complete

- Introduced `waitForInflightCommandsToComplete` method to asynchronously wait for all in-flight commands to finish processing.
- Utilized the `empty` event from `#waitingForReply` to signal when all commands have been completed.

* feat(commands-queue): Introduce maintenance mode support for commands-queue

- Added `#maintenanceCommandTimeout` and `setMaintenanceCommandTimeout` method to dynamically adjust command timeouts during maintenance

* refator(client): Extract socket event listener setup into helper method

* refactor(socket): Add maintenance mode support and dynamic timeout handling

- Added `#maintenanceTimeout` and `setMaintenanceTimeout` method to dynamically adjust socket timeouts during maintenance.

* feat(client): Add Redis Enterprise maintenance configuration options

- Added `maintPushNotifications` option to control how the client handles Redis Enterprise maintenance push notifications (`disabled`, `enabled`, `au
to`).
- Added `maintMovingEndpointType` option to specify the endpoint type for reconnecting during a MOVING notification (`auto`, `internal-ip`, `external-ip`,
etc.).
- Added `maintRelaxedCommandTimeout` option to define a relaxed timeout for commands during maintenance.
- Added `maintRelaxedSocketTimeout` option to define a relaxed timeout for the socket during maintenance.
- Enforced RESP3 requirement for maintenance-related features (`maintPushNotifications`).

* feat(client): Add socket helpers and pause mechanism

- Introduced `#paused` flag with corresponding `_pause` and `_unpause` methods to
temporarily halt writing commands to the socket during maintenance windows.
- Updated `#write` method to respect the `#paused` flag, preventing new commands from being written during maintenance.
- Added `_ejectSocket` method to safely detach from and return the current socket
- Added `_insertSocket` method to receive and start using a new socket

* feat(client): Add Redis Enterprise maintenance handling capabilities

- Introduced `EnterpriseMaintenanceManager` to manage Redis Enterprise maintenance events and push notifications.
- Integrated `EnterpriseMaintenanceManager` into `RedisClient` to handle maintenance push notifications and manage socket transitions.
- Implemented graceful handling of MOVING, MIGRATING, and FAILOVER push notifications, including socket replacement and timeout adjustments.


* test: add E2E test infrastructure for Redis maintenance scenarios

* test: add E2E tests for Redis Enterprise maintenance timeout handling (#3)

* test: add connection handoff test


---------

Co-authored-by: Pavel Pashov <pavel.pashov@redis.com>
Co-authored-by: Pavel Pashov <60297174+PavelPashov@users.noreply.github.com>
2025-09-10 11:05:37 +03:00
blackman
1d824df9e1 feat: add LATENCY_RESET command (#3047) 2025-08-27 18:10:15 +03:00
Nikolay Karadzhov
672246dbd2 fix(ts): use all commands in cluster type (#3065)
RedisClusterType was using some type restrictions to
hide some commands based on its properties. In reality,
all commands should be exposed to user ( as in v4 ).

fixes #3064
2025-08-26 16:35:45 +03:00
GitHub Action
7b56e9a3dc Release redis@5.8.2 2025-08-20 08:33:41 +00:00
GitHub Action
3d6eefc246 Release entraid@5.8.2 2025-08-20 08:33:35 +00:00
GitHub Action
01157a0147 Release time-series@5.8.2 2025-08-20 08:33:29 +00:00
GitHub Action
c73a8c6569 Release search@5.8.2 2025-08-20 08:33:23 +00:00
GitHub Action
5e575b9550 Release json@5.8.2 2025-08-20 08:33:16 +00:00
GitHub Action
0a5d076cf5 Release bloom@5.8.2 2025-08-20 08:33:10 +00:00
GitHub Action
2e66012099 Release client@5.8.2 2025-08-20 08:33:04 +00:00
Nikolay Karadzhov
b9a5d36640 fix(search): properly decide if response has docs (#3060)
fixes: #3056
2025-08-20 11:12:25 +03:00
Nikolay Karadzhov
e347d566cb fix(sentinel): properly pass reconnectStrategy (#3063)
Properly pass reconnectStrategy to master/replica nodes.
Before that strategies passed in the nodeClientOptions.socket
object were ignored.

fixes #3061
2025-08-20 11:11:34 +03:00
Nikolay Karadzhov
d5423b93d6 chore(tests): bump test container version 8.2.1-pre (#3057) 2025-08-18 11:32:41 +03:00