diff options
author | Justin Clark-Casey (justincc) | 2011-07-04 22:51:47 +0100 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2011-07-04 22:51:47 +0100 |
commit | bebc51a6e041d2bcd8fef110ea5b178ac614c59d (patch) | |
tree | 24607e305f4208dac6caaa0e738817298fd223d6 | |
parent | refactor: Split file cache manipulation code into separate methods, as has al... (diff) | |
download | opensim-SC-bebc51a6e041d2bcd8fef110ea5b178ac614c59d.zip opensim-SC-bebc51a6e041d2bcd8fef110ea5b178ac614c59d.tar.gz opensim-SC-bebc51a6e041d2bcd8fef110ea5b178ac614c59d.tar.bz2 opensim-SC-bebc51a6e041d2bcd8fef110ea5b178ac614c59d.tar.xz |
Make it possible to disable the file part of the flotsam asset cache
This matches the ability to disable the memory part
This is controlled through the FileCacheEnabled parameter in FlotsamCache.ini
Default is true, so existing installations are not affected.
Improved fcache command feedback when various caches are disabled.
Re-enabled test for flotsam cache with file caching disabled.
-rw-r--r-- | OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs | 110 | ||||
-rw-r--r-- | OpenSim/Region/CoreModules/Asset/Tests/FlotsamAssetCacheTests.cs | 3 | ||||
-rw-r--r-- | bin/config-include/FlotsamCache.ini.example | 5 |
3 files changed, 78 insertions, 40 deletions
diff --git a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs index a72cf83..2b3f7f5 100644 --- a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs +++ b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs | |||
@@ -86,6 +86,8 @@ namespace Flotsam.RegionModules.AssetCache | |||
86 | private List<string> m_CurrentlyWriting = new List<string>(); | 86 | private List<string> m_CurrentlyWriting = new List<string>(); |
87 | #endif | 87 | #endif |
88 | 88 | ||
89 | private bool m_FileCacheEnabled = true; | ||
90 | |||
89 | private ExpiringCache<string, AssetBase> m_MemoryCache; | 91 | private ExpiringCache<string, AssetBase> m_MemoryCache; |
90 | private bool m_MemoryCacheEnabled = false; | 92 | private bool m_MemoryCacheEnabled = false; |
91 | 93 | ||
@@ -146,6 +148,7 @@ namespace Flotsam.RegionModules.AssetCache | |||
146 | } | 148 | } |
147 | else | 149 | else |
148 | { | 150 | { |
151 | m_FileCacheEnabled = assetConfig.GetBoolean("FileCacheEnabled", m_FileCacheEnabled); | ||
149 | m_CacheDirectory = assetConfig.GetString("CacheDirectory", m_DefaultCacheDirectory); | 152 | m_CacheDirectory = assetConfig.GetString("CacheDirectory", m_DefaultCacheDirectory); |
150 | 153 | ||
151 | m_MemoryCacheEnabled = assetConfig.GetBoolean("MemoryCacheEnabled", m_MemoryCacheEnabled); | 154 | m_MemoryCacheEnabled = assetConfig.GetBoolean("MemoryCacheEnabled", m_MemoryCacheEnabled); |
@@ -173,7 +176,7 @@ namespace Flotsam.RegionModules.AssetCache | |||
173 | 176 | ||
174 | m_log.InfoFormat("[FLOTSAM ASSET CACHE]: Cache Directory {0}", m_CacheDirectory); | 177 | m_log.InfoFormat("[FLOTSAM ASSET CACHE]: Cache Directory {0}", m_CacheDirectory); |
175 | 178 | ||
176 | if ((m_FileExpiration > TimeSpan.Zero) && (m_FileExpirationCleanupTimer > TimeSpan.Zero)) | 179 | if (m_FileCacheEnabled && (m_FileExpiration > TimeSpan.Zero) && (m_FileExpirationCleanupTimer > TimeSpan.Zero)) |
177 | { | 180 | { |
178 | m_CacheCleanTimer = new System.Timers.Timer(m_FileExpirationCleanupTimer.TotalMilliseconds); | 181 | m_CacheCleanTimer = new System.Timers.Timer(m_FileExpirationCleanupTimer.TotalMilliseconds); |
179 | m_CacheCleanTimer.AutoReset = true; | 182 | m_CacheCleanTimer.AutoReset = true; |
@@ -312,7 +315,8 @@ namespace Flotsam.RegionModules.AssetCache | |||
312 | if (m_MemoryCacheEnabled) | 315 | if (m_MemoryCacheEnabled) |
313 | UpdateMemoryCache(asset.ID, asset); | 316 | UpdateMemoryCache(asset.ID, asset); |
314 | 317 | ||
315 | UpdateFileCache(asset.ID, asset); | 318 | if (m_FileCacheEnabled) |
319 | UpdateFileCache(asset.ID, asset); | ||
316 | } | 320 | } |
317 | } | 321 | } |
318 | 322 | ||
@@ -411,7 +415,7 @@ namespace Flotsam.RegionModules.AssetCache | |||
411 | 415 | ||
412 | if (m_MemoryCacheEnabled) | 416 | if (m_MemoryCacheEnabled) |
413 | asset = GetFromMemoryCache(id); | 417 | asset = GetFromMemoryCache(id); |
414 | else | 418 | else if (m_FileCacheEnabled) |
415 | asset = GetFromFileCache(id); | 419 | asset = GetFromFileCache(id); |
416 | 420 | ||
417 | if (((m_LogLevel >= 1)) && (m_HitRateDisplay != 0) && (m_Requests % m_HitRateDisplay == 0)) | 421 | if (((m_LogLevel >= 1)) && (m_HitRateDisplay != 0) && (m_Requests % m_HitRateDisplay == 0)) |
@@ -446,10 +450,13 @@ namespace Flotsam.RegionModules.AssetCache | |||
446 | 450 | ||
447 | try | 451 | try |
448 | { | 452 | { |
449 | string filename = GetFileName(id); | 453 | if (m_FileCacheEnabled) |
450 | if (File.Exists(filename)) | ||
451 | { | 454 | { |
452 | File.Delete(filename); | 455 | string filename = GetFileName(id); |
456 | if (File.Exists(filename)) | ||
457 | { | ||
458 | File.Delete(filename); | ||
459 | } | ||
453 | } | 460 | } |
454 | 461 | ||
455 | if (m_MemoryCacheEnabled) | 462 | if (m_MemoryCacheEnabled) |
@@ -464,11 +471,14 @@ namespace Flotsam.RegionModules.AssetCache | |||
464 | public void Clear() | 471 | public void Clear() |
465 | { | 472 | { |
466 | if (m_LogLevel >= 2) | 473 | if (m_LogLevel >= 2) |
467 | m_log.Debug("[FLOTSAM ASSET CACHE]: Clearing Cache."); | 474 | m_log.Debug("[FLOTSAM ASSET CACHE]: Clearing caches."); |
468 | 475 | ||
469 | foreach (string dir in Directory.GetDirectories(m_CacheDirectory)) | 476 | if (m_FileCacheEnabled) |
470 | { | 477 | { |
471 | Directory.Delete(dir); | 478 | foreach (string dir in Directory.GetDirectories(m_CacheDirectory)) |
479 | { | ||
480 | Directory.Delete(dir); | ||
481 | } | ||
472 | } | 482 | } |
473 | 483 | ||
474 | if (m_MemoryCacheEnabled) | 484 | if (m_MemoryCacheEnabled) |
@@ -743,18 +753,28 @@ namespace Flotsam.RegionModules.AssetCache | |||
743 | switch (cmd) | 753 | switch (cmd) |
744 | { | 754 | { |
745 | case "status": | 755 | case "status": |
746 | m_log.InfoFormat("[FLOTSAM ASSET CACHE] Memory Cache : {0} assets", m_MemoryCache.Count); | 756 | if (m_MemoryCacheEnabled) |
747 | 757 | m_log.InfoFormat("[FLOTSAM ASSET CACHE]: Memory Cache : {0} assets", m_MemoryCache.Count); | |
748 | int fileCount = GetFileCacheCount(m_CacheDirectory); | 758 | else |
749 | m_log.InfoFormat("[FLOTSAM ASSET CACHE] File Cache : {0} assets", fileCount); | 759 | m_log.InfoFormat("[FLOTSAM ASSET CACHE]: Memory cache disabled"); |
750 | 760 | ||
751 | foreach (string s in Directory.GetFiles(m_CacheDirectory, "*.fac")) | 761 | if (m_FileCacheEnabled) |
752 | { | 762 | { |
753 | m_log.Info("[FLOTSAM ASSET CACHE] Deep Scans were performed on the following regions:"); | 763 | int fileCount = GetFileCacheCount(m_CacheDirectory); |
754 | 764 | m_log.InfoFormat("[FLOTSAM ASSET CACHE]: File Cache : {0} assets", fileCount); | |
755 | string RegionID = s.Remove(0,s.IndexOf("_")).Replace(".fac",""); | 765 | |
756 | DateTime RegionDeepScanTMStamp = File.GetLastWriteTime(s); | 766 | foreach (string s in Directory.GetFiles(m_CacheDirectory, "*.fac")) |
757 | m_log.InfoFormat("[FLOTSAM ASSET CACHE] Region: {0}, {1}", RegionID, RegionDeepScanTMStamp.ToString("MM/dd/yyyy hh:mm:ss")); | 767 | { |
768 | m_log.Info("[FLOTSAM ASSET CACHE]: Deep Scans were performed on the following regions:"); | ||
769 | |||
770 | string RegionID = s.Remove(0,s.IndexOf("_")).Replace(".fac",""); | ||
771 | DateTime RegionDeepScanTMStamp = File.GetLastWriteTime(s); | ||
772 | m_log.InfoFormat("[FLOTSAM ASSET CACHE]: Region: {0}, {1}", RegionID, RegionDeepScanTMStamp.ToString("MM/dd/yyyy hh:mm:ss")); | ||
773 | } | ||
774 | } | ||
775 | else | ||
776 | { | ||
777 | m_log.InfoFormat("[FLOTSAM ASSET CACHE]: File cache disabled"); | ||
758 | } | 778 | } |
759 | 779 | ||
760 | break; | 780 | break; |
@@ -762,7 +782,7 @@ namespace Flotsam.RegionModules.AssetCache | |||
762 | case "clear": | 782 | case "clear": |
763 | if (cmdparams.Length < 2) | 783 | if (cmdparams.Length < 2) |
764 | { | 784 | { |
765 | m_log.Warn("[FLOTSAM ASSET CACHE] Usage is fcache clear [file] [memory]"); | 785 | m_log.Warn("[FLOTSAM ASSET CACHE]: Usage is fcache clear [file] [memory]"); |
766 | break; | 786 | break; |
767 | } | 787 | } |
768 | 788 | ||
@@ -783,36 +803,48 @@ namespace Flotsam.RegionModules.AssetCache | |||
783 | 803 | ||
784 | if (clearMemory) | 804 | if (clearMemory) |
785 | { | 805 | { |
786 | m_MemoryCache.Clear(); | 806 | if (m_MemoryCacheEnabled) |
787 | m_log.Info("[FLOTSAM ASSET CACHE] Memory cache cleared."); | 807 | { |
808 | m_MemoryCache.Clear(); | ||
809 | m_log.Info("[FLOTSAM ASSET CACHE]: Memory cache cleared."); | ||
810 | } | ||
811 | else | ||
812 | { | ||
813 | m_log.Info("[FLOTSAM ASSET CACHE]: Memory cache not enabled."); | ||
814 | } | ||
788 | } | 815 | } |
789 | 816 | ||
790 | if (clearFile) | 817 | if (clearFile) |
791 | { | 818 | { |
792 | ClearFileCache(); | 819 | if (m_FileCacheEnabled) |
793 | m_log.Info("[FLOTSAM ASSET CACHE] File cache cleared."); | 820 | { |
821 | ClearFileCache(); | ||
822 | m_log.Info("[FLOTSAM ASSET CACHE]: File cache cleared."); | ||
823 | } | ||
824 | else | ||
825 | { | ||
826 | m_log.Info("[FLOTSAM ASSET CACHE]: File cache not enabled."); | ||
827 | } | ||
794 | } | 828 | } |
795 | 829 | ||
796 | break; | 830 | break; |
797 | 831 | ||
798 | 832 | ||
799 | case "assets": | 833 | case "assets": |
800 | m_log.Info("[FLOTSAM ASSET CACHE] Caching all assets, in all scenes."); | 834 | m_log.Info("[FLOTSAM ASSET CACHE]: Caching all assets, in all scenes."); |
801 | 835 | ||
802 | Util.FireAndForget(delegate { | 836 | Util.FireAndForget(delegate { |
803 | int assetsCached = CacheScenes(); | 837 | int assetsCached = CacheScenes(); |
804 | m_log.InfoFormat("[FLOTSAM ASSET CACHE] Completed Scene Caching, {0} assets found.", assetsCached); | 838 | m_log.InfoFormat("[FLOTSAM ASSET CACHE]: Completed Scene Caching, {0} assets found.", assetsCached); |
805 | 839 | ||
806 | }); | 840 | }); |
807 | 841 | ||
808 | break; | 842 | break; |
809 | 843 | ||
810 | case "expire": | 844 | case "expire": |
811 | |||
812 | |||
813 | if (cmdparams.Length < 3) | 845 | if (cmdparams.Length < 3) |
814 | { | 846 | { |
815 | m_log.InfoFormat("[FLOTSAM ASSET CACHE] Invalid parameters for Expire, please specify a valid date & time", cmd); | 847 | m_log.InfoFormat("[FLOTSAM ASSET CACHE]: Invalid parameters for Expire, please specify a valid date & time", cmd); |
816 | break; | 848 | break; |
817 | } | 849 | } |
818 | 850 | ||
@@ -830,26 +862,28 @@ namespace Flotsam.RegionModules.AssetCache | |||
830 | 862 | ||
831 | if (!DateTime.TryParse(s_expirationDate, out expirationDate)) | 863 | if (!DateTime.TryParse(s_expirationDate, out expirationDate)) |
832 | { | 864 | { |
833 | m_log.InfoFormat("[FLOTSAM ASSET CACHE] {0} is not a valid date & time", cmd); | 865 | m_log.InfoFormat("[FLOTSAM ASSET CACHE]: {0} is not a valid date & time", cmd); |
834 | break; | 866 | break; |
835 | } | 867 | } |
836 | 868 | ||
837 | CleanExpiredFiles(m_CacheDirectory, expirationDate); | 869 | if (m_FileCacheEnabled) |
870 | CleanExpiredFiles(m_CacheDirectory, expirationDate); | ||
871 | else | ||
872 | m_log.InfoFormat("[FLOTSAM ASSET CACHE]: File cache not active, not clearing."); | ||
838 | 873 | ||
839 | break; | 874 | break; |
840 | default: | 875 | default: |
841 | m_log.InfoFormat("[FLOTSAM ASSET CACHE] Unknown command {0}", cmd); | 876 | m_log.InfoFormat("[FLOTSAM ASSET CACHE]: Unknown command {0}", cmd); |
842 | break; | 877 | break; |
843 | } | 878 | } |
844 | } | 879 | } |
845 | else if (cmdparams.Length == 1) | 880 | else if (cmdparams.Length == 1) |
846 | { | 881 | { |
847 | m_log.InfoFormat("[FLOTSAM ASSET CACHE] flotsamcache status - Display cache status"); | 882 | m_log.InfoFormat("[FLOTSAM ASSET CACHE]: fcache status - Display cache status"); |
848 | m_log.InfoFormat("[FLOTSAM ASSET CACHE] flotsamcache clearmem - Remove all assets cached in memory"); | 883 | m_log.InfoFormat("[FLOTSAM ASSET CACHE]: fcache clearmem - Remove all assets cached in memory"); |
849 | m_log.InfoFormat("[FLOTSAM ASSET CACHE] flotsamcache clearfile - Remove all assets cached on disk"); | 884 | m_log.InfoFormat("[FLOTSAM ASSET CACHE]: fcache clearfile - Remove all assets cached on disk"); |
850 | m_log.InfoFormat("[FLOTSAM ASSET CACHE] flotsamcache cachescenes - Attempt a deep cache of all assets in all scenes"); | 885 | m_log.InfoFormat("[FLOTSAM ASSET CACHE]: fcache cachescenes - Attempt a deep cache of all assets in all scenes"); |
851 | m_log.InfoFormat("[FLOTSAM ASSET CACHE] flotsamcache <datetime> - Purge assets older then the specified date & time"); | 886 | m_log.InfoFormat("[FLOTSAM ASSET CACHE]: fcache <datetime> - Purge assets older then the specified date & time"); |
852 | |||
853 | } | 887 | } |
854 | } | 888 | } |
855 | 889 | ||
diff --git a/OpenSim/Region/CoreModules/Asset/Tests/FlotsamAssetCacheTests.cs b/OpenSim/Region/CoreModules/Asset/Tests/FlotsamAssetCacheTests.cs index 3498969..a4aeeda 100644 --- a/OpenSim/Region/CoreModules/Asset/Tests/FlotsamAssetCacheTests.cs +++ b/OpenSim/Region/CoreModules/Asset/Tests/FlotsamAssetCacheTests.cs | |||
@@ -47,7 +47,7 @@ namespace OpenSim.Region.CoreModules.Asset.Tests | |||
47 | [TestFixture] | 47 | [TestFixture] |
48 | public class FlotsamAssetCacheTests | 48 | public class FlotsamAssetCacheTests |
49 | { | 49 | { |
50 | // [Test] | 50 | [Test] |
51 | public void TestCacheAsset() | 51 | public void TestCacheAsset() |
52 | { | 52 | { |
53 | TestHelper.InMethod(); | 53 | TestHelper.InMethod(); |
@@ -58,6 +58,7 @@ namespace OpenSim.Region.CoreModules.Asset.Tests | |||
58 | config.AddConfig("Modules"); | 58 | config.AddConfig("Modules"); |
59 | config.Configs["Modules"].Set("AssetCaching", "FlotsamAssetCache"); | 59 | config.Configs["Modules"].Set("AssetCaching", "FlotsamAssetCache"); |
60 | config.AddConfig("AssetCache"); | 60 | config.AddConfig("AssetCache"); |
61 | config.Configs["AssetCache"].Set("FileCacheEnabled", "false"); | ||
61 | config.Configs["AssetCache"].Set("MemoryCacheEnabled", "true"); | 62 | config.Configs["AssetCache"].Set("MemoryCacheEnabled", "true"); |
62 | 63 | ||
63 | FlotsamAssetCache cache = new FlotsamAssetCache(); | 64 | FlotsamAssetCache cache = new FlotsamAssetCache(); |
diff --git a/bin/config-include/FlotsamCache.ini.example b/bin/config-include/FlotsamCache.ini.example index ad38ad1..cd39f8c 100644 --- a/bin/config-include/FlotsamCache.ini.example +++ b/bin/config-include/FlotsamCache.ini.example | |||
@@ -19,9 +19,12 @@ | |||
19 | ; 0 to disable | 19 | ; 0 to disable |
20 | HitRateDisplay = 100 | 20 | HitRateDisplay = 100 |
21 | 21 | ||
22 | ; Set to false for disk cache only. | 22 | ; Set to false for no memory cache |
23 | MemoryCacheEnabled = false | 23 | MemoryCacheEnabled = false |
24 | 24 | ||
25 | ; Set to false for no file cache | ||
26 | FileCacheEnabled = true | ||
27 | |||
25 | ; How long {in hours} to keep assets cached in memory, .5 == 30 minutes | 28 | ; How long {in hours} to keep assets cached in memory, .5 == 30 minutes |
26 | ; Optimization: for VPS or limited memory system installs set Timeout to .016 (1 minute) | 29 | ; Optimization: for VPS or limited memory system installs set Timeout to .016 (1 minute) |
27 | ; increases performance without large memory impact | 30 | ; increases performance without large memory impact |