aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs110
-rw-r--r--OpenSim/Region/CoreModules/Asset/Tests/FlotsamAssetCacheTests.cs3
-rw-r--r--bin/config-include/FlotsamCache.ini.example5
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