Skip to content

Commit 3328f15

Browse files
committed
Merge pull request #2277 from Chuwiey/redis_down_fix
Redis down fix
2 parents a7ea2e0 + c2e80d4 commit 3328f15

File tree

1 file changed

+25
-7
lines changed

1 file changed

+25
-7
lines changed

lib/hooks/sockets/lib/loadSocketIO.js

+25-7
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@ module.exports = function (sails) {
44
* Module dependencies.
55
*/
66

7-
var util = require( 'sails-util'),
7+
var util = require( 'sails-util'),
88
SocketServer = require('socket.io'),
99
RedisStore = require('socket.io/lib/stores/redis'),
10-
Redis = require('socket.io/node_modules/redis'),
11-
Socket = {
10+
Redis = require('socket.io/node_modules/redis'),
11+
Socket = {
1212
authorization : require('./authorization')(sails),
1313
connection : require('./connection')(sails)
1414
};
@@ -66,9 +66,9 @@ module.exports = function (sails) {
6666
var host = socketConfig.host || '127.0.0.1';
6767
var port = socketConfig.port || 6379;
6868

69-
var pub = createRedisConnection(port, host);
70-
var sub = createRedisConnection(port, host);
71-
var client = createRedisConnection(port, host);
69+
var pub = createRedisConnection(port, host, 'pub');
70+
var sub = createRedisConnection(port, host, 'sub');
71+
var client = createRedisConnection(port, host, 'client');
7272

7373
var storeConfig = {
7474
redisPub: pub,
@@ -136,7 +136,7 @@ module.exports = function (sails) {
136136
* `pass` is declared in the socketConfig file.
137137
*/
138138

139-
function createRedisConnection(port, host) {
139+
function createRedisConnection(port, host, id) {
140140

141141
var socketConfig = sails.config.sockets;
142142

@@ -155,6 +155,24 @@ module.exports = function (sails) {
155155
client.select(socketConfig.db);
156156
}
157157

158+
// If Redis connection ends, catch the error and retry
159+
// until it comes back
160+
161+
client.on('ready', function() {
162+
sails.log.debug('RedisClient::Events[ready]: [OK] Redis "' + id + '" is up. Connections: ', client.connections);
163+
});
164+
165+
client.on('end', function() {
166+
sails.log.debug('RedisClient::Events[end]: "' + id + '" , Connected:', client.connected);
167+
});
168+
169+
client.on('error', function (err) {
170+
sails.log.error('RedisClient::Events[error]: "' + id + '" , ' + err);
171+
if (/ECONNREFUSED/g.test(err)) {
172+
sails.log.error('Waiting for "' + id + '" redis client to come back online. Connections:', client.connections);
173+
}
174+
});
175+
158176
return client;
159177
}
160178

0 commit comments

Comments
 (0)