diff --git a/OpenSim/Framework/Cache.cs b/OpenSim/Framework/Cache.cs index 3dab9b6e41..2d4914651c 100644 --- a/OpenSim/Framework/Cache.cs +++ b/OpenSim/Framework/Cache.cs @@ -33,8 +33,8 @@ namespace OpenSim.Framework { // The delegate we will use for performing fetch from backing store // - public delegate Object FetchDelegate(UUID index); - public delegate bool ExpireDelegate(UUID index); + public delegate Object FetchDelegate(string index); + public delegate bool ExpireDelegate(string index); // Strategy // @@ -64,14 +64,14 @@ namespace OpenSim.Framework } // The base class of all cache objects. Implements comparison and sorting - // by the UUID member. + // by the string member. // // This is not abstract because we need to instantiate it briefly as a // method parameter // public class CacheItemBase : IEquatable, IComparable { - public UUID uuid; + public string uuid; public DateTime entered; public DateTime lastUsed; public DateTime expires = new DateTime(0); @@ -86,14 +86,14 @@ namespace OpenSim.Framework { } - public CacheItemBase(UUID index) + public CacheItemBase(string index) { uuid = index; entered = DateTime.Now; lastUsed = entered; } - public CacheItemBase(UUID index, DateTime ttl) + public CacheItemBase(string index, DateTime ttl) { uuid = index; entered = DateTime.Now; @@ -123,23 +123,23 @@ namespace OpenSim.Framework { private Object m_Data; - public MemoryCacheItem(UUID index) : + public MemoryCacheItem(string index) : base(index) { } - public MemoryCacheItem(UUID index, DateTime ttl) : + public MemoryCacheItem(string index, DateTime ttl) : base(index, ttl) { } - public MemoryCacheItem(UUID index, Object data) : + public MemoryCacheItem(string index, Object data) : base(index) { Store(data); } - public MemoryCacheItem(UUID index, DateTime ttl, Object data) : + public MemoryCacheItem(string index, DateTime ttl, Object data) : base(index, ttl) { Store(data); @@ -160,23 +160,23 @@ namespace OpenSim.Framework // public class FileCacheItem : CacheItemBase { - public FileCacheItem(UUID index) : + public FileCacheItem(string index) : base(index) { } - public FileCacheItem(UUID index, DateTime ttl) : + public FileCacheItem(string index, DateTime ttl) : base(index, ttl) { } - public FileCacheItem(UUID index, Object data) : + public FileCacheItem(string index, Object data) : base(index) { Store(data); } - public FileCacheItem(UUID index, DateTime ttl, Object data) : + public FileCacheItem(string index, DateTime ttl, Object data) : base(index, ttl) { Store(data); @@ -200,8 +200,8 @@ namespace OpenSim.Framework public class Cache { private List m_Index = new List(); - private Dictionary m_Lookup = - new Dictionary(); + private Dictionary m_Lookup = + new Dictionary(); private CacheStrategy m_Strategy; private CacheMedium m_Medium; @@ -312,7 +312,7 @@ namespace OpenSim.Framework // Get an item from cache. Return the raw item, not it's data // - protected virtual CacheItemBase GetItem(UUID index) + protected virtual CacheItemBase GetItem(string index) { CacheItemBase item = null; @@ -339,7 +339,7 @@ namespace OpenSim.Framework // Get an item from cache. Do not try to fetch from source if not // present. Just return null // - public virtual Object Get(UUID index) + public virtual Object Get(string index) { CacheItemBase item = GetItem(index); @@ -352,7 +352,7 @@ namespace OpenSim.Framework // Fetch an object from backing store if not cached, serve from // cache if it is. // - public virtual Object Get(UUID index, FetchDelegate fetch) + public virtual Object Get(string index, FetchDelegate fetch) { Object item = Get(index); if (item != null) @@ -393,7 +393,7 @@ namespace OpenSim.Framework return item.Retrieve(); } - public virtual void Store(UUID index, Object data) + public virtual void Store(string index, Object data) { Type container; @@ -411,12 +411,12 @@ namespace OpenSim.Framework Store(index, data, container); } - public virtual void Store(UUID index, Object data, Type container) + public virtual void Store(string index, Object data, Type container) { Store(index, data, container, new Object[] { index }); } - public virtual void Store(UUID index, Object data, Type container, + public virtual void Store(string index, Object data, Type container, Object[] parameters) { Expire(false); @@ -520,7 +520,7 @@ namespace OpenSim.Framework } } - public void Invalidate(UUID uuid) + public void Invalidate(string uuid) { if (!m_Lookup.ContainsKey(uuid)) return; diff --git a/OpenSim/Region/CoreModules/Asset/CoreAssetCache.cs b/OpenSim/Region/CoreModules/Asset/CoreAssetCache.cs index 957b04f4b9..c4cc007a95 100644 --- a/OpenSim/Region/CoreModules/Asset/CoreAssetCache.cs +++ b/OpenSim/Region/CoreModules/Asset/CoreAssetCache.cs @@ -45,8 +45,6 @@ namespace OpenSim.Region.CoreModules.Asset MethodBase.GetCurrentMethod().DeclaringType); private bool m_Enabled = false; - private Dictionary m_AssetService = - new Dictionary(); public string Name { @@ -85,10 +83,6 @@ namespace OpenSim.Region.CoreModules.Asset public void AddRegion(Scene scene) { - if (!m_Enabled) - return; - - scene.RegisterModuleInterface(this); } public void RemoveRegion(Scene scene) @@ -97,15 +91,27 @@ namespace OpenSim.Region.CoreModules.Asset public void RegionLoaded(Scene scene) { - if (!m_Enabled) - return; + } - m_AssetService[scene] = - scene.RequestModuleInterface(); + //////////////////////////////////////////////////////////// + // IImprovedAssetCache + // - if (m_AssetService[scene] != null) - m_log.InfoFormat("[ASSET CACHE]: Enabled for region {0}", - scene.RegionInfo.RegionName); + public void Cache(AssetBase asset) + { + } + + public AssetBase Get(string id) + { + return null; + } + + public void Expire(string id) + { + } + + public void Clear() + { } } } diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs index 246cf55d64..e46545c982 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 // a new friend was added in the initiator's and friend's data, so the cache entries are wrong now. lock (m_friendLists) { - m_friendLists.Invalidate(fromAgentID); - m_friendLists.Invalidate(toAgentID); + m_friendLists.Invalidate(fromAgentID.ToString()); + m_friendLists.Invalidate(toAgentID.ToString()); } // now send presence update and add a calling card for the new friend @@ -664,8 +664,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends // The cache entries aren't valid anymore either, as we just added a friend to both sides. lock (m_friendLists) { - m_friendLists.Invalidate(agentID); - m_friendLists.Invalidate(friendID); + m_friendLists.Invalidate(agentID.ToString()); + m_friendLists.Invalidate(friendID.ToString()); } // if it's a local friend, we don't have to do the lookup @@ -782,8 +782,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends // clean up cache: FriendList is wrong now... lock (m_friendLists) { - m_friendLists.Invalidate(agentID); - m_friendLists.Invalidate(exfriendID); + m_friendLists.Invalidate(agentID.ToString()); + m_friendLists.Invalidate(exfriendID.ToString()); } } @@ -1070,7 +1070,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends List fl; lock (m_friendLists) { - fl = (List)m_friendLists.Get(agent.ControllingClient.AgentId, + fl = (List)m_friendLists.Get(agent.ControllingClient.AgentId.ToString(), m_initialScene.GetFriendList); } @@ -1083,7 +1083,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends List fl; lock (m_friendLists) { - fl = (List)m_friendLists.Get(remoteClient.AgentId, + fl = (List)m_friendLists.Get(remoteClient.AgentId.ToString(), m_initialScene.GetFriendList); } diff --git a/OpenSim/Region/CoreModules/ServiceConnectors/Asset/LocalAssetServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectors/Asset/LocalAssetServiceConnector.cs index 24ac8be07b..0a0f6340fd 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectors/Asset/LocalAssetServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectors/Asset/LocalAssetServiceConnector.cs @@ -28,6 +28,7 @@ using log4net; using Nini.Config; using System; +using System.Collections.Generic; using System.Reflection; using OpenSim.Servers.Base; using OpenSim.Region.Framework.Interfaces; @@ -42,6 +43,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectors.Asset LogManager.GetLogger( MethodBase.GetCurrentMethod().DeclaringType); + private Dictionary m_AssetCache = + new Dictionary(); + private IAssetService m_AssetService; private bool m_Enabled = false; @@ -109,10 +113,29 @@ namespace OpenSim.Region.CoreModules.ServiceConnectors.Asset public void RemoveRegion(Scene scene) { + if (!m_Enabled) + return; + + m_AssetCache.Remove(scene); } public void RegionLoaded(Scene scene) { + if (!m_Enabled) + return; + + m_AssetCache[scene] = + scene.RequestModuleInterface(); + + m_log.InfoFormat("[ASSET CONNECTOR]: Enabled local assets for region {0}", scene.RegionInfo.RegionName); + + m_AssetCache[scene] = + scene.RequestModuleInterface(); + + if (m_AssetCache[scene] != null) + { + m_log.InfoFormat("[ASSET CONNECTOR]: Enabled asset caching for region {0}", scene.RegionInfo.RegionName); + } } } } diff --git a/OpenSim/Region/CoreModules/ServiceConnectors/Asset/RemoteAssetServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectors/Asset/RemoteAssetServiceConnector.cs index 2cc2962060..835678d607 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectors/Asset/RemoteAssetServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectors/Asset/RemoteAssetServiceConnector.cs @@ -27,6 +27,7 @@ using log4net; using System; +using System.Collections.Generic; using System.IO; using System.Reflection; using Nini.Config; @@ -48,6 +49,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectors.Asset private bool m_Enabled = false; private string m_ServerURI = String.Empty; + private Dictionary m_AssetCache = + new Dictionary(); public string Name { @@ -103,10 +106,26 @@ namespace OpenSim.Region.CoreModules.ServiceConnectors.Asset public void RemoveRegion(Scene scene) { + if (!m_Enabled) + return; + + m_AssetCache.Remove(scene); } public void RegionLoaded(Scene scene) { + if (!m_Enabled) + return; + + m_AssetCache[scene] = + scene.RequestModuleInterface(); + + m_log.InfoFormat("[ASSET CONNECTOR]: Enabled remote assets for region {0}", scene.RegionInfo.RegionName); + + if (m_AssetCache[scene] != null) + { + m_log.InfoFormat("[ASSET CONNECTOR]: Enabled asset caching for region {0}", scene.RegionInfo.RegionName); + } } public AssetBase Get(string id) diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs index ce542617bb..1dc33e1cdd 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 if (parcelID == UUID.Zero) return; - ExtendedLandData data = (ExtendedLandData)parcelInfoCache.Get(parcelID, delegate(UUID parcel) { + ExtendedLandData data = (ExtendedLandData)parcelInfoCache.Get(parcelID.ToString(), delegate(string id) { + UUID parcel = UUID.Zero; + UUID.TryParse(id, out parcel); // assume we've got the parcelID we just computed in RemoteParcelRequest ExtendedLandData extLandData = new ExtendedLandData(); 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 similarity index 91% rename from OpenSim/Region/Framework/Interfaces/IAssetCache.cs rename to OpenSim/Region/Framework/Interfaces/IImprovedAssetCache.cs index bd43ce576f..b213284577 100644 --- a/OpenSim/Region/Framework/Interfaces/IAssetCache.cs +++ b/OpenSim/Region/Framework/Interfaces/IImprovedAssetCache.cs @@ -25,9 +25,15 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +using OpenSim.Framework; + namespace OpenSim.Region.Framework.Interfaces { public interface IImprovedAssetCache { + void Cache(AssetBase asset); + AssetBase Get(string id); + void Expire(string id); + void Clear(); } } diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index d1260d4cd5..7cb66a0fdf 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -2825,8 +2825,12 @@ namespace OpenSim.Region.Framework.Scenes objectCapacity = objects; } - public List GetFriendList(UUID avatarID) + public List GetFriendList(string id) { + UUID avatarID; + if (!UUID.TryParse(id, out avatarID)) + return new List(); + return CommsManager.GetUserFriendList(avatarID); }