From d52b7948282e2a6d2354dc9a6b8365668254506f Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Tue, 28 Jul 2020 02:57:41 +0100 Subject: [PATCH] flotsam add a cooldown on files expire/deletes also --- .../CoreModules/Asset/FlotsamAssetCache.cs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs index 30fce2f1be..698b193ac2 100755 --- a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs +++ b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs @@ -698,10 +698,11 @@ namespace OpenSim.Region.CoreModules.Asset // before cleaning up expired files we must scan the objects in the scene to make sure that we retain // such local assets if they have not been recently accessed. TouchAllSceneAssets(false); + int cooldown = 0; if(Directory.Exists(m_CacheDirectory)) { foreach (string dir in Directory.GetDirectories(m_CacheDirectory)) - CleanExpiredFiles(dir, purgeLine); + CleanExpiredFiles(dir, purgeLine, ref cooldown); } lock(timerLock) @@ -725,7 +726,7 @@ namespace OpenSim.Region.CoreModules.Asset /// /// /// - private void CleanExpiredFiles(string dir, DateTime purgeLine) + private void CleanExpiredFiles(string dir, DateTime purgeLine, ref int cooldown) { try { @@ -739,6 +740,7 @@ namespace OpenSim.Region.CoreModules.Asset if (File.GetLastAccessTime(file) < purgeLine) { File.Delete(file); + cooldown += 5; string id = Path.GetFileName(file); if(!String.IsNullOrEmpty(id)) { @@ -746,13 +748,18 @@ namespace OpenSim.Region.CoreModules.Asset weakAssetReferences.Remove(id); } } + if(++cooldown >= 100) + { + Thread.Sleep(50); + cooldown = 0; + } } // Recurse into lower tiers foreach (string subdir in Directory.GetDirectories(dir)) { ++dirSize; - CleanExpiredFiles(subdir, purgeLine); + CleanExpiredFiles(subdir, purgeLine, ref cooldown); } // Check if a tier directory is empty, if so, delete it @@ -971,7 +978,7 @@ namespace OpenSim.Region.CoreModules.Asset gatherer.AddForInspection(e); gatherer.GatherAll(); - if (++cooldown > 200) + if (++cooldown > 100) { Thread.Sleep(50); cooldown = 0; @@ -1261,7 +1268,8 @@ namespace OpenSim.Region.CoreModules.Asset if (m_FileCacheEnabled) { TouchAllSceneAssets(false); - CleanExpiredFiles(m_CacheDirectory, expirationDate); + int cooldown = 0; + CleanExpiredFiles(m_CacheDirectory, expirationDate, ref cooldown); } else con.Output("File cache not active, not clearing.");