You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
It does this by issuing a single subscribe command with all listener channels as arguments. However, this is not valid with sharded pub/sub if the channels do not hash to the same slot, even if they are all owned by the same shard; the server will return a CROSSSLOT error (CROSSSLOT Keys in request don't hash to the same slot).
A simple solution for this might be to issue one subscribe command per channel for PubSubType.SHARDED subscriptions. However, there are some further issues with the current resubscription approach; for example, if a slot has moved between shards between the disconnect and the reconnect, the current logic won't be able to resubscribe correctly.
I'd be happy to open a PR implementing the rough solution (one command per channel) without consideration for moved slots, but would prefer if we can figure out a general solution that can handle MOVED errors as well!
Node.js Version
v23.6.1
Redis Server Version
7.4.2
Node Redis Version
4.7.0
Platform
Linux
Logs
The text was updated successfully, but these errors were encountered:
Description
When a pub/sub client reconnects to a host after an error or a socket disconnect, it attempts to resubscribe to previously subscribed channels:
node-redis/packages/client/lib/client/pub-sub.ts
Lines 325 to 345 in 33cdc00
It does this by issuing a single subscribe command with all listener channels as arguments. However, this is not valid with sharded pub/sub if the channels do not hash to the same slot, even if they are all owned by the same shard; the server will return a
CROSSSLOT
error (CROSSSLOT Keys in request don't hash to the same slot
).A simple solution for this might be to issue one subscribe command per channel for
PubSubType.SHARDED
subscriptions. However, there are some further issues with the current resubscription approach; for example, if a slot has moved between shards between the disconnect and the reconnect, the current logic won't be able to resubscribe correctly.I'd be happy to open a PR implementing the rough solution (one command per channel) without consideration for moved slots, but would prefer if we can figure out a general solution that can handle MOVED errors as well!
Node.js Version
v23.6.1
Redis Server Version
7.4.2
Node Redis Version
4.7.0
Platform
Linux
Logs
The text was updated successfully, but these errors were encountered: