From 7b106564faa805efa01ed68dacb535eee28559b9 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Wed, 28 Oct 2020 12:12:08 +0000 Subject: [PATCH] in some cases store a hg asset on local grid is just waste --- .../Handlers/GetAssets/GetAssetsHandler.cs | 24 ++-------- .../CoreModules/Asset/FlotsamAssetCache.cs | 46 ++++++++++++++++++- .../Avatar/UserProfiles/UserProfileModule.cs | 2 +- .../InventoryAccess/HGAssetMapper.cs | 19 +------- .../Asset/LocalAssetServiceConnector.cs | 4 +- .../Asset/RegionAssetConnectorModule.cs | 9 ++-- OpenSim/Services/AssetService/AssetService.cs | 2 +- .../Services/AssetService/XAssetService.cs | 2 +- .../Asset/AssetServicesConnector.cs | 2 +- .../Asset/HGAssetServiceConnector.cs | 2 +- .../Services/FSAssetService/FSAssetService.cs | 2 +- .../HypergridService/HGAssetService.cs | 2 +- .../HypergridService/HGRemoteAssetService.cs | 2 +- OpenSim/Services/Interfaces/IAssetService.cs | 4 +- 14 files changed, 67 insertions(+), 55 deletions(-) diff --git a/OpenSim/Capabilities/Handlers/GetAssets/GetAssetsHandler.cs b/OpenSim/Capabilities/Handlers/GetAssets/GetAssetsHandler.cs index c0244f80a7..8a0bfed88a 100644 --- a/OpenSim/Capabilities/Handlers/GetAssets/GetAssetsHandler.cs +++ b/OpenSim/Capabilities/Handlers/GetAssets/GetAssetsHandler.cs @@ -121,29 +121,13 @@ namespace OpenSim.Capabilities.Handlers if(!UUID.TryParse(assetStr, out assetID)) return; - AssetBase asset = m_assetService.Get(assetID.ToString()); - if (asset == null) + AssetBase asset = m_assetService.Get(assetID.ToString(), serviceURL, false); + if (asset == null || asset.Type != (sbyte)type) { - if (String.IsNullOrWhiteSpace(serviceURL)) - { - // m_log.Warn("[GETASSET]: not found: " + query + " " + assetStr); - response.StatusCode = (int)HttpStatusCode.NotFound; - return; - } - - string newid = serviceURL + "/" + assetID.ToString(); - asset = m_assetService.Get(newid); - if (asset == null) - { - // m_log.Warn("[GETASSET]: not found: " + query + " " + assetStr); - response.StatusCode = (int)HttpStatusCode.NotFound; - return; - } // m_log.Warn("[GETASSET]: not found: " + query + " " + assetStr); - } - - if (asset.Type != (sbyte)type) + response.StatusCode = (int)HttpStatusCode.NotFound; return; + } int len = asset.Data.Length; diff --git a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs index 605ca41e89..66de3608f8 100755 --- a/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs +++ b/OpenSim/Region/CoreModules/Asset/FlotsamAssetCache.cs @@ -562,7 +562,7 @@ namespace OpenSim.Region.CoreModules.Asset return asset; } - public AssetBase Get(string id, string ForeignAssetService) + public AssetBase Get(string id, string ForeignAssetService, bool dummy) { return null; } @@ -630,9 +630,51 @@ namespace OpenSim.Region.CoreModules.Asset return false; } + // does not check negative cache public AssetBase GetCached(string id) { - Get(id, out AssetBase asset); + AssetBase asset = null; + + m_Requests++; + + asset = GetFromWeakReference(id); + if (asset != null) + { + if (m_updateFileTimeOnCacheHit) + { + string filename = GetFileName(id); + UpdateFileLastAccessTime(filename); + } + if (m_MemoryCacheEnabled) + UpdateMemoryCache(id, asset); + return asset; + } + + if (m_MemoryCacheEnabled) + { + asset = GetFromMemoryCache(id); + if (asset != null) + { + UpdateWeakReference(id, asset); + if (m_updateFileTimeOnCacheHit) + { + string filename = GetFileName(id); + UpdateFileLastAccessTime(filename); + } + return asset; + } + } + + if (m_FileCacheEnabled) + { + asset = GetFromFileCache(id); + if (asset != null) + { + UpdateWeakReference(id, asset); + if (m_MemoryCacheEnabled) + UpdateMemoryCache(id, asset); + } + } return asset; } diff --git a/OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs b/OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs index cdb93f238d..26ead920bd 100644 --- a/OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/UserProfiles/UserProfileModule.cs @@ -1891,7 +1891,7 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles if(string.IsNullOrWhiteSpace(assetServerURI)) return; - Scene.AssetService.Get(imageID.ToString(), assetServerURI); + Scene.AssetService.Get(imageID.ToString(), assetServerURI, false); } /// diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGAssetMapper.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGAssetMapper.cs index 922831577b..ecbde8d899 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGAssetMapper.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGAssetMapper.cs @@ -90,24 +90,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess private AssetBase FetchAsset(string url, UUID assetID) { - string assetIDstr = assetID.ToString(); - // Test if it's already here - AssetBase asset = m_scene.AssetService.Get(assetIDstr); - if (asset == null) - { - if (string.IsNullOrEmpty(url)) - return null; - - asset = m_scene.AssetService.Get(assetIDstr, url); - - //if (asset != null) - // m_log.DebugFormat("[HG ASSET MAPPER]: Fetched asset {0} of type {1} from {2} ", assetID, asset.Metadata.Type, url); - //else - // m_log.DebugFormat("[HG ASSET MAPPER]: Unable to fetch asset {0} from {1} ", assetID, url); - - } - - return asset; + return m_scene.AssetService.Get(url, assetID.ToString(), true); } public bool PostAsset(string url, AssetBase asset, bool verbose = true) diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/LocalAssetServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/LocalAssetServiceConnector.cs index a26c445f1e..4884766ccd 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/LocalAssetServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/LocalAssetServiceConnector.cs @@ -166,7 +166,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset return asset; } - public AssetBase Get(string id, string ForeignAssetService) + public AssetBase Get(string id, string ForeignAssetService, bool dummy) { return null; } @@ -231,7 +231,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset return null; } - public bool Get(string id, Object sender, AssetRetrieved handler) + public bool Get(string id, object sender, AssetRetrieved handler) { // m_log.DebugFormat("[LOCAL ASSET SERVICES CONNECTOR]: Asynchronously requesting asset {0}", id); diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/RegionAssetConnectorModule.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/RegionAssetConnectorModule.cs index d4bb1ac782..04e26705fa 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/RegionAssetConnectorModule.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Asset/RegionAssetConnectorModule.cs @@ -229,7 +229,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset { if (m_HGConnector == null || string.IsNullOrEmpty(ForeignAssetService)) return null; - return m_HGConnector.Get(id , ForeignAssetService); + return m_HGConnector.Get(id , ForeignAssetService, true); } public AssetBase GetForeign(string id) @@ -288,7 +288,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset return asset; } - public AssetBase Get(string id, string ForeignAssetService) + public AssetBase Get(string id, string ForeignAssetService, bool StoreOnLocalGrid) { // assumes id and ForeignAssetService are valid and resolved AssetBase asset = null; @@ -311,7 +311,10 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Asset m_Cache.CacheNegative(id); return null; } - Store(asset); + if(StoreOnLocalGrid) + Store(asset); + else if (m_Cache != null) + m_Cache.Cache(asset); } else if (m_Cache != null) m_Cache.CacheNegative(id); diff --git a/OpenSim/Services/AssetService/AssetService.cs b/OpenSim/Services/AssetService/AssetService.cs index f297068374..ca2235aae8 100644 --- a/OpenSim/Services/AssetService/AssetService.cs +++ b/OpenSim/Services/AssetService/AssetService.cs @@ -113,7 +113,7 @@ namespace OpenSim.Services.AssetService } } - public AssetBase Get(string id, string ForeignAssetService) + public AssetBase Get(string id, string ForeignAssetService, bool dummy) { return null; } diff --git a/OpenSim/Services/AssetService/XAssetService.cs b/OpenSim/Services/AssetService/XAssetService.cs index 9db4d724e5..674849dfbe 100644 --- a/OpenSim/Services/AssetService/XAssetService.cs +++ b/OpenSim/Services/AssetService/XAssetService.cs @@ -129,7 +129,7 @@ namespace OpenSim.Services.AssetService } } - public AssetBase Get(string id, string ForeignAssetService) + public AssetBase Get(string id, string ForeignAssetService, bool dummy) { return null; } diff --git a/OpenSim/Services/Connectors/Asset/AssetServicesConnector.cs b/OpenSim/Services/Connectors/Asset/AssetServicesConnector.cs index e0c12e0b19..1fad48eea5 100644 --- a/OpenSim/Services/Connectors/Asset/AssetServicesConnector.cs +++ b/OpenSim/Services/Connectors/Asset/AssetServicesConnector.cs @@ -156,7 +156,7 @@ namespace OpenSim.Services.Connectors return asset; } - public AssetBase Get(string id, string ForeignAssetService) + public AssetBase Get(string id, string ForeignAssetService, bool dummy) { return null; } diff --git a/OpenSim/Services/Connectors/Asset/HGAssetServiceConnector.cs b/OpenSim/Services/Connectors/Asset/HGAssetServiceConnector.cs index c550563676..6739e584b2 100644 --- a/OpenSim/Services/Connectors/Asset/HGAssetServiceConnector.cs +++ b/OpenSim/Services/Connectors/Asset/HGAssetServiceConnector.cs @@ -85,7 +85,7 @@ namespace OpenSim.Services.Connectors return null; } - public AssetBase Get(string id, string ForeignAssetService) + public AssetBase Get(string id, string ForeignAssetService, bool dummy) { IAssetService connector = GetConnector(ForeignAssetService); return connector.Get(id); diff --git a/OpenSim/Services/FSAssetService/FSAssetService.cs b/OpenSim/Services/FSAssetService/FSAssetService.cs index 5bb4447c07..5acfeec3fb 100644 --- a/OpenSim/Services/FSAssetService/FSAssetService.cs +++ b/OpenSim/Services/FSAssetService/FSAssetService.cs @@ -420,7 +420,7 @@ namespace OpenSim.Services.FSAssetService return Get(id, out hash); } - public AssetBase Get(string id, string ForeignAssetService) + public AssetBase Get(string id, string ForeignAssetService, bool dummy) { return null; } diff --git a/OpenSim/Services/HypergridService/HGAssetService.cs b/OpenSim/Services/HypergridService/HGAssetService.cs index 2056be5a41..fd9d9d8825 100755 --- a/OpenSim/Services/HypergridService/HGAssetService.cs +++ b/OpenSim/Services/HypergridService/HGAssetService.cs @@ -125,7 +125,7 @@ namespace OpenSim.Services.HypergridService return asset; } - public AssetBase Get(string id, string ForeignAssetService) + public AssetBase Get(string id, string ForeignAssetService, bool dummy) { return null; } diff --git a/OpenSim/Services/HypergridService/HGRemoteAssetService.cs b/OpenSim/Services/HypergridService/HGRemoteAssetService.cs index 151d50dd85..e09ace6f6c 100644 --- a/OpenSim/Services/HypergridService/HGRemoteAssetService.cs +++ b/OpenSim/Services/HypergridService/HGRemoteAssetService.cs @@ -117,7 +117,7 @@ namespace OpenSim.Services.HypergridService return asset; } - public AssetBase Get(string id, string ForeignAssetService) + public AssetBase Get(string id, string ForeignAssetService, bool dummy) { return null; } diff --git a/OpenSim/Services/Interfaces/IAssetService.cs b/OpenSim/Services/Interfaces/IAssetService.cs index 3c456e13aa..208a36c121 100644 --- a/OpenSim/Services/Interfaces/IAssetService.cs +++ b/OpenSim/Services/Interfaces/IAssetService.cs @@ -40,8 +40,8 @@ namespace OpenSim.Services.Interfaces /// /// AssetBase Get(string id); - AssetBase Get(string id, string ForeignAssetService); - + AssetBase Get(string id, string ForeignAssetService, bool StoreOnLocalGrid); + /// /// Get an asset's metadata ///