flotsam: more changes
parent
c19a0cc21f
commit
1c37f357b3
|
@ -696,7 +696,7 @@ namespace OpenSim.Region.CoreModules.Asset
|
||||||
long heap = 0;
|
long heap = 0;
|
||||||
//if (m_LogLevel >= 2)
|
//if (m_LogLevel >= 2)
|
||||||
{
|
{
|
||||||
m_log.DebugFormat("[FLOTSAM ASSET CACHE]: Start Check for expired files older then {0}.", m_FileExpiration);
|
m_log.InfoFormat("[FLOTSAM ASSET CACHE]: Start Check for expired files older then {0}.", m_FileExpiration);
|
||||||
heap = GC.GetTotalMemory(false);
|
heap = GC.GetTotalMemory(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -708,7 +708,7 @@ namespace OpenSim.Region.CoreModules.Asset
|
||||||
int cooldown = 0;
|
int cooldown = 0;
|
||||||
m_log.Info("[FLOTSAM ASSET CACHE] do asset files expire");
|
m_log.Info("[FLOTSAM ASSET CACHE] do asset files expire");
|
||||||
foreach (string subdir in Directory.GetDirectories(m_CacheDirectory))
|
foreach (string subdir in Directory.GetDirectories(m_CacheDirectory))
|
||||||
CleanExpiredFiles(subdir, gids, purgeLine, ref cooldown);
|
cooldown = await CleanExpiredFiles(subdir, gids, purgeLine, cooldown);
|
||||||
|
|
||||||
lock (timerLock)
|
lock (timerLock)
|
||||||
{
|
{
|
||||||
|
@ -720,7 +720,7 @@ namespace OpenSim.Region.CoreModules.Asset
|
||||||
{
|
{
|
||||||
heap = GC.GetTotalMemory(false) - heap;
|
heap = GC.GetTotalMemory(false) - heap;
|
||||||
double fheap = Math.Round((double)(heap / (1024 * 1024)), 3);
|
double fheap = Math.Round((double)(heap / (1024 * 1024)), 3);
|
||||||
m_log.DebugFormat("[FLOTSAM ASSET CACHE]: Finished Check for expired files, heap delta: {0}MB.", fheap);
|
m_log.InfoFormat("[FLOTSAM ASSET CACHE]: Finished Check for expired files, heap delta: {0}MB.", fheap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -731,78 +731,19 @@ namespace OpenSim.Region.CoreModules.Asset
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="dir"></param>
|
/// <param name="dir"></param>
|
||||||
/// <param name="purgeLine"></param>
|
/// <param name="purgeLine"></param>
|
||||||
private void CleanExpiredFiles(string dir, DateTime purgeLine, ref int cooldown)
|
private async Task<int> CleanExpiredFiles(string dir, Dictionary<UUID, sbyte> gids, DateTime purgeLine, int cooldown)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (!Directory.Exists(dir))
|
if (!Directory.Exists(dir))
|
||||||
return;
|
return cooldown;
|
||||||
|
|
||||||
int dirSize = 0;
|
|
||||||
foreach (string file in Directory.GetFiles(dir))
|
|
||||||
{
|
|
||||||
++dirSize;
|
|
||||||
if (File.GetLastAccessTime(file) < purgeLine)
|
|
||||||
{
|
|
||||||
File.Delete(file);
|
|
||||||
cooldown += 2;
|
|
||||||
string id = Path.GetFileName(file);
|
|
||||||
if(!String.IsNullOrEmpty(id))
|
|
||||||
{
|
|
||||||
lock (weakAssetReferencesLock)
|
|
||||||
weakAssetReferences.Remove(id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(++cooldown >= 30)
|
|
||||||
{
|
|
||||||
Thread.Sleep(50);
|
|
||||||
cooldown = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Recurse into lower tiers
|
|
||||||
foreach (string subdir in Directory.GetDirectories(dir))
|
|
||||||
{
|
|
||||||
++dirSize;
|
|
||||||
CleanExpiredFiles(subdir, purgeLine, ref cooldown);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if a tier directory is empty, if so, delete it
|
|
||||||
if (dirSize == 0)
|
|
||||||
{
|
|
||||||
Directory.Delete(dir);
|
|
||||||
}
|
|
||||||
else if (dirSize >= m_CacheWarnAt)
|
|
||||||
{
|
|
||||||
m_log.WarnFormat(
|
|
||||||
"[FLOTSAM ASSET CACHE]: Cache folder exceeded CacheWarnAt limit {0} {1}. Suggest increasing tiers, tier length, or reducing cache expiration",
|
|
||||||
dir, dirSize);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (DirectoryNotFoundException)
|
|
||||||
{
|
|
||||||
// If we get here, another node on the same box has
|
|
||||||
// already removed the directory. Continue with next.
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
m_log.WarnFormat("[FLOTSAM ASSET CACHE]: Could not complete clean of expired files in {0}, exception {1}", dir, e.Message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void CleanExpiredFiles(string dir, Dictionary<UUID, sbyte> gids, DateTime purgeLine, ref int cooldown)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (!Directory.Exists(dir))
|
|
||||||
return;
|
|
||||||
|
|
||||||
int dirSize = 0;
|
int dirSize = 0;
|
||||||
foreach (string file in Directory.GetFiles(dir))
|
foreach (string file in Directory.GetFiles(dir))
|
||||||
{
|
{
|
||||||
|
|
||||||
if (!m_cleanupRunning)
|
if (!m_cleanupRunning)
|
||||||
return;
|
return cooldown;
|
||||||
|
|
||||||
++dirSize;
|
++dirSize;
|
||||||
string id = Path.GetFileName(file);
|
string id = Path.GetFileName(file);
|
||||||
|
@ -819,9 +760,9 @@ namespace OpenSim.Region.CoreModules.Asset
|
||||||
lock (weakAssetReferencesLock)
|
lock (weakAssetReferencesLock)
|
||||||
weakAssetReferences.Remove(id);
|
weakAssetReferences.Remove(id);
|
||||||
}
|
}
|
||||||
if (++cooldown >= 30)
|
if (++cooldown >= 20)
|
||||||
{
|
{
|
||||||
Thread.Sleep(50);
|
await Task.Delay(60).ConfigureAwait(false);
|
||||||
cooldown = 0;
|
cooldown = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -830,10 +771,10 @@ namespace OpenSim.Region.CoreModules.Asset
|
||||||
foreach (string subdir in Directory.GetDirectories(dir))
|
foreach (string subdir in Directory.GetDirectories(dir))
|
||||||
{
|
{
|
||||||
if (!m_cleanupRunning)
|
if (!m_cleanupRunning)
|
||||||
return;
|
return cooldown;
|
||||||
|
|
||||||
++dirSize;
|
++dirSize;
|
||||||
CleanExpiredFiles(subdir, gids, purgeLine, ref cooldown);
|
cooldown = await CleanExpiredFiles(subdir, gids, purgeLine, cooldown);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if a tier directory is empty, if so, delete it
|
// Check if a tier directory is empty, if so, delete it
|
||||||
|
@ -857,6 +798,7 @@ namespace OpenSim.Region.CoreModules.Asset
|
||||||
{
|
{
|
||||||
m_log.WarnFormat("[FLOTSAM ASSET CACHE]: Could not complete clean of expired files in {0}, exception {1}", dir, e.Message);
|
m_log.WarnFormat("[FLOTSAM ASSET CACHE]: Could not complete clean of expired files in {0}, exception {1}", dir, e.Message);
|
||||||
}
|
}
|
||||||
|
return cooldown;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -1059,7 +1001,6 @@ namespace OpenSim.Region.CoreModules.Asset
|
||||||
int cooldown = 0;
|
int cooldown = 0;
|
||||||
foreach (Scene s in m_Scenes)
|
foreach (Scene s in m_Scenes)
|
||||||
{
|
{
|
||||||
StampRegionStatusFile(s.RegionInfo.RegionID);
|
|
||||||
gatherer.AddGathered(s.RegionInfo.RegionSettings.TerrainTexture1, (sbyte)AssetType.Texture);
|
gatherer.AddGathered(s.RegionInfo.RegionSettings.TerrainTexture1, (sbyte)AssetType.Texture);
|
||||||
gatherer.AddGathered(s.RegionInfo.RegionSettings.TerrainTexture2, (sbyte)AssetType.Texture);
|
gatherer.AddGathered(s.RegionInfo.RegionSettings.TerrainTexture2, (sbyte)AssetType.Texture);
|
||||||
gatherer.AddGathered(s.RegionInfo.RegionSettings.TerrainTexture3, (sbyte)AssetType.Texture);
|
gatherer.AddGathered(s.RegionInfo.RegionSettings.TerrainTexture3, (sbyte)AssetType.Texture);
|
||||||
|
@ -1111,6 +1052,8 @@ namespace OpenSim.Region.CoreModules.Asset
|
||||||
entities = null;
|
entities = null;
|
||||||
if (!m_cleanupRunning)
|
if (!m_cleanupRunning)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
StampRegionStatusFile(s.RegionInfo.RegionID);
|
||||||
}
|
}
|
||||||
|
|
||||||
gatherer.GatherAll();
|
gatherer.GatherAll();
|
||||||
|
|
Loading…
Reference in New Issue