Skip to content

Commit 49d6920

Browse files
authored
Merge branch 'main' into fix/tags_array_infinite_rerenders
2 parents 5307cb9 + 255ea0a commit 49d6920

File tree

1 file changed

+35
-7
lines changed

1 file changed

+35
-7
lines changed

apps/supervisor/src/services/failedPodHandler.ts

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ export class FailedPodHandler {
2525

2626
private readonly informer: Informer<V1Pod>;
2727
private readonly reconnectIntervalMs: number;
28+
private reconnecting = false;
2829

2930
// Metrics
3031
private readonly register: Registry;
@@ -250,21 +251,48 @@ export class FailedPodHandler {
250251
}
251252

252253
private makeOnError(informerName: string) {
253-
return () => this.onError(informerName);
254+
return (err?: unknown) => this.onError(informerName, err);
254255
}
255256

256-
private async onError(informerName: string) {
257+
private async onError(informerName: string, err?: unknown) {
257258
if (!this.isRunning) {
258259
this.logger.warn("onError: informer not running");
259260
return;
260261
}
261262

262-
this.logger.error("error event fired", { informerName });
263-
this.informerEventsTotal.inc({ namespace: this.namespace, verb: "error" });
263+
// Guard against multiple simultaneous reconnections
264+
if (this.reconnecting) {
265+
this.logger.debug("onError: reconnection already in progress, skipping", {
266+
informerName,
267+
});
268+
return;
269+
}
264270

265-
// Reconnect on errors
266-
await setTimeout(this.reconnectIntervalMs);
267-
await this.informer.start();
271+
this.reconnecting = true;
272+
273+
try {
274+
const error = err instanceof Error ? err : undefined;
275+
this.logger.error("error event fired", {
276+
informerName,
277+
error: error?.message,
278+
errorType: error?.name,
279+
});
280+
this.informerEventsTotal.inc({ namespace: this.namespace, verb: "error" });
281+
282+
// Reconnect on errors
283+
await setTimeout(this.reconnectIntervalMs);
284+
await this.informer.start();
285+
} catch (handlerError) {
286+
const error = handlerError instanceof Error ? handlerError : undefined;
287+
this.logger.error("onError: reconnection attempt failed", {
288+
informerName,
289+
error: error?.message,
290+
errorType: error?.name,
291+
errorStack: error?.stack,
292+
});
293+
} finally {
294+
this.reconnecting = false;
295+
}
268296
}
269297

270298
private makeOnConnect(informerName: string) {

0 commit comments

Comments
 (0)