Improve a bit workers. bug : Bundle reset after all backtest finish
This commit is contained in:
@@ -641,6 +641,30 @@ public class BacktestExecutor
|
||||
var failedJobs = jobs.Count(j => j.Status == JobStatus.Failed);
|
||||
var runningJobs = jobs.Count(j => j.Status == JobStatus.Running);
|
||||
var totalJobs = jobs.Count();
|
||||
|
||||
// CRITICAL: If bundle is already in a final state (Completed/Failed with CompletedAt set),
|
||||
// don't overwrite it unless we're detecting a legitimate change
|
||||
if (bundleRequest.CompletedAt.HasValue &&
|
||||
(bundleRequest.Status == BundleBacktestRequestStatus.Completed ||
|
||||
bundleRequest.Status == BundleBacktestRequestStatus.Failed))
|
||||
{
|
||||
// Bundle already finalized, only update if job counts indicate it should be re-opened
|
||||
// (This shouldn't happen in normal flow, but guards against race conditions)
|
||||
if (completedJobs + failedJobs == totalJobs)
|
||||
{
|
||||
_logger.LogDebug(
|
||||
"Bundle {BundleRequestId} already completed/failed. Skipping status update.",
|
||||
bundleRequestId);
|
||||
return; // Don't modify a completed bundle
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.LogWarning(
|
||||
"Bundle {BundleRequestId} was marked as completed/failed but has incomplete jobs ({Completed}+{Failed}/{Total}). Reopening.",
|
||||
bundleRequestId, completedJobs, failedJobs, totalJobs);
|
||||
// Allow the update to proceed to fix inconsistent state
|
||||
}
|
||||
}
|
||||
|
||||
// Update bundle request progress
|
||||
bundleRequest.CompletedBacktests = completedJobs;
|
||||
@@ -668,11 +692,14 @@ public class BacktestExecutor
|
||||
bundleRequest.CompletedAt = DateTime.UtcNow;
|
||||
bundleRequest.CurrentBacktest = null;
|
||||
}
|
||||
else if (runningJobs > 0)
|
||||
else if (runningJobs > 0 || completedJobs > 0 || failedJobs > 0)
|
||||
{
|
||||
// Some jobs still running
|
||||
// Some jobs are running, or some have completed/failed (meaning work has started)
|
||||
// Once a bundle has started processing, it should stay "Running" until all jobs are done
|
||||
bundleRequest.Status = BundleBacktestRequestStatus.Running;
|
||||
}
|
||||
// If all jobs are still pending (completedJobs = 0, failedJobs = 0, runningJobs = 0),
|
||||
// keep the current status (likely Pending)
|
||||
|
||||
// Update results list with the new backtest ID
|
||||
var resultsList = bundleRequest.Results?.ToList() ?? new List<string>();
|
||||
|
||||
Reference in New Issue
Block a user