From a4ade2b78a9b5cb76ae88919f57dc2a05b99a409 Mon Sep 17 00:00:00 2001 From: Jordan Brown Date: Thu, 31 Dec 2020 23:22:49 -0500 Subject: [PATCH] Fix race condition between swarm server startup and health checking --- src/Tgstation.Server.Host/Swarm/SwarmService.cs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/Tgstation.Server.Host/Swarm/SwarmService.cs b/src/Tgstation.Server.Host/Swarm/SwarmService.cs index 4ed9ae94fd..3cf7efc2b4 100644 --- a/src/Tgstation.Server.Host/Swarm/SwarmService.cs +++ b/src/Tgstation.Server.Host/Swarm/SwarmService.cs @@ -41,6 +41,11 @@ namespace Tgstation.Server.Host.Swarm /// const int UpdateCommitTimeoutMinutes = 10; + /// + /// Number of seconds between triggering and a health check being performed. + /// + const int SecondsToDelayForcedHealthChecks = 15; + /// /// See for the swarm system. /// @@ -1060,7 +1065,13 @@ namespace Tgstation.Server.Host.Swarm await awakeningTask.ConfigureAwait(false); - if (!swarmController && !nextForceHealthCheckTask.IsCompleted) + if (nextForceHealthCheckTask.IsCompleted && swarmController) + { + // Intentionally wait a few seconds for the other server to start up before interogating it + logger.LogTrace("Next health check triggering in {0}s...", SecondsToDelayForcedHealthChecks); + await asyncDelayer.Delay(TimeSpan.FromSeconds(SecondsToDelayForcedHealthChecks), cancellationToken); + } + else if (!swarmController && !nextForceHealthCheckTask.IsCompleted) { if (!lastControllerHealthCheck.HasValue) {