Fixed: Don't lock command queue if updating is disabled

This commit is contained in:
Qstick 2020-04-23 18:37:21 -04:00 committed by Taloth
parent 1199ae4e4f
commit 4f7e00bdc4
3 changed files with 56 additions and 25 deletions

View File

@ -63,7 +63,7 @@ namespace NzbDrone.Core.Jobs
{ {
new ScheduledTask{ Interval = 1, TypeName = typeof(RefreshMonitoredDownloadsCommand).FullName}, new ScheduledTask{ Interval = 1, TypeName = typeof(RefreshMonitoredDownloadsCommand).FullName},
new ScheduledTask{ Interval = 5, TypeName = typeof(MessagingCleanupCommand).FullName}, new ScheduledTask{ Interval = 5, TypeName = typeof(MessagingCleanupCommand).FullName},
new ScheduledTask{ Interval = 6*60, TypeName = typeof(ApplicationUpdateCommand).FullName}, new ScheduledTask{ Interval = 6*60, TypeName = typeof(ApplicationUpdateCheckCommand).FullName},
new ScheduledTask{ Interval = 3*60, TypeName = typeof(UpdateSceneMappingCommand).FullName}, new ScheduledTask{ Interval = 3*60, TypeName = typeof(UpdateSceneMappingCommand).FullName},
new ScheduledTask{ Interval = 6*60, TypeName = typeof(CheckHealthCommand).FullName}, new ScheduledTask{ Interval = 6*60, TypeName = typeof(CheckHealthCommand).FullName},
new ScheduledTask{ Interval = 12*60, TypeName = typeof(RefreshSeriesCommand).FullName}, new ScheduledTask{ Interval = 12*60, TypeName = typeof(RefreshSeriesCommand).FullName},

View File

@ -0,0 +1,11 @@
using NzbDrone.Core.Messaging.Commands;
namespace NzbDrone.Core.Update.Commands
{
public class ApplicationUpdateCheckCommand : Command
{
public override bool SendUpdatesToClient => true;
public override string CompletionMessage => null;
}
}

View File

@ -20,12 +20,12 @@ using NzbDrone.Core.Update.Commands;
namespace NzbDrone.Core.Update namespace NzbDrone.Core.Update
{ {
public class InstallUpdateService : IExecute<ApplicationUpdateCommand>, IHandle<ApplicationStartingEvent> public class InstallUpdateService : IExecute<ApplicationUpdateCommand>, IExecute<ApplicationUpdateCheckCommand>, IHandle<ApplicationStartingEvent>
{ {
private readonly ICheckUpdateService _checkUpdateService; private readonly ICheckUpdateService _checkUpdateService;
private readonly Logger _logger; private readonly Logger _logger;
private readonly IAppFolderInfo _appFolderInfo; private readonly IAppFolderInfo _appFolderInfo;
private readonly IManageCommandQueue _commandQueueManager;
private readonly IDiskProvider _diskProvider; private readonly IDiskProvider _diskProvider;
private readonly IDiskTransferService _diskTransferService; private readonly IDiskTransferService _diskTransferService;
private readonly IHttpClient _httpClient; private readonly IHttpClient _httpClient;
@ -41,6 +41,7 @@ namespace NzbDrone.Core.Update
public InstallUpdateService(ICheckUpdateService checkUpdateService, public InstallUpdateService(ICheckUpdateService checkUpdateService,
IAppFolderInfo appFolderInfo, IAppFolderInfo appFolderInfo,
IManageCommandQueue commandQueueManager,
IDiskProvider diskProvider, IDiskProvider diskProvider,
IDiskTransferService diskTransferService, IDiskTransferService diskTransferService,
IHttpClient httpClient, IHttpClient httpClient,
@ -60,6 +61,7 @@ namespace NzbDrone.Core.Update
} }
_checkUpdateService = checkUpdateService; _checkUpdateService = checkUpdateService;
_appFolderInfo = appFolderInfo; _appFolderInfo = appFolderInfo;
_commandQueueManager = commandQueueManager;
_diskProvider = diskProvider; _diskProvider = diskProvider;
_diskTransferService = diskTransferService; _diskTransferService = diskTransferService;
_httpClient = httpClient; _httpClient = httpClient;
@ -206,7 +208,7 @@ namespace NzbDrone.Core.Update
} }
} }
public void Execute(ApplicationUpdateCommand message) private UpdatePackage GetUpdatePackage(CommandTrigger updateTrigger)
{ {
_logger.ProgressDebug("Checking for updates"); _logger.ProgressDebug("Checking for updates");
@ -215,13 +217,13 @@ namespace NzbDrone.Core.Update
if (latestAvailable == null) if (latestAvailable == null)
{ {
_logger.ProgressDebug("No update available"); _logger.ProgressDebug("No update available");
return; return null;
} }
if (OsInfo.IsNotWindows && !_configFileProvider.UpdateAutomatically && message.Trigger != CommandTrigger.Manual) if (OsInfo.IsNotWindows && !_configFileProvider.UpdateAutomatically && updateTrigger != CommandTrigger.Manual)
{ {
_logger.ProgressDebug("Auto-update not enabled, not installing available update"); _logger.ProgressDebug("Auto-update not enabled, not installing available update");
return; return null;
} }
@ -229,33 +231,51 @@ namespace NzbDrone.Core.Update
if (_configFileProvider.UpdateMechanism == UpdateMechanism.BuiltIn && _deploymentInfoProvider.IsExternalUpdateMechanism) if (_configFileProvider.UpdateMechanism == UpdateMechanism.BuiltIn && _deploymentInfoProvider.IsExternalUpdateMechanism)
{ {
_logger.ProgressDebug("Built-In updater disabled, please use {0} to install", _deploymentInfoProvider.PackageUpdateMechanism); _logger.ProgressDebug("Built-In updater disabled, please use {0} to install", _deploymentInfoProvider.PackageUpdateMechanism);
return; return null;
} }
else if (_configFileProvider.UpdateMechanism != UpdateMechanism.Script && _deploymentInfoProvider.IsExternalUpdateMechanism) else if (_configFileProvider.UpdateMechanism != UpdateMechanism.Script && _deploymentInfoProvider.IsExternalUpdateMechanism)
{ {
_logger.ProgressDebug("Update available, please use {0} to install", _deploymentInfoProvider.PackageUpdateMechanism); _logger.ProgressDebug("Update available, please use {0} to install", _deploymentInfoProvider.PackageUpdateMechanism);
return; return null;
} }
try return latestAvailable;
}
public void Execute(ApplicationUpdateCheckCommand message)
{
if (GetUpdatePackage(message.Trigger) != null)
{ {
InstallUpdate(latestAvailable); _commandQueueManager.Push(new ApplicationUpdateCommand(), trigger: message.Trigger);
_logger.ProgressDebug("Restarting Sonarr to apply updates");
} }
catch (UpdateFolderNotWritableException ex) }
public void Execute(ApplicationUpdateCommand message)
{
var latestAvailable = GetUpdatePackage(message.Trigger);
if (latestAvailable != null)
{ {
_logger.Error(ex, "Update process failed"); try
throw new CommandFailedException("Startup folder not writable by user '{0}'", ex, Environment.UserName); {
} InstallUpdate(latestAvailable);
catch (UpdateVerificationFailedException ex) _logger.ProgressDebug("Restarting Sonarr to apply updates");
{ }
_logger.Error(ex, "Update process failed"); catch (UpdateFolderNotWritableException ex)
throw new CommandFailedException("Downloaded update package is corrupt", ex); {
} _logger.Error(ex, "Update process failed");
catch (UpdateFailedException ex) throw new CommandFailedException("Startup folder not writable by user '{0}'", ex, Environment.UserName);
{ }
_logger.Error(ex, "Update process failed"); catch (UpdateVerificationFailedException ex)
throw new CommandFailedException(ex); {
_logger.Error(ex, "Update process failed");
throw new CommandFailedException("Downloaded update package is corrupt", ex);
}
catch (UpdateFailedException ex)
{
_logger.Error(ex, "Update process failed");
throw new CommandFailedException(ex);
}
} }
} }