Refactor asset handling as per Ubit's suggestion

melanie
Melanie Thielker 2017-02-01 16:31:01 +00:00
parent 5ceb315e34
commit a5151bb337
12 changed files with 75 additions and 111 deletions

View File

@ -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.

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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