@@ -263,24 +263,9 @@ func parseKeyspaceInfo(keyspaceInfo string) ([]uint8, error) {
263
263
return dbs , nil
264
264
}
265
265
266
- func getDBIndexes (redisURL string , redisPassword string , tlsHandler * TlsHandler ) ([]uint8 , error ) {
267
- customConnFunc := func (network , addr string ) (radix.Conn , error ) {
268
- dialOpts , err := redisDialOpts (redisPassword , tlsHandler , nil )
269
- if err != nil {
270
- return nil , err
271
- }
272
-
273
- return radix .Dial (network , addr , dialOpts ... )
274
- }
275
-
276
- client , err := radix .NewPool ("tcp" , redisURL , 1 , radix .PoolConnFunc (customConnFunc ))
277
- if err != nil {
278
- return nil , err
279
- }
280
- defer client .Close ()
281
-
266
+ func getDBIndexes (client * radix.Pool ) ([]uint8 , error ) {
282
267
var keyspaceInfo string
283
- if err = client .Do (radix .Cmd (& keyspaceInfo , "INFO" , "keyspace" )); err != nil {
268
+ if err : = client .Do (radix .Cmd (& keyspaceInfo , "INFO" , "keyspace" )); err != nil {
284
269
return nil , err
285
270
}
286
271
@@ -363,9 +348,7 @@ func redisDialOpts(redisPassword string, tlsHandler *TlsHandler, db *uint8) ([]r
363
348
}
364
349
365
350
// DumpDB dumps all keys from a single Redis DB
366
- func DumpDB (redisHost string , redisPort int , redisPassword string , tlsHandler * TlsHandler , db * uint8 , filter string , nWorkers int , withTTL bool , batchSize int , noscan bool , logger * log.Logger , serializer Serializer , progress chan <- ProgressNotification ) error {
367
- var err error
368
-
351
+ func DumpDB (client radix.Client , db * uint8 , filter string , nWorkers int , withTTL bool , batchSize int , noscan bool , logger * log.Logger , serializer Serializer , progress chan <- ProgressNotification ) error {
369
352
keyGenerator := scanKeys
370
353
if noscan {
371
354
keyGenerator = scanKeysLegacy
@@ -380,27 +363,6 @@ func DumpDB(redisHost string, redisPort int, redisPassword string, tlsHandler *T
380
363
}
381
364
}()
382
365
383
- redisURL := RedisURL (redisHost , fmt .Sprint (redisPort ))
384
- customConnFunc := func (network , addr string ) (radix.Conn , error ) {
385
- dialOpts , err := redisDialOpts (redisPassword , tlsHandler , db )
386
- if err != nil {
387
- return nil , err
388
- }
389
-
390
- return radix .Dial (network , addr , dialOpts ... )
391
- }
392
-
393
- client , err := radix .NewPool ("tcp" , redisURL , nWorkers , radix .PoolConnFunc (customConnFunc ))
394
- if err != nil {
395
- return err
396
- }
397
- defer client .Close ()
398
-
399
- if err = client .Do (radix .Cmd (nil , "SELECT" , fmt .Sprint (* db ))); err != nil {
400
- return err
401
- }
402
- logger .Printf (serializer ([]string {"SELECT" , fmt .Sprint (* db )}))
403
-
404
366
done := make (chan bool )
405
367
keyBatches := make (chan []string )
406
368
for i := 0 ; i < nWorkers ; i ++ {
@@ -420,15 +382,41 @@ func DumpDB(redisHost string, redisPort int, redisPassword string, tlsHandler *T
420
382
// DumpServer dumps all Keys from the redis server given by redisURL,
421
383
// to the Logger logger. Progress notification informations
422
384
// are regularly sent to the channel progressNotifications
423
- func DumpServer (redisHost string , redisPort int , redisPassword string , tlsHandler * TlsHandler , filter string , nWorkers int , withTTL bool , batchSize int , noscan bool , logger * log.Logger , serializer func ([]string ) string , progress chan <- ProgressNotification ) error {
424
- url := RedisURL (redisHost , fmt .Sprint (redisPort ))
425
- dbs , err := getDBIndexes (url , redisPassword , tlsHandler )
426
- if err != nil {
427
- return err
385
+ func DumpServer (redisHost string , redisPort int , redisPassword string , db * uint8 , tlsHandler * TlsHandler , filter string , nWorkers int , withTTL bool , batchSize int , noscan bool , logger * log.Logger , serializer func ([]string ) string , progress chan <- ProgressNotification ) error {
386
+ redisURL := RedisURL (redisHost , fmt .Sprint (redisPort ))
387
+ getConnFunc := func (db * uint8 ) func (network , addr string ) (radix.Conn , error ) {
388
+ return func (network , addr string ) (radix.Conn , error ) {
389
+ dialOpts , err := redisDialOpts (redisPassword , tlsHandler , db )
390
+ if err != nil {
391
+ return nil , err
392
+ }
393
+
394
+ return radix .Dial (network , addr , dialOpts ... )
395
+ }
396
+ }
397
+
398
+ dbs := []uint8 {}
399
+ if db != nil {
400
+ dbs = []uint8 {* db }
401
+ } else {
402
+ client , err := radix .NewPool ("tcp" , redisURL , nWorkers , radix .PoolConnFunc (getConnFunc (nil )))
403
+ if err != nil {
404
+ return err
405
+ }
406
+
407
+ dbs , err = getDBIndexes (client )
408
+ if err != nil {
409
+ return err
410
+ }
411
+ client .Close ()
428
412
}
429
413
430
414
for _ , db := range dbs {
431
- if err = DumpDB (redisHost , redisPort , redisPassword , tlsHandler , & db , filter , nWorkers , withTTL , batchSize , noscan , logger , serializer , progress ); err != nil {
415
+ client , err := radix .NewPool ("tcp" , redisURL , nWorkers , radix .PoolConnFunc (getConnFunc (& db )))
416
+ if err != nil {
417
+ return err
418
+ }
419
+ if err = DumpDB (client , & db , filter , nWorkers , withTTL , batchSize , noscan , logger , serializer , progress ); err != nil {
432
420
return err
433
421
}
434
422
}
0 commit comments