* Restore storing null to represent 'missing asset' requests in the AssetCache
* If we don't do this then callers to the polling GetAsset wait the full polling time before returning0.6.1-post-fixes
parent
1493f7349f
commit
50e3eb31b0
|
@ -245,15 +245,13 @@ namespace OpenSim.Framework.Communications.Cache
|
|||
/// <summary>
|
||||
/// Synchronously retreive an asset. If the asset isn't in the cache, a request will be made to the persistent store to
|
||||
/// load it into the cache.
|
||||
/// </summary>
|
||||
///
|
||||
/// XXX We'll keep polling the cache until we get the asset or we exceed
|
||||
/// the allowed number of polls. This isn't a very good way of doing things since a single thread
|
||||
/// is processing inbound packets, so if the asset server is slow, we could block this for up to
|
||||
/// the timeout period. What we might want to do is register asynchronous callbacks on asset
|
||||
/// receipt in the same manner as the TextureDownloadModule. Of course,
|
||||
/// a timeout before asset receipt usually isn't fatal, the operation will work on the retry when the
|
||||
/// asset is much more likely to have made it into the cache.
|
||||
/// </summary>
|
||||
/// the timeout period. Whereever possible we want to use the asynchronous callback GetAsset()
|
||||
///
|
||||
/// <param name="assetID"></param>
|
||||
/// <param name="isTexture"></param>
|
||||
/// <returns>null if the asset could not be retrieved</returns>
|
||||
|
@ -270,6 +268,7 @@ namespace OpenSim.Framework.Communications.Cache
|
|||
{
|
||||
return asset;
|
||||
}
|
||||
|
||||
m_assetServer.RequestAsset(assetID, isTexture);
|
||||
|
||||
do
|
||||
|
@ -280,7 +279,8 @@ namespace OpenSim.Framework.Communications.Cache
|
|||
{
|
||||
return asset;
|
||||
}
|
||||
} while (--maxPolls > 0);
|
||||
}
|
||||
while (--maxPolls > 0);
|
||||
|
||||
m_log.WarnFormat("[ASSET CACHE]: {0} {1} was not received before the retrieval timeout was reached",
|
||||
isTexture ? "texture" : "asset", assetID.ToString());
|
||||
|
@ -400,6 +400,9 @@ namespace OpenSim.Framework.Communications.Cache
|
|||
{
|
||||
// m_log.WarnFormat("[ASSET CACHE]: AssetNotFound for {0}", assetID);
|
||||
|
||||
// Remember the fact that this asset could not be found to prevent delays from repeated requests
|
||||
m_memcache.Add(assetID, null, TimeSpan.FromHours(24));
|
||||
|
||||
// Notify requesters for this asset
|
||||
AssetRequestsList reqList;
|
||||
lock (RequestLists)
|
||||
|
|
Loading…
Reference in New Issue