@@ -5,6 +5,7 @@ import RedisSocket from "./socket";
5
5
import { RedisArgument } from "../.." ;
6
6
import { isIP } from "net" ;
7
7
import { lookup } from "dns/promises" ;
8
+ import assert from "node:assert" ;
8
9
9
10
export const MAINTENANCE_EVENTS = {
10
11
PAUSE_WRITING : "pause-writing" ,
@@ -33,6 +34,7 @@ export const dbgMaintenance = (...args: any[]) => {
33
34
export default class EnterpriseMaintenanceManager extends EventEmitter {
34
35
#commandsQueue: RedisCommandsQueue ;
35
36
#options: RedisClientOptions ;
37
+ #isMaintenance = 0 ;
36
38
37
39
static async getHandshakeCommand ( tls : boolean , host : string ) : Promise < Array < RedisArgument > > {
38
40
const movingEndpointType = await determineEndpoint ( tls , host ) ;
@@ -104,7 +106,6 @@ export default class EnterpriseMaintenanceManager extends EventEmitter {
104
106
host,
105
107
port,
106
108
} ) ;
107
- //todo
108
109
newSocket . setMaintenanceTimeout ( ) ;
109
110
dbgMaintenance ( `Connecting to new socket: ${ host } :${ port } ` ) ;
110
111
await newSocket . connect ( ) ;
@@ -123,6 +124,12 @@ export default class EnterpriseMaintenanceManager extends EventEmitter {
123
124
} ;
124
125
125
126
#onMigrating = async ( ) => {
127
+ this . #isMaintenance++ ;
128
+ if ( this . #isMaintenance > 1 ) {
129
+ dbgMaintenance ( `Timeout relaxation already done` ) ;
130
+ return ;
131
+ } ;
132
+
126
133
this . #commandsQueue. inMaintenance = true ;
127
134
this . #commandsQueue. setMaintenanceCommandTimeout (
128
135
this . #options. gracefulMaintenance ?. relaxedCommandTimeout ,
@@ -135,6 +142,13 @@ export default class EnterpriseMaintenanceManager extends EventEmitter {
135
142
} ;
136
143
137
144
#onMigrated = async ( ) => {
145
+ this . #isMaintenance-- ;
146
+ assert ( this . #isMaintenance >= 0 ) ;
147
+ if ( this . #isMaintenance > 0 ) {
148
+ dbgMaintenance ( `Not ready to unrelax timeouts yet` ) ;
149
+ return ;
150
+ }
151
+
138
152
this . #commandsQueue. inMaintenance = false ;
139
153
this . #commandsQueue. setMaintenanceCommandTimeout ( undefined ) ;
140
154
0 commit comments