Skip to content

Commit 50a9db7

Browse files
jschweikluin
authored andcommitted
feat: add updateSentinels option to control new sentinel values being added to the original list (#814)
Closes #798.
1 parent 0985ae8 commit 50a9db7

File tree

3 files changed

+72
-0
lines changed

3 files changed

+72
-0
lines changed

lib/connectors/SentinelConnector/index.ts

+6
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ interface ISentinelConnectionOptions extends ITcpConnectionOptions {
3030
connectTimeout?: number
3131
enableTLSForSentinelMode?: boolean
3232
sentinelTLS?: SecureContextOptions
33+
updateSentinels?: boolean
3334
}
3435

3536
export default class SentinelConnector extends AbstractConnector {
@@ -134,6 +135,11 @@ export default class SentinelConnector extends AbstractConnector {
134135
}
135136

136137
private updateSentinels (client, callback: NodeCallback): void {
138+
139+
if (!this.options.updateSentinels) {
140+
return callback(null)
141+
}
142+
137143
client.sentinel('sentinels', this.options.name, (err, result) => {
138144
if (err) {
139145
client.disconnect()

lib/redis.js

+3
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ var PromiseContainer = require('./promiseContainer');
8888
* strings. This option is necessary when dealing with big numbers (exceed the [-2^53, +2^53] range).
8989
* @param {boolean} [options.enableTLSForSentinelMode=false] - Whether to support the `tls` option
9090
* when connecting to Redis via sentinel mode.
91+
* @param {boolean} [options.updateSentinels=true] - Update the given `sentinels` list with new IP
92+
* addresses when communicating with existing sentinels.
9193
* @extends [EventEmitter](http://nodejs.org/api/events.html#events_class_events_eventemitter)
9294
* @extends Commander
9395
* @example
@@ -173,6 +175,7 @@ Redis.defaultOptions = {
173175
return Math.min(times * 10, 1000);
174176
},
175177
enableTLSForSentinelMode: false,
178+
updateSentinels: true,
176179
// Status
177180
password: null,
178181
db: 0,

test/functional/sentinel.js

+63
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,69 @@ describe('sentinel', function () {
124124
name: 'master'
125125
});
126126
});
127+
128+
it('should add additionally discovered sentinels when resolving successfully', function (done) {
129+
130+
var sentinels = [
131+
{ host: '127.0.0.1', port: 27379 }
132+
];
133+
134+
var sentinel = new MockServer(27379, function (argv) {
135+
if (argv[0] === 'sentinel' && argv[1] === 'get-master-addr-by-name') {
136+
return ['127.0.0.1', '17380'];
137+
}
138+
else if (argv[0] === 'sentinel' && argv[1] === 'sentinels') {
139+
return [['ip', '127.0.0.1', 'port', '27379'], ['ip', '127.0.0.1', 'port', '27380']];
140+
}
141+
142+
});
143+
var master = new MockServer(17380);
144+
sentinel.once('disconnect', function () {
145+
redis.disconnect();
146+
master.disconnect(function () {
147+
expect(sentinels.length).to.eql(2);
148+
sentinel.disconnect(done);
149+
});
150+
});
151+
152+
var redis = new Redis({
153+
sentinels: sentinels,
154+
name: 'master'
155+
});
156+
});
157+
158+
it('should skip additionally discovered sentinels even if they are resolved successfully', function (done) {
159+
160+
var sentinels = [
161+
{ host: '127.0.0.1', port: 27379 }
162+
];
163+
164+
var sentinel = new MockServer(27379, function (argv) {
165+
if (argv[0] === 'sentinel' && argv[1] === 'get-master-addr-by-name') {
166+
return ['127.0.0.1', '17380'];
167+
}
168+
else if (argv[0] === 'sentinel' && argv[1] === 'sentinels') {
169+
return [['ip', '127.0.0.1', 'port', '27379'], ['ip', '127.0.0.1', 'port', '27380']];
170+
}
171+
172+
});
173+
var master = new MockServer(17380);
174+
sentinel.once('disconnect', function () {
175+
redis.disconnect();
176+
master.disconnect(function () {
177+
expect(sentinels.length).to.eql(1);
178+
expect(sentinels[0].port).to.eql(27379);
179+
sentinel.disconnect(done);
180+
});
181+
});
182+
183+
var redis = new Redis({
184+
sentinels: sentinels,
185+
updateSentinels: false,
186+
name: 'master'
187+
});
188+
});
189+
127190
});
128191

129192
describe('master', function () {

0 commit comments

Comments
 (0)