diff --git a/MP-TAB3/MP-TAB3.csproj b/MP-TAB3/MP-TAB3.csproj
index a7305a47..b4779481 100644
--- a/MP-TAB3/MP-TAB3.csproj
+++ b/MP-TAB3/MP-TAB3.csproj
@@ -3,7 +3,7 @@
net6.0
enable
- 6.16.2509.1015
+ 6.16.2509.1211
enable
MP_TAB3
@@ -36,13 +36,13 @@
-
-
+
+
-
+
diff --git a/MP-TAB3/Resources/ChangeLog.html b/MP-TAB3/Resources/ChangeLog.html
index b1b9f217..a0c72812 100644
--- a/MP-TAB3/Resources/ChangeLog.html
+++ b/MP-TAB3/Resources/ChangeLog.html
@@ -1,6 +1,6 @@
Modulo MAPOSPEC
- Versione: 6.16.2509.1015
+ Versione: 6.16.2509.1211
Note di rilascio:
-
diff --git a/MP-TAB3/Resources/VersNum.txt b/MP-TAB3/Resources/VersNum.txt
index a8436916..fe790325 100644
--- a/MP-TAB3/Resources/VersNum.txt
+++ b/MP-TAB3/Resources/VersNum.txt
@@ -1 +1 @@
-6.16.2509.1015
+6.16.2509.1211
diff --git a/MP-TAB3/Resources/manifest.xml b/MP-TAB3/Resources/manifest.xml
index 046ec27d..02a48072 100644
--- a/MP-TAB3/Resources/manifest.xml
+++ b/MP-TAB3/Resources/manifest.xml
@@ -1,6 +1,6 @@
-
- 6.16.2509.1015
+ 6.16.2509.1211
https://nexus.steamware.net/repository/SWS/MP-TAB3/stable/LAST/MP-TAB3.zip
https://nexus.steamware.net/repository/SWS/MP-TAB3/stable/LAST/ChangeLog.html
false
diff --git a/MP-TAB3/appsettings.json b/MP-TAB3/appsettings.json
index 3b9b08c2..b791cad2 100644
--- a/MP-TAB3/appsettings.json
+++ b/MP-TAB3/appsettings.json
@@ -8,14 +8,14 @@
"AllowedHosts": "*",
"CodApp": "MP.TAB",
"ConnectionStrings": {
- //"Redis": "redis.ufficio:26379,serviceName=devel,DefaultDatabase=6,connectTimeout=15000,syncTimeout=15000,asyncTimeout=15000,abortConnect=false,ssl=false,allowAdmin=true",
+ //"Redis": "redis.ufficio:26379,serviceName=devel,DefaultDatabase=6,connectTimeout=5000,syncTimeout=5000,asyncTimeout=5000,abortConnect=false,ssl=false,allowAdmin=true",
//"MP.All": "Server=SQL2022PROD;Database=Donati_LAV_MoonPro_prod; User ID=sa;Password=keyhammer16; integrated security=False; MultipleActiveResultSets=True; App=MP.TAB3;",
//"MP.Mon": "Server=SQL2022PROD;Database=Donati_LAV_MoonPro_prod; User ID=sa;Password=keyhammer16; integrated security=False; MultipleActiveResultSets=True; App=MP.TAB3;",
//"MP.IS": "Server=SQL2022PROD;Database=MoonPro_IS_EdilChim; User ID=sa;Password=keyhammer16; integrated security=False; MultipleActiveResultSets=True; App=MP.INVE;",
//"MP.Tab": "Server=SQL2022PROD;Database=Donati_LAV_MoonPro_prod; User ID=sa;Password=keyhammer16; integrated security=False; MultipleActiveResultSets=True; App=MP.TAB3;",
//"MP.Mag": "Server=SQL2022PROD;Database=MoonPro_MAG; User ID=sa;Password=keyhammer16; integrated security=False; MultipleActiveResultSets=True; App=MP.TAB3;"
- "Redis": "redis.ufficio:26379,serviceName=devel,DefaultDatabase=5,connectTimeout=15000,syncTimeout=15000,asyncTimeout=15000,abortConnect=false,ssl=false,allowAdmin=true",
+ "Redis": "redis.ufficio:26379,serviceName=devel,DefaultDatabase=5,connectTimeout=5000,syncTimeout=5000,asyncTimeout=5000,abortConnect=false,ssl=false,allowAdmin=true",
"MP.All": "Server=SQL2016DEV;Database=MoonPro; User ID=sa;Password=keyhammer16; integrated security=False; MultipleActiveResultSets=True; App=MP.TAB3;",
"MP.Mon": "Server=SQL2016DEV;Database=MoonPro; User ID=sa;Password=keyhammer16; integrated security=False; MultipleActiveResultSets=True; App=MP.TAB3;",
"MP.IS": "Server=SQL2016DEV;Database=MoonPro_IS_EdilChim; User ID=sa;Password=keyhammer16; integrated security=False; MultipleActiveResultSets=True; App=MP.INVE;",
diff --git a/MP.AppAuth/MP.AppAuth.csproj b/MP.AppAuth/MP.AppAuth.csproj
index 4bd47859..305668b0 100644
--- a/MP.AppAuth/MP.AppAuth.csproj
+++ b/MP.AppAuth/MP.AppAuth.csproj
@@ -22,7 +22,7 @@
-
+
diff --git a/MP.AppAuth/Services/AppAuthService.cs b/MP.AppAuth/Services/AppAuthService.cs
index 312b12d4..07d6962f 100644
--- a/MP.AppAuth/Services/AppAuthService.cs
+++ b/MP.AppAuth/Services/AppAuthService.cs
@@ -655,13 +655,44 @@ namespace MP.AppAuth.Services
#region Private Methods
///
- /// Esegue flush memoria redis dato pattern
+ /// Esegue flush memoria redis dato pat2Flush
///
- ///
+ ///
///
- private async Task ExecFlushRedisPattern(RedisValue pattern)
+ private async Task ExecFlushRedisPattern(RedisValue pat2Flush)
{
bool answ = false;
+ var masterEndpoint = redisConn.GetEndPoints()
+ .Where(ep => redisConn.GetServer(ep).IsConnected && !redisConn.GetServer(ep).IsReplica)
+ .FirstOrDefault();
+
+ // sepattern è "*" elimino intero DB...
+ if (masterEndpoint != null && (pat2Flush.Equals(new RedisValue("*")) || pat2Flush == RedisValue.Null))
+ {
+ redisConn.GetServer(masterEndpoint).FlushDatabase(database: redisDb.Database);
+ }
+ else
+ {
+ var server = redisConn.GetServer(masterEndpoint);
+ var keys = server.Keys(database: redisDb.Database, pattern: pat2Flush, pageSize: 1000);
+
+ var deleteTasks = new List();
+ foreach (var key in keys)
+ {
+ deleteTasks.Add(redisDb.KeyDeleteAsync(key));
+ if (deleteTasks.Count >= 1000)
+ {
+ await Task.WhenAll(deleteTasks);
+ deleteTasks.Clear();
+ }
+ }
+ if (deleteTasks.Count > 0)
+ {
+ await Task.WhenAll(deleteTasks);
+ }
+ }
+ answ = true;
+#if false
var listEndpoints = redisConn.GetEndPoints();
foreach (var endPoint in listEndpoints)
{
@@ -676,7 +707,8 @@ namespace MP.AppAuth.Services
}
answ = true;
}
- }
+ }
+#endif
return answ;
}
diff --git a/MP.Core/MP.Core.csproj b/MP.Core/MP.Core.csproj
index 81b138f0..687d58ca 100644
--- a/MP.Core/MP.Core.csproj
+++ b/MP.Core/MP.Core.csproj
@@ -13,7 +13,7 @@
-
+
diff --git a/MP.Data/MP.Data.csproj b/MP.Data/MP.Data.csproj
index 657533b0..fdc9003c 100644
--- a/MP.Data/MP.Data.csproj
+++ b/MP.Data/MP.Data.csproj
@@ -30,7 +30,7 @@
-
+
@@ -47,7 +47,7 @@
-
+
diff --git a/MP.Data/Services/ListSelectDataSrv.cs b/MP.Data/Services/ListSelectDataSrv.cs
index f536a40f..68fb649d 100644
--- a/MP.Data/Services/ListSelectDataSrv.cs
+++ b/MP.Data/Services/ListSelectDataSrv.cs
@@ -287,13 +287,44 @@ namespace MP.Data.Services
#region Private Methods
///
- /// Esegue flush memoria redisConn dato pattern
+ /// Esegue flush memoria redisConn dato pat2Flush
///
- ///
+ ///
///
- private async Task ExecFlushRedisPattern(RedisValue pattern)
+ private async Task ExecFlushRedisPattern(RedisValue pat2Flush)
{
bool answ = false;
+ var masterEndpoint = redisConn.GetEndPoints()
+ .Where(ep => redisConn.GetServer(ep).IsConnected && !redisConn.GetServer(ep).IsReplica)
+ .FirstOrDefault();
+
+ // sepattern è "*" elimino intero DB...
+ if (masterEndpoint != null && (pat2Flush.Equals(new RedisValue("*")) || pat2Flush == RedisValue.Null))
+ {
+ redisConn.GetServer(masterEndpoint).FlushDatabase(database: redisDb.Database);
+ }
+ else
+ {
+ var server = redisConn.GetServer(masterEndpoint);
+ var keys = server.Keys(database: redisDb.Database, pattern: pat2Flush, pageSize: 1000);
+
+ var deleteTasks = new List();
+ foreach (var key in keys)
+ {
+ deleteTasks.Add(redisDb.KeyDeleteAsync(key));
+ if (deleteTasks.Count >= 1000)
+ {
+ await Task.WhenAll(deleteTasks);
+ deleteTasks.Clear();
+ }
+ }
+ if (deleteTasks.Count > 0)
+ {
+ await Task.WhenAll(deleteTasks);
+ }
+ }
+ answ = true;
+#if false
var listEndpoints = redisConn.GetEndPoints();
foreach (var endPoint in listEndpoints)
{
@@ -308,7 +339,8 @@ namespace MP.Data.Services
}
answ = true;
}
- }
+ }
+#endif
return answ;
}
diff --git a/MP.Data/Services/StatusData.cs b/MP.Data/Services/StatusData.cs
index 93594364..66aaf74a 100644
--- a/MP.Data/Services/StatusData.cs
+++ b/MP.Data/Services/StatusData.cs
@@ -420,13 +420,43 @@ namespace MP.Data.Services
#region Private Methods
///
- /// Esegue flush memoria redisConn dato pattern
+ /// Esegue flush memoria redisConn dato pat2Flush
///
- ///
+ ///
///
- private async Task ExecFlushRedisPattern(RedisValue pattern)
+ private async Task ExecFlushRedisPattern(RedisValue pat2Flush)
{
bool answ = false;
+ var masterEndpoint = redisConn.GetEndPoints()
+ .Where(ep => redisConn.GetServer(ep).IsConnected && !redisConn.GetServer(ep).IsReplica)
+ .FirstOrDefault();
+ // sepattern è "*" elimino intero DB...
+ if (masterEndpoint != null && (pat2Flush.Equals(new RedisValue("*")) || pat2Flush == RedisValue.Null))
+ {
+ redisConn.GetServer(masterEndpoint).FlushDatabase(database: redisDb.Database);
+ }
+ else
+ {
+ var server = redisConn.GetServer(masterEndpoint);
+ var keys = server.Keys(database: redisDb.Database, pattern: pat2Flush, pageSize: 1000);
+
+ var deleteTasks = new List();
+ foreach (var key in keys)
+ {
+ deleteTasks.Add(redisDb.KeyDeleteAsync(key));
+ if (deleteTasks.Count >= 1000)
+ {
+ await Task.WhenAll(deleteTasks);
+ deleteTasks.Clear();
+ }
+ }
+ if (deleteTasks.Count > 0)
+ {
+ await Task.WhenAll(deleteTasks);
+ }
+ }
+ answ = true;
+#if false
var listEndpoints = redisConn.GetEndPoints();
foreach (var endPoint in listEndpoints)
{
@@ -441,7 +471,8 @@ namespace MP.Data.Services
}
answ = true;
}
- }
+ }
+#endif
return answ;
}
diff --git a/MP.Data/Services/TabDataService.cs b/MP.Data/Services/TabDataService.cs
index e344431a..c8ebfac4 100644
--- a/MP.Data/Services/TabDataService.cs
+++ b/MP.Data/Services/TabDataService.cs
@@ -3983,13 +3983,47 @@ namespace MP.Data.Services
#region Private Methods
///
- /// Esegue flush memoria redisConn dato pattern, metodo sincrono
+ /// Esegue flush memoria redisConn dato pat2Flush, metodo sincrono
///
- ///
+ ///
///
- private bool ExecFlushRedisPattern(RedisValue pattern)
+ private bool ExecFlushRedisPattern(RedisValue pat2Flush)
{
bool answ = false;
+ var masterEndpoint = redisConn.GetEndPoints()
+ .Where(ep => redisConn.GetServer(ep).IsConnected && !redisConn.GetServer(ep).IsReplica)
+ .FirstOrDefault();
+
+ // sepattern è "*" elimino intero DB...
+ if (masterEndpoint != null && (pat2Flush.Equals(new RedisValue("*")) || pat2Flush == RedisValue.Null))
+ {
+ redisConn.GetServer(masterEndpoint).FlushDatabase(database: redisDb.Database);
+ }
+ else
+ {
+ var server = redisConn.GetServer(masterEndpoint);
+ var keys = server.Keys(database: redisDb.Database, pattern: pat2Flush, pageSize: 1000);
+ var batch = new List();
+ foreach (var key in keys)
+ {
+ batch.Add(key);
+
+ // Flush in batches of 1000
+ if (batch.Count >= 1000)
+ {
+ foreach (var item in batch)
+ redisDb.KeyDelete(item);
+
+ batch.Clear();
+ }
+ }
+
+ // Flush remaining keys
+ foreach (var item in batch)
+ redisDb.KeyDelete(item);
+ }
+ answ = true;
+#if false
var listEndpoints = redisConn.GetEndPoints();
foreach (var endPoint in listEndpoints)
{
@@ -4004,28 +4038,61 @@ namespace MP.Data.Services
}
answ = true;
}
- }
+ }
+#endif
// notifico update ai client in ascolto x reset cache
- NotifyReloadRequest($"FlushRedisCache | {pattern}");
+ NotifyReloadRequest($"FlushRedisCache | {pat2Flush}");
return answ;
}
///
- /// Esegue flush memoria redisConn dato pattern in async
+ /// Esegue flush memoria redisConn dato pat2Flush in async
///
- ///
+ ///
///
- private async Task ExecFlushRedisPatternAsync(RedisValue pattern)
+ private async Task ExecFlushRedisPatternAsync(RedisValue pat2Flush)
{
bool answ = false;
+ var masterEndpoint = redisConn.GetEndPoints()
+ .Where(ep => redisConn.GetServer(ep).IsConnected && !redisConn.GetServer(ep).IsReplica)
+ .FirstOrDefault();
+
+ // sepattern è "*" elimino intero DB...
+ if (masterEndpoint != null && (pat2Flush.Equals(new RedisValue("*")) || pat2Flush == RedisValue.Null))
+ {
+ redisConn.GetServer(masterEndpoint).FlushDatabase(database: redisDb.Database);
+ }
+ else
+ {
+ var server = redisConn.GetServer(masterEndpoint);
+ var keys = server.Keys(database: redisDb.Database, pattern: pat2Flush, pageSize: 1000);
+
+ var deleteTasks = new List();
+ foreach (var key in keys)
+ {
+ deleteTasks.Add(redisDb.KeyDeleteAsync(key));
+ if (deleteTasks.Count >= 1000)
+ {
+ await Task.WhenAll(deleteTasks);
+ deleteTasks.Clear();
+ }
+ }
+ if (deleteTasks.Count > 0)
+ {
+ await Task.WhenAll(deleteTasks);
+ }
+ }
+ answ = true;
+#if false
var listEndpoints = redisConn.GetEndPoints();
+
foreach (var endPoint in listEndpoints)
{
//var server = redisConnAdmin.GetServer(listEndpoints[0]);
var server = redisConn.GetServer(endPoint);
if (server != null)
{
- var keyList = server.Keys(redisDb.Database, pattern);
+ var keyList = server.Keys(redisDb.Database, pat2Flush);
foreach (var item in keyList)
{
await redisDb.KeyDeleteAsync(item);
@@ -4033,8 +4100,9 @@ namespace MP.Data.Services
answ = true;
}
}
+#endif
// notifico update ai client in ascolto x reset cache
- NotifyReloadRequest($"FlushRedisCache | {pattern}");
+ NotifyReloadRequest($"FlushRedisCache | {pat2Flush}");
return answ;
}
diff --git a/MP.Data/Services/TranslateSrv.cs b/MP.Data/Services/TranslateSrv.cs
index 7f61465d..40ddaa8a 100644
--- a/MP.Data/Services/TranslateSrv.cs
+++ b/MP.Data/Services/TranslateSrv.cs
@@ -254,13 +254,44 @@ namespace MP.Data.Services
}
///
- /// Esegue flush memoria redisConn dato pattern
+ /// Esegue flush memoria redisConn dato pat2Flush
///
- ///
+ ///
///
- private async Task ExecFlushRedisPattern(RedisValue pattern)
+ private async Task ExecFlushRedisPattern(RedisValue pat2Flush)
{
bool answ = false;
+ var masterEndpoint = redisConn.GetEndPoints()
+ .Where(ep => redisConn.GetServer(ep).IsConnected && !redisConn.GetServer(ep).IsReplica)
+ .FirstOrDefault();
+
+ // sepattern è "*" elimino intero DB...
+ if (masterEndpoint != null && (pat2Flush.Equals(new RedisValue("*")) || pat2Flush == RedisValue.Null))
+ {
+ redisConn.GetServer(masterEndpoint).FlushDatabase(database: redisDb.Database);
+ }
+ else
+ {
+ var server = redisConn.GetServer(masterEndpoint);
+ var keys = server.Keys(database: redisDb.Database, pattern: pat2Flush, pageSize: 1000);
+
+ var deleteTasks = new List();
+ foreach (var key in keys)
+ {
+ deleteTasks.Add(redisDb.KeyDeleteAsync(key));
+ if (deleteTasks.Count >= 1000)
+ {
+ await Task.WhenAll(deleteTasks);
+ deleteTasks.Clear();
+ }
+ }
+ if (deleteTasks.Count > 0)
+ {
+ await Task.WhenAll(deleteTasks);
+ }
+ }
+ answ = true;
+#if false
var listEndpoints = redisConn.GetEndPoints();
foreach (var endPoint in listEndpoints)
{
@@ -275,7 +306,8 @@ namespace MP.Data.Services
}
answ = true;
}
- }
+ }
+#endif
return answ;
}
diff --git a/MP.Land/MP.Land.csproj b/MP.Land/MP.Land.csproj
index 43fec057..82282f45 100644
--- a/MP.Land/MP.Land.csproj
+++ b/MP.Land/MP.Land.csproj
@@ -3,7 +3,7 @@
net6.0
MP.Land
- 6.16.2507.1008
+ 6.16.2509.1211
Debug;Release;Debug_LiManDebug
en
True
@@ -51,15 +51,12 @@
-
-
-
diff --git a/MP.Land/Resources/ChangeLog.html b/MP.Land/Resources/ChangeLog.html
index 02ae2f77..574c2d4c 100644
--- a/MP.Land/Resources/ChangeLog.html
+++ b/MP.Land/Resources/ChangeLog.html
@@ -1,6 +1,6 @@
Modulo Tablet MAPO - DotNet6
-
Versione: 6.16.2507.1008
+ Versione: 6.16.2509.1211
Note di rilascio:
diff --git a/MP.Land/Resources/VersNum.txt b/MP.Land/Resources/VersNum.txt
index a230f607..fe790325 100644
--- a/MP.Land/Resources/VersNum.txt
+++ b/MP.Land/Resources/VersNum.txt
@@ -1 +1 @@
-6.16.2507.1008
+6.16.2509.1211
diff --git a/MP.Land/Resources/manifest.xml b/MP.Land/Resources/manifest.xml
index ffa6b935..23e2d00c 100644
--- a/MP.Land/Resources/manifest.xml
+++ b/MP.Land/Resources/manifest.xml
@@ -1,6 +1,6 @@
-
- 6.16.2507.1008
+ 6.16.2509.1211
https://nexus.steamware.net/repository/SWS/MP-LAND/stable/LAST/MP.Land.zip
https://nexus.steamware.net/repository/SWS/MP-LAND/stable/LAST/ChangeLog.html
false
diff --git a/MP.MON/MP.MON.csproj b/MP.MON/MP.MON.csproj
index 42dd6a7e..5f0c597f 100644
--- a/MP.MON/MP.MON.csproj
+++ b/MP.MON/MP.MON.csproj
@@ -6,7 +6,7 @@
enable
MP.MON
$(AssemblyName.Replace(' ', '_'))
- 6.16.2506.3014
+ 6.16.2509.1210
diff --git a/MP.MON/Resources/ChangeLog.html b/MP.MON/Resources/ChangeLog.html
index 8d295a3e..08b56ec0 100644
--- a/MP.MON/Resources/ChangeLog.html
+++ b/MP.MON/Resources/ChangeLog.html
@@ -1,6 +1,6 @@
Modulo MAPOSPEC
-
Versione: 6.16.2506.3014
+ Versione: 6.16.2509.1210
Note di rilascio:
-
diff --git a/MP.MON/Resources/VersNum.txt b/MP.MON/Resources/VersNum.txt
index a612c160..7bfb38a1 100644
--- a/MP.MON/Resources/VersNum.txt
+++ b/MP.MON/Resources/VersNum.txt
@@ -1 +1 @@
-6.16.2506.3014
+6.16.2509.1210
diff --git a/MP.MON/Resources/manifest.xml b/MP.MON/Resources/manifest.xml
index 96d7d7a3..e2f3aea8 100644
--- a/MP.MON/Resources/manifest.xml
+++ b/MP.MON/Resources/manifest.xml
@@ -1,6 +1,6 @@
-
- 6.16.2506.3014
+ 6.16.2509.1210
https://nexus.steamware.net/repository/SWS/MP-MON/stable/LAST/MP.MON.zip
https://nexus.steamware.net/repository/SWS/MP-MON/stable/LAST/ChangeLog.html
false
diff --git a/MP.SPEC/Data/MpDataService.cs b/MP.SPEC/Data/MpDataService.cs
index d2f06695..c11f5885 100644
--- a/MP.SPEC/Data/MpDataService.cs
+++ b/MP.SPEC/Data/MpDataService.cs
@@ -887,11 +887,45 @@ namespace MP.SPEC.Data
///
/// Esegue flush memoria redis dato keyVal
///
- ///
+ ///
///
- public bool ExecFlushRedisPattern(string pattern)
+ public bool ExecFlushRedisPattern(string pat2Flush)
{
bool answ = false;
+ var masterEndpoint = redisConn.GetEndPoints()
+ .Where(ep => redisConn.GetServer(ep).IsConnected && !redisConn.GetServer(ep).IsReplica)
+ .FirstOrDefault();
+
+ // sepattern è "*" elimino intero DB...
+ if (masterEndpoint != null && (pat2Flush.Equals(new RedisValue("*")) || pat2Flush == RedisValue.Null))
+ {
+ redisConn.GetServer(masterEndpoint).FlushDatabase(database: redisDb.Database);
+ }
+ else
+ {
+ var server = redisConn.GetServer(masterEndpoint);
+ var keys = server.Keys(database: redisDb.Database, pattern: pat2Flush, pageSize: 1000);
+ var batch = new List();
+ foreach (var key in keys)
+ {
+ batch.Add(key);
+
+ // Flush in batches of 1000
+ if (batch.Count >= 1000)
+ {
+ foreach (var item in batch)
+ redisDb.KeyDelete(item);
+
+ batch.Clear();
+ }
+ }
+
+ // Flush remaining keys
+ foreach (var item in batch)
+ redisDb.KeyDelete(item);
+ }
+ answ = true;
+#if false
var listEndpoints = redisConnAdmin.GetEndPoints();
foreach (var endPoint in listEndpoints)
{
@@ -906,18 +940,50 @@ namespace MP.SPEC.Data
}
answ = true;
}
- }
+ }
+#endif
return answ;
}
///
/// Esegue flush memoria redis dato keyVal, async
///
- ///
+ ///
///
- public async Task ExecFlushRedisPatternAsync(RedisValue pattern)
+ public async Task ExecFlushRedisPatternAsync(RedisValue pat2Flush)
{
bool answ = false;
+ var masterEndpoint = redisConn.GetEndPoints()
+ .Where(ep => redisConn.GetServer(ep).IsConnected && !redisConn.GetServer(ep).IsReplica)
+ .FirstOrDefault();
+
+ // sepattern è "*" elimino intero DB...
+ if (masterEndpoint != null && (pat2Flush.Equals(new RedisValue("*")) || pat2Flush == RedisValue.Null))
+ {
+ redisConn.GetServer(masterEndpoint).FlushDatabase(database: redisDb.Database);
+ }
+ else
+ {
+ var server = redisConn.GetServer(masterEndpoint);
+ var keys = server.Keys(database: redisDb.Database, pattern: pat2Flush, pageSize: 1000);
+
+ var deleteTasks = new List();
+ foreach (var key in keys)
+ {
+ deleteTasks.Add(redisDb.KeyDeleteAsync(key));
+ if (deleteTasks.Count >= 1000)
+ {
+ await Task.WhenAll(deleteTasks);
+ deleteTasks.Clear();
+ }
+ }
+ if (deleteTasks.Count > 0)
+ {
+ await Task.WhenAll(deleteTasks);
+ }
+ }
+ answ = true;
+#if false
var listEndpoints = redisConnAdmin.GetEndPoints();
foreach (var endPoint in listEndpoints)
{
@@ -931,7 +997,8 @@ namespace MP.SPEC.Data
}
answ = true;
}
- }
+ }
+#endif
return answ;
}
@@ -2313,7 +2380,7 @@ namespace MP.SPEC.Data
}
///
- /// Effettua conteggio chaivi REDIS dato pattern ricerca
+ /// Effettua conteggio chaivi REDIS dato pat2Flush ricerca
///
///
///
@@ -2848,8 +2915,9 @@ namespace MP.SPEC.Data
#region Private Methods
+#if false
///
- /// Esegue flush memoria redis dato pattern
+ /// Esegue flush memoria redis dato pat2Flush
///
///
///
@@ -2874,7 +2942,8 @@ namespace MP.SPEC.Data
// notifico DoUpdate ai client in ascolto x reset cache
NotifyReloadRequest($"FlushRedisCache | {pattern}");
return answ;
- }
+ }
+#endif
private async Task POdlFlushCache()
{
diff --git a/MP.SPEC/MP.SPEC.csproj b/MP.SPEC/MP.SPEC.csproj
index 03a6ad42..80708f1b 100644
--- a/MP.SPEC/MP.SPEC.csproj
+++ b/MP.SPEC/MP.SPEC.csproj
@@ -5,7 +5,7 @@
enable
enable
MP.SPEC
- 6.16.2509.214
+ 6.16.2509.1211
1800a78a-6ff1-40f9-b490-87fb8bfc1394
en
@@ -41,13 +41,10 @@
-
-
-
diff --git a/MP.SPEC/Resources/ChangeLog.html b/MP.SPEC/Resources/ChangeLog.html
index cb5da5d9..a0c72812 100644
--- a/MP.SPEC/Resources/ChangeLog.html
+++ b/MP.SPEC/Resources/ChangeLog.html
@@ -1,6 +1,6 @@
Modulo MAPOSPEC
-
Versione: 6.16.2509.214
+ Versione: 6.16.2509.1211
Note di rilascio:
-
diff --git a/MP.SPEC/Resources/VersNum.txt b/MP.SPEC/Resources/VersNum.txt
index 7ea1fe99..fe790325 100644
--- a/MP.SPEC/Resources/VersNum.txt
+++ b/MP.SPEC/Resources/VersNum.txt
@@ -1 +1 @@
-6.16.2509.214
+6.16.2509.1211
diff --git a/MP.SPEC/Resources/manifest.xml b/MP.SPEC/Resources/manifest.xml
index e444c9c2..729537ed 100644
--- a/MP.SPEC/Resources/manifest.xml
+++ b/MP.SPEC/Resources/manifest.xml
@@ -1,6 +1,6 @@
-
- 6.16.2509.214
+ 6.16.2509.1211
https://nexus.steamware.net/repository/SWS/MP-SPEC/stable/LAST/MP.SPEC.zip
https://nexus.steamware.net/repository/SWS/MP-SPEC/stable/LAST/ChangeLog.html
false
diff --git a/MP.Stats/Data/MpStatsService.cs b/MP.Stats/Data/MpStatsService.cs
index 802dfc5e..af77da86 100644
--- a/MP.Stats/Data/MpStatsService.cs
+++ b/MP.Stats/Data/MpStatsService.cs
@@ -825,13 +825,44 @@ namespace MP.Stats.Data
}
///
- /// Esegue flush memoria redis dato pattern
+ /// Esegue flush memoria redis dato pat2Flush
///
- ///
+ ///
///
- private async Task ExecFlushRedisPattern(RedisValue pattern)
+ private async Task ExecFlushRedisPattern(RedisValue pat2Flush)
{
bool answ = false;
+ var masterEndpoint = redisConn.GetEndPoints()
+ .Where(ep => redisConn.GetServer(ep).IsConnected && !redisConn.GetServer(ep).IsReplica)
+ .FirstOrDefault();
+
+ // sepattern è "*" elimino intero DB...
+ if (masterEndpoint != null && (pat2Flush.Equals(new RedisValue("*")) || pat2Flush == RedisValue.Null))
+ {
+ redisConn.GetServer(masterEndpoint).FlushDatabase(database: redisDb.Database);
+ }
+ else
+ {
+ var server = redisConn.GetServer(masterEndpoint);
+ var keys = server.Keys(database: redisDb.Database, pattern: pat2Flush, pageSize: 1000);
+
+ var deleteTasks = new List();
+ foreach (var key in keys)
+ {
+ deleteTasks.Add(redisDb.KeyDeleteAsync(key));
+ if (deleteTasks.Count >= 1000)
+ {
+ await Task.WhenAll(deleteTasks);
+ deleteTasks.Clear();
+ }
+ }
+ if (deleteTasks.Count > 0)
+ {
+ await Task.WhenAll(deleteTasks);
+ }
+ }
+ answ = true;
+#if false
var listEndpoints = redisConn.GetEndPoints();
foreach (var endPoint in listEndpoints)
{
@@ -846,9 +877,10 @@ namespace MP.Stats.Data
}
answ = true;
}
- }
+ }
+#endif
// notifico update ai client in ascolto x reset cache
- NotifyReloadRequest($"FlushRedisCache | {pattern}");
+ NotifyReloadRequest($"FlushRedisCache | {pat2Flush}");
return answ;
}
diff --git a/MP.Stats/MP.Stats.csproj b/MP.Stats/MP.Stats.csproj
index 58301e9c..edbeaf58 100644
--- a/MP.Stats/MP.Stats.csproj
+++ b/MP.Stats/MP.Stats.csproj
@@ -4,8 +4,8 @@
net6.0
MP.Stats
826e877c-ba70-4253-84cb-d0b1cafd4440
- 6.16.2508.0515
- 6.16.2508.0515
+ 6.16.2509.1211
+ 6.16.2509.1211
true
$(NoWarn);1591
en
@@ -196,7 +196,6 @@
-
diff --git a/MP.Stats/Resources/ChangeLog.html b/MP.Stats/Resources/ChangeLog.html
index fc80e3f7..8c8f9ae5 100644
--- a/MP.Stats/Resources/ChangeLog.html
+++ b/MP.Stats/Resources/ChangeLog.html
@@ -1,6 +1,6 @@
Modulo statistiche MAPO
- Versione: 6.16.2508.0515
+ Versione: 6.16.2509.1211
Note di rilascio:
diff --git a/MP.Stats/Resources/VersNum.txt b/MP.Stats/Resources/VersNum.txt
index 15ade300..fe790325 100644
--- a/MP.Stats/Resources/VersNum.txt
+++ b/MP.Stats/Resources/VersNum.txt
@@ -1 +1 @@
-6.16.2508.0515
+6.16.2509.1211
diff --git a/MP.Stats/Resources/manifest.xml b/MP.Stats/Resources/manifest.xml
index 7b0fd649..ed4a3d4e 100644
--- a/MP.Stats/Resources/manifest.xml
+++ b/MP.Stats/Resources/manifest.xml
@@ -1,6 +1,6 @@
-
- 6.16.2508.0515
+ 6.16.2509.1211
https://nexus.steamware.net/repository/SWS/MP-STATS/stable/LAST/MP.Stats.zip
https://nexus.steamware.net/repository/SWS/MP-STATS/stable/LAST/ChangeLog.html
false
diff --git a/MP.TaskMan/MP.TaskMan.csproj b/MP.TaskMan/MP.TaskMan.csproj
index a2a730ed..de55e02d 100644
--- a/MP.TaskMan/MP.TaskMan.csproj
+++ b/MP.TaskMan/MP.TaskMan.csproj
@@ -12,8 +12,8 @@
-
-
+
+
@@ -26,7 +26,7 @@
-
+
diff --git a/MP.TaskMan/Services/TaskService.cs b/MP.TaskMan/Services/TaskService.cs
index ae542b06..7727f72a 100644
--- a/MP.TaskMan/Services/TaskService.cs
+++ b/MP.TaskMan/Services/TaskService.cs
@@ -399,13 +399,47 @@ namespace MP.TaskMan.Services
#region Private Methods
///
- /// Esegue flush memoria redis dato pattern
+ /// Esegue flush memoria redis dato pat2Flush
///
- ///
+ ///
///
- private bool ExecFlushRedisPattern(RedisValue pattern)
+ private bool ExecFlushRedisPattern(RedisValue pat2Flush)
{
bool answ = false;
+ var masterEndpoint = redisConn.GetEndPoints()
+ .Where(ep => redisConn.GetServer(ep).IsConnected && !redisConn.GetServer(ep).IsReplica)
+ .FirstOrDefault();
+
+ // sepattern è "*" elimino intero DB...
+ if (masterEndpoint != null && (pat2Flush.Equals(new RedisValue("*")) || pat2Flush == RedisValue.Null))
+ {
+ redisConn.GetServer(masterEndpoint).FlushDatabase(database: redisDb.Database);
+ }
+ else
+ {
+ var server = redisConn.GetServer(masterEndpoint);
+ var keys = server.Keys(database: redisDb.Database, pattern: pat2Flush, pageSize: 1000);
+ var batch = new List();
+ foreach (var key in keys)
+ {
+ batch.Add(key);
+
+ // Flush in batches of 1000
+ if (batch.Count >= 1000)
+ {
+ foreach (var item in batch)
+ redisDb.KeyDelete(item);
+
+ batch.Clear();
+ }
+ }
+
+ // Flush remaining keys
+ foreach (var item in batch)
+ redisDb.KeyDelete(item);
+ }
+ answ = true;
+#if false
var listEndpoints = redisConn.GetEndPoints();
foreach (var endPoint in listEndpoints)
{
@@ -420,20 +454,52 @@ namespace MP.TaskMan.Services
}
answ = true;
}
- }
+ }
+#endif
// notifico update ai client in ascolto x reset cache
- NotifyReloadRequest($"FlushRedisCache | {pattern}");
+ NotifyReloadRequest($"FlushRedisCache | {pat2Flush}");
return answ;
}
///
- /// Esegue flush memoria redis dato pattern modalità Async
+ /// Esegue flush memoria redis dato pat2Flush modalità Async
///
- ///
+ ///
///
- private async Task ExecFlushRedisPatternAsync(RedisValue pattern)
+ private async Task ExecFlushRedisPatternAsync(RedisValue pat2Flush)
{
bool answ = false;
+ var masterEndpoint = redisConn.GetEndPoints()
+ .Where(ep => redisConn.GetServer(ep).IsConnected && !redisConn.GetServer(ep).IsReplica)
+ .FirstOrDefault();
+
+ // sepattern è "*" elimino intero DB...
+ if (masterEndpoint != null && (pat2Flush.Equals(new RedisValue("*")) || pat2Flush == RedisValue.Null))
+ {
+ redisConn.GetServer(masterEndpoint).FlushDatabase(database: redisDb.Database);
+ }
+ else
+ {
+ var server = redisConn.GetServer(masterEndpoint);
+ var keys = server.Keys(database: redisDb.Database, pattern: pat2Flush, pageSize: 1000);
+
+ var deleteTasks = new List();
+ foreach (var key in keys)
+ {
+ deleteTasks.Add(redisDb.KeyDeleteAsync(key));
+ if (deleteTasks.Count >= 1000)
+ {
+ await Task.WhenAll(deleteTasks);
+ deleteTasks.Clear();
+ }
+ }
+ if (deleteTasks.Count > 0)
+ {
+ await Task.WhenAll(deleteTasks);
+ }
+ }
+ answ = true;
+#if false
var listEndpoints = redisConn.GetEndPoints();
foreach (var endPoint in listEndpoints)
{
@@ -448,9 +514,10 @@ namespace MP.TaskMan.Services
}
answ = true;
}
- }
+ }
+#endif
// notifico update ai client in ascolto x reset cache
- NotifyReloadRequest($"FlushRedisCache | {pattern}");
+ NotifyReloadRequest($"FlushRedisCache | {pat2Flush}");
return answ;
}