Mantis #7567. One of the reported log messages showed this:
09:38:40 - [LOGHTTP]: Slow handling of 15572 POST /CAPS/b12c7e98-8261-4953-b7d1-1c414c9893fc FetchInventory2 8acfbca3-13b5-434f-898c-5f4bbe8a76ff from 92.237.199.112:60083 took 62391ms FetchInventory itself wasn't taking advantage of the new inventory API. This commit fixes that.fsassets
parent
8de65a8fb3
commit
be6fb22d69
|
@ -25,6 +25,7 @@
|
|||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System.Reflection;
|
||||
using OpenMetaverse;
|
||||
using OpenMetaverse.StructuredData;
|
||||
using OpenSim.Framework;
|
||||
|
@ -34,11 +35,13 @@ using OpenSim.Services.Interfaces;
|
|||
using OSDArray = OpenMetaverse.StructuredData.OSDArray;
|
||||
using OSDMap = OpenMetaverse.StructuredData.OSDMap;
|
||||
|
||||
using log4net;
|
||||
|
||||
namespace OpenSim.Capabilities.Handlers
|
||||
{
|
||||
public class FetchInventory2Handler
|
||||
{
|
||||
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
private IInventoryService m_inventoryService;
|
||||
private UUID m_agentID;
|
||||
|
@ -59,12 +62,32 @@ namespace OpenSim.Capabilities.Handlers
|
|||
string reply;
|
||||
LLSDFetchInventory llsdReply = new LLSDFetchInventory();
|
||||
|
||||
UUID[] itemIDs = new UUID[itemsRequested.Count];
|
||||
int i = 0;
|
||||
foreach (OSDMap osdItemId in itemsRequested)
|
||||
{
|
||||
UUID itemId = osdItemId["item_id"].AsUUID();
|
||||
itemIDs[i++] = osdItemId["item_id"].AsUUID();
|
||||
}
|
||||
|
||||
InventoryItemBase item = m_inventoryService.GetItem(new InventoryItemBase(itemId, m_agentID));
|
||||
InventoryItemBase[] items = m_inventoryService.GetMultipleItems(m_agentID, itemIDs);
|
||||
|
||||
if (items == null)
|
||||
{
|
||||
// OMG!!! One by one!!! This is fallback code, in case the backend isn't updated
|
||||
m_log.WarnFormat("[FETCH INVENTORY HANDLER]: GetMultipleItems failed. Falling back to fetching inventory items one by one.");
|
||||
items = new InventoryItemBase[itemsRequested.Count];
|
||||
i = 0;
|
||||
InventoryItemBase item = new InventoryItemBase();
|
||||
item.Owner = m_agentID;
|
||||
foreach (UUID id in itemIDs)
|
||||
{
|
||||
item.ID = id;
|
||||
items[i++] = m_inventoryService.GetItem(item);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (InventoryItemBase item in items)
|
||||
{
|
||||
if (item != null)
|
||||
{
|
||||
// We don't know the agent that this request belongs to so we'll use the agent id of the item
|
||||
|
|
Loading…
Reference in New Issue