Thanks, lulurun, for a patch that adds an authenticated session cache to reduce

"check_auth_session" requests from inventory server to user server.
This commit is contained in:
Mike Mazur
2008-07-25 07:16:27 +00:00
parent 5998fb712a
commit 84cc69573b
2 changed files with 134 additions and 11 deletions

View File

@@ -38,6 +38,7 @@ using Nwc.XmlRpc;
using OpenSim.Framework;
using OpenSim.Framework.Communications;
using OpenSim.Framework.Communications.Cache;
namespace OpenSim.Grid.InventoryServer
{
@@ -48,8 +49,10 @@ namespace OpenSim.Grid.InventoryServer
{
private static readonly ILog m_log
= LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private static readonly int INVENTORY_DEFAULT_SESSION_TIME = 30; // secs
private string m_userserver_url;
private AuthedSessionCache m_session_cache = new AuthedSessionCache(INVENTORY_DEFAULT_SESSION_TIME);
public GridInventoryService(string userserver_url)
{
@@ -72,20 +75,33 @@ namespace OpenSim.Grid.InventoryServer
public bool CheckAuthSession(string session_id, string avatar_id)
{
m_log.InfoFormat("[GRID AGENT INVENTORY]: checking authed session {0} {1}", session_id, avatar_id);
Hashtable requestData = new Hashtable();
requestData["avatar_uuid"] = avatar_id;
requestData["session_id"] = session_id;
ArrayList SendParams = new ArrayList();
SendParams.Add(requestData);
XmlRpcRequest UserReq = new XmlRpcRequest("check_auth_session", SendParams);
XmlRpcResponse UserResp = UserReq.Send(m_userserver_url, 3000);
Hashtable responseData = (Hashtable)UserResp.Value;
if (responseData.ContainsKey("auth_session") && responseData["auth_session"].ToString() == "TRUE")
if (m_session_cache.getCachedSession(session_id, avatar_id) == null)
{
// cache miss, ask userserver
Hashtable requestData = new Hashtable();
requestData["avatar_uuid"] = avatar_id;
requestData["session_id"] = session_id;
ArrayList SendParams = new ArrayList();
SendParams.Add(requestData);
XmlRpcRequest UserReq = new XmlRpcRequest("check_auth_session", SendParams);
XmlRpcResponse UserResp = UserReq.Send(m_userserver_url, 3000);
Hashtable responseData = (Hashtable)UserResp.Value;
if (responseData.ContainsKey("auth_session") && responseData["auth_session"].ToString() == "TRUE")
{
m_log.Info("[GRID AGENT INVENTORY]: got authed session from userserver");
// add to cache; the session time will be automatically renewed
m_session_cache.Add(session_id, avatar_id);
return true;
}
}
else
{
// cache hits
m_log.Info("[GRID AGENT INVENTORY]: got authed session from cache");
return true;
}
m_log.Info("[GRID AGENT INVENTORY]: unknown session_id, request rejected");
return false;
}