@@ -366,7 +366,7 @@ export default class RedisClient<
366
366
}
367
367
368
368
readonly #options?: RedisClientOptions < M , F , S , RESP , TYPE_MAPPING > ;
369
- readonly #socket: RedisSocket ;
369
+ #socket: RedisSocket ;
370
370
readonly #queue: RedisCommandsQueue ;
371
371
#selectedDB = 0 ;
372
372
#monitorCallback?: MonitorCallback < TYPE_MAPPING > ;
@@ -431,7 +431,26 @@ export default class RedisClient<
431
431
this . #validateOptions( options )
432
432
this . #options = this . #initiateOptions( options ) ;
433
433
this . #queue = this . #initiateQueue( ) ;
434
- this . #socket = this . #initiateSocket( ) ;
434
+ this . #socket = this . #initiateSocket( this . #options) ;
435
+
436
+ this . #queue. setMovingCallback ( async ( afterMs : number , host : string , port : number ) => {
437
+ console . log ( `Moving to ${ host } :${ port } before ${ afterMs } ms` ) ;
438
+ const oldSocket = this . #socket;
439
+ const newSocket = this . #initiateSocket( {
440
+ ...this . #options,
441
+ socket : {
442
+ ...this . #options?. socket ,
443
+ host,
444
+ port
445
+ }
446
+ } ) ;
447
+ newSocket . on ( 'ready' , ( ) => {
448
+ console . log ( `Connected to ${ host } :${ port } , destroying old socket` ) ;
449
+ oldSocket . destroy ( )
450
+ this . #socket = newSocket
451
+ } ) ;
452
+ await newSocket . connect ( )
453
+ } ) ;
435
454
436
455
if ( options ?. clientSideCache ) {
437
456
if ( options . clientSideCache instanceof ClientSideCacheProvider ) {
@@ -657,8 +676,9 @@ export default class RedisClient<
657
676
return commands ;
658
677
}
659
678
660
- #initiateSocket( ) : RedisSocket {
679
+ #initiateSocket( options ?: RedisClientOptions < M , F , S , RESP , TYPE_MAPPING > ) : RedisSocket {
661
680
const socketInitiator = async ( ) => {
681
+ console . log ( 'Initiator...' ) ;
662
682
const promises = [ ] ,
663
683
chainId = Symbol ( 'Socket Initiator' ) ;
664
684
@@ -688,8 +708,9 @@ export default class RedisClient<
688
708
}
689
709
} ;
690
710
691
- return new RedisSocket ( socketInitiator , this . # options?. socket )
711
+ return new RedisSocket ( socketInitiator , options ?. socket )
692
712
. on ( 'data' , chunk => {
713
+ console . log ( 'Data received' , chunk ) ;
693
714
try {
694
715
this . #queue. decoder . write ( chunk ) ;
695
716
} catch ( err ) {
@@ -698,6 +719,7 @@ export default class RedisClient<
698
719
}
699
720
} )
700
721
. on ( 'error' , err => {
722
+ console . error ( 'Socket error' , err ) ;
701
723
this . emit ( 'error' , err ) ;
702
724
this . #clientSideCache?. onError ( ) ;
703
725
if ( this . #socket. isOpen && ! this . #options?. disableOfflineQueue ) {
@@ -708,6 +730,7 @@ export default class RedisClient<
708
730
} )
709
731
. on ( 'connect' , ( ) => this . emit ( 'connect' ) )
710
732
. on ( 'ready' , ( ) => {
733
+ console . log ( 'Socket ready' ) ;
711
734
this . emit ( 'ready' ) ;
712
735
this . #setPingTimer( ) ;
713
736
this . #maybeScheduleWrite( ) ;
0 commit comments