Naming fix

This commit is contained in:
Michał Zieliński
2025-06-08 10:56:20 +02:00
parent ff41a71484
commit 99d8593c49
14 changed files with 84 additions and 78 deletions

View File

@@ -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