Fixed: Premature cleanup of completed tasks cache causes tasks to get stuck till reboot.

Mark McDowall 10 years ago committed by Taloth Saldono
parent 4d924688d8
commit 2d25c74758

@ -0,0 +1,55 @@
using System.Collections.Generic;
using System.Linq;
using FluentAssertions;
using Moq;
using NUnit.Framework;
using NzbDrone.Core.Download;
using NzbDrone.Core.Messaging.Commands;
using NzbDrone.Core.Test.Framework;
namespace NzbDrone.Core.Test.Messaging.Commands
{
[TestFixture]
public class CommandQueueManagerFixture : CoreTest<CommandQueueManager>
{
[SetUp]
public void Setup()
{
var id = 0;
var commands = new List<CommandModel>();
Mocker.GetMock<ICommandRepository>()
.Setup(s => s.Insert(It.IsAny<CommandModel>()))
.Returns<CommandModel>(c =>
{
c.Id = id + 1;
commands.Add(c);
id++;
return c;
});
Mocker.GetMock<ICommandRepository>()
.Setup(s => s.Get(It.IsAny<int>()))
.Returns<int>(c =>
{
return commands.SingleOrDefault(e => e.Id == c);
});
}
[Test]
public void should_not_remove_commands_for_five_minutes_after_they_end()
{
var command = Subject.Push<CheckForFinishedDownloadCommand>(new CheckForFinishedDownloadCommand());
Subject.Start(command);
Subject.Complete(command, "All done");
Subject.CleanCommands();
Subject.Get(command.Id).Should().NotBeNull();
Mocker.GetMock<ICommandRepository>()
.Verify(v => v.Get(It.IsAny<int>()), Times.Never());
}
}
}

@ -239,6 +239,7 @@
<Compile Include="MediaFiles\EpisodeImport\Specifications\UpgradeSpecificationFixture.cs" />
<Compile Include="MediaFiles\ImportApprovedEpisodesFixture.cs" />
<Compile Include="MediaFiles\MediaFileRepositoryFixture.cs" />
<Compile Include="Messaging\Commands\CommandQueueManagerFixture.cs" />
<Compile Include="MetadataSource\SkyHook\SkyHookProxySearchFixture.cs" />
<Compile Include="MetadataSource\SearchSeriesComparerFixture.cs" />
<Compile Include="MetadataSource\SkyHook\SkyHookProxyFixture.cs" />

@ -152,7 +152,7 @@ namespace NzbDrone.Core.Messaging.Commands
_logger.Trace("Cleaning up old commands");
_repo.Trim();
var old = _commandCache.Values.Where(c => c.EndedAt < DateTime.UtcNow.AddMinutes(5));
var old = _commandCache.Values.Where(c => c.EndedAt < DateTime.UtcNow.AddMinutes(-5));
foreach (var command in old)
{

Loading…
Cancel
Save