Merge pull request #1764 from tgstation/FixPortReuse

More logging when the port reuse bug happens
This commit is contained in:
Jordan Dominion
2024-01-08 14:13:49 -05:00
committed by GitHub
5 changed files with 19 additions and 0 deletions
@@ -174,6 +174,11 @@ namespace Tgstation.Server.Host.Controllers
if (model.Port.HasValue && model.Port.Value != current.Port!.Value)
{
Logger.LogTrace(
"Triggering port allocator for DD-I:{instanceId} because model port {modelPort} doesn't match DB port {dbPort}...",
Instance.Id,
model.Port,
current.Port);
var verifiedPort = await portAllocator
.GetAvailablePort(
model.Port.Value,
@@ -175,6 +175,7 @@ namespace Tgstation.Server.Host.Controllers
[ProducesResponseType(typeof(DreamMakerResponse), 200)]
[ProducesResponseType(204)]
[ProducesResponseType(typeof(ErrorMessageResponse), 410)]
#pragma warning disable CA1506 // TODO: Decomplexify
public async ValueTask<IActionResult> Update([FromBody] DreamMakerRequest model, CancellationToken cancellationToken)
{
ArgumentNullException.ThrowIfNull(model);
@@ -208,6 +209,11 @@ namespace Tgstation.Server.Host.Controllers
if (model.ApiValidationPort.Value != hostModel.ApiValidationPort!.Value)
{
Logger.LogTrace(
"Triggering port allocator for DM-I:{instanceId} because model port {modelPort} doesn't match DB port {dbPort}...",
Instance.Id,
model.ApiValidationPort,
hostModel.ApiValidationPort);
var verifiedPort = await portAllocator
.GetAvailablePort(
model.ApiValidationPort.Value,
@@ -248,6 +254,7 @@ namespace Tgstation.Server.Host.Controllers
return await Read(cancellationToken);
}
#pragma warning restore CA1506
/// <summary>
/// Base query for pulling in all required <see cref="CompileJob"/> fields.
@@ -118,6 +118,7 @@ namespace Tgstation.Server.Tests.Live.Instance
{
Assert.IsNotNull(vpTest);
// by alphabetization rules, it should discover api_free here
Console.WriteLine($"PORT REUSE BUG 5: Setting I-{instanceClient.Metadata.Id} DM to {dmPort}");
if (!new PlatformIdentifier().IsWindows)
{
var updatedDM = await dreamMakerClient.Update(new DreamMakerRequest
@@ -137,6 +138,7 @@ namespace Tgstation.Server.Tests.Live.Instance
Assert.AreEqual(dmPort, updatedDM.ApiValidationPort);
}
Console.WriteLine($"PORT REUSE BUG 1: Setting I-{instanceClient.Metadata.Id} DD to {ddPort}");
var updatedDD = await dreamDaemonClient.Update(new DreamDaemonRequest
{
StartupTimeout = 60,
@@ -157,10 +159,12 @@ namespace Tgstation.Server.Tests.Live.Instance
await CheckDreamDaemonPriority(deploymentJobWaitTask, cancellationToken);
Console.WriteLine($"PORT REUSE BUG 2: Expect Conflict, Setting I-{instanceClient.Metadata.Id} DD to {dmPort}");
var t1 = ApiAssert.ThrowsException<ConflictException, DreamDaemonResponse>(() => dreamDaemonClient.Update(new DreamDaemonRequest
{
Port = dmPort,
}, cancellationToken), ErrorCode.PortNotAvailable);
Console.WriteLine($"PORT REUSE BUG 3: Expect Conflict, Setting I-{instanceClient.Metadata.Id} DM to {ddPort}");
var t2 = ApiAssert.ThrowsException<ConflictException, DreamMakerResponse>(() => dreamMakerClient.Update(new DreamMakerRequest
{
ApiValidationPort = ddPort
@@ -164,6 +164,7 @@ namespace Tgstation.Server.Tests.Live.Instance
for (var i = 0; i < 10; ++i)
try
{
global::System.Console.WriteLine($"PORT REUSE BUG 6: Setting I-{instanceClient.Metadata.Id} DM to {dmPort}");
await instanceClient.DreamMaker.Update(new DreamMakerRequest
{
ApiValidationPort = dmPort,
@@ -135,6 +135,7 @@ namespace Tgstation.Server.Tests.Live.Instance
try
{
// Increase startup timeout, disable heartbeats, enable map threads because we've tested without for years
global::System.Console.WriteLine($"PORT REUSE BUG 4: Setting I-{instanceClient.Metadata.Id} DD to {ddPort}");
await instanceClient.DreamDaemon.Update(new DreamDaemonRequest
{
StartupTimeout = 60,
@@ -155,6 +156,7 @@ namespace Tgstation.Server.Tests.Live.Instance
}
}
global::System.Console.WriteLine($"PORT REUSE BUG 4: Expect error. Setting I-{instanceClient.Metadata.Id} DD to 0");
await Task.WhenAll(
UpdateDDSettings(),
CheckByondVersions(),