New: Limit grabs to 1 per second to reduce rapid API calls

pull/3113/head
Mark McDowall 10 years ago
parent 0c6ca6971d
commit 1275d8098d

@ -2,8 +2,10 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using NLog; using NLog;
using NzbDrone.Common;
using NzbDrone.Core.DecisionEngine; using NzbDrone.Core.DecisionEngine;
using NzbDrone.Core.Download.Pending; using NzbDrone.Core.Download.Pending;
using NzbDrone.Core.Parser.Model;
namespace NzbDrone.Core.Download namespace NzbDrone.Core.Download
{ {
@ -37,6 +39,9 @@ namespace NzbDrone.Core.Download
var grabbed = new List<DownloadDecision>(); var grabbed = new List<DownloadDecision>();
var pending = new List<DownloadDecision>(); var pending = new List<DownloadDecision>();
//Limits to 1 grab every 1 second to reduce rapid API hits
using (var rateGate = new RateGate(1, TimeSpan.FromSeconds(1)))
{
foreach (var report in prioritizedDecisions) foreach (var report in prioritizedDecisions)
{ {
var remoteEpisode = report.RemoteEpisode; var remoteEpisode = report.RemoteEpisode;
@ -71,6 +76,7 @@ namespace NzbDrone.Core.Download
try try
{ {
rateGate.WaitToProceed();
_downloadService.DownloadReport(remoteEpisode); _downloadService.DownloadReport(remoteEpisode);
grabbed.Add(report); grabbed.Add(report);
} }
@ -81,6 +87,7 @@ namespace NzbDrone.Core.Download
_logger.WarnException("Couldn't add report to download queue. " + remoteEpisode, e); _logger.WarnException("Couldn't add report to download queue. " + remoteEpisode, e);
} }
} }
}
return new ProcessedDecisions(grabbed, pending, decisions.Where(d => d.Rejected).ToList()); return new ProcessedDecisions(grabbed, pending, decisions.Where(d => d.Rejected).ToList());
} }

Loading…
Cancel
Save