From d8e1842d2507b2c18b21671ed01496b3a2c59e18 Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Sun, 10 May 2009 12:27:05 +0000 Subject: Add some asset cache plumbing. Change the generic cache from UUID to string keys to allow caching the new crop of URI identified objects. --- OpenSim/Region/CoreModules/Asset/CoreAssetCache.cs | 32 ++++++++++-------- .../CoreModules/Avatar/Friends/FriendsModule.cs | 16 ++++----- .../Asset/LocalAssetServiceConnector.cs | 23 +++++++++++++ .../Asset/RemoteAssetServiceConnector.cs | 19 +++++++++++ .../CoreModules/World/Land/LandManagementModule.cs | 4 ++- OpenSim/Region/Framework/Interfaces/IAssetCache.cs | 33 ------------------ .../Framework/Interfaces/IImprovedAssetCache.cs | 39 ++++++++++++++++++++++ OpenSim/Region/Framework/Scenes/Scene.cs | 6 +++- 8 files changed, 116 insertions(+), 56 deletions(-) delete mode 100644 OpenSim/Region/Framework/Interfaces/IAssetCache.cs create mode 100644 OpenSim/Region/Framework/Interfaces/IImprovedAssetCache.cs (limited to 'OpenSim/Region') 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 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; + } + + //////////////////////////////////////////////////////////// + // IImprovedAssetCache + // + + public void Cache(AssetBase asset) + { + } + + public AssetBase Get(string id) + { + return null; + } - m_AssetService[scene] = - scene.RequestModuleInterface(); + public void Expire(string id) + { + } - if (m_AssetService[scene] != null) - m_log.InfoFormat("[ASSET CACHE]: Enabled for region {0}", - scene.RegionInfo.RegionName); + public void Clear() + { } } } 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 // 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 24ac8be..0a0f634 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 2cc2962..835678d 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 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 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/IAssetCache.cs deleted file mode 100644 index bd43ce5..0000000 --- a/OpenSim/Region/Framework/Interfaces/IAssetCache.cs +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) Contributors, http://opensimulator.org/ - * See CONTRIBUTORS.TXT for a full list of copyright holders. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the OpenSim Project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -namespace OpenSim.Region.Framework.Interfaces -{ - public interface IImprovedAssetCache - { - } -} diff --git a/OpenSim/Region/Framework/Interfaces/IImprovedAssetCache.cs b/OpenSim/Region/Framework/Interfaces/IImprovedAssetCache.cs new file mode 100644 index 0000000..b213284 --- /dev/null +++ b/OpenSim/Region/Framework/Interfaces/IImprovedAssetCache.cs @@ -0,0 +1,39 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSim Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * 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 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 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); } -- cgit v1.1