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

Merge pull request #142 from oxys/master

After a connection error, selected db, if it was set, is not restored
This commit is contained in:
Matt Ranney
2011-11-13 21:57:32 -08:00

View File

@@ -57,7 +57,8 @@ function RedisClient(stream, options) {
this.server_info = {}; this.server_info = {};
this.auth_pass = null; this.auth_pass = null;
this.parser_module = null; this.parser_module = null;
this.selected_db = null; // save the selected db here, used when reconnecting
var self = this; var self = this;
this.stream.on("connect", function () { this.stream.on("connect", function () {
@@ -163,7 +164,12 @@ RedisClient.prototype.do_auth = function () {
self.auth_callback(err, res); self.auth_callback(err, res);
self.auth_callback = null; self.auth_callback = null;
} }
// restore the selected db if needed
if (this.selected_db !== null) {
this.send_command('select', [this.selected_db]);
}
// now we are really connected // now we are really connected
self.emit("connect"); self.emit("connect");
if (self.options.no_ready_check) { if (self.options.no_ready_check) {
@@ -200,6 +206,12 @@ RedisClient.prototype.on_connect = function () {
if (this.auth_pass) { if (this.auth_pass) {
this.do_auth(); this.do_auth();
} else { } else {
// restore the selected db if needed
if (this.selected_db !== null) {
this.send_command('select', [this.selected_db]);
}
this.emit("connect"); this.emit("connect");
if (this.options.no_ready_check) { if (this.options.no_ready_check) {
@@ -726,6 +738,24 @@ commands.forEach(function (command) {
Multi.prototype[command.toUpperCase()] = Multi.prototype[command]; Multi.prototype[command.toUpperCase()] = Multi.prototype[command];
}); });
// store db in this.select_db to restore it on reconnect
RedisClient.prototype.select = function (db, callback) {
var self = this;
this.send_command('select', [db], function (err, res) {
if (err === null) {
self.selected_db = db;
}
if (typeof(callback) !== 'undefined') {
callback(err, res);
}
});
}
RedisClient.prototype.SELECT = RedisClient.prototype.select;
// Stash auth for connect and reconnect. Send immediately if already connected. // Stash auth for connect and reconnect. Send immediately if already connected.
RedisClient.prototype.auth = function () { RedisClient.prototype.auth = function () {
var args = to_array(arguments); var args = to_array(arguments);