From d2ec5b15d427eb11efe9ded0e2142cccc65da202 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Tue, 28 Apr 2026 08:23:27 +0200 Subject: [PATCH] Update a stored e metodi x evitare race conditions su scrittura remoteRebootLog --- MP.Data/Controllers/MpIocController.cs | 43 ++++++++++++++++++-------- MP.IOC/Controllers/IOBController.cs | 1 - MP.IOC/MP.IOC.csproj | 2 +- MP.IOC/Resources/ChangeLog.html | 2 +- MP.IOC/Resources/VersNum.txt | 2 +- MP.IOC/Resources/manifest.xml | 2 +- 6 files changed, 34 insertions(+), 18 deletions(-) diff --git a/MP.Data/Controllers/MpIocController.cs b/MP.Data/Controllers/MpIocController.cs index 2f0f7866..4886d6c8 100644 --- a/MP.Data/Controllers/MpIocController.cs +++ b/MP.Data/Controllers/MpIocController.cs @@ -1060,24 +1060,40 @@ namespace MP.Data.Controllers { bool fatto = false; using var dbCtx = new MoonProContext(_configuration); - using var transaction = await dbCtx.Database.BeginTransactionAsync(); + + // 1. Transazione minima: SOLO INSERT + COMMIT + await using var tx = await dbCtx.Database.BeginTransactionAsync(); try { dbCtx.DbSetRemRebLog.Add(newRec); fatto = await dbCtx.SaveChangesAsync() > 0; - - - var param = new SqlParameter("@num2keep", num2keep); - await dbCtx.Database.ExecuteSqlRawAsync("EXEC dbo.stp_RRL_KeepLatest @num2keep", param); - - await transaction.CommitAsync(); - return true; + await tx.CommitAsync(); // 🔑 Commit prima della pulizia } catch { - await transaction.RollbackAsync(); + await tx.RollbackAsync(); throw; } + + // 2. Cleanup "smart" fuori transazione + if (fatto) + { + try + { + var param = new SqlParameter("@num2keep", num2keep); + await dbCtx.Database.ExecuteSqlRawAsync( + "EXEC dbo.stp_RRL_KeepLatest @num2keep, @multiplier", param, + new SqlParameter("@multiplier", 1.3f)); // Fisso o leggo da config + + } + catch (Exception ex) + { + // Log dell'errore, ma NON rilanciare: il record è già salvo + Log.Error(ex, "Failed to execute RRL cleanup for {Machine}", newRec.IdxMacchina); + } + } + + return fatto; } /// @@ -1119,10 +1135,11 @@ namespace MP.Data.Controllers { using var dbCtx = new MoonProContext(_configuration); - var Num2keep = new SqlParameter("@num2keep", num2keep); - var dbResult = await dbCtx - .Database - .ExecuteSqlRawAsync("exec dbo.stp_RRL_KeepLatest @num2keep", Num2keep); + var pNum2Keep = new SqlParameter("@num2keep", num2keep); + // La SP gestisce già la logica di soglia (1.5x), ma la specifico x sicurezza + var pThresh = new SqlParameter("@threshMult", 1.5); + var dbResult = await dbCtx.Database.ExecuteSqlRawAsync( + "EXEC dbo.stp_RRL_KeepLatest @num2keep, @threshMult", pNum2Keep, pThresh); return dbResult != 0; } diff --git a/MP.IOC/Controllers/IOBController.cs b/MP.IOC/Controllers/IOBController.cs index 2aed29e0..106c33ff 100644 --- a/MP.IOC/Controllers/IOBController.cs +++ b/MP.IOC/Controllers/IOBController.cs @@ -1156,7 +1156,6 @@ namespace MP.IOC.Controllers // recupero IP del client remoto, se vuoto IOC string agent = Request.Headers["User-Agent"].ToString() ?? "IOC"; agent = string.IsNullOrWhiteSpace(agent) ? "IOC" : agent; - //var ipv4 = HttpContext.Connection.RemoteIpAddress?.ToString(); var ipv4 = HttpContext.Connection.RemoteIpAddress?.MapToIPv4().ToString(); // chiamo registrazione reboot diff --git a/MP.IOC/MP.IOC.csproj b/MP.IOC/MP.IOC.csproj index eb7af934..0cb18f13 100644 --- a/MP.IOC/MP.IOC.csproj +++ b/MP.IOC/MP.IOC.csproj @@ -4,7 +4,7 @@ net8.0 enable enable - 8.16.2604.2718 + 8.16.2604.2808 diff --git a/MP.IOC/Resources/ChangeLog.html b/MP.IOC/Resources/ChangeLog.html index 7f2e9aa2..d436cede 100644 --- a/MP.IOC/Resources/ChangeLog.html +++ b/MP.IOC/Resources/ChangeLog.html @@ -1,6 +1,6 @@ Modulo MP-IOC -

Versione: 8.16.2604.2718

+

Versione: 8.16.2604.2808


Note di rilascio:
  • diff --git a/MP.IOC/Resources/VersNum.txt b/MP.IOC/Resources/VersNum.txt index 87ec763e..7ce860c1 100644 --- a/MP.IOC/Resources/VersNum.txt +++ b/MP.IOC/Resources/VersNum.txt @@ -1 +1 @@ -8.16.2604.2718 +8.16.2604.2808 diff --git a/MP.IOC/Resources/manifest.xml b/MP.IOC/Resources/manifest.xml index 83cc494c..b4f4f2b2 100644 --- a/MP.IOC/Resources/manifest.xml +++ b/MP.IOC/Resources/manifest.xml @@ -1,6 +1,6 @@ - 8.16.2604.2718 + 8.16.2604.2808 https://nexus.steamware.net/repository/SWS/MP-IOC/stable/LAST/MP.IOC.zip https://nexus.steamware.net/repository/SWS/MP-IOC/stable/LAST/ChangeLog.html false