1
0
mirror of https://github.com/redis/node-redis.git synced 2025-08-06 02:15:48 +03:00

fix(handshake): ignore errors on client.setinfo (#2969)

As per the documentation (https://redis.io/docs/latest/commands/client-setinfo):

Client libraries are expected to pipeline this command after authentication on all connections and ignore failures since they could be connected to an older version that doesn't support them.

Turns out different versions of redis server return different errors, so its better to catch all.

fixes #2968
This commit is contained in:
Nikolay Karadzhov
2025-05-21 11:38:29 +03:00
committed by GitHub
parent b8acbce213
commit 9ea260f0f9
2 changed files with 10 additions and 22 deletions

View File

@@ -4,7 +4,7 @@ import { BasicAuth, CredentialsError, CredentialsProvider, StreamingCredentialsP
import RedisCommandsQueue, { CommandOptions } from './commands-queue';
import { EventEmitter } from 'node:events';
import { attachConfig, functionArgumentsPrefix, getTransformReply, scriptArgumentsPrefix } from '../commander';
import { ClientClosedError, ClientOfflineError, DisconnectsClientError, SimpleError, WatchError } from '../errors';
import { ClientClosedError, ClientOfflineError, DisconnectsClientError, WatchError } from '../errors';
import { URL } from 'node:url';
import { TcpSocketConnectOpts } from 'node:net';
import { PUBSUB_TYPE, PubSubType, PubSubListener, PubSubTypeListeners, ChannelListeners } from './pub-sub';
@@ -626,14 +626,10 @@ export default class RedisClient<
if (!this.#options?.disableClientInfo) {
commands.push({
cmd: ['CLIENT', 'SETINFO', 'LIB-VER', version],
errorHandler: (err: Error) => {
// Only throw if not a SimpleError - unknown subcommand
// Client libraries are expected to ignore failures
// of type SimpleError - unknown subcommand, which are
// expected from older servers ( < v7 )
if (!(err instanceof SimpleError) || !err.isUnknownSubcommand()) {
throw err;
}
errorHandler: () => {
// Client libraries are expected to pipeline this command
// after authentication on all connections and ignore failures
// since they could be connected to an older version that doesn't support them.
}
});
@@ -646,14 +642,10 @@ export default class RedisClient<
? `node-redis(${this.#options.clientInfoTag})`
: 'node-redis'
],
errorHandler: (err: Error) => {
// Only throw if not a SimpleError - unknown subcommand
// Client libraries are expected to ignore failures
// of type SimpleError - unknown subcommand, which are
// expected from older servers ( < v7 )
if (!(err instanceof SimpleError) || !err.isUnknownSubcommand()) {
throw err;
}
errorHandler: () => {
// Client libraries are expected to pipeline this command
// after authentication on all connections and ignore failures
// since they could be connected to an older version that doesn't support them.
}
});
}

View File

@@ -70,11 +70,7 @@ export class ErrorReply extends Error {
}
}
export class SimpleError extends ErrorReply {
isUnknownSubcommand(): boolean {
return this.message.toLowerCase().indexOf('err unknown subcommand') !== -1;
}
}
export class SimpleError extends ErrorReply {}
export class BlobError extends ErrorReply {}