From e66b28fb8735ddc764ec586fe8b81b7fc596a48c Mon Sep 17 00:00:00 2001 From: Taloth Saldono Date: Sun, 7 Jun 2020 23:50:39 +0200 Subject: [PATCH] Fixed corrupt Update History due to date-time notation --- .../Migration/141_add_update_history.cs | 8 --- .../Update/History/UpdateHistoryService.cs | 57 ++++++++++++++----- 2 files changed, 43 insertions(+), 22 deletions(-) diff --git a/src/NzbDrone.Core/Datastore/Migration/141_add_update_history.cs b/src/NzbDrone.Core/Datastore/Migration/141_add_update_history.cs index dd6ae0237..a0b4a9a7a 100644 --- a/src/NzbDrone.Core/Datastore/Migration/141_add_update_history.cs +++ b/src/NzbDrone.Core/Datastore/Migration/141_add_update_history.cs @@ -18,14 +18,6 @@ namespace NzbDrone.Core.Datastore.Migration .WithColumn("Date").AsDateTime().NotNullable().Indexed() .WithColumn("Version").AsString().NotNullable() .WithColumn("EventType").AsInt32().NotNullable(); - - Insert.IntoTable("UpdateHistory") - .Row(new - { - Date = new UtcConverter().ToDB(DateTime.UtcNow).ToString(), - Version = BuildInfo.Version.ToString(), - EventType = 2 - }); } } } diff --git a/src/NzbDrone.Core/Update/History/UpdateHistoryService.cs b/src/NzbDrone.Core/Update/History/UpdateHistoryService.cs index 8d11ea054..09cf70602 100644 --- a/src/NzbDrone.Core/Update/History/UpdateHistoryService.cs +++ b/src/NzbDrone.Core/Update/History/UpdateHistoryService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using NLog; using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Core.Lifecycle; using NzbDrone.Core.Messaging.Events; @@ -17,24 +18,42 @@ namespace NzbDrone.Core.Update.History { private readonly IUpdateHistoryRepository _repository; private readonly IEventAggregator _eventAggregator; + private readonly Logger _logger; private Version _prevVersion; - public UpdateHistoryService(IUpdateHistoryRepository repository, IEventAggregator eventAggregator) + public UpdateHistoryService(IUpdateHistoryRepository repository, IEventAggregator eventAggregator, Logger logger) { _repository = repository; _eventAggregator = eventAggregator; + _logger = logger; } public Version PreviouslyInstalled() { - var history = _repository.PreviouslyInstalled(); + try + { + var history = _repository.PreviouslyInstalled(); - return history?.Version; + return history?.Version; + } + catch (Exception ex) + { + _logger.Warn(ex, "Failed to determine previously installed version"); + return null; + } } public List InstalledSince(DateTime dateTime) { - return _repository.InstalledSince(dateTime); + try + { + return _repository.InstalledSince(dateTime); + } + catch (Exception ex) + { + _logger.Warn(ex, "Failed to get list of previously installed versions"); + return new List(); + } } public void Handle(ApplicationStartedEvent message) @@ -45,19 +64,29 @@ namespace NzbDrone.Core.Update.History return; } - var history = _repository.LastInstalled(); - - if (history == null || history.Version != BuildInfo.Version) + UpdateHistory history; + try + { + history = _repository.LastInstalled(); + } + catch (Exception ex) { - _prevVersion = history.Version; + _logger.Warn(ex, "Cleaning corrupted update history"); + _repository.Purge(); + history = null; + } - _repository.Insert(new UpdateHistory + if (history == null || history.Version != BuildInfo.Version) { - Date = DateTime.UtcNow, - Version = BuildInfo.Version, - EventType = UpdateHistoryEventType.Installed - }); - } + _prevVersion = history?.Version; + + _repository.Insert(new UpdateHistory + { + Date = DateTime.UtcNow, + Version = BuildInfo.Version, + EventType = UpdateHistoryEventType.Installed + }); + } } public void HandleAsync(ApplicationStartedEvent message)