@@ -390,7 +390,7 @@ export default class RedisClient<
390
390
}
391
391
392
392
readonly #options?: RedisClientOptions < M , F , S , RESP , TYPE_MAPPING > ;
393
- readonly #socket: RedisSocket ;
393
+ #socket: RedisSocket ;
394
394
readonly #queue: RedisCommandsQueue ;
395
395
#selectedDB = 0 ;
396
396
#monitorCallback?: MonitorCallback < TYPE_MAPPING > ;
@@ -455,7 +455,26 @@ export default class RedisClient<
455
455
this . #validateOptions( options )
456
456
this . #options = this . #initiateOptions( options ) ;
457
457
this . #queue = this . #initiateQueue( ) ;
458
- this . #socket = this . #initiateSocket( ) ;
458
+ this . #socket = this . #initiateSocket( this . #options) ;
459
+
460
+ this . #queue. setMovingCallback ( async ( afterMs : number , host : string , port : number ) => {
461
+ console . log ( `Moving to ${ host } :${ port } before ${ afterMs } ms` ) ;
462
+ const oldSocket = this . #socket;
463
+ const newSocket = this . #initiateSocket( {
464
+ ...this . #options,
465
+ socket : {
466
+ ...this . #options?. socket ,
467
+ host,
468
+ port
469
+ }
470
+ } ) ;
471
+ newSocket . on ( 'ready' , ( ) => {
472
+ console . log ( `Connected to ${ host } :${ port } , destroying old socket` ) ;
473
+ oldSocket . destroy ( )
474
+ this . #socket = newSocket
475
+ } ) ;
476
+ await newSocket . connect ( )
477
+ } ) ;
459
478
460
479
if ( options ?. clientSideCache ) {
461
480
if ( options . clientSideCache instanceof ClientSideCacheProvider ) {
@@ -676,8 +695,9 @@ export default class RedisClient<
676
695
return commands ;
677
696
}
678
697
679
- #initiateSocket( ) : RedisSocket {
698
+ #initiateSocket( options ?: RedisClientOptions < M , F , S , RESP , TYPE_MAPPING > ) : RedisSocket {
680
699
const socketInitiator = async ( ) => {
700
+ console . log ( 'Initiator...' ) ;
681
701
const promises = [ ] ,
682
702
chainId = Symbol ( 'Socket Initiator' ) ;
683
703
@@ -707,8 +727,9 @@ export default class RedisClient<
707
727
}
708
728
} ;
709
729
710
- return new RedisSocket ( socketInitiator , this . # options?. socket )
730
+ return new RedisSocket ( socketInitiator , options ?. socket )
711
731
. on ( 'data' , chunk => {
732
+ console . log ( 'Data received' , chunk ) ;
712
733
try {
713
734
this . #queue. decoder . write ( chunk ) ;
714
735
} catch ( err ) {
@@ -717,6 +738,7 @@ export default class RedisClient<
717
738
}
718
739
} )
719
740
. on ( 'error' , err => {
741
+ console . error ( 'Socket error' , err ) ;
720
742
this . emit ( 'error' , err ) ;
721
743
this . #clientSideCache?. onError ( ) ;
722
744
if ( this . #socket. isOpen && ! this . #options?. disableOfflineQueue ) {
@@ -727,6 +749,7 @@ export default class RedisClient<
727
749
} )
728
750
. on ( 'connect' , ( ) => this . emit ( 'connect' ) )
729
751
. on ( 'ready' , ( ) => {
752
+ console . log ( 'Socket ready' ) ;
730
753
this . emit ( 'ready' ) ;
731
754
this . #setPingTimer( ) ;
732
755
this . #maybeScheduleWrite( ) ;
0 commit comments