diff options
Merge branch 'master' of ssh://opensimulator.org/var/git/opensim
Diffstat (limited to 'OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs')
-rw-r--r-- | OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs | 37 |
1 files changed, 17 insertions, 20 deletions
diff --git a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs index 5d8a278..8aa173a 100644 --- a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs +++ b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs | |||
@@ -107,8 +107,6 @@ namespace OpenSim.Region.CoreModules.Asset | |||
107 | private IAssetService m_AssetService; | 107 | private IAssetService m_AssetService; |
108 | private List<Scene> m_Scenes = new List<Scene>(); | 108 | private List<Scene> m_Scenes = new List<Scene>(); |
109 | 109 | ||
110 | private bool m_DeepScanBeforePurge; | ||
111 | |||
112 | public FlotsamAssetCache() | 110 | public FlotsamAssetCache() |
113 | { | 111 | { |
114 | m_InvalidChars.AddRange(Path.GetInvalidPathChars()); | 112 | m_InvalidChars.AddRange(Path.GetInvalidPathChars()); |
@@ -170,8 +168,6 @@ namespace OpenSim.Region.CoreModules.Asset | |||
170 | m_CacheDirectoryTierLen = assetConfig.GetInt("CacheDirectoryTierLength", m_CacheDirectoryTierLen); | 168 | m_CacheDirectoryTierLen = assetConfig.GetInt("CacheDirectoryTierLength", m_CacheDirectoryTierLen); |
171 | 169 | ||
172 | m_CacheWarnAt = assetConfig.GetInt("CacheWarnAt", m_CacheWarnAt); | 170 | m_CacheWarnAt = assetConfig.GetInt("CacheWarnAt", m_CacheWarnAt); |
173 | |||
174 | m_DeepScanBeforePurge = assetConfig.GetBoolean("DeepScanBeforePurge", m_DeepScanBeforePurge); | ||
175 | } | 171 | } |
176 | 172 | ||
177 | m_log.InfoFormat("[FLOTSAM ASSET CACHE]: Cache Directory {0}", m_CacheDirectory); | 173 | m_log.InfoFormat("[FLOTSAM ASSET CACHE]: Cache Directory {0}", m_CacheDirectory); |
@@ -506,13 +502,10 @@ namespace OpenSim.Region.CoreModules.Asset | |||
506 | // Purge all files last accessed prior to this point | 502 | // Purge all files last accessed prior to this point |
507 | DateTime purgeLine = DateTime.Now - m_FileExpiration; | 503 | DateTime purgeLine = DateTime.Now - m_FileExpiration; |
508 | 504 | ||
509 | // An optional deep scan at this point will ensure assets present in scenes, | 505 | // An asset cache may contain local non-temporary assets that are not in the asset service. Therefore, |
510 | // or referenced by objects in the scene, but not recently accessed | 506 | // before cleaning up expired files we must scan the objects in the scene to make sure that we retain |
511 | // are not purged. | 507 | // such local assets if they have not been recently accessed. |
512 | if (m_DeepScanBeforePurge) | 508 | TouchAllSceneAssets(false); |
513 | { | ||
514 | CacheScenes(); | ||
515 | } | ||
516 | 509 | ||
517 | foreach (string dir in Directory.GetDirectories(m_CacheDirectory)) | 510 | foreach (string dir in Directory.GetDirectories(m_CacheDirectory)) |
518 | { | 511 | { |
@@ -705,11 +698,14 @@ namespace OpenSim.Region.CoreModules.Asset | |||
705 | 698 | ||
706 | /// <summary> | 699 | /// <summary> |
707 | /// Iterates through all Scenes, doing a deep scan through assets | 700 | /// Iterates through all Scenes, doing a deep scan through assets |
708 | /// to cache all assets present in the scene or referenced by assets | 701 | /// to update the access time of all assets present in the scene or referenced by assets |
709 | /// in the scene | 702 | /// in the scene. |
710 | /// </summary> | 703 | /// </summary> |
711 | /// <returns></returns> | 704 | /// <param name="storeUncached"> |
712 | private int CacheScenes() | 705 | /// If true, then assets scanned which are not found in cache are added to the cache. |
706 | /// </param> | ||
707 | /// <returns>Number of distinct asset references found in the scene.</returns> | ||
708 | private int TouchAllSceneAssets(bool storeUncached) | ||
713 | { | 709 | { |
714 | UuidGatherer gatherer = new UuidGatherer(m_AssetService); | 710 | UuidGatherer gatherer = new UuidGatherer(m_AssetService); |
715 | 711 | ||
@@ -732,7 +728,7 @@ namespace OpenSim.Region.CoreModules.Asset | |||
732 | { | 728 | { |
733 | File.SetLastAccessTime(filename, DateTime.Now); | 729 | File.SetLastAccessTime(filename, DateTime.Now); |
734 | } | 730 | } |
735 | else | 731 | else if (storeUncached) |
736 | { | 732 | { |
737 | m_AssetService.Get(assetID.ToString()); | 733 | m_AssetService.Get(assetID.ToString()); |
738 | } | 734 | } |
@@ -860,13 +856,14 @@ namespace OpenSim.Region.CoreModules.Asset | |||
860 | 856 | ||
861 | break; | 857 | break; |
862 | 858 | ||
863 | |||
864 | case "assets": | 859 | case "assets": |
865 | m_log.Info("[FLOTSAM ASSET CACHE]: Caching all assets, in all scenes."); | 860 | m_log.Info("[FLOTSAM ASSET CACHE]: Ensuring assets are cached for all scenes."); |
866 | 861 | ||
867 | Util.FireAndForget(delegate { | 862 | Util.FireAndForget(delegate { |
868 | int assetsCached = CacheScenes(); | 863 | int assetReferenceTotal = TouchAllSceneAssets(true); |
869 | m_log.InfoFormat("[FLOTSAM ASSET CACHE]: Completed Scene Caching, {0} assets found.", assetsCached); | 864 | m_log.InfoFormat( |
865 | "[FLOTSAM ASSET CACHE]: Completed check with {0} assets.", | ||
866 | assetReferenceTotal); | ||
870 | }); | 867 | }); |
871 | 868 | ||
872 | break; | 869 | break; |