Skip unknown/removed commands still queued in the database

This commit is contained in:
Taloth Saldono 2020-05-03 16:59:37 +02:00 committed by ta264
parent edd278a131
commit e39fee9209
5 changed files with 50 additions and 3 deletions

View file

@ -3,6 +3,7 @@
using NUnit.Framework;
using NzbDrone.Core.Books.Commands;
using NzbDrone.Core.Datastore.Converters;
using NzbDrone.Core.Messaging.Commands;
using NzbDrone.Core.Test.Framework;
namespace NzbDrone.Core.Test.Datastore.Converters
@ -42,6 +43,14 @@ public void should_return_command_when_getting_json_from_db()
Subject.Parse(data).Should().BeOfType<RefreshAuthorCommand>();
}
[Test]
public void should_return_unknown_command_when_getting_json_from_db()
{
var data = "{\"name\": \"EnsureMediaCovers\"}";
Subject.Parse(data).Should().BeOfType<UnknownCommand>();
}
[Test]
public void should_return_null_for_null_value_when_getting_from_db()
{

View file

@ -27,7 +27,11 @@ public override Command Parse(object value)
if (impType == null)
{
throw new CommandNotFoundException(contract);
var result = JsonSerializer.Deserialize<UnknownCommand>(stringValue, SerializerSettings);
result.ContractName = contract;
return result;
}
return (Command)JsonSerializer.Deserialize(stringValue, impType, SerializerSettings);

View file

@ -69,8 +69,7 @@ private void ExecuteCommand<TCommand>(TCommand command, CommandModel commandMode
try
{
var handlerContract = typeof(IExecute<>).MakeGenericType(command.GetType());
handler = (IExecute<TCommand>)_serviceFactory.Build(handlerContract);
handler = (IExecute<TCommand>)_serviceFactory.Build(typeof(IExecute<TCommand>));
_logger.Trace("{0} -> {1}", command.GetType().Name, handler.GetType().Name);

View file

@ -0,0 +1,11 @@
namespace NzbDrone.Core.Messaging.Commands
{
public class UnknownCommand : Command
{
public override bool SendUpdatesToClient => false;
public override string CompletionMessage => "Skipped";
public string ContractName { get; set; }
}
}

View file

@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NLog;
namespace NzbDrone.Core.Messaging.Commands
{
public class UnknownCommandExecutor : IExecute<UnknownCommand>
{
private readonly Logger _logger;
public UnknownCommandExecutor(Logger logger)
{
_logger = logger;
}
public void Execute(UnknownCommand message)
{
_logger.Debug("Ignoring unknown command {0}", message.ContractName);
}
}
}