From 3c8d3b00f85f2e4f727e596495e3afa1382034d8 Mon Sep 17 00:00:00 2001 From: Qstick Date: Mon, 10 Oct 2022 22:30:00 -0500 Subject: [PATCH] New: Retry Postgres connection 3 times (with 5 second sleep) on Startup (cherry picked from commit 3e700b63c26b247fcac83428ba79e53c88f797ff) (cherry picked from commit dbca393772d7f558b45a780a6767187bf5900a23) --- src/NzbDrone.Core/Datastore/DbFactory.cs | 32 ++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/NzbDrone.Core/Datastore/DbFactory.cs b/src/NzbDrone.Core/Datastore/DbFactory.cs index 9fa0181d9..583494009 100644 --- a/src/NzbDrone.Core/Datastore/DbFactory.cs +++ b/src/NzbDrone.Core/Datastore/DbFactory.cs @@ -1,5 +1,6 @@ using System; using System.Data.SQLite; +using System.Net.Sockets; using NLog; using NzbDrone.Common.Disk; using NzbDrone.Common.EnvironmentInfo; @@ -113,6 +114,37 @@ namespace NzbDrone.Core.Datastore throw new CorruptDatabaseException("Database file: {0} is corrupt, restore from backup if available. See: https://wiki.servarr.com/lidarr/faq#i-am-getting-an-error-database-disk-image-is-malformed", e, fileName); } + catch (NpgsqlException e) + { + if (e.InnerException is SocketException) + { + var retryCount = 3; + + while (true) + { + Logger.Error(e, "Failure to connect to Postgres DB, {0} retries remaining", retryCount); + + try + { + _migrationController.Migrate(connectionString, migrationContext); + } + catch (Exception ex) + { + if (--retryCount > 0) + { + System.Threading.Thread.Sleep(5000); + continue; + } + + throw new RadarrStartupException(ex, "Error creating main database"); + } + } + } + else + { + throw new RadarrStartupException(e, "Error creating main database"); + } + } catch (Exception e) { throw new LidarrStartupException(e, "Error creating main database");