From 412aa16ef1d58625d95d3b95841d7a67c455fa75 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 8 Jun 2026 03:57:18 +0000 Subject: [PATCH] fix(cli): add recover() guard to queryRDSInstancesInRegions worker goroutine A panic in one region's worker (nil deref, SDK type assertion failure, slice OOB) crashed the whole CLI process. Add a deferred recover() that logs the panic with region context and lets the remaining goroutines complete, mirroring the pattern applied to Lambda goroutines in PR #859 (issue #672). Closes #997 --- cmd/multi_service_engine_versions.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cmd/multi_service_engine_versions.go b/cmd/multi_service_engine_versions.go index 1e1c96746..6edee9c4c 100644 --- a/cmd/multi_service_engine_versions.go +++ b/cmd/multi_service_engine_versions.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "log" + "runtime" "strings" "sync" "time" @@ -112,6 +113,13 @@ func queryRDSInstancesInRegions(ctx context.Context, awsCfg aws.Config, regions go func(regionName string) { defer wg.Done() defer func() { <-sem }() // release semaphore + defer func() { + if r := recover(); r != nil { + buf := make([]byte, 4096) + n := runtime.Stack(buf, false) + log.Printf("ERROR: panic in region worker (region=%s): %v\n%s", regionName, r, buf[:n]) + } + }() queryRDSInstancesInRegion(ctx, awsCfg, regionName, instanceVersions, &mu) }(aws.ToString(region.RegionName)) }