Add some asset cache plumbing. Change the generic cache from UUID to string
keys to allow caching the new crop of URI identified objects.0.6.5-rc1
parent
14a6880352
commit
d8e1842d25
|
@ -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<CacheItemBase>, IComparable<CacheItemBase>
|
||||
{
|
||||
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<CacheItemBase> m_Index = new List<CacheItemBase>();
|
||||
private Dictionary<UUID, CacheItemBase> m_Lookup =
|
||||
new Dictionary<UUID, CacheItemBase>();
|
||||
private Dictionary<string, CacheItemBase> m_Lookup =
|
||||
new Dictionary<string, CacheItemBase>();
|
||||
|
||||
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;
|
||||
|
|
|
@ -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()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
|
@ -2825,8 +2825,12 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
objectCapacity = objects;
|
||||
}
|
||||
|
||||
public List<FriendListItem> GetFriendList(UUID avatarID)
|
||||
public List<FriendListItem> GetFriendList(string id)
|
||||
{
|
||||
UUID avatarID;
|
||||
if (!UUID.TryParse(id, out avatarID))
|
||||
return new List<FriendListItem>();
|
||||
|
||||
return CommsManager.GetUserFriendList(avatarID);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue