cache bad folders requests for 30s. Suitcase can induce a ton of this, and viewers keep requesting

This commit is contained in:
UbitUmarov
2020-07-16 18:23:17 +01:00
parent 7a55f82f74
commit ce92ee1057
6 changed files with 82 additions and 23 deletions

View File

@@ -28,7 +28,9 @@
using Mono.Addins;
using Nini.Config;
using OpenMetaverse;
using OpenMetaverse.StructuredData;
using OpenSim.Capabilities.Handlers;
using OpenSim.Framework;
using OpenSim.Framework.Servers.HttpServer;
using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes;
@@ -53,6 +55,7 @@ namespace OpenSim.Region.ClientStack.Linden
private IInventoryService m_inventoryService = null;
private ILibraryService m_LibraryService = null;
private string m_fetchInventory2Url;
private ExpiringKey<UUID> m_badRequests;
#region ISharedRegionModule Members
@@ -83,6 +86,8 @@ namespace OpenSim.Region.ClientStack.Linden
{
m_inventoryService = null;
m_LibraryService = null;
m_badRequests.Dispose();
m_badRequests = null;
}
}
@@ -96,6 +101,9 @@ namespace OpenSim.Region.ClientStack.Linden
if(m_LibraryService == null)
m_LibraryService = s.LibraryService;
if(m_badRequests == null)
m_badRequests = new ExpiringKey<UUID>(30000);
if (m_inventoryService != null)
{
s.EventManager.OnRegisterCaps += RegisterCaps;
@@ -122,7 +130,11 @@ namespace OpenSim.Region.ClientStack.Linden
{
FetchInventory2Handler fetchHandler = new FetchInventory2Handler(m_inventoryService, agentID);
caps.RegisterSimpleHandler("FetchInventory2",
new SimpleOSDMapHandler("POST", "/" + UUID.Random(), fetchHandler.FetchInventorySimpleRequest));
new SimpleOSDMapHandler("POST", "/" + UUID.Random(), delegate (IOSHttpRequest httpRequest, IOSHttpResponse httpResponse, OSDMap map)
{
fetchHandler.FetchInventorySimpleRequest(httpRequest, httpResponse, map, m_badRequests);
}
));
}
else
{

View File

@@ -37,6 +37,7 @@ using log4net;
using Nini.Config;
using Mono.Addins;
using OpenMetaverse;
using OpenSim.Framework;
using OpenSim.Framework.Servers.HttpServer;
using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes;
@@ -90,6 +91,7 @@ namespace OpenSim.Region.ClientStack.Linden
private ILibraryService m_LibraryService;
private bool m_Enabled;
private ExpiringKey<UUID> m_badRequests;
private string m_fetchInventoryDescendents2Url;
// private string m_webFetchInventoryDescendentsUrl;
@@ -193,6 +195,9 @@ namespace OpenSim.Region.ClientStack.Linden
Scene.EventManager.OnRegisterCaps += RegisterCaps;
if(m_badRequests == null)
m_badRequests = new ExpiringKey<UUID>(30000);
m_NumberScenes++;
int nworkers = 2; // was 2
@@ -231,6 +236,8 @@ namespace OpenSim.Region.ClientStack.Linden
Watchdog.AbortThread(t.ManagedThreadId);
m_workerThreads = null;
m_badRequests.Dispose();
m_badRequests = null;
}
}
// m_queue.Dispose();
@@ -331,7 +338,7 @@ namespace OpenSim.Region.ClientStack.Linden
}
OSHttpResponse osresponse = new OSHttpResponse(requestinfo.request);
m_webFetchHandler.FetchInventoryDescendentsRequest(requestinfo.request, osresponse);
m_webFetchHandler.FetchInventoryDescendentsRequest(requestinfo.request, osresponse, m_module.m_badRequests);
requestinfo.request.InputStream.Dispose();
lock (responses)