Monitoring provider will no longer throw on Ensure priority.
Fix: Issue where an uncritical subsystem could crash the app.
This commit is contained in:
parent
83089457d8
commit
1787852360
|
@ -1,4 +1,5 @@
|
||||||
using System.Diagnostics;
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
||||||
using FizzWare.NBuilder;
|
using FizzWare.NBuilder;
|
||||||
|
@ -8,7 +9,6 @@ using NzbDrone.Common;
|
||||||
using NzbDrone.Common.Model;
|
using NzbDrone.Common.Model;
|
||||||
using NzbDrone.Providers;
|
using NzbDrone.Providers;
|
||||||
using NzbDrone.Test.Common;
|
using NzbDrone.Test.Common;
|
||||||
using NzbDrone.Test.Common.AutoMoq;
|
|
||||||
|
|
||||||
namespace NzbDrone.App.Test
|
namespace NzbDrone.App.Test
|
||||||
{
|
{
|
||||||
|
@ -19,17 +19,21 @@ namespace NzbDrone.App.Test
|
||||||
[Test]
|
[Test]
|
||||||
public void Ensure_priority_doesnt_fail_on_invalid_iis_proccess_id()
|
public void Ensure_priority_doesnt_fail_on_invalid_iis_proccess_id()
|
||||||
{
|
{
|
||||||
var processMock = Mocker.GetMock<ProcessProvider>();
|
Mocker.GetMock<ProcessProvider>().Setup(c => c.GetCurrentProcess())
|
||||||
processMock.Setup(c => c.GetCurrentProcess())
|
|
||||||
.Returns(Builder<ProcessInfo>.CreateNew().With(c => c.Priority == ProcessPriorityClass.Normal).Build());
|
.Returns(Builder<ProcessInfo>.CreateNew().With(c => c.Priority == ProcessPriorityClass.Normal).Build());
|
||||||
|
|
||||||
processMock.Setup(c => c.GetProcessById(It.IsAny<int>())).Returns((ProcessInfo)null);
|
Mocker.GetMock<ProcessProvider>().Setup(c => c.GetProcessById(It.IsAny<int>())).Returns((ProcessInfo)null);
|
||||||
|
|
||||||
var subject = Mocker.Resolve<MonitoringProvider>();
|
Mocker.Resolve<MonitoringProvider>().EnsurePriority(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void Ensure_should_log_warn_exception_rather_than_throw()
|
||||||
|
{
|
||||||
|
Mocker.GetMock<ProcessProvider>().Setup(c => c.GetCurrentProcess()).Throws<InvalidOperationException>();
|
||||||
|
Mocker.Resolve<MonitoringProvider>().EnsurePriority(null);
|
||||||
|
|
||||||
//Act
|
ExceptionVerification.ExpectedWarns(1);
|
||||||
subject.EnsurePriority(null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,9 @@
|
||||||
<Reference Include="Ninject">
|
<Reference Include="Ninject">
|
||||||
<HintPath>..\packages\Ninject.2.2.1.4\lib\net40-Full\Ninject.dll</HintPath>
|
<HintPath>..\packages\Ninject.2.2.1.4\lib\net40-Full\Ninject.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="NLog, Version=2.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\NLog.2.0.0.2000\lib\net40\NLog.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="nunit.framework, Version=2.6.0.12051, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
|
<Reference Include="nunit.framework, Version=2.6.0.12051, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>..\packages\NUnit.2.6.0.12054\lib\nunit.framework.dll</HintPath>
|
<HintPath>..\packages\NUnit.2.6.0.12054\lib\nunit.framework.dll</HintPath>
|
||||||
|
|
|
@ -4,5 +4,6 @@
|
||||||
<package id="Moq" version="4.0.10827" />
|
<package id="Moq" version="4.0.10827" />
|
||||||
<package id="NBuilder" version="3.0.1.1" />
|
<package id="NBuilder" version="3.0.1.1" />
|
||||||
<package id="Ninject" version="2.2.1.4" />
|
<package id="Ninject" version="2.2.1.4" />
|
||||||
|
<package id="NLog" version="2.0.0.2000" />
|
||||||
<package id="NUnit" version="2.6.0.12054" />
|
<package id="NUnit" version="2.6.0.12054" />
|
||||||
</packages>
|
</packages>
|
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 894 B |
|
@ -44,7 +44,7 @@ namespace NzbDrone.Providers
|
||||||
|
|
||||||
AppDomain.CurrentDomain.ProcessExit += ProgramExited;
|
AppDomain.CurrentDomain.ProcessExit += ProgramExited;
|
||||||
AppDomain.CurrentDomain.DomainUnload += ProgramExited;
|
AppDomain.CurrentDomain.DomainUnload += ProgramExited;
|
||||||
|
|
||||||
_processPriorityCheckTimer = new Timer(EnsurePriority);
|
_processPriorityCheckTimer = new Timer(EnsurePriority);
|
||||||
_processPriorityCheckTimer.Change(TimeSpan.FromSeconds(15), TimeSpan.FromMinutes(30));
|
_processPriorityCheckTimer.Change(TimeSpan.FromSeconds(15), TimeSpan.FromMinutes(30));
|
||||||
|
|
||||||
|
@ -55,17 +55,24 @@ namespace NzbDrone.Providers
|
||||||
|
|
||||||
public virtual void EnsurePriority(object sender)
|
public virtual void EnsurePriority(object sender)
|
||||||
{
|
{
|
||||||
var currentProcess = _processProvider.GetCurrentProcess();
|
try
|
||||||
if (currentProcess.Priority != ProcessPriorityClass.Normal)
|
|
||||||
{
|
{
|
||||||
_processProvider.SetPriority(currentProcess.Id, ProcessPriorityClass.Normal);
|
var currentProcess = _processProvider.GetCurrentProcess();
|
||||||
}
|
if (currentProcess.Priority != ProcessPriorityClass.Normal)
|
||||||
|
{
|
||||||
|
_processProvider.SetPriority(currentProcess.Id, ProcessPriorityClass.Normal);
|
||||||
|
}
|
||||||
|
|
||||||
var iisProcess = _processProvider.GetProcessById(_iisProvider.IISProcessId);
|
var iisProcess = _processProvider.GetProcessById(_iisProvider.IISProcessId);
|
||||||
if (iisProcess != null && iisProcess.Priority != ProcessPriorityClass.Normal &&
|
if (iisProcess != null && iisProcess.Priority != ProcessPriorityClass.Normal &&
|
||||||
iisProcess.Priority != ProcessPriorityClass.AboveNormal)
|
iisProcess.Priority != ProcessPriorityClass.AboveNormal)
|
||||||
|
{
|
||||||
|
_processProvider.SetPriority(iisProcess.Id, ProcessPriorityClass.Normal);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
_processProvider.SetPriority(iisProcess.Id, ProcessPriorityClass.Normal);
|
logger.WarnException("Unable to verify priority", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue