mirror of
https://github.com/tgstation/tgstation-server.git
synced 2026-07-14 09:33:22 +01:00
Merge pull request #1764 from tgstation/FixPortReuse
More logging when the port reuse bug happens
This commit is contained in:
@@ -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(),
|
||||
|
||||
Reference in New Issue
Block a user