Skip to content

Commit da3ec92

Browse files
authored
fix: select db in cluster mode causes unhandled errors (#1311)
Closes #1310
1 parent 7f81d0c commit da3ec92

2 files changed

Lines changed: 23 additions & 1 deletion

File tree

lib/redis/event_handler.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,11 @@ export function connectHandler(self) {
5454
}
5555

5656
if (self.condition.select) {
57-
self.select(self.condition.select);
57+
self.select(self.condition.select).catch((err) => {
58+
// If the node is in cluster mode, select is disallowed.
59+
// In this case, reconnect won't help.
60+
self.silentEmit("error", err);
61+
});
5862
}
5963

6064
if (!self.options.enableReadyCheck) {

test/functional/connection.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -531,4 +531,22 @@ describe("disconnection", function () {
531531
done();
532532
});
533533
});
534+
535+
it("emits an error if select is not allowed", function (done) {
536+
const errMessage = "select is not allowed";
537+
const node = new MockServer(30001, function (argv) {
538+
if (argv[0] === "select") {
539+
return new Error(errMessage);
540+
}
541+
});
542+
const redis = new Redis({ port: 30001, db: 2 });
543+
redis.on("error", (err) => {
544+
if (err.message === errMessage) {
545+
redis.disconnect();
546+
node.disconnect(() => {
547+
done();
548+
});
549+
}
550+
});
551+
});
534552
});

0 commit comments

Comments
 (0)