aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorMelanie Thielker2009-05-10 12:27:05 +0000
committerMelanie Thielker2009-05-10 12:27:05 +0000
commitd8e1842d2507b2c18b21671ed01496b3a2c59e18 (patch)
tree2ae57cf45dd1b22fe48b72b85c952258d87f60b6
parentFix the build break (diff)
downloadopensim-SC-d8e1842d2507b2c18b21671ed01496b3a2c59e18.zip
opensim-SC-d8e1842d2507b2c18b21671ed01496b3a2c59e18.tar.gz
opensim-SC-d8e1842d2507b2c18b21671ed01496b3a2c59e18.tar.bz2
opensim-SC-d8e1842d2507b2c18b21671ed01496b3a2c59e18.tar.xz
Add some asset cache plumbing. Change the generic cache from UUID to string
keys to allow caching the new crop of URI identified objects.
-rw-r--r--OpenSim/Framework/Cache.cs46
-rw-r--r--OpenSim/Region/CoreModules/Asset/CoreAssetCache.cs32
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs16
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectors/Asset/LocalAssetServiceConnector.cs23
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectors/Asset/RemoteAssetServiceConnector.cs19
-rw-r--r--OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs4
-rw-r--r--OpenSim/Region/Framework/Interfaces/IImprovedAssetCache.cs (renamed from OpenSim/Region/Framework/Interfaces/IAssetCache.cs)6
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs6
8 files changed, 106 insertions, 46 deletions
diff --git a/OpenSim/Framework/Cache.cs b/OpenSim/Framework/Cache.cs
index 3dab9b6..2d49146 100644
--- a/OpenSim/Framework/Cache.cs
+++ b/OpenSim/Framework/Cache.cs
@@ -33,8 +33,8 @@ namespace OpenSim.Framework
33{ 33{
34 // The delegate we will use for performing fetch from backing store 34 // The delegate we will use for performing fetch from backing store
35 // 35 //
36 public delegate Object FetchDelegate(UUID index); 36 public delegate Object FetchDelegate(string index);
37 public delegate bool ExpireDelegate(UUID index); 37 public delegate bool ExpireDelegate(string index);
38 38
39 // Strategy 39 // Strategy
40 // 40 //
@@ -64,14 +64,14 @@ namespace OpenSim.Framework
64 } 64 }
65 65
66 // The base class of all cache objects. Implements comparison and sorting 66 // The base class of all cache objects. Implements comparison and sorting
67 // by the UUID member. 67 // by the string member.
68 // 68 //
69 // This is not abstract because we need to instantiate it briefly as a 69 // This is not abstract because we need to instantiate it briefly as a
70 // method parameter 70 // method parameter
71 // 71 //
72 public class CacheItemBase : IEquatable<CacheItemBase>, IComparable<CacheItemBase> 72 public class CacheItemBase : IEquatable<CacheItemBase>, IComparable<CacheItemBase>
73 { 73 {
74 public UUID uuid; 74 public string uuid;
75 public DateTime entered; 75 public DateTime entered;
76 public DateTime lastUsed; 76 public DateTime lastUsed;
77 public DateTime expires = new DateTime(0); 77 public DateTime expires = new DateTime(0);
@@ -86,14 +86,14 @@ namespace OpenSim.Framework
86 { 86 {
87 } 87 }
88 88
89 public CacheItemBase(UUID index) 89 public CacheItemBase(string index)
90 { 90 {
91 uuid = index; 91 uuid = index;
92 entered = DateTime.Now; 92 entered = DateTime.Now;
93 lastUsed = entered; 93 lastUsed = entered;
94 } 94 }
95 95
96 public CacheItemBase(UUID index, DateTime ttl) 96 public CacheItemBase(string index, DateTime ttl)
97 { 97 {
98 uuid = index; 98 uuid = index;
99 entered = DateTime.Now; 99 entered = DateTime.Now;
@@ -123,23 +123,23 @@ namespace OpenSim.Framework
123 { 123 {
124 private Object m_Data; 124 private Object m_Data;
125 125
126 public MemoryCacheItem(UUID index) : 126 public MemoryCacheItem(string index) :
127 base(index) 127 base(index)
128 { 128 {
129 } 129 }
130 130
131 public MemoryCacheItem(UUID index, DateTime ttl) : 131 public MemoryCacheItem(string index, DateTime ttl) :
132 base(index, ttl) 132 base(index, ttl)
133 { 133 {
134 } 134 }
135 135
136 public MemoryCacheItem(UUID index, Object data) : 136 public MemoryCacheItem(string index, Object data) :
137 base(index) 137 base(index)
138 { 138 {
139 Store(data); 139 Store(data);
140 } 140 }
141 141
142 public MemoryCacheItem(UUID index, DateTime ttl, Object data) : 142 public MemoryCacheItem(string index, DateTime ttl, Object data) :
143 base(index, ttl) 143 base(index, ttl)
144 { 144 {
145 Store(data); 145 Store(data);
@@ -160,23 +160,23 @@ namespace OpenSim.Framework
160 // 160 //
161 public class FileCacheItem : CacheItemBase 161 public class FileCacheItem : CacheItemBase
162 { 162 {
163 public FileCacheItem(UUID index) : 163 public FileCacheItem(string index) :
164 base(index) 164 base(index)
165 { 165 {
166 } 166 }
167 167
168 public FileCacheItem(UUID index, DateTime ttl) : 168 public FileCacheItem(string index, DateTime ttl) :
169 base(index, ttl) 169 base(index, ttl)
170 { 170 {
171 } 171 }
172 172
173 public FileCacheItem(UUID index, Object data) : 173 public FileCacheItem(string index, Object data) :
174 base(index) 174 base(index)
175 { 175 {
176 Store(data); 176 Store(data);
177 } 177 }
178 178
179 public FileCacheItem(UUID index, DateTime ttl, Object data) : 179 public FileCacheItem(string index, DateTime ttl, Object data) :
180 base(index, ttl) 180 base(index, ttl)
181 { 181 {
182 Store(data); 182 Store(data);
@@ -200,8 +200,8 @@ namespace OpenSim.Framework
200 public class Cache 200 public class Cache
201 { 201 {
202 private List<CacheItemBase> m_Index = new List<CacheItemBase>(); 202 private List<CacheItemBase> m_Index = new List<CacheItemBase>();
203 private Dictionary<UUID, CacheItemBase> m_Lookup = 203 private Dictionary<string, CacheItemBase> m_Lookup =
204 new Dictionary<UUID, CacheItemBase>(); 204 new Dictionary<string, CacheItemBase>();
205 205
206 private CacheStrategy m_Strategy; 206 private CacheStrategy m_Strategy;
207 private CacheMedium m_Medium; 207 private CacheMedium m_Medium;
@@ -312,7 +312,7 @@ namespace OpenSim.Framework
312 312
313 // Get an item from cache. Return the raw item, not it's data 313 // Get an item from cache. Return the raw item, not it's data
314 // 314 //
315 protected virtual CacheItemBase GetItem(UUID index) 315 protected virtual CacheItemBase GetItem(string index)
316 { 316 {
317 CacheItemBase item = null; 317 CacheItemBase item = null;
318 318
@@ -339,7 +339,7 @@ namespace OpenSim.Framework
339 // Get an item from cache. Do not try to fetch from source if not 339 // Get an item from cache. Do not try to fetch from source if not
340 // present. Just return null 340 // present. Just return null
341 // 341 //
342 public virtual Object Get(UUID index) 342 public virtual Object Get(string index)
343 { 343 {
344 CacheItemBase item = GetItem(index); 344 CacheItemBase item = GetItem(index);
345 345
@@ -352,7 +352,7 @@ namespace OpenSim.Framework
352 // Fetch an object from backing store if not cached, serve from 352 // Fetch an object from backing store if not cached, serve from
353 // cache if it is. 353 // cache if it is.
354 // 354 //
355 public virtual Object Get(UUID index, FetchDelegate fetch) 355 public virtual Object Get(string index, FetchDelegate fetch)
356 { 356 {
357 Object item = Get(index); 357 Object item = Get(index);
358 if (item != null) 358 if (item != null)
@@ -393,7 +393,7 @@ namespace OpenSim.Framework
393 return item.Retrieve(); 393 return item.Retrieve();
394 } 394 }
395 395
396 public virtual void Store(UUID index, Object data) 396 public virtual void Store(string index, Object data)
397 { 397 {
398 Type container; 398 Type container;
399 399
@@ -411,12 +411,12 @@ namespace OpenSim.Framework
411 Store(index, data, container); 411 Store(index, data, container);
412 } 412 }
413 413
414 public virtual void Store(UUID index, Object data, Type container) 414 public virtual void Store(string index, Object data, Type container)
415 { 415 {
416 Store(index, data, container, new Object[] { index }); 416 Store(index, data, container, new Object[] { index });
417 } 417 }
418 418
419 public virtual void Store(UUID index, Object data, Type container, 419 public virtual void Store(string index, Object data, Type container,
420 Object[] parameters) 420 Object[] parameters)
421 { 421 {
422 Expire(false); 422 Expire(false);
@@ -520,7 +520,7 @@ namespace OpenSim.Framework
520 } 520 }
521 } 521 }
522 522
523 public void Invalidate(UUID uuid) 523 public void Invalidate(string uuid)
524 { 524 {
525 if (!m_Lookup.ContainsKey(uuid)) 525 if (!m_Lookup.ContainsKey(uuid))
526 return; 526 return;
diff --git a/OpenSim/Region/CoreModules/Asset/CoreAssetCache.cs b/OpenSim/Region/CoreModules/Asset/CoreAssetCache.cs
index 957b04f..c4cc007 100644
--- a/OpenSim/Region/CoreModules/Asset/CoreAssetCache.cs
+++ b/OpenSim/Region/CoreModules/Asset/CoreAssetCache.cs
@@ -45,8 +45,6 @@ namespace OpenSim.Region.CoreModules.Asset
45 MethodBase.GetCurrentMethod().DeclaringType); 45 MethodBase.GetCurrentMethod().DeclaringType);
46 46
47 private bool m_Enabled = false; 47 private bool m_Enabled = false;
48 private Dictionary<Scene, IAssetService> m_AssetService =
49 new Dictionary<Scene, IAssetService>();
50 48
51 public string Name 49 public string Name
52 { 50 {
@@ -85,10 +83,6 @@ namespace OpenSim.Region.CoreModules.Asset
85 83
86 public void AddRegion(Scene scene) 84 public void AddRegion(Scene scene)
87 { 85 {
88 if (!m_Enabled)
89 return;
90
91 scene.RegisterModuleInterface<IImprovedAssetCache>(this);
92 } 86 }
93 87
94 public void RemoveRegion(Scene scene) 88 public void RemoveRegion(Scene scene)
@@ -97,15 +91,27 @@ namespace OpenSim.Region.CoreModules.Asset
97 91
98 public void RegionLoaded(Scene scene) 92 public void RegionLoaded(Scene scene)
99 { 93 {
100 if (!m_Enabled) 94 }
101 return; 95
96 ////////////////////////////////////////////////////////////
97 // IImprovedAssetCache
98 //
99
100 public void Cache(AssetBase asset)
101 {
102 }
103
104 public AssetBase Get(string id)
105 {
106 return null;
107 }
102 108
103 m_AssetService[scene] = 109 public void Expire(string id)
104 scene.RequestModuleInterface<IAssetService>(); 110 {
111 }
105 112
106 if (m_AssetService[scene] != null) 113 public void Clear()
107 m_log.InfoFormat("[ASSET CACHE]: Enabled for region {0}", 114 {
108 scene.RegionInfo.RegionName);
109 } 115 }
110 } 116 }
111} 117}
diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs
index 246cf55..e46545c 100644
--- a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs
@@ -624,8 +624,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
624 // a new friend was added in the initiator's and friend's data, so the cache entries are wrong now. 624 // a new friend was added in the initiator's and friend's data, so the cache entries are wrong now.
625 lock (m_friendLists) 625 lock (m_friendLists)
626 { 626 {
627 m_friendLists.Invalidate(fromAgentID); 627 m_friendLists.Invalidate(fromAgentID.ToString());
628 m_friendLists.Invalidate(toAgentID); 628 m_friendLists.Invalidate(toAgentID.ToString());
629 } 629 }
630 630
631 // now send presence update and add a calling card for the new friend 631 // now send presence update and add a calling card for the new friend
@@ -664,8 +664,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
664 // The cache entries aren't valid anymore either, as we just added a friend to both sides. 664 // The cache entries aren't valid anymore either, as we just added a friend to both sides.
665 lock (m_friendLists) 665 lock (m_friendLists)
666 { 666 {
667 m_friendLists.Invalidate(agentID); 667 m_friendLists.Invalidate(agentID.ToString());
668 m_friendLists.Invalidate(friendID); 668 m_friendLists.Invalidate(friendID.ToString());
669 } 669 }
670 670
671 // if it's a local friend, we don't have to do the lookup 671 // if it's a local friend, we don't have to do the lookup
@@ -782,8 +782,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
782 // clean up cache: FriendList is wrong now... 782 // clean up cache: FriendList is wrong now...
783 lock (m_friendLists) 783 lock (m_friendLists)
784 { 784 {
785 m_friendLists.Invalidate(agentID); 785 m_friendLists.Invalidate(agentID.ToString());
786 m_friendLists.Invalidate(exfriendID); 786 m_friendLists.Invalidate(exfriendID.ToString());
787 } 787 }
788 } 788 }
789 789
@@ -1070,7 +1070,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
1070 List<FriendListItem> fl; 1070 List<FriendListItem> fl;
1071 lock (m_friendLists) 1071 lock (m_friendLists)
1072 { 1072 {
1073 fl = (List<FriendListItem>)m_friendLists.Get(agent.ControllingClient.AgentId, 1073 fl = (List<FriendListItem>)m_friendLists.Get(agent.ControllingClient.AgentId.ToString(),
1074 m_initialScene.GetFriendList); 1074 m_initialScene.GetFriendList);
1075 } 1075 }
1076 1076
@@ -1083,7 +1083,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
1083 List<FriendListItem> fl; 1083 List<FriendListItem> fl;
1084 lock (m_friendLists) 1084 lock (m_friendLists)
1085 { 1085 {
1086 fl = (List<FriendListItem>)m_friendLists.Get(remoteClient.AgentId, 1086 fl = (List<FriendListItem>)m_friendLists.Get(remoteClient.AgentId.ToString(),
1087 m_initialScene.GetFriendList); 1087 m_initialScene.GetFriendList);
1088 } 1088 }
1089 1089
diff --git a/OpenSim/Region/CoreModules/ServiceConnectors/Asset/LocalAssetServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectors/Asset/LocalAssetServiceConnector.cs
index 24ac8be..0a0f634 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectors/Asset/LocalAssetServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectors/Asset/LocalAssetServiceConnector.cs
@@ -28,6 +28,7 @@
28using log4net; 28using log4net;
29using Nini.Config; 29using Nini.Config;
30using System; 30using System;
31using System.Collections.Generic;
31using System.Reflection; 32using System.Reflection;
32using OpenSim.Servers.Base; 33using OpenSim.Servers.Base;
33using OpenSim.Region.Framework.Interfaces; 34using OpenSim.Region.Framework.Interfaces;
@@ -42,6 +43,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectors.Asset
42 LogManager.GetLogger( 43 LogManager.GetLogger(
43 MethodBase.GetCurrentMethod().DeclaringType); 44 MethodBase.GetCurrentMethod().DeclaringType);
44 45
46 private Dictionary<Scene, IImprovedAssetCache> m_AssetCache =
47 new Dictionary<Scene, IImprovedAssetCache>();
48
45 private IAssetService m_AssetService; 49 private IAssetService m_AssetService;
46 50
47 private bool m_Enabled = false; 51 private bool m_Enabled = false;
@@ -109,10 +113,29 @@ namespace OpenSim.Region.CoreModules.ServiceConnectors.Asset
109 113
110 public void RemoveRegion(Scene scene) 114 public void RemoveRegion(Scene scene)
111 { 115 {
116 if (!m_Enabled)
117 return;
118
119 m_AssetCache.Remove(scene);
112 } 120 }
113 121
114 public void RegionLoaded(Scene scene) 122 public void RegionLoaded(Scene scene)
115 { 123 {
124 if (!m_Enabled)
125 return;
126
127 m_AssetCache[scene] =
128 scene.RequestModuleInterface<IImprovedAssetCache>();
129
130 m_log.InfoFormat("[ASSET CONNECTOR]: Enabled local assets for region {0}", scene.RegionInfo.RegionName);
131
132 m_AssetCache[scene] =
133 scene.RequestModuleInterface<IImprovedAssetCache>();
134
135 if (m_AssetCache[scene] != null)
136 {
137 m_log.InfoFormat("[ASSET CONNECTOR]: Enabled asset caching for region {0}", scene.RegionInfo.RegionName);
138 }
116 } 139 }
117 } 140 }
118} 141}
diff --git a/OpenSim/Region/CoreModules/ServiceConnectors/Asset/RemoteAssetServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectors/Asset/RemoteAssetServiceConnector.cs
index 2cc2962..835678d 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectors/Asset/RemoteAssetServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectors/Asset/RemoteAssetServiceConnector.cs
@@ -27,6 +27,7 @@
27 27
28using log4net; 28using log4net;
29using System; 29using System;
30using System.Collections.Generic;
30using System.IO; 31using System.IO;
31using System.Reflection; 32using System.Reflection;
32using Nini.Config; 33using Nini.Config;
@@ -48,6 +49,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectors.Asset
48 49
49 private bool m_Enabled = false; 50 private bool m_Enabled = false;
50 private string m_ServerURI = String.Empty; 51 private string m_ServerURI = String.Empty;
52 private Dictionary<Scene, IImprovedAssetCache> m_AssetCache =
53 new Dictionary<Scene, IImprovedAssetCache>();
51 54
52 public string Name 55 public string Name
53 { 56 {
@@ -103,10 +106,26 @@ namespace OpenSim.Region.CoreModules.ServiceConnectors.Asset
103 106
104 public void RemoveRegion(Scene scene) 107 public void RemoveRegion(Scene scene)
105 { 108 {
109 if (!m_Enabled)
110 return;
111
112 m_AssetCache.Remove(scene);
106 } 113 }
107 114
108 public void RegionLoaded(Scene scene) 115 public void RegionLoaded(Scene scene)
109 { 116 {
117 if (!m_Enabled)
118 return;
119
120 m_AssetCache[scene] =
121 scene.RequestModuleInterface<IImprovedAssetCache>();
122
123 m_log.InfoFormat("[ASSET CONNECTOR]: Enabled remote assets for region {0}", scene.RegionInfo.RegionName);
124
125 if (m_AssetCache[scene] != null)
126 {
127 m_log.InfoFormat("[ASSET CONNECTOR]: Enabled asset caching for region {0}", scene.RegionInfo.RegionName);
128 }
110 } 129 }
111 130
112 public AssetBase Get(string id) 131 public AssetBase Get(string id)
diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
index ce54261..1dc33e1 100644
--- a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
+++ b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs
@@ -1302,7 +1302,9 @@ namespace OpenSim.Region.CoreModules.World.Land
1302 if (parcelID == UUID.Zero) 1302 if (parcelID == UUID.Zero)
1303 return; 1303 return;
1304 1304
1305 ExtendedLandData data = (ExtendedLandData)parcelInfoCache.Get(parcelID, delegate(UUID parcel) { 1305 ExtendedLandData data = (ExtendedLandData)parcelInfoCache.Get(parcelID.ToString(), delegate(string id) {
1306 UUID parcel = UUID.Zero;
1307 UUID.TryParse(id, out parcel);
1306 // assume we've got the parcelID we just computed in RemoteParcelRequest 1308 // assume we've got the parcelID we just computed in RemoteParcelRequest
1307 ExtendedLandData extLandData = new ExtendedLandData(); 1309 ExtendedLandData extLandData = new ExtendedLandData();
1308 Util.ParseFakeParcelID(parcel, out extLandData.regionHandle, out extLandData.x, out extLandData.y); 1310 Util.ParseFakeParcelID(parcel, out extLandData.regionHandle, out extLandData.x, out extLandData.y);
diff --git a/OpenSim/Region/Framework/Interfaces/IAssetCache.cs b/OpenSim/Region/Framework/Interfaces/IImprovedAssetCache.cs
index bd43ce5..b213284 100644
--- a/OpenSim/Region/Framework/Interfaces/IAssetCache.cs
+++ b/OpenSim/Region/Framework/Interfaces/IImprovedAssetCache.cs
@@ -25,9 +25,15 @@
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */ 26 */
27 27
28using OpenSim.Framework;
29
28namespace OpenSim.Region.Framework.Interfaces 30namespace OpenSim.Region.Framework.Interfaces
29{ 31{
30 public interface IImprovedAssetCache 32 public interface IImprovedAssetCache
31 { 33 {
34 void Cache(AssetBase asset);
35 AssetBase Get(string id);
36 void Expire(string id);
37 void Clear();
32 } 38 }
33} 39}
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index d1260d4..7cb66a0 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -2825,8 +2825,12 @@ namespace OpenSim.Region.Framework.Scenes
2825 objectCapacity = objects; 2825 objectCapacity = objects;
2826 } 2826 }
2827 2827
2828 public List<FriendListItem> GetFriendList(UUID avatarID) 2828 public List<FriendListItem> GetFriendList(string id)
2829 { 2829 {
2830 UUID avatarID;
2831 if (!UUID.TryParse(id, out avatarID))
2832 return new List<FriendListItem>();
2833
2830 return CommsManager.GetUserFriendList(avatarID); 2834 return CommsManager.GetUserFriendList(avatarID);
2831 } 2835 }
2832 2836