From a58152bd2af64493e655d6f559bc366c38433187 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Fri, 9 Mar 2012 12:59:24 -0800 Subject: More on inventory transfer hold ups: - Added an inventory cache for caching root and system folders - Synchronized the remote inventory connector, so that all the remote inventory calls are serialized This will not make much difference in the hold ups. We'd have to move the FireAndForget high up to AddInventoryItem, but that opens up a can of worms regarding the notification of the recipient... the recipient would be notified of the offer before the items are effectively in his inventory, which could lead to surprises. --- .../Inventory/HGInventoryBroker.cs | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs') diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs index b5c0af6..4be3804 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs @@ -58,6 +58,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory private List m_Scenes = new List(); + private InventoryCache m_Cache = new InventoryCache(); + protected IUserManagement m_UserManagement; protected IUserManagement UserManagementModule { @@ -312,6 +314,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory public InventoryFolderBase GetRootFolder(UUID userID) { //m_log.DebugFormat("[HG INVENTORY CONNECTOR]: GetRootFolder for {0}", userID); + InventoryFolderBase root = m_Cache.GetRootFolder(userID); + if (root != null) + return root; string invURL = GetInventoryServiceURL(userID); @@ -320,12 +325,19 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory IInventoryService connector = GetConnector(invURL); - return connector.GetRootFolder(userID); + root = connector.GetRootFolder(userID); + + m_Cache.Cache(userID, root); + + return root; } public InventoryFolderBase GetFolderForType(UUID userID, AssetType type) { //m_log.DebugFormat("[HG INVENTORY CONNECTOR]: GetFolderForType {0} type {1}", userID, type); + InventoryFolderBase f = m_Cache.GetFolderForType(userID, type); + if (f != null) + return f; string invURL = GetInventoryServiceURL(userID); @@ -334,7 +346,11 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory IInventoryService connector = GetConnector(invURL); - return connector.GetFolderForType(userID, type); + f = connector.GetFolderForType(userID, type); + + m_Cache.Cache(userID, type, f); + + return f; } public InventoryCollection GetFolderContent(UUID userID, UUID folderID) -- cgit v1.1