Fix job scheduler race condition and enhance Blazor reconnection UI
All checks were successful
Build Docker Images / test (map[name:Morska plugin_project:DiunaBI.Plugins.Morska]) (push) Successful in 1m27s
Build Docker Images / test (map[name:PedrolloPL plugin_project:DiunaBI.Plugins.PedrolloPL]) (push) Successful in 1m23s
Build Docker Images / build-and-push (map[image_suffix:morska name:Morska plugin_project:DiunaBI.Plugins.Morska]) (push) Successful in 1m43s
Build Docker Images / build-and-push (map[image_suffix:pedrollopl name:PedrolloPL plugin_project:DiunaBI.Plugins.PedrolloPL]) (push) Successful in 1m39s
All checks were successful
Build Docker Images / test (map[name:Morska plugin_project:DiunaBI.Plugins.Morska]) (push) Successful in 1m27s
Build Docker Images / test (map[name:PedrolloPL plugin_project:DiunaBI.Plugins.PedrolloPL]) (push) Successful in 1m23s
Build Docker Images / build-and-push (map[image_suffix:morska name:Morska plugin_project:DiunaBI.Plugins.Morska]) (push) Successful in 1m43s
Build Docker Images / build-and-push (map[image_suffix:pedrollopl name:PedrolloPL plugin_project:DiunaBI.Plugins.PedrolloPL]) (push) Successful in 1m39s
This commit is contained in:
@@ -40,6 +40,7 @@ public class JobSchedulerService
|
||||
_logger.LogInformation("JobScheduler: Found {Count} import workers to schedule", importWorkers.Count);
|
||||
|
||||
var jobsCreated = 0;
|
||||
var scheduledLayerIds = new HashSet<Guid>(); // Track LayerIds scheduled in this batch
|
||||
|
||||
foreach (var worker in importWorkers)
|
||||
{
|
||||
@@ -61,7 +62,15 @@ public class JobSchedulerService
|
||||
var maxRetriesStr = worker.Records?.FirstOrDefault(r => r.Code == "MaxRetries")?.Desc1;
|
||||
var maxRetries = int.TryParse(maxRetriesStr, out var mr) ? mr : 3;
|
||||
|
||||
// Check if there's already a pending/running job for this layer
|
||||
// Check in-memory: already scheduled in this batch?
|
||||
if (scheduledLayerIds.Contains(worker.Id))
|
||||
{
|
||||
_logger.LogDebug("JobScheduler: Job already scheduled in this batch for {LayerName} ({LayerId})",
|
||||
worker.Name, worker.Id);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Check if there's already a pending/running job for this layer in database
|
||||
var existingJob = await _db.QueueJobs
|
||||
.Where(j => j.LayerId == worker.Id &&
|
||||
(j.Status == JobStatus.Pending || j.Status == JobStatus.Running))
|
||||
@@ -91,6 +100,7 @@ public class JobSchedulerService
|
||||
};
|
||||
|
||||
_db.QueueJobs.Add(job);
|
||||
scheduledLayerIds.Add(worker.Id); // Track that we've scheduled this layer
|
||||
jobsCreated++;
|
||||
|
||||
_logger.LogInformation("JobScheduler: Created import job for {LayerName} ({LayerId}) with priority {Priority}",
|
||||
@@ -129,6 +139,7 @@ public class JobSchedulerService
|
||||
_logger.LogInformation("JobScheduler: Found {Count} process workers to schedule", processWorkers.Count);
|
||||
|
||||
var jobsCreated = 0;
|
||||
var scheduledLayerIds = new HashSet<Guid>(); // Track LayerIds scheduled in this batch
|
||||
|
||||
foreach (var worker in processWorkers)
|
||||
{
|
||||
@@ -150,7 +161,15 @@ public class JobSchedulerService
|
||||
var maxRetriesStr = worker.Records?.FirstOrDefault(r => r.Code == "MaxRetries")?.Desc1;
|
||||
var maxRetries = int.TryParse(maxRetriesStr, out var mr) ? mr : 3;
|
||||
|
||||
// Check if there's already a pending/running job for this layer
|
||||
// Check in-memory: already scheduled in this batch?
|
||||
if (scheduledLayerIds.Contains(worker.Id))
|
||||
{
|
||||
_logger.LogDebug("JobScheduler: Job already scheduled in this batch for {LayerName} ({LayerId})",
|
||||
worker.Name, worker.Id);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Check if there's already a pending/running job for this layer in database
|
||||
var existingJob = await _db.QueueJobs
|
||||
.Where(j => j.LayerId == worker.Id &&
|
||||
(j.Status == JobStatus.Pending || j.Status == JobStatus.Running))
|
||||
@@ -180,6 +199,7 @@ public class JobSchedulerService
|
||||
};
|
||||
|
||||
_db.QueueJobs.Add(job);
|
||||
scheduledLayerIds.Add(worker.Id); // Track that we've scheduled this layer
|
||||
jobsCreated++;
|
||||
|
||||
_logger.LogInformation("JobScheduler: Created process job for {LayerName} ({LayerId}) with priority {Priority}",
|
||||
|
||||
Reference in New Issue
Block a user