You've already forked node-redis
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:
committed by
GitHub
parent
b8acbce213
commit
9ea260f0f9
@@ -4,7 +4,7 @@ import { BasicAuth, CredentialsError, CredentialsProvider, StreamingCredentialsP
|
|||||||
import RedisCommandsQueue, { CommandOptions } from './commands-queue';
|
import RedisCommandsQueue, { CommandOptions } from './commands-queue';
|
||||||
import { EventEmitter } from 'node:events';
|
import { EventEmitter } from 'node:events';
|
||||||
import { attachConfig, functionArgumentsPrefix, getTransformReply, scriptArgumentsPrefix } from '../commander';
|
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 { URL } from 'node:url';
|
||||||
import { TcpSocketConnectOpts } from 'node:net';
|
import { TcpSocketConnectOpts } from 'node:net';
|
||||||
import { PUBSUB_TYPE, PubSubType, PubSubListener, PubSubTypeListeners, ChannelListeners } from './pub-sub';
|
import { PUBSUB_TYPE, PubSubType, PubSubListener, PubSubTypeListeners, ChannelListeners } from './pub-sub';
|
||||||
@@ -626,14 +626,10 @@ export default class RedisClient<
|
|||||||
if (!this.#options?.disableClientInfo) {
|
if (!this.#options?.disableClientInfo) {
|
||||||
commands.push({
|
commands.push({
|
||||||
cmd: ['CLIENT', 'SETINFO', 'LIB-VER', version],
|
cmd: ['CLIENT', 'SETINFO', 'LIB-VER', version],
|
||||||
errorHandler: (err: Error) => {
|
errorHandler: () => {
|
||||||
// Only throw if not a SimpleError - unknown subcommand
|
// Client libraries are expected to pipeline this command
|
||||||
// Client libraries are expected to ignore failures
|
// after authentication on all connections and ignore failures
|
||||||
// of type SimpleError - unknown subcommand, which are
|
// since they could be connected to an older version that doesn't support them.
|
||||||
// expected from older servers ( < v7 )
|
|
||||||
if (!(err instanceof SimpleError) || !err.isUnknownSubcommand()) {
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -646,14 +642,10 @@ export default class RedisClient<
|
|||||||
? `node-redis(${this.#options.clientInfoTag})`
|
? `node-redis(${this.#options.clientInfoTag})`
|
||||||
: 'node-redis'
|
: 'node-redis'
|
||||||
],
|
],
|
||||||
errorHandler: (err: Error) => {
|
errorHandler: () => {
|
||||||
// Only throw if not a SimpleError - unknown subcommand
|
// Client libraries are expected to pipeline this command
|
||||||
// Client libraries are expected to ignore failures
|
// after authentication on all connections and ignore failures
|
||||||
// of type SimpleError - unknown subcommand, which are
|
// since they could be connected to an older version that doesn't support them.
|
||||||
// expected from older servers ( < v7 )
|
|
||||||
if (!(err instanceof SimpleError) || !err.isUnknownSubcommand()) {
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@@ -70,11 +70,7 @@ export class ErrorReply extends Error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class SimpleError extends ErrorReply {
|
export class SimpleError extends ErrorReply {}
|
||||||
isUnknownSubcommand(): boolean {
|
|
||||||
return this.message.toLowerCase().indexOf('err unknown subcommand') !== -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export class BlobError extends ErrorReply {}
|
export class BlobError extends ErrorReply {}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user