Refactor asset handling as per Ubit's suggestion
parent
5ceb315e34
commit
a5151bb337
|
@ -47,8 +47,9 @@ namespace OpenSim.Framework
|
||||||
/// Get an asset by its id.
|
/// Get an asset by its id.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name='id'></param>
|
/// <param name='id'></param>
|
||||||
/// <returns>null if the asset does not exist.</returns>
|
/// <param name='asset'>Will be set to null if no asset was found</param>
|
||||||
AssetBase Get(string id, out bool negative);
|
/// <returns>False if the asset has been negative-cached</returns>
|
||||||
|
bool Get(string id, out AssetBase asset);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Check whether an asset with the specified id exists in the cache.
|
/// Check whether an asset with the specified id exists in the cache.
|
||||||
|
|
|
@ -113,8 +113,8 @@ namespace OpenSim.Framework
|
||||||
{
|
{
|
||||||
if (dataCache.Check(item.TextureID.ToString()))
|
if (dataCache.Check(item.TextureID.ToString()))
|
||||||
{
|
{
|
||||||
bool negative;
|
AssetBase assetItem;
|
||||||
AssetBase assetItem = dataCache.Get(item.TextureID.ToString(), out negative);
|
dataCache.Get(item.TextureID.ToString(), out assetItem);
|
||||||
if (assetItem != null)
|
if (assetItem != null)
|
||||||
{
|
{
|
||||||
itemmap.Add("assetdata", OSD.FromBinary(assetItem.Data));
|
itemmap.Add("assetdata", OSD.FromBinary(assetItem.Data));
|
||||||
|
|
|
@ -369,8 +369,8 @@ namespace OpenSim.Region.CoreModules.Agent.TextureSender
|
||||||
else if (Cache != null)
|
else if (Cache != null)
|
||||||
{
|
{
|
||||||
string assetName = "j2kCache_" + AssetId.ToString();
|
string assetName = "j2kCache_" + AssetId.ToString();
|
||||||
bool negative;
|
AssetBase layerDecodeAsset;
|
||||||
AssetBase layerDecodeAsset = Cache.Get(assetName, out negative);
|
Cache.Get(assetName, out layerDecodeAsset);
|
||||||
|
|
||||||
if (layerDecodeAsset != null)
|
if (layerDecodeAsset != null)
|
||||||
{
|
{
|
||||||
|
|
|
@ -260,12 +260,9 @@ namespace OpenSim.Region.CoreModules.Asset
|
||||||
/// Cache doesn't guarantee in any situation that asset is stored to it.
|
/// Cache doesn't guarantee in any situation that asset is stored to it.
|
||||||
/// </para>
|
/// </para>
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
public AssetBase Get(string id, out bool negative)
|
public bool Get(string id, out AssetBase assetBase)
|
||||||
{
|
{
|
||||||
negative = false;
|
|
||||||
|
|
||||||
m_getCount++;
|
m_getCount++;
|
||||||
AssetBase assetBase;
|
|
||||||
if (m_cache.TryGetValue(id, out assetBase))
|
if (m_cache.TryGetValue(id, out assetBase))
|
||||||
m_hitCount++;
|
m_hitCount++;
|
||||||
|
|
||||||
|
@ -286,7 +283,7 @@ namespace OpenSim.Region.CoreModules.Asset
|
||||||
// if (null == assetBase)
|
// if (null == assetBase)
|
||||||
// m_log.DebugFormat("[CENOME ASSET CACHE]: Asset {0} not in cache", id);
|
// m_log.DebugFormat("[CENOME ASSET CACHE]: Asset {0} not in cache", id);
|
||||||
|
|
||||||
return assetBase;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
|
@ -115,8 +115,10 @@ namespace OpenSim.Region.CoreModules.Asset
|
||||||
public bool Check(string id)
|
public bool Check(string id)
|
||||||
{
|
{
|
||||||
// XXX This is probably not an efficient implementation.
|
// XXX This is probably not an efficient implementation.
|
||||||
bool negative;
|
AssetBase asset;
|
||||||
return Get(id, out negative) != null;
|
if (!Get(id, out asset))
|
||||||
|
return false;
|
||||||
|
return asset != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Cache(AssetBase asset)
|
public void Cache(AssetBase asset)
|
||||||
|
@ -130,10 +132,10 @@ namespace OpenSim.Region.CoreModules.Asset
|
||||||
// We don't do negative caching
|
// We don't do negative caching
|
||||||
}
|
}
|
||||||
|
|
||||||
public AssetBase Get(string id, out bool negative)
|
public bool Get(string id, out AssetBase asset)
|
||||||
{
|
{
|
||||||
negative = false;
|
asset = (AssetBase)m_Cache.Get(id);
|
||||||
return (AssetBase)m_Cache.Get(id);
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Expire(string id)
|
public void Expire(string id)
|
||||||
|
|
|
@ -536,24 +536,23 @@ namespace OpenSim.Region.CoreModules.Asset
|
||||||
// For IAssetService
|
// For IAssetService
|
||||||
public AssetBase Get(string id)
|
public AssetBase Get(string id)
|
||||||
{
|
{
|
||||||
bool negative;
|
AssetBase asset;
|
||||||
return Get(id, out negative);
|
Get(id, out asset);
|
||||||
|
return asset;
|
||||||
}
|
}
|
||||||
|
|
||||||
public AssetBase Get(string id, out bool negative)
|
public bool Get(string id, out AssetBase asset)
|
||||||
{
|
{
|
||||||
negative = false;
|
asset = null;
|
||||||
|
|
||||||
m_Requests++;
|
m_Requests++;
|
||||||
|
|
||||||
object dummy;
|
object dummy;
|
||||||
if (m_negativeCache.TryGetValue(id, out dummy))
|
if (m_negativeCache.TryGetValue(id, out dummy))
|
||||||
{
|
{
|
||||||
negative = true;
|
return false;
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AssetBase asset = null;
|
|
||||||
asset = GetFromWeakReference(id);
|
asset = GetFromWeakReference(id);
|
||||||
if (asset != null && m_updateFileTimeOnCacheHit)
|
if (asset != null && m_updateFileTimeOnCacheHit)
|
||||||
{
|
{
|
||||||
|
@ -592,7 +591,7 @@ namespace OpenSim.Region.CoreModules.Asset
|
||||||
GenerateCacheHitReport().ForEach(l => m_log.InfoFormat("[FLOTSAM ASSET CACHE]: {0}", l));
|
GenerateCacheHitReport().ForEach(l => m_log.InfoFormat("[FLOTSAM ASSET CACHE]: {0}", l));
|
||||||
}
|
}
|
||||||
|
|
||||||
return asset;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Check(string id)
|
public bool Check(string id)
|
||||||
|
@ -607,8 +606,9 @@ namespace OpenSim.Region.CoreModules.Asset
|
||||||
|
|
||||||
public AssetBase GetCached(string id)
|
public AssetBase GetCached(string id)
|
||||||
{
|
{
|
||||||
bool negative;
|
AssetBase asset;
|
||||||
return Get(id, out negative);
|
Get(id, out asset);
|
||||||
|
return asset;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Expire(string id)
|
public void Expire(string id)
|
||||||
|
@ -1236,23 +1236,22 @@ namespace OpenSim.Region.CoreModules.Asset
|
||||||
|
|
||||||
public AssetMetadata GetMetadata(string id)
|
public AssetMetadata GetMetadata(string id)
|
||||||
{
|
{
|
||||||
bool negative;
|
AssetBase asset;
|
||||||
AssetBase asset = Get(id, out negative);
|
Get(id, out asset);
|
||||||
return asset.Metadata;
|
return asset.Metadata;
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] GetData(string id)
|
public byte[] GetData(string id)
|
||||||
{
|
{
|
||||||
bool negative;
|
AssetBase asset;
|
||||||
AssetBase asset = Get(id, out negative);
|
Get(id, out asset);
|
||||||
return asset.Data;
|
return asset.Data;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Get(string id, object sender, AssetRetrieved handler)
|
public bool Get(string id, object sender, AssetRetrieved handler)
|
||||||
{
|
{
|
||||||
bool negative;
|
AssetBase asset;
|
||||||
AssetBase asset = Get(id, out negative);
|
if (!Get(id, out asset))
|
||||||
if (negative)
|
|
||||||
return false;
|
return false;
|
||||||
handler(id, sender, asset);
|
handler(id, sender, asset);
|
||||||
return true;
|
return true;
|
||||||
|
@ -1284,8 +1283,9 @@ namespace OpenSim.Region.CoreModules.Asset
|
||||||
|
|
||||||
public bool UpdateContent(string id, byte[] data)
|
public bool UpdateContent(string id, byte[] data)
|
||||||
{
|
{
|
||||||
bool negative;
|
AssetBase asset;
|
||||||
AssetBase asset = Get(id, out negative);
|
if (!Get(id, out asset))
|
||||||
|
return false;
|
||||||
asset.Data = data;
|
asset.Data = data;
|
||||||
Cache(asset);
|
Cache(asset);
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -131,16 +131,15 @@ namespace OpenSim.Region.CoreModules.Asset
|
||||||
// We don't do negative caching
|
// We don't do negative caching
|
||||||
}
|
}
|
||||||
|
|
||||||
public AssetBase Get(string id, out bool negative)
|
public bool Get(string id, out AssetBase asset)
|
||||||
{
|
{
|
||||||
negative = false;
|
Object a = null;
|
||||||
|
m_Cache.TryGet(id, out a);
|
||||||
|
|
||||||
Object asset = null;
|
Debug(a);
|
||||||
m_Cache.TryGet(id, out asset);
|
|
||||||
|
|
||||||
Debug(asset);
|
asset = (AssetBase)a;
|
||||||
|
return true;
|
||||||
return (AssetBase)asset;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Expire(string id)
|
public void Expire(string id)
|
||||||
|
|
|
@ -299,8 +299,8 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
|
||||||
if (bakedTextureFace == null)
|
if (bakedTextureFace == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
bool negative;
|
AssetBase asset;
|
||||||
AssetBase asset = cache.Get(bakedTextureFace.TextureID.ToString(), out negative);
|
cache.Get(bakedTextureFace.TextureID.ToString(), out asset);
|
||||||
|
|
||||||
if (asset != null && asset.Local)
|
if (asset != null && asset.Local)
|
||||||
{
|
{
|
||||||
|
|
|
@ -209,10 +209,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset
|
||||||
|
|
||||||
if (m_Cache != null)
|
if (m_Cache != null)
|
||||||
{
|
{
|
||||||
bool negative;
|
if (!m_Cache.Get(id, out asset))
|
||||||
asset = m_Cache.Get(id, out negative);
|
|
||||||
|
|
||||||
if (negative)
|
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
if (asset != null)
|
if (asset != null)
|
||||||
|
@ -242,9 +239,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset
|
||||||
|
|
||||||
public AssetBase GetCached(string id)
|
public AssetBase GetCached(string id)
|
||||||
{
|
{
|
||||||
bool negative;
|
AssetBase asset = null;
|
||||||
if (m_Cache != null)
|
if (m_Cache != null)
|
||||||
return m_Cache.Get(id, out negative);
|
m_Cache.Get(id, out asset);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -255,10 +252,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset
|
||||||
|
|
||||||
if (m_Cache != null)
|
if (m_Cache != null)
|
||||||
{
|
{
|
||||||
bool negative;
|
if (!m_Cache.Get(id, out asset))
|
||||||
asset = m_Cache.Get(id, out negative);
|
|
||||||
|
|
||||||
if (negative)
|
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
if (asset != null)
|
if (asset != null)
|
||||||
|
@ -281,10 +275,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset
|
||||||
|
|
||||||
if (m_Cache != null)
|
if (m_Cache != null)
|
||||||
{
|
{
|
||||||
bool negative;
|
if (!m_Cache.Get(id, out asset))
|
||||||
asset = m_Cache.Get(id, out negative);
|
|
||||||
|
|
||||||
if (negative)
|
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
if (asset != null)
|
if (asset != null)
|
||||||
|
@ -304,10 +295,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset
|
||||||
|
|
||||||
if (m_Cache != null)
|
if (m_Cache != null)
|
||||||
{
|
{
|
||||||
bool negative;
|
if (!m_Cache.Get(id, out asset))
|
||||||
asset = m_Cache.Get(id, out negative);
|
|
||||||
|
|
||||||
if (negative)
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -398,9 +386,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset
|
||||||
{
|
{
|
||||||
AssetBase asset = null;
|
AssetBase asset = null;
|
||||||
|
|
||||||
bool negative;
|
|
||||||
if (m_Cache != null)
|
if (m_Cache != null)
|
||||||
asset = m_Cache.Get(id, out negative);
|
m_Cache.Get(id, out asset);
|
||||||
|
|
||||||
if (asset != null)
|
if (asset != null)
|
||||||
{
|
{
|
||||||
|
|
|
@ -159,10 +159,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset
|
||||||
AssetBase asset = null;
|
AssetBase asset = null;
|
||||||
if (m_Cache != null)
|
if (m_Cache != null)
|
||||||
{
|
{
|
||||||
bool negative;
|
if (!m_Cache.Get(id, out asset))
|
||||||
asset = m_Cache.Get(id, out negative);
|
|
||||||
|
|
||||||
if (negative)
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -183,13 +180,11 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat("[LOCAL ASSET SERVICES CONNECTOR]: Cache request for {0}", id);
|
// m_log.DebugFormat("[LOCAL ASSET SERVICES CONNECTOR]: Cache request for {0}", id);
|
||||||
|
|
||||||
|
AssetBase asset = null;
|
||||||
if (m_Cache != null)
|
if (m_Cache != null)
|
||||||
{
|
m_Cache.Get(id, out asset);
|
||||||
bool negative;
|
|
||||||
return m_Cache.Get(id, out negative);
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
return asset;
|
||||||
}
|
}
|
||||||
|
|
||||||
public AssetMetadata GetMetadata(string id)
|
public AssetMetadata GetMetadata(string id)
|
||||||
|
@ -197,9 +192,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset
|
||||||
AssetBase asset = null;
|
AssetBase asset = null;
|
||||||
if (m_Cache != null)
|
if (m_Cache != null)
|
||||||
{
|
{
|
||||||
bool negative;
|
if (!m_Cache.Get(id, out asset))
|
||||||
asset = m_Cache.Get(id, out negative);
|
|
||||||
if (negative)
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -246,11 +246,7 @@ namespace OpenSim.Services.Connectors
|
||||||
|
|
||||||
if (m_Cache != null)
|
if (m_Cache != null)
|
||||||
{
|
{
|
||||||
bool negative;
|
if (!m_Cache.Get(id, out asset))
|
||||||
|
|
||||||
asset = m_Cache.Get(id, out negative);
|
|
||||||
|
|
||||||
if (negative)
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -283,21 +279,21 @@ namespace OpenSim.Services.Connectors
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat("[ASSET SERVICE CONNECTOR]: Cache request for {0}", id);
|
// m_log.DebugFormat("[ASSET SERVICE CONNECTOR]: Cache request for {0}", id);
|
||||||
|
|
||||||
bool negative;
|
AssetBase asset = null;
|
||||||
if (m_Cache != null)
|
if (m_Cache != null)
|
||||||
return m_Cache.Get(id, out negative);
|
{
|
||||||
|
m_Cache.Get(id, out asset);
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
return asset;
|
||||||
}
|
}
|
||||||
|
|
||||||
public AssetMetadata GetMetadata(string id)
|
public AssetMetadata GetMetadata(string id)
|
||||||
{
|
{
|
||||||
if (m_Cache != null)
|
if (m_Cache != null)
|
||||||
{
|
{
|
||||||
bool negative;
|
AssetBase fullAsset;
|
||||||
AssetBase fullAsset = m_Cache.Get(id, out negative);
|
if (!m_Cache.Get(id, out fullAsset))
|
||||||
|
|
||||||
if (negative)
|
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
if (fullAsset != null)
|
if (fullAsset != null)
|
||||||
|
@ -314,10 +310,8 @@ namespace OpenSim.Services.Connectors
|
||||||
{
|
{
|
||||||
if (m_Cache != null)
|
if (m_Cache != null)
|
||||||
{
|
{
|
||||||
bool negative;
|
AssetBase fullAsset;
|
||||||
AssetBase fullAsset = m_Cache.Get(id, out negative);
|
if (!m_Cache.Get(id, out fullAsset))
|
||||||
|
|
||||||
if (negative)
|
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
if (fullAsset != null)
|
if (fullAsset != null)
|
||||||
|
@ -407,11 +401,7 @@ namespace OpenSim.Services.Connectors
|
||||||
AssetBase asset = null;
|
AssetBase asset = null;
|
||||||
if (m_Cache != null)
|
if (m_Cache != null)
|
||||||
{
|
{
|
||||||
bool negative;
|
if (!m_Cache.Get(id, out asset))
|
||||||
|
|
||||||
asset = m_Cache.Get(id, out negative);
|
|
||||||
|
|
||||||
if (negative)
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -613,9 +603,8 @@ namespace OpenSim.Services.Connectors
|
||||||
{
|
{
|
||||||
AssetBase asset = null;
|
AssetBase asset = null;
|
||||||
|
|
||||||
bool negative;
|
|
||||||
if (m_Cache != null)
|
if (m_Cache != null)
|
||||||
asset = m_Cache.Get(id, out negative);
|
m_Cache.Get(id, out asset);
|
||||||
|
|
||||||
if (asset == null)
|
if (asset == null)
|
||||||
{
|
{
|
||||||
|
|
|
@ -136,9 +136,8 @@ namespace OpenSim.Services.Connectors.SimianGrid
|
||||||
// Cache fetch
|
// Cache fetch
|
||||||
if (m_cache != null)
|
if (m_cache != null)
|
||||||
{
|
{
|
||||||
bool negative;
|
AssetBase asset;
|
||||||
AssetBase asset = m_cache.Get(id, out negative);
|
if (!m_cache.Get(id, out asset))
|
||||||
if (negative)
|
|
||||||
return null;
|
return null;
|
||||||
if (asset != null)
|
if (asset != null)
|
||||||
return asset;
|
return asset;
|
||||||
|
@ -150,9 +149,9 @@ namespace OpenSim.Services.Connectors.SimianGrid
|
||||||
|
|
||||||
public AssetBase GetCached(string id)
|
public AssetBase GetCached(string id)
|
||||||
{
|
{
|
||||||
bool negative;
|
AssetBase asset;
|
||||||
if (m_cache != null)
|
if (m_cache != null)
|
||||||
return m_cache.Get(id, out negative);
|
m_cache.Get(id, out asset);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -173,9 +172,8 @@ namespace OpenSim.Services.Connectors.SimianGrid
|
||||||
// Cache fetch
|
// Cache fetch
|
||||||
if (m_cache != null)
|
if (m_cache != null)
|
||||||
{
|
{
|
||||||
bool negative;
|
AssetBase asset;
|
||||||
AssetBase asset = m_cache.Get(id, out negative);
|
if (!m_cache.Get(id, out asset))
|
||||||
if (negative)
|
|
||||||
return null;
|
return null;
|
||||||
if (asset != null)
|
if (asset != null)
|
||||||
return asset.Metadata;
|
return asset.Metadata;
|
||||||
|
@ -219,10 +217,8 @@ namespace OpenSim.Services.Connectors.SimianGrid
|
||||||
// Cache fetch
|
// Cache fetch
|
||||||
if (m_cache != null)
|
if (m_cache != null)
|
||||||
{
|
{
|
||||||
bool negative;
|
AssetBase asset;
|
||||||
AssetBase asset = m_cache.Get(id, out negative);
|
if (!m_cache.Get(id, out asset))
|
||||||
|
|
||||||
if (negative)
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (asset != null)
|
if (asset != null)
|
||||||
|
|
Loading…
Reference in New Issue