core: immutable query. resolves #8531 (#8570)

This commit is contained in:
Diego Heras 2022-04-24 23:11:44 +02:00 committed by GitHub
parent 47e9641325
commit f2e258a6de
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 8 deletions

View File

@ -289,22 +289,26 @@ namespace Jackett.Common.Indexers
public virtual async Task<IndexerResult> ResultsForQuery(TorznabQuery query, bool isMetaIndexer)
{
if (!CanHandleQuery(query) || !CanHandleCategories(query, isMetaIndexer))
// we make a copy just in case some C# indexer modifies the object.
// without the copy, if you make a request with several indexers, all indexers share the query object.
var queryCopy = query.Clone();
if (!CanHandleQuery(queryCopy) || !CanHandleCategories(queryCopy, isMetaIndexer))
return new IndexerResult(this, new ReleaseInfo[0], false);
if (query.Cache)
if (queryCopy.Cache)
{
var cachedReleases = cacheService.Search(this, query);
var cachedReleases = cacheService.Search(this, queryCopy);
if (cachedReleases != null)
return new IndexerResult(this, cachedReleases, true);
}
try
{
var results = await PerformQuery(query);
results = FilterResults(query, results);
results = FixResults(query, results);
cacheService.CacheResults(this, query, results.ToList());
var results = await PerformQuery(queryCopy);
results = FilterResults(queryCopy, results);
results = FixResults(queryCopy, results);
cacheService.CacheResults(this, queryCopy, results.ToList());
errorCount = 0;
expireAt = DateTime.Now.Add(HealthyStatusValidity);
return new IndexerResult(this, results, false);

View File

@ -72,7 +72,7 @@ namespace Jackett.Common.Indexers.Meta
var fallbackStrategies = fallbackStrategyProvider.FallbackStrategiesForQuery(query);
var fallbackQueries = fallbackStrategies.Select(async f => await f.FallbackQueries()).SelectMany(t => t.Result);
var fallbackTasks = fallbackQueries.SelectMany(q => indexers.Where(i => !i.CanHandleQuery(query) && i.CanHandleQuery(q)).Select(i => i.ResultsForQuery(q.Clone(), true)));
var fallbackTasks = fallbackQueries.SelectMany(q => indexers.Where(i => !i.CanHandleQuery(query) && i.CanHandleQuery(q)).Select(i => i.ResultsForQuery(q, true)));
var tasks = supportedTasks.Concat(fallbackTasks.ToList()); // explicit conversion to List to execute LINQ query
// When there are many indexers used by a metaindexer querying each and every one of them can take very very