From 84cc69573bb522122606c3bc29c8ab188d4ccf70 Mon Sep 17 00:00:00 2001 From: Mike Mazur Date: Fri, 25 Jul 2008 07:16:27 +0000 Subject: Thanks, lulurun, for a patch that adds an authenticated session cache to reduce "check_auth_session" requests from inventory server to user server. --- .../Grid/InventoryServer/GridInventoryService.cs | 38 +++++++++++++++------- 1 file changed, 27 insertions(+), 11 deletions(-) (limited to 'OpenSim/Grid') diff --git a/OpenSim/Grid/InventoryServer/GridInventoryService.cs b/OpenSim/Grid/InventoryServer/GridInventoryService.cs index b8a0436..63eeced 100644 --- a/OpenSim/Grid/InventoryServer/GridInventoryService.cs +++ b/OpenSim/Grid/InventoryServer/GridInventoryService.cs @@ -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; } -- cgit v1.1