mirror of
https://github.com/Sonarr/Sonarr.git
synced 2025-01-17 10:45:49 +02:00
Fixed: Failed downloads not removed from history will no longer be erroneously retried after restarting drone.
This commit is contained in:
parent
9e02a05733
commit
1bca66a0c2
@ -110,6 +110,18 @@ private void VerifyFailedDownloads(int count = 1)
|
||||
.Verify(v => v.PublishEvent(It.Is<DownloadFailedEvent>(d => d.EpisodeIds.Count == count)), Times.Once());
|
||||
}
|
||||
|
||||
private void VerifyRetryDownload()
|
||||
{
|
||||
Mocker.GetMock<IDownloadClient>()
|
||||
.Verify(v => v.RetryDownload(It.IsAny<String>()), Times.Once());
|
||||
}
|
||||
|
||||
private void VerifyNoRetryDownload()
|
||||
{
|
||||
Mocker.GetMock<IDownloadClient>()
|
||||
.Verify(v => v.RetryDownload(It.IsAny<String>()), Times.Never());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_process_if_no_download_client_history()
|
||||
{
|
||||
@ -314,6 +326,7 @@ public void should_process_if_ageHours_is_not_set()
|
||||
Subject.Execute(new CheckForFinishedDownloadCommand());
|
||||
|
||||
VerifyFailedDownloads();
|
||||
VerifyNoRetryDownload();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@ -335,6 +348,31 @@ public void should_process_if_age_is_greater_than_grace_period()
|
||||
Subject.Execute(new CheckForFinishedDownloadCommand());
|
||||
|
||||
VerifyFailedDownloads();
|
||||
VerifyNoRetryDownload();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_not_retry_if_already_failed()
|
||||
{
|
||||
GivenFailedDownloadClientHistory();
|
||||
|
||||
var historyGrabbed = Builder<History.History>.CreateListOfSize(1)
|
||||
.Build()
|
||||
.ToList();
|
||||
|
||||
historyGrabbed.First().Data.Add("downloadClient", "SabnzbdClient");
|
||||
historyGrabbed.First().Data.Add("downloadClientId", _failed.First().DownloadClientId);
|
||||
historyGrabbed.First().Data.Add("ageHours", "1");
|
||||
|
||||
GivenGrabbedHistory(historyGrabbed);
|
||||
GivenFailedHistory(historyGrabbed);
|
||||
GivenGracePeriod(6);
|
||||
GivenRetryLimit(1);
|
||||
|
||||
Subject.Execute(new CheckForFinishedDownloadCommand());
|
||||
|
||||
VerifyNoFailedDownloads();
|
||||
VerifyNoRetryDownload();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@ -357,6 +395,7 @@ public void should_process_if_retry_count_is_greater_than_grace_period()
|
||||
Subject.Execute(new CheckForFinishedDownloadCommand());
|
||||
|
||||
VerifyFailedDownloads();
|
||||
VerifyNoRetryDownload();
|
||||
}
|
||||
|
||||
[Test]
|
||||
@ -380,6 +419,7 @@ public void should_not_process_if_age_is_less_than_grace_period()
|
||||
Subject.Execute(new CheckForFinishedDownloadCommand());
|
||||
|
||||
VerifyNoFailedDownloads();
|
||||
VerifyRetryDownload();
|
||||
|
||||
ExceptionVerification.IgnoreWarns();
|
||||
}
|
||||
|
@ -96,30 +96,31 @@ public void CheckForFailedItem(IDownloadClient downloadClient, TrackedDownload t
|
||||
return;
|
||||
}
|
||||
|
||||
//TODO: Make this more configurable (ignore failure reasons) to support changes and other failures that should be ignored
|
||||
if (trackedDownload.DownloadItem.Message.Equals("Unpacking failed, write error or disk is full?",
|
||||
StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
UpdateStatusMessage(trackedDownload, LogLevel.Error, "Download failed due to lack of disk space, not blacklisting.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (FailedDownloadForRecentRelease(downloadClient, trackedDownload, grabbedItems))
|
||||
{
|
||||
_logger.Debug("[{0}] Recent release Failed, do not blacklist.", trackedDownload.DownloadItem.Title);
|
||||
return;
|
||||
}
|
||||
|
||||
trackedDownload.State = TrackedDownloadState.DownloadFailed;
|
||||
|
||||
var failedItems = GetHistoryItems(failedHistory, trackedDownload.DownloadItem.DownloadClientId);
|
||||
|
||||
if (failedItems.Any())
|
||||
{
|
||||
trackedDownload.State = TrackedDownloadState.DownloadFailed;
|
||||
UpdateStatusMessage(trackedDownload, LogLevel.Debug, "Already added to history as failed.");
|
||||
}
|
||||
else
|
||||
{
|
||||
//TODO: Make this more configurable (ignore failure reasons) to support changes and other failures that should be ignored
|
||||
if (trackedDownload.DownloadItem.Message.Equals("Unpacking failed, write error or disk is full?",
|
||||
StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
UpdateStatusMessage(trackedDownload, LogLevel.Error, "Download failed due to lack of disk space, not blacklisting.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (FailedDownloadForRecentRelease(downloadClient, trackedDownload, grabbedItems))
|
||||
{
|
||||
_logger.Debug("[{0}] Recent release Failed, do not blacklist.", trackedDownload.DownloadItem.Title);
|
||||
return;
|
||||
}
|
||||
|
||||
trackedDownload.State = TrackedDownloadState.DownloadFailed;
|
||||
|
||||
PublishDownloadFailedEvent(grabbedItems, trackedDownload.DownloadItem.Message);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user