* 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
/// 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
/// 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
{
@ -401,9 +400,7 @@ namespace OpenSim.Framework.Communications.Cache
m_memcache.AddOrUpdate(assetInf.FullID, assetInf, TimeSpan.FromHours(24));
if (StatsManager.SimExtraStats != null)
{
StatsManager.SimExtraStats.AddAsset(assetInf);
}
if (RequestedAssets.ContainsKey(assetInf.FullID))
{

View File

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