From ad2693805be588da288db071c994dbf6dced8efa Mon Sep 17 00:00:00 2001 From: Dominion Date: Mon, 10 Apr 2023 19:03:35 -0400 Subject: [PATCH] Fix massive slowdown in individual instance offlining --- .../Components/InstanceManager.cs | 28 +++++++++---------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/src/Tgstation.Server.Host/Components/InstanceManager.cs b/src/Tgstation.Server.Host/Components/InstanceManager.cs index 3e025b1dad..5c53a622c3 100644 --- a/src/Tgstation.Server.Host/Components/InstanceManager.cs +++ b/src/Tgstation.Server.Host/Components/InstanceManager.cs @@ -313,23 +313,21 @@ namespace Tgstation.Server.Host.Components // we are the one responsible for cancelling his jobs var tasks = new List(); - await databaseContextFactory.UseContext(async db => - { - var jobs = db - .Jobs - .AsQueryable() - .Where(x => x.Instance.Id == metadata.Id) - .Select(x => new Models.Job - { - Id = x.Id, - }); - await jobs.ForEachAsync( - job => + await databaseContextFactory.UseContext( + async db => { - lock (tasks) + var jobs = await db + .Jobs + .AsQueryable() + .Where(x => x.Instance.Id == metadata.Id && !x.StoppedAt.HasValue) + .Select(x => new Models.Job + { + Id = x.Id, + }) + .ToListAsync(cancellationToken); + foreach (var job in jobs) tasks.Add(jobManager.CancelJob(job, user, true, cancellationToken)); - }, cancellationToken); - }); + }); await Task.WhenAll(tasks);