/// <inheritdoc /> public async Task <IDmbProvider> FromCompileJob(CompileJob compileJob, CancellationToken cancellationToken) { logger.LogTrace("Loading compile job {0}...", compileJob.Id); var providerSubmitted = false; var newProvider = new DmbProvider(compileJob, ioManager, () => { if (providerSubmitted) { CleanJob(compileJob); } }); try { var primaryCheckTask = ioManager.FileExists(ioManager.ConcatPath(newProvider.PrimaryDirectory, newProvider.DmbName), cancellationToken); var secondaryCheckTask = ioManager.FileExists(ioManager.ConcatPath(newProvider.PrimaryDirectory, newProvider.DmbName), cancellationToken); if (!(await primaryCheckTask.ConfigureAwait(false) && await secondaryCheckTask.ConfigureAwait(false))) { logger.LogWarning("Error loading compile job, .dmb missing!"); return(null); //omae wa mou shinderu } lock (this) { if (!jobLockCounts.TryGetValue(compileJob.Id, out int value)) { value = 1; jobLockCounts.Add(compileJob.Id, 1); } else { jobLockCounts[compileJob.Id] = ++value; } logger.LogTrace("Compile job {0} lock count now: {1}", compileJob.Id, value); providerSubmitted = true; return(newProvider); } } finally { if (!providerSubmitted) { newProvider.Dispose(); } } }
/// <inheritdoc /> #pragma warning disable CA1506 // TODO: Decomplexify public async Task <IDmbProvider> FromCompileJob(CompileJob compileJob, CancellationToken cancellationToken) { if (compileJob == null) { throw new ArgumentNullException(nameof(compileJob)); } // ensure we have the entire compile job tree await databaseContextFactory.UseContext(async db => compileJob = await db.CompileJobs.Where(x => x.Id == compileJob.Id) .Include(x => x.Job).ThenInclude(x => x.StartedBy) .Include(x => x.RevisionInformation).ThenInclude(x => x.PrimaryTestMerge).ThenInclude(x => x.MergedBy) .Include(x => x.RevisionInformation).ThenInclude(x => x.ActiveTestMerges).ThenInclude(x => x.TestMerge).ThenInclude(x => x.MergedBy) .FirstAsync(cancellationToken).ConfigureAwait(false)).ConfigureAwait(false); // can't wait to see that query logger.LogTrace("Loading compile job {0}...", compileJob.Id); var providerSubmitted = false; var newProvider = new DmbProvider(compileJob, ioManager, () => { if (providerSubmitted) { CleanJob(compileJob); } }); try { var primaryCheckTask = ioManager.FileExists(ioManager.ConcatPath(newProvider.PrimaryDirectory, newProvider.DmbName), cancellationToken); var secondaryCheckTask = ioManager.FileExists(ioManager.ConcatPath(newProvider.PrimaryDirectory, newProvider.DmbName), cancellationToken); if (!(await primaryCheckTask.ConfigureAwait(false) && await secondaryCheckTask.ConfigureAwait(false))) { logger.LogWarning("Error loading compile job, .dmb missing!"); return(null); // omae wa mou shinderu } lock (this) { if (!jobLockCounts.TryGetValue(compileJob.Id, out int value)) { value = 1; jobLockCounts.Add(compileJob.Id, 1); } else { jobLockCounts[compileJob.Id] = ++value; } logger.LogTrace("Compile job {0} lock count now: {1}", compileJob.Id, value); providerSubmitted = true; return(newProvider); } } finally { if (!providerSubmitted) { newProvider.Dispose(); } } }