Naming fix
This commit is contained in:
@@ -15,17 +15,20 @@ namespace DiunaBI.Core.Services;
|
||||
|
||||
public class JobQueueProcessor : BackgroundService
|
||||
{
|
||||
private readonly IServiceProvider _serviceProvider;
|
||||
private readonly IServiceScopeFactory _scopeFactory; // ✅ GOOD - używa scope factory
|
||||
private readonly ILogger<JobQueueProcessor> _logger;
|
||||
private readonly ManualResetEventSlim _processSignal;
|
||||
private readonly ManualResetEventSlim _processSignal = new(false);
|
||||
|
||||
// ❌ USUŃ DIRECT INJECTION scoped services:
|
||||
// private readonly IJobQueueService _queueService;
|
||||
// private readonly AppDbContext _db;
|
||||
|
||||
public JobQueueProcessor(
|
||||
IServiceProvider serviceProvider,
|
||||
IServiceScopeFactory scopeFactory, // ✅ GOOD - inject scope factory
|
||||
ILogger<JobQueueProcessor> logger)
|
||||
{
|
||||
_serviceProvider = serviceProvider;
|
||||
_scopeFactory = scopeFactory;
|
||||
_logger = logger;
|
||||
_processSignal = new ManualResetEventSlim(false);
|
||||
}
|
||||
|
||||
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
||||
@@ -36,19 +39,18 @@ public class JobQueueProcessor : BackgroundService
|
||||
{
|
||||
try
|
||||
{
|
||||
// Wait for manual trigger or cancellation
|
||||
// Wait for manual trigger
|
||||
_processSignal.Wait(stoppingToken);
|
||||
_processSignal.Reset();
|
||||
|
||||
_logger.LogInformation("JobQueueProcessor: Processing triggered manually");
|
||||
_logger.LogInformation("JobQueueProcessor: Processing triggered");
|
||||
|
||||
using var scope = _serviceProvider.CreateScope();
|
||||
// ✅ GOOD - create scope for each processing cycle
|
||||
using var scope = _scopeFactory.CreateScope();
|
||||
var queueService = scope.ServiceProvider.GetRequiredService<IJobQueueService>();
|
||||
var pluginManager = scope.ServiceProvider.GetRequiredService<PluginManager>();
|
||||
|
||||
// Process all jobs until queue is empty
|
||||
await ProcessAllJobs(queueService, stoppingToken);
|
||||
|
||||
_logger.LogInformation("JobQueueProcessor: Manual processing completed");
|
||||
await ProcessQueueAsync(queueService, pluginManager, stoppingToken);
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
@@ -57,8 +59,8 @@ public class JobQueueProcessor : BackgroundService
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "JobQueueProcessor: Unexpected error in queue processor");
|
||||
await Task.Delay(TimeSpan.FromSeconds(30), stoppingToken);
|
||||
_logger.LogError(ex, "JobQueueProcessor: Error in processing loop");
|
||||
await Task.Delay(5000, stoppingToken); // Wait before retry
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,7 +73,7 @@ public class JobQueueProcessor : BackgroundService
|
||||
_processSignal.Set();
|
||||
}
|
||||
|
||||
private async Task ProcessAllJobs(IJobQueueService queueService, CancellationToken cancellationToken)
|
||||
private async Task ProcessQueueAsync(IJobQueueService queueService, PluginManager pluginManager, CancellationToken cancellationToken)
|
||||
{
|
||||
var startTime = DateTime.UtcNow;
|
||||
var initialQueueSize = await queueService.GetQueueCountAsync();
|
||||
@@ -131,7 +133,8 @@ public class JobQueueProcessor : BackgroundService
|
||||
_logger.LogInformation("JobQueueProcessor: Processing {JobType} job {JobId} for layer {LayerName} (attempt {RetryCount}/{MaxRetries}, priority {Priority})",
|
||||
job.JobType, job.Id, job.LayerName, job.RetryCount + 1, job.MaxRetries, job.Priority);
|
||||
|
||||
using var scope = _serviceProvider.CreateScope();
|
||||
// POPRAWKA: używaj _scopeFactory zamiast _serviceProvider
|
||||
using var scope = _scopeFactory.CreateScope();
|
||||
var dbContext = scope.ServiceProvider.GetRequiredService<AppDbContext>();
|
||||
var pluginManager = scope.ServiceProvider.GetRequiredService<PluginManager>();
|
||||
var queueService = scope.ServiceProvider.GetRequiredService<IJobQueueService>();
|
||||
@@ -199,7 +202,8 @@ public class JobQueueProcessor : BackgroundService
|
||||
_logger.LogError(ex, "JobQueueProcessor: Error processing {JobType} job {JobId} for layer {LayerName}",
|
||||
job.JobType, job.Id, job.LayerName);
|
||||
|
||||
using var scope = _serviceProvider.CreateScope();
|
||||
// POPRAWKA: tutaj też używaj _scopeFactory
|
||||
using var scope = _scopeFactory.CreateScope();
|
||||
var queueService = scope.ServiceProvider.GetRequiredService<IJobQueueService>();
|
||||
|
||||
// Check if it's a retriable error
|
||||
|
||||
Reference in New Issue
Block a user