@@ -148,31 +148,22 @@ func (s *Sentinel) defaultPool(addr string) *redis.Pool {
148
148
}
149
149
}
150
150
151
- func (s * Sentinel ) get (addr string ) redis.Conn {
152
- pool := s .poolForAddr (addr )
153
- return pool .Get ()
154
- }
155
-
156
151
func (s * Sentinel ) poolForAddr (addr string ) * redis.Pool {
157
152
s .mu .Lock ()
158
- if s .pools == nil {
159
- s .pools = make (map [string ]* redis.Pool )
160
- }
161
- pool , ok := s .pools [addr ]
162
- if ok {
163
- s .mu .Unlock ()
153
+ defer s .mu .Unlock ()
154
+ if pool , ok := s .pools [addr ]; ok {
164
155
return pool
165
156
}
166
157
s .mu .Unlock ()
167
158
newPool := s .newPool (addr )
168
159
s .mu .Lock ()
169
- p , ok := s .pools [addr ]
170
- if ok {
171
- s .mu .Unlock ()
172
- return p
160
+ if pool , ok := s .pools [addr ]; ok {
161
+ return pool
162
+ }
163
+ if s .pools == nil {
164
+ s .pools = make (map [string ]* redis.Pool )
173
165
}
174
166
s .pools [addr ] = newPool
175
- s .mu .Unlock ()
176
167
return newPool
177
168
}
178
169
@@ -186,10 +177,8 @@ func (s *Sentinel) newPool(addr string) *redis.Pool {
186
177
// close connection pool to Sentinel.
187
178
// Lock must be hold by caller.
188
179
func (s * Sentinel ) close () {
189
- if s .pools != nil {
190
- for _ , pool := range s .pools {
191
- pool .Close ()
192
- }
180
+ for _ , pool := range s .pools {
181
+ pool .Close ()
193
182
}
194
183
s .pools = nil
195
184
}
@@ -202,7 +191,7 @@ func (s *Sentinel) doUntilSuccess(f func(redis.Conn) (interface{}, error)) (inte
202
191
var lastErr error
203
192
204
193
for _ , addr := range addrs {
205
- conn := s .get (addr )
194
+ conn := s .poolForAddr (addr ). Get ( )
206
195
reply , err := f (conn )
207
196
conn .Close ()
208
197
if err != nil {
@@ -219,24 +208,16 @@ func (s *Sentinel) doUntilSuccess(f func(redis.Conn) (interface{}, error)) (inte
219
208
220
209
// MasterAddr returns an address of current Redis master instance.
221
210
func (s * Sentinel ) MasterAddr () (string , error ) {
222
- res , err := s .doUntilSuccess (func (c redis.Conn ) (interface {}, error ) {
211
+ return redis . String ( s .doUntilSuccess (func (c redis.Conn ) (interface {}, error ) {
223
212
return queryForMaster (c , s .MasterName )
224
- })
225
- if err != nil {
226
- return "" , err
227
- }
228
- return res .(string ), nil
213
+ }))
229
214
}
230
215
231
216
// SlaveAddrs returns a slice with known slave addresses of current master instance.
232
217
func (s * Sentinel ) SlaveAddrs () ([]string , error ) {
233
- res , err := s .doUntilSuccess (func (c redis.Conn ) (interface {}, error ) {
218
+ return redis . Strings ( s .doUntilSuccess (func (c redis.Conn ) (interface {}, error ) {
234
219
return queryForSlaveAddrs (c , s .MasterName )
235
- })
236
- if err != nil {
237
- return nil , err
238
- }
239
- return res .([]string ), nil
220
+ }))
240
221
}
241
222
242
223
// Slave represents a Redis slave instance which is known by Sentinel.
@@ -269,13 +250,9 @@ func (s *Sentinel) Slaves() ([]*Slave, error) {
269
250
270
251
// SentinelAddrs returns a slice of known Sentinel addresses Sentinel server aware of.
271
252
func (s * Sentinel ) SentinelAddrs () ([]string , error ) {
272
- res , err := s .doUntilSuccess (func (c redis.Conn ) (interface {}, error ) {
253
+ return redis . Strings ( s .doUntilSuccess (func (c redis.Conn ) (interface {}, error ) {
273
254
return queryForSentinels (c , s .MasterName )
274
- })
275
- if err != nil {
276
- return nil , err
277
- }
278
- return res .([]string ), nil
255
+ }))
279
256
}
280
257
281
258
// Discover allows to update list of known Sentinel addresses. From docs:
@@ -313,10 +290,7 @@ func (s *Sentinel) Close() error {
313
290
// then you are OK.
314
291
func TestRole (c redis.Conn , expectedRole string ) bool {
315
292
role , err := getRole (c )
316
- if err != nil || role != expectedRole {
317
- return false
318
- }
319
- return true
293
+ return err == nil && role == expectedRole
320
294
}
321
295
322
296
// getRole is a convenience function supplied to query an instance (master or
@@ -351,9 +325,9 @@ func queryForSlaveAddrs(conn redis.Conn, masterName string) ([]string, error) {
351
325
if err != nil {
352
326
return nil , err
353
327
}
354
- slaveAddrs := make ([]string , 0 )
355
- for _ , slave := range slaves {
356
- slaveAddrs = append ( slaveAddrs , slave .Addr () )
328
+ slaveAddrs := make ([]string , len ( slaves ) )
329
+ for i , slave := range slaves {
330
+ slaveAddrs [ i ] = slave .Addr ()
357
331
}
358
332
return slaveAddrs , nil
359
333
}
@@ -363,18 +337,13 @@ func queryForSlaves(conn redis.Conn, masterName string) ([]*Slave, error) {
363
337
if err != nil {
364
338
return nil , err
365
339
}
366
- slaves := make ([]* Slave , 0 )
367
- for _ , a := range res {
340
+ slaves := make ([]* Slave , len ( res ) )
341
+ for i , a := range res {
368
342
sm , err := redis .StringMap (a , err )
369
343
if err != nil {
370
- return slaves , err
371
- }
372
- slave := & Slave {
373
- ip : sm ["ip" ],
374
- port : sm ["port" ],
375
- flags : sm ["flags" ],
344
+ return nil , err
376
345
}
377
- slaves = append ( slaves , slave )
346
+ slaves [ i ] = & Slave { ip : sm [ "ip" ], port : sm [ "port" ], flags : sm [ "flags" ]}
378
347
}
379
348
return slaves , nil
380
349
}
@@ -384,13 +353,13 @@ func queryForSentinels(conn redis.Conn, masterName string) ([]string, error) {
384
353
if err != nil {
385
354
return nil , err
386
355
}
387
- sentinels := make ([]string , 0 )
388
- for _ , a := range res {
356
+ sentinels := make ([]string , len ( res ) )
357
+ for i , a := range res {
389
358
sm , err := redis .StringMap (a , err )
390
359
if err != nil {
391
- return sentinels , err
360
+ return nil , err
392
361
}
393
- sentinels = append ( sentinels , fmt .Sprintf ("%s:%s" , sm ["ip" ], sm ["port" ]) )
362
+ sentinels [ i ] = fmt .Sprintf ("%s:%s" , sm ["ip" ], sm ["port" ])
394
363
}
395
364
return sentinels , nil
396
365
}
0 commit comments