* A saved archive now immediately expires the data in the asset cache that it used, rather than retaining all the assets (esp textures) in the cache.
* This is an imperfect solution.  Ideally we would only expire the assets newly requested for the archive (not existing ones).  But doing that would require a lot more 
restructuring.
* I don't believe there are any locking issues due to the locking performed by the underlying memory cache, but please report any issues.
0.6.5-rc1
Justin Clarke Casey 2009-03-09 17:55:08 +00:00
parent a2ff2e9000
commit 5a6bc26600
2 changed files with 9 additions and 6 deletions

View File

@ -46,8 +46,7 @@ namespace OpenSim.Framework.Communications.Cache
/// This class actually encapsulates two largely separate mechanisms. One mechanism fetches assets either /// This class actually encapsulates two largely separate mechanisms. One mechanism fetches assets either
/// synchronously or async and passes the data back to the requester. The second mechanism fetches assets and /// synchronously or async and passes the data back to the requester. The second mechanism fetches assets and
/// sends packetised data directly back to the client. The only point where they meet is AssetReceived() and /// sends packetised data directly back to the client. The only point where they meet is AssetReceived() and
/// AssetNotFound(), which means they do share the same asset and texture caches.I agr /// AssetNotFound(), which means they do share the same asset and texture caches.
public class AssetCache : IAssetCache public class AssetCache : IAssetCache
{ {
@ -401,9 +400,7 @@ namespace OpenSim.Framework.Communications.Cache
m_memcache.AddOrUpdate(assetInf.FullID, assetInf, TimeSpan.FromHours(24)); m_memcache.AddOrUpdate(assetInf.FullID, assetInf, TimeSpan.FromHours(24));
if (StatsManager.SimExtraStats != null) if (StatsManager.SimExtraStats != null)
{
StatsManager.SimExtraStats.AddAsset(assetInf); StatsManager.SimExtraStats.AddAsset(assetInf);
}
if (RequestedAssets.ContainsKey(assetInf.FullID)) if (RequestedAssets.ContainsKey(assetInf.FullID))
{ {

View File

@ -72,7 +72,8 @@ namespace OpenSim.Region.CoreModules.World.Archiver
/// </summary> /// </summary>
protected IAssetCache m_assetCache; protected IAssetCache m_assetCache;
protected internal AssetsRequest(ICollection<UUID> uuids, IAssetCache assetCache, AssetsRequestCallback assetsRequestCallback) protected internal AssetsRequest(
ICollection<UUID> uuids, IAssetCache assetCache, AssetsRequestCallback assetsRequestCallback)
{ {
m_uuids = uuids; m_uuids = uuids;
m_assetsRequestCallback = assetsRequestCallback; m_assetsRequestCallback = assetsRequestCallback;
@ -100,9 +101,14 @@ namespace OpenSim.Region.CoreModules.World.Archiver
public void AssetRequestCallback(UUID assetID, AssetBase asset) public void AssetRequestCallback(UUID assetID, AssetBase asset)
{ {
if (asset != null) if (asset != null)
m_assets[assetID] = asset; {
m_assetCache.ExpireAsset(assetID);
m_assets[assetID] = asset;
}
else else
{
m_notFoundAssetUuids.Add(assetID); m_notFoundAssetUuids.Add(assetID);
}
//m_log.DebugFormat( //m_log.DebugFormat(
// "[ARCHIVER]: Received {0} assets and notification of {1} missing assets", m_assets.Count, m_notFoundAssetUuids.Count); // "[ARCHIVER]: Received {0} assets and notification of {1} missing assets", m_assets.Count, m_notFoundAssetUuids.Count);