diff --git a/internal/knowledge/db/db.go b/internal/knowledge/db/db.go index 0deae34d1..96a87e62a 100644 --- a/internal/knowledge/db/db.go +++ b/internal/knowledge/db/db.go @@ -7,6 +7,7 @@ import ( "context" "database/sql" "errors" + "fmt" "log/slog" "net/url" "reflect" @@ -102,20 +103,21 @@ func (c Connector) FromSecretRef(ctx context.Context, ref corev1.SecretReference db, err := sql.Open("postgres", dbUrlStr) if err != nil { - panic(err) + return nil, err } - // If the wait time exceeds 10 seconds, we will panic. + // Retry connecting to the database for up to 10 seconds. maxRetries := 10 for i := range maxRetries { - err := db.PingContext(ctx) - if err == nil { + lastErr := db.PingContext(ctx) + if lastErr == nil { break } if i == maxRetries-1 { - panic("giving up connecting to database") + db.Close() + return nil, fmt.Errorf("giving up connecting to database: %w", lastErr) } - slog.Error("failed to connect to database, retrying...", "error", err) + slog.Error("failed to connect to database, retrying...", "error", lastErr) time.Sleep(1 * time.Second) }