diff --git a/build/Version.props b/build/Version.props
index 7c296967f1..014fb98062 100644
--- a/build/Version.props
+++ b/build/Version.props
@@ -4,7 +4,7 @@
4.15.6
- 4.0.0
+ 4.1.0
9.3.0
9.3.1
10.4.1
diff --git a/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs b/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs
index f7c04fb5f7..64750b859e 100644
--- a/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs
+++ b/src/Tgstation.Server.Host/Components/Deployment/DreamMaker.cs
@@ -7,6 +7,7 @@ using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
using Tgstation.Server.Api.Models;
using Tgstation.Server.Api.Models.Internal;
@@ -16,6 +17,7 @@ using Tgstation.Server.Host.Components.Deployment.Remote;
using Tgstation.Server.Host.Components.Events;
using Tgstation.Server.Host.Components.Repository;
using Tgstation.Server.Host.Components.Session;
+using Tgstation.Server.Host.Configuration;
using Tgstation.Server.Host.Database;
using Tgstation.Server.Host.Extensions;
using Tgstation.Server.Host.IO;
@@ -93,6 +95,11 @@ namespace Tgstation.Server.Host.Components.Deployment
///
readonly ILogger logger;
+ ///
+ /// The for .
+ ///
+ readonly SessionConfiguration sessionConfiguration;
+
///
/// The belongs to.
///
@@ -147,6 +154,7 @@ namespace Tgstation.Server.Host.Components.Deployment
/// The value of .
/// The value of .
/// The value of .
+ /// The containing the value of .
/// The value of .
public DreamMaker(
IByondManager byond,
@@ -160,6 +168,7 @@ namespace Tgstation.Server.Host.Components.Deployment
IRepositoryManager repositoryManager,
IRemoteDeploymentManagerFactory remoteDeploymentManagerFactory,
ILogger logger,
+ IOptions sessionConfigurationOptions,
Api.Models.Instance metadata)
{
this.byond = byond ?? throw new ArgumentNullException(nameof(byond));
@@ -173,6 +182,7 @@ namespace Tgstation.Server.Host.Components.Deployment
this.repositoryManager = repositoryManager ?? throw new ArgumentNullException(nameof(repositoryManager));
this.remoteDeploymentManagerFactory = remoteDeploymentManagerFactory ?? throw new ArgumentNullException(nameof(remoteDeploymentManagerFactory));
this.logger = logger ?? throw new ArgumentNullException(nameof(logger));
+ sessionConfiguration = sessionConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(sessionConfigurationOptions));
this.metadata = metadata ?? throw new ArgumentNullException(nameof(metadata));
deploymentLock = new object();
@@ -825,6 +835,10 @@ namespace Tgstation.Server.Host.Components.Deployment
true,
true,
true);
+
+ if (sessionConfiguration.LowPriorityDeploymentProcesses)
+ dm.AdjustPriority(false);
+
int exitCode;
using (cancellationToken.Register(() => dm.Terminate()))
exitCode = await dm.Lifetime.ConfigureAwait(false);
diff --git a/src/Tgstation.Server.Host/Components/Session/SessionControllerFactory.cs b/src/Tgstation.Server.Host/Components/Session/SessionControllerFactory.cs
index 7c5f331a04..733bcdb704 100644
--- a/src/Tgstation.Server.Host/Components/Session/SessionControllerFactory.cs
+++ b/src/Tgstation.Server.Host/Components/Session/SessionControllerFactory.cs
@@ -7,6 +7,7 @@ using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
using Tgstation.Server.Api;
using Tgstation.Server.Api.Models;
@@ -17,6 +18,7 @@ using Tgstation.Server.Host.Components.Deployment;
using Tgstation.Server.Host.Components.Events;
using Tgstation.Server.Host.Components.Interop;
using Tgstation.Server.Host.Components.Interop.Bridge;
+using Tgstation.Server.Host.Configuration;
using Tgstation.Server.Host.Core;
using Tgstation.Server.Host.Extensions;
using Tgstation.Server.Host.IO;
@@ -99,6 +101,11 @@ namespace Tgstation.Server.Host.Components.Session
///
readonly ILogger logger;
+ ///
+ /// The for the .
+ ///
+ readonly SessionConfiguration sessionConfiguration;
+
///
/// The for the .
///
@@ -170,7 +177,8 @@ namespace Tgstation.Server.Host.Components.Session
/// The value of .
/// The value of .
/// The value of .
- /// The value of .
+ /// The containing the value of .
+ /// The value of .
public SessionControllerFactory(
IProcessExecutor processExecutor,
IByondManager byond,
@@ -183,9 +191,10 @@ namespace Tgstation.Server.Host.Components.Session
IPlatformIdentifier platformIdentifier,
IBridgeRegistrar bridgeRegistrar,
IServerPortProvider serverPortProvider,
- EventConsumer eventConsumer,
+ IEventConsumer eventConsumer,
ILoggerFactory loggerFactory,
ILogger logger,
+ IOptions sessionConfigurationOptions,
Api.Models.Instance instance)
{
this.processExecutor = processExecutor ?? throw new ArgumentNullException(nameof(processExecutor));
@@ -193,7 +202,6 @@ namespace Tgstation.Server.Host.Components.Session
this.topicClientFactory = topicClientFactory ?? throw new ArgumentNullException(nameof(topicClientFactory));
this.cryptographySuite = cryptographySuite ?? throw new ArgumentNullException(nameof(cryptographySuite));
this.assemblyInformationProvider = assemblyInformationProvider ?? throw new ArgumentNullException(nameof(assemblyInformationProvider));
- this.instance = instance ?? throw new ArgumentNullException(nameof(instance));
this.ioManager = ioManager ?? throw new ArgumentNullException(nameof(ioManager));
this.chat = chat ?? throw new ArgumentNullException(nameof(chat));
this.networkPromptReaper = networkPromptReaper ?? throw new ArgumentNullException(nameof(networkPromptReaper));
@@ -203,6 +211,8 @@ namespace Tgstation.Server.Host.Components.Session
this.eventConsumer = eventConsumer ?? throw new ArgumentNullException(nameof(eventConsumer));
this.loggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory));
this.logger = logger ?? throw new ArgumentNullException(nameof(logger));
+ sessionConfiguration = sessionConfigurationOptions?.Value ?? throw new ArgumentNullException(nameof(sessionConfigurationOptions));
+ this.instance = instance ?? throw new ArgumentNullException(nameof(instance));
}
///
@@ -380,6 +390,14 @@ namespace Tgstation.Server.Host.Components.Session
false,
apiValidate);
+ if (apiValidate)
+ {
+ if (sessionConfiguration.HighPriorityLiveDreamDaemon)
+ process.AdjustPriority(true);
+ }
+ else if (sessionConfiguration.LowPriorityDeploymentProcesses)
+ process.AdjustPriority(false);
+
// If this isnt a staging DD (From a Deployment), fire off an event
if (!apiValidate)
await eventConsumer.HandleEvent(
diff --git a/src/Tgstation.Server.Host/Configuration/ControlPanelConfiguration.cs b/src/Tgstation.Server.Host/Configuration/ControlPanelConfiguration.cs
index b58747f24b..e3a5d3a031 100644
--- a/src/Tgstation.Server.Host/Configuration/ControlPanelConfiguration.cs
+++ b/src/Tgstation.Server.Host/Configuration/ControlPanelConfiguration.cs
@@ -1,6 +1,4 @@
-using System.Collections.Generic;
-
-namespace Tgstation.Server.Host.Configuration
+namespace Tgstation.Server.Host.Configuration
{
///
/// Configuration options for the web control panel.
diff --git a/src/Tgstation.Server.Host/Configuration/SessionConfiguration.cs b/src/Tgstation.Server.Host/Configuration/SessionConfiguration.cs
new file mode 100644
index 0000000000..a65090f773
--- /dev/null
+++ b/src/Tgstation.Server.Host/Configuration/SessionConfiguration.cs
@@ -0,0 +1,23 @@
+namespace Tgstation.Server.Host.Configuration
+{
+ ///
+ /// Configuration options for the game sessions.
+ ///
+ sealed class SessionConfiguration
+ {
+ ///
+ /// The key for the the resides in.
+ ///
+ public const string Section = "Session";
+
+ ///
+ /// If the public DreamDaemon instances are set to be above normal priority processes.
+ ///
+ public bool HighPriorityLiveDreamDaemon { get; set; }
+
+ ///
+ /// If the deployment DreamMaker and DreamDaemon instances are set to be below normal priority processes.
+ ///
+ public bool LowPriorityDeploymentProcesses { get; set; }
+ }
+}
diff --git a/src/Tgstation.Server.Host/Core/Application.cs b/src/Tgstation.Server.Host/Core/Application.cs
index f79766ff24..30764018f4 100644
--- a/src/Tgstation.Server.Host/Core/Application.cs
+++ b/src/Tgstation.Server.Host/Core/Application.cs
@@ -120,6 +120,7 @@ namespace Tgstation.Server.Host.Core
services.UseStandardConfig(Configuration);
services.UseStandardConfig(Configuration);
services.UseStandardConfig(Configuration);
+ services.UseStandardConfig(Configuration);
// enable options which give us config reloading
services.AddOptions();
diff --git a/src/Tgstation.Server.Host/appsettings.yml b/src/Tgstation.Server.Host/appsettings.yml
index 61040477a7..ebab1c2470 100644
--- a/src/Tgstation.Server.Host/appsettings.yml
+++ b/src/Tgstation.Server.Host/appsettings.yml
@@ -11,6 +11,9 @@ General:
InstanceLimit: 10
ValidInstancePaths:
HostApiDocumentation: false
+Session:
+ HighPriorityLiveDreamDaemon: false
+ LowPriorityDeploymentProcesses: true
FileLogging:
Directory:
Disable: false