Upgrade third party plugin (#715)

This commit is contained in:
paisley
2026-03-30 14:46:33 +08:00
committed by GitHub
Unverified
parent 91a86a4a76
commit 47c9560b9e
4 changed files with 84 additions and 59 deletions

View File

@@ -16,6 +16,8 @@ type DeferredRestartContext = RestartDeferralState & {
export class GatewayRestartController {
private deferredRestartPending = false;
private deferredRestartRequestedAt = 0;
private lastRestartCompletedAt = 0;
private restartDebounceTimer: NodeJS.Timeout | null = null;
isRestartDeferred(context: RestartDeferralState): boolean {
@@ -33,6 +35,13 @@ export class GatewayRestartController {
);
}
this.deferredRestartPending = true;
if (this.deferredRestartRequestedAt === 0) {
this.deferredRestartRequestedAt = Date.now();
}
}
recordRestartCompleted(): void {
this.lastRestartCompletedAt = Date.now();
}
flushDeferredRestart(
@@ -55,7 +64,9 @@ export class GatewayRestartController {
return;
}
const requestedAt = this.deferredRestartRequestedAt;
this.deferredRestartPending = false;
this.deferredRestartRequestedAt = 0;
if (action === 'drop') {
logger.info(
`Dropping deferred Gateway restart (${trigger}) because lifecycle already recovered (state=${context.state}, shouldReconnect=${context.shouldReconnect})`,
@@ -63,6 +74,16 @@ export class GatewayRestartController {
return;
}
// If a restart already completed after this deferred request was made,
// the current process is already running with the latest config —
// skip the redundant restart to avoid "just started then restart" loops.
if (requestedAt > 0 && this.lastRestartCompletedAt >= requestedAt) {
logger.info(
`Dropping deferred Gateway restart (${trigger}): a restart already completed after the request (requested=${requestedAt}, completed=${this.lastRestartCompletedAt})`,
);
return;
}
logger.info(`Executing deferred Gateway restart now (${trigger})`);
executeRestart();
}
@@ -87,5 +108,6 @@ export class GatewayRestartController {
resetDeferredRestart(): void {
this.deferredRestartPending = false;
this.deferredRestartRequestedAt = 0;
}
}