From 9be5f9d6cce5f447294b478ab6c71fa7a520ffad Mon Sep 17 00:00:00 2001 From: lbsa71 Date: Wed, 20 Feb 2008 09:38:45 +0000 Subject: * Fixed xml loading bug (the xml was scheduled for update before added to a scene) * Fixed ClickAction situation on the same note (properties shouldn't cause big changes) * Added some more debug output to AssetCache --- .../Framework/Communications/Cache/AssetCache.cs | 171 ++++++++++++--------- 1 file changed, 101 insertions(+), 70 deletions(-) (limited to 'OpenSim/Framework') diff --git a/OpenSim/Framework/Communications/Cache/AssetCache.cs b/OpenSim/Framework/Communications/Cache/AssetCache.cs index b793b62..0904823 100644 --- a/OpenSim/Framework/Communications/Cache/AssetCache.cs +++ b/OpenSim/Framework/Communications/Cache/AssetCache.cs @@ -81,8 +81,8 @@ namespace OpenSim.Framework.Communications.Cache long imageBytes = 0; long assetBytes = 0; - - + + foreach (TextureImage texture in Textures.Values) { @@ -109,8 +109,8 @@ namespace OpenSim.Framework.Communications.Cache temporaryAssets); m_log.InfoFormat("Image data: {0}kb Asset data: {1}kb", - imageBytes/1024, - assetBytes/1024); + imageBytes / 1024, + assetBytes / 1024); } @@ -141,7 +141,6 @@ namespace OpenSim.Framework.Communications.Cache m_assetServer = assetServer; m_assetServer.SetReceiver(this); - m_assetCacheThread = new Thread(new ThreadStart(RunAssetManager)); m_assetCacheThread.Name = "AssetCacheThread"; m_assetCacheThread.IsBackground = true; @@ -170,59 +169,72 @@ namespace OpenSim.Framework.Communications.Cache /// /// Only get an asset if we already have it in the cache. /// - /// + /// /// - private AssetBase GetCachedAsset(LLUUID assetID) + //private AssetBase GetCachedAsset(LLUUID assetId) + //{ + // AssetBase asset = null; + + // if (Textures.ContainsKey(assetId)) + // { + // asset = Textures[assetId]; + // } + // else if (Assets.ContainsKey(assetId)) + // { + // asset = Assets[assetId]; + // } + + // return asset; + //} + + private bool TryGetCachedAsset(LLUUID assetId, out AssetBase asset) { - AssetBase asset = null; - if (Textures.ContainsKey(assetID)) + if (Textures.ContainsKey(assetId)) { - asset = Textures[assetID]; + asset = Textures[assetId]; + return true; } - else if (Assets.ContainsKey(assetID)) + else if (Assets.ContainsKey(assetId)) { - asset = Assets[assetID]; + asset = Assets[assetId]; + return true; } - return asset; + + asset = null; + return false; } - public void GetAsset(LLUUID assetID, AssetRequestCallback callback) + public void GetAsset(LLUUID assetId, AssetRequestCallback callback) { - AssetBase asset = null; - if (Textures.ContainsKey(assetID)) - { - asset = Textures[assetID]; - } - else if (Assets.ContainsKey(assetID)) - { - asset = Assets[assetID]; - } + AssetBase asset; - if (asset != null) + if (TryGetCachedAsset(assetId, out asset)) { - callback(assetID, asset); + + callback(assetId, asset); } else { - NewAssetRequest req = new NewAssetRequest(assetID, callback); + NewAssetRequest req = new NewAssetRequest(assetId, callback); AssetRequestsList requestList; lock (RequestLists) { - if (RequestLists.TryGetValue(assetID, out requestList)) + if (RequestLists.TryGetValue(assetId, out requestList)) { } else { - requestList = new AssetRequestsList(assetID); - RequestLists.Add(assetID, requestList); + requestList = new AssetRequestsList(assetId); + RequestLists.Add(assetId, requestList); } } + m_log.DebugFormat("[ASSETCACHE]: Added request for asset {0}", assetId); requestList.Requests.Add(req); - - m_assetServer.RequestAsset(assetID, false); + + m_assetServer.RequestAsset(assetId, false); } } @@ -248,28 +260,30 @@ namespace OpenSim.Framework.Communications.Cache int pollPeriod = 200; int maxPolls = 15; - AssetBase asset = GetCachedAsset(assetID); - if (asset != null) - { - return asset; - } - - m_assetServer.RequestAsset(assetID, isTexture); + AssetBase asset; - do + if (TryGetCachedAsset(assetID, out asset)) { - Thread.Sleep(pollPeriod); + m_assetServer.RequestAsset(assetID, isTexture); - asset = GetCachedAsset(assetID); - if (asset != null) + do { - return asset; - } - } while (--maxPolls > 0); + Thread.Sleep(pollPeriod); - m_log.WarnFormat("[ASSETCACHE]: Asset {0} was not received before the retrieval timeout was reached", assetID.ToString()); + if (TryGetCachedAsset(assetID, out asset)) + { + return asset; + } + } while (--maxPolls > 0); - return null; + m_log.WarnFormat("[ASSETCACHE]: Asset {0} was not received before the retrieval timeout was reached", assetID.ToString()); + + return null; + } + else + { + return asset; + } } /// @@ -337,26 +351,26 @@ namespace OpenSim.Framework.Communications.Cache m_log.InfoFormat("[ASSETCACHE]: Adding {0} {1} [{2}]: {3}.", temporary, type, asset.FullID, result); } - public void DeleteAsset(LLUUID assetID) - { - // this.m_assetServer.DeleteAsset(assetID); - - //Todo should delete it from memory too - } - public AssetBase CopyAsset(LLUUID assetID) { - AssetBase asset = GetCachedAsset(assetID); - if (asset == null) - return null; + AssetBase asset; - asset.FullID = LLUUID.Random(); // TODO: check for conflicts - AddAsset(asset); - return asset; + if (TryGetCachedAsset(assetID, out asset)) + { + asset.FullID = LLUUID.Random(); // TODO: check for conflicts + AddAsset(asset); + return asset; + } + else + { + return null; + } } public void AssetReceived(AssetBase asset, bool IsTexture) { + m_log.InfoFormat("[ASSETCACHE]: Recieved {0} [{1}]", IsTexture ? "texture" : "asset", asset.FullID); + if (asset.FullID != LLUUID.Zero) // if it is set to zero then the asset wasn't found by the server { //check if it is a texture or not @@ -366,18 +380,24 @@ namespace OpenSim.Framework.Communications.Cache if (IsTexture) { - //Console.WriteLine("asset received from asset server"); - TextureImage image = new TextureImage(asset); - if (!Textures.ContainsKey(image.FullID)) + if (Textures.ContainsKey(image.FullID)) + { + m_log.InfoFormat("[ASSETCACHE]: There's already an texture {0} in memory. Skipping.", asset.FullID); + } + else { Textures.Add(image.FullID, image); if (StatsManager.SimExtraStats != null) + { StatsManager.SimExtraStats.AddTexture(image); + } if (RequestedTextures.ContainsKey(image.FullID)) { + m_log.InfoFormat("[ASSETCACHE]: Moving {0} from RequestedTextures to TextureRequests", asset.FullID); + AssetRequest req = RequestedTextures[image.FullID]; req.ImageInfo = image; @@ -391,18 +411,27 @@ namespace OpenSim.Framework.Communications.Cache else { AssetInfo assetInf = new AssetInfo(asset); - if (!Assets.ContainsKey(assetInf.FullID)) + if (Assets.ContainsKey(assetInf.FullID)) + { + m_log.InfoFormat("[ASSETCACHE]: There's already an asset {0} in memory. Skipping.", asset.FullID); + } + else { Assets.Add(assetInf.FullID, assetInf); if (StatsManager.SimExtraStats != null) + { StatsManager.SimExtraStats.AddAsset(assetInf); + } if (RequestedAssets.ContainsKey(assetInf.FullID)) { + m_log.InfoFormat("[ASSETCACHE]: Moving {0} from RequestedAssets to AssetRequests", asset.FullID); + AssetRequest req = RequestedAssets[assetInf.FullID]; req.AssetInf = assetInf; req.NumPackets = CalculateNumPackets(assetInf.Data); + RequestedAssets.Remove(assetInf.FullID); AssetRequests.Add(req); } @@ -411,14 +440,14 @@ namespace OpenSim.Framework.Communications.Cache if (RequestLists.ContainsKey(asset.FullID)) { - AssetRequestsList reqList = RequestLists[asset.FullID]; - foreach (NewAssetRequest req in reqList.Requests) - { - req.Callback(asset.FullID, asset); - } - lock (RequestLists) { + AssetRequestsList reqList = RequestLists[asset.FullID]; + foreach (NewAssetRequest req in reqList.Requests) + { + req.Callback(asset.FullID, asset); + } + RequestLists.Remove(asset.FullID); reqList.Requests.Clear(); } @@ -428,6 +457,8 @@ namespace OpenSim.Framework.Communications.Cache public void AssetNotFound(LLUUID assetID) { + m_log.ErrorFormat("[ASSET CACHE]: Unhandled AssetNotFound for {0}", assetID); + //if (this.RequestedTextures.ContainsKey(assetID)) //{ // m_log.WarnFormat("[ASSET CACHE]: sending image not found for {0}", assetID); -- cgit v1.1