Add some asset cache plumbing. Change the generic cache from UUID to string

keys to allow caching the new crop of URI identified objects.
This commit is contained in:
Melanie Thielker
2009-05-10 12:27:05 +00:00
parent 14a6880352
commit d8e1842d25
8 changed files with 106 additions and 46 deletions

View File

@@ -45,8 +45,6 @@ namespace OpenSim.Region.CoreModules.Asset
MethodBase.GetCurrentMethod().DeclaringType);
private bool m_Enabled = false;
private Dictionary<Scene, IAssetService> m_AssetService =
new Dictionary<Scene, IAssetService>();
public string Name
{
@@ -85,10 +83,6 @@ namespace OpenSim.Region.CoreModules.Asset
public void AddRegion(Scene scene)
{
if (!m_Enabled)
return;
scene.RegisterModuleInterface<IImprovedAssetCache>(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<IAssetService>();
////////////////////////////////////////////////////////////
// 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()
{
}
}
}

View File

@@ -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<FriendListItem> fl;
lock (m_friendLists)
{
fl = (List<FriendListItem>)m_friendLists.Get(agent.ControllingClient.AgentId,
fl = (List<FriendListItem>)m_friendLists.Get(agent.ControllingClient.AgentId.ToString(),
m_initialScene.GetFriendList);
}
@@ -1083,7 +1083,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
List<FriendListItem> fl;
lock (m_friendLists)
{
fl = (List<FriendListItem>)m_friendLists.Get(remoteClient.AgentId,
fl = (List<FriendListItem>)m_friendLists.Get(remoteClient.AgentId.ToString(),
m_initialScene.GetFriendList);
}

View File

@@ -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<Scene, IImprovedAssetCache> m_AssetCache =
new Dictionary<Scene, IImprovedAssetCache>();
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<IImprovedAssetCache>();
m_log.InfoFormat("[ASSET CONNECTOR]: Enabled local assets for region {0}", scene.RegionInfo.RegionName);
m_AssetCache[scene] =
scene.RequestModuleInterface<IImprovedAssetCache>();
if (m_AssetCache[scene] != null)
{
m_log.InfoFormat("[ASSET CONNECTOR]: Enabled asset caching for region {0}", scene.RegionInfo.RegionName);
}
}
}
}

View File

@@ -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<Scene, IImprovedAssetCache> m_AssetCache =
new Dictionary<Scene, IImprovedAssetCache>();
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<IImprovedAssetCache>();
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)

View File

@@ -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);