From 5ba90e4096af53048110a0a16bf3c6bf347aa5e7 Mon Sep 17 00:00:00 2001 From: Jordan Dominion Date: Thu, 28 Dec 2023 20:33:40 -0500 Subject: [PATCH 1/6] Additional instance manager startup log line --- src/Tgstation.Server.Host/Components/InstanceManager.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Tgstation.Server.Host/Components/InstanceManager.cs b/src/Tgstation.Server.Host/Components/InstanceManager.cs index 613b9d7800..8c97f5c74d 100644 --- a/src/Tgstation.Server.Host/Components/InstanceManager.cs +++ b/src/Tgstation.Server.Host/Components/InstanceManager.cs @@ -658,6 +658,8 @@ namespace Tgstation.Server.Host.Components /// void CheckSystemCompatibility() { + logger.LogDebug("Running as user: {username}", Environment.UserName); + generalConfiguration.CheckCompatibility(logger); using (var systemIdentity = systemIdentityFactory.GetCurrent()) From 43639c37530fa02ce0a1fe6251f79a77e98d6d23 Mon Sep 17 00:00:00 2001 From: Jordan Dominion Date: Thu, 28 Dec 2023 20:34:17 -0500 Subject: [PATCH 2/6] Fix not detecting the correct BYOND cache path in Windows service --- .../Components/Engine/WindowsByondInstaller.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Tgstation.Server.Host/Components/Engine/WindowsByondInstaller.cs b/src/Tgstation.Server.Host/Components/Engine/WindowsByondInstaller.cs index 87424718d5..4bafeb9e05 100644 --- a/src/Tgstation.Server.Host/Components/Engine/WindowsByondInstaller.cs +++ b/src/Tgstation.Server.Host/Components/Engine/WindowsByondInstaller.cs @@ -108,9 +108,13 @@ namespace Tgstation.Server.Host.Components.Engine generalConfiguration = generalConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(generalConfigurationOptions)); sessionConfiguration = sessionConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(sessionConfigurationOptions)); - var documentsDirectory = Environment.GetFolderPath( - Environment.SpecialFolder.MyDocuments, - Environment.SpecialFolderOption.DoNotVerify); + var useServiceSpecialTactics = Environment.Is64BitProcess && Environment.UserName == $"{Environment.MachineName}$"; + + var documentsDirectory = useServiceSpecialTactics + ? Environment.ExpandEnvironmentVariables("%SystemRoot%\\SysWOW64\\config\\systemprofile\\Documents") + : Environment.GetFolderPath( + Environment.SpecialFolder.MyDocuments, + Environment.SpecialFolderOption.DoNotVerify); PathToUserFolder = IOManager.ResolvePath( IOManager.ConcatPath(documentsDirectory, "BYOND")); From 0932d3acb8acbe2398400b461372dd21be7a885b Mon Sep 17 00:00:00 2001 From: Jordan Dominion Date: Thu, 28 Dec 2023 22:26:40 -0500 Subject: [PATCH 3/6] When recursively deleting, attempt to delete every file and throw an `AggregateException` --- .../IO/DefaultIOManager.cs | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/src/Tgstation.Server.Host/IO/DefaultIOManager.cs b/src/Tgstation.Server.Host/IO/DefaultIOManager.cs index cdae64ce44..cf7b616587 100644 --- a/src/Tgstation.Server.Host/IO/DefaultIOManager.cs +++ b/src/Tgstation.Server.Host/IO/DefaultIOManager.cs @@ -46,8 +46,17 @@ namespace Tgstation.Server.Host.IO return; } + List? exceptions = null; foreach (var subDir in dir.EnumerateDirectories()) - NormalizeAndDelete(subDir, cancellationToken); + try + { + NormalizeAndDelete(subDir, cancellationToken); + } + catch (AggregateException ex) + { + exceptions ??= new List(); + exceptions.AddRange(ex.InnerExceptions); + } foreach (var file in dir.EnumerateFiles()) { @@ -57,14 +66,26 @@ namespace Tgstation.Server.Host.IO file.Attributes = FileAttributes.Normal; file.Delete(); } - catch (FileNotFoundException) + catch (Exception ex) { - // has happened before with .dyn.rsc.lk + exceptions ??= new List(); + exceptions.Add(ex); } } cancellationToken.ThrowIfCancellationRequested(); - dir.Delete(true); + try + { + dir.Delete(true); + } + catch (Exception ex) + { + exceptions ??= new List(); + exceptions.Add(ex); + } + + if (exceptions != null) + throw new AggregateException(exceptions); } /// From 7015e4d502651005cb66965dd75ca267c92e8945 Mon Sep 17 00:00:00 2001 From: Jordan Dominion Date: Thu, 28 Dec 2023 22:27:07 -0500 Subject: [PATCH 4/6] Handle exceptions when deleting the BYOND cache folder --- .../Components/Engine/ByondInstallerBase.cs | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/Tgstation.Server.Host/Components/Engine/ByondInstallerBase.cs b/src/Tgstation.Server.Host/Components/Engine/ByondInstallerBase.cs index 02691acfc0..a992073d10 100644 --- a/src/Tgstation.Server.Host/Components/Engine/ByondInstallerBase.cs +++ b/src/Tgstation.Server.Host/Components/Engine/ByondInstallerBase.cs @@ -116,11 +116,23 @@ namespace Tgstation.Server.Host.Components.Engine var byondDir = PathToUserFolder; Logger.LogDebug("Cleaning BYOND cache..."); - var cacheCleanTask = IOManager.DeleteDirectory( - IOManager.ConcatPath( - byondDir, - CacheDirectoryName), - cancellationToken); + async Task CleanDirectorySafe() + { + try + { + await IOManager.DeleteDirectory( + IOManager.ConcatPath( + byondDir, + CacheDirectoryName), + cancellationToken); + } + catch (Exception ex) + { + Logger.LogWarning(ex, "Failed to clean BYOND cache!"); + } + } + + var cacheCleanTask = CleanDirectorySafe(); // Create local cfg directory in case it doesn't exist var localCfgDirectory = IOManager.ConcatPath( From 44c0c7cc8ccad55992c18c2c8fed6813a18241c2 Mon Sep 17 00:00:00 2001 From: Jordan Dominion Date: Thu, 28 Dec 2023 22:28:10 -0500 Subject: [PATCH 5/6] Log the service user on `ServiceLifetime` creation --- src/Tgstation.Server.Host.Service/ServiceLifetime.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Tgstation.Server.Host.Service/ServiceLifetime.cs b/src/Tgstation.Server.Host.Service/ServiceLifetime.cs index f29cd0e919..f7630dc3b3 100644 --- a/src/Tgstation.Server.Host.Service/ServiceLifetime.cs +++ b/src/Tgstation.Server.Host.Service/ServiceLifetime.cs @@ -57,6 +57,8 @@ namespace Tgstation.Server.Host.Service this.logger = logger ?? throw new ArgumentNullException(nameof(logger)); ArgumentNullException.ThrowIfNull(args); + logger.LogDebug("Starting service lifetime as user: {username}", Environment.UserName); + cancellationTokenSource = new CancellationTokenSource(); watchdogTask = RunWatchdog( stopService, From 77a4d276bdb64380723ca3b847620e9e621f0679 Mon Sep 17 00:00:00 2001 From: Jordan Dominion Date: Fri, 29 Dec 2023 15:06:22 -0500 Subject: [PATCH 6/6] Fix DMAPI/Interop Version issue with TGS5 servers --- build/Version.props | 4 ++-- src/DMAPI/tgs.dm | 2 +- src/DMAPI/tgs/v5/__interop_version.dm | 2 +- src/DMAPI/tgs/v5/bridge.dm | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/build/Version.props b/build/Version.props index 32128164a9..d455943bbd 100644 --- a/build/Version.props +++ b/build/Version.props @@ -9,8 +9,8 @@ 7.0.0 13.0.1 15.0.1 - 7.0.0 - 5.7.0 + 7.0.1 + 5.8.0 1.4.1 1.2.1 2.0.0 diff --git a/src/DMAPI/tgs.dm b/src/DMAPI/tgs.dm index c6596ea46c..c561a64ebf 100644 --- a/src/DMAPI/tgs.dm +++ b/src/DMAPI/tgs.dm @@ -1,6 +1,6 @@ // tgstation-server DMAPI -#define TGS_DMAPI_VERSION "7.0.0" +#define TGS_DMAPI_VERSION "7.0.1" // All functions and datums outside this document are subject to change with any version and should not be relied on. diff --git a/src/DMAPI/tgs/v5/__interop_version.dm b/src/DMAPI/tgs/v5/__interop_version.dm index 83420d130a..616263098f 100644 --- a/src/DMAPI/tgs/v5/__interop_version.dm +++ b/src/DMAPI/tgs/v5/__interop_version.dm @@ -1 +1 @@ -"5.7.0" +"5.8.0" diff --git a/src/DMAPI/tgs/v5/bridge.dm b/src/DMAPI/tgs/v5/bridge.dm index 60cbcbfb7d..a0ab359876 100644 --- a/src/DMAPI/tgs/v5/bridge.dm +++ b/src/DMAPI/tgs/v5/bridge.dm @@ -48,7 +48,7 @@ var/json = CreateBridgeData(command, data, TRUE) var/encoded_json = url_encode(json) - var/api_prefix = interop_version.minor >= 7 ? "api/" : "" + var/api_prefix = interop_version.minor >= 8 ? "api/" : "" var/url = "http://127.0.0.1:[server_port]/[api_prefix]Bridge?[DMAPI5_BRIDGE_DATA]=[encoded_json]" return url