diff --git a/OpenSim/Addons/Groups/RemoteConnectorCacheWrapper.cs b/OpenSim/Addons/Groups/RemoteConnectorCacheWrapper.cs index 813f79658e..2e78ed7b7f 100644 --- a/OpenSim/Addons/Groups/RemoteConnectorCacheWrapper.cs +++ b/OpenSim/Addons/Groups/RemoteConnectorCacheWrapper.cs @@ -51,12 +51,12 @@ namespace OpenSim.Groups public class RemoteConnectorCacheWrapper { - private ForeignImporter m_ForeignImporter; - - private Dictionary m_ActiveRequests = new Dictionary(); private const int GROUPS_CACHE_TIMEOUT = 1 * 60; // 1 minutes - // This all important cache cahces objects of different types: + private ForeignImporter m_ForeignImporter; + private HashSet m_ActiveRequests = new HashSet(); + + // This all important cache caches objects of different types: // group- or group- => ExtendedGroupRecord // active- => GroupMembershipData // membership-- => GroupMembershipData @@ -68,7 +68,7 @@ namespace OpenSim.Groups // rolemembers-- => List // notice- => GroupNoticeInfo // notices- => List - private ExpiringCache m_Cache = new ExpiringCache(); + private ExpiringCacheOS m_Cache = new ExpiringCacheOS(30000); public RemoteConnectorCacheWrapper(IUserManagement uman) { @@ -88,13 +88,10 @@ namespace OpenSim.Groups return UUID.Zero; if (group.GroupID != UUID.Zero) - lock (m_Cache) - { - m_Cache.Add("group-" + group.GroupID.ToString(), group, GROUPS_CACHE_TIMEOUT); - if (m_Cache.Contains("memberships-" + RequestingAgentID.ToString())) - m_Cache.Remove("memberships-" + RequestingAgentID.ToString()); - } - + { + m_Cache.AddOrUpdate("group-" + group.GroupID.ToString(), group, GROUPS_CACHE_TIMEOUT); + m_Cache.Remove("memberships-" + RequestingAgentID.ToString()); + } return group.GroupID; } @@ -105,8 +102,8 @@ namespace OpenSim.Groups ExtendedGroupRecord group = d(); if (group != null && group.GroupID != UUID.Zero) - lock (m_Cache) - m_Cache.AddOrUpdate("group-" + group.GroupID.ToString(), group, GROUPS_CACHE_TIMEOUT); + m_Cache.AddOrUpdate("group-" + group.GroupID.ToString(), group, GROUPS_CACHE_TIMEOUT); + return true; } @@ -136,9 +133,9 @@ namespace OpenSim.Groups } // not cached - if (!m_ActiveRequests.ContainsKey(cacheKey)) + if (!m_ActiveRequests.Contains(cacheKey)) { - m_ActiveRequests.Add(cacheKey, true); + m_ActiveRequests.Add(cacheKey); firstCall = true; } } @@ -180,8 +177,6 @@ namespace OpenSim.Groups m_Cache.AddOrUpdate("active-" + AgentID.ToString(), membership, GROUPS_CACHE_TIMEOUT); m_Cache.AddOrUpdate("membership-" + AgentID.ToString() + "-" + GroupID.ToString(), membership, GROUPS_CACHE_TIMEOUT); } - - return true; } @@ -189,37 +184,29 @@ namespace OpenSim.Groups { d(); - lock (m_Cache) - { - string cacheKey = "active-" + AgentID.ToString(); - if (m_Cache.Contains(cacheKey)) - m_Cache.Remove(cacheKey); + string AgentIDToString = AgentID.ToString(); + string cacheKey = "active-" + AgentIDToString; + m_Cache.Remove(cacheKey); - cacheKey = "memberships-" + AgentID.ToString(); - if (m_Cache.Contains(cacheKey)) - m_Cache.Remove(cacheKey); + cacheKey = "memberships-" + AgentIDToString; + m_Cache.Remove(cacheKey); - cacheKey = "membership-" + AgentID.ToString() + "-" + GroupID.ToString(); - if (m_Cache.Contains(cacheKey)) - m_Cache.Remove(cacheKey); + string GroupIDToString = GroupID.ToString(); + cacheKey = "membership-" + AgentIDToString + "-" + GroupIDToString; + m_Cache.Remove(cacheKey); - cacheKey = "members-" + RequestingAgentID.ToString() + "-" + GroupID.ToString(); - if (m_Cache.Contains(cacheKey)) - m_Cache.Remove(cacheKey); + cacheKey = "members-" + RequestingAgentID.ToString() + "-" + GroupIDToString; + m_Cache.Remove(cacheKey); - cacheKey = "roles-" + "-" + GroupID.ToString() + "-" + AgentID.ToString(); - if (m_Cache.Contains(cacheKey)) - m_Cache.Remove(cacheKey); - } + cacheKey = "roles-" + "-" + GroupIDToString + "-" + AgentIDToString; + m_Cache.Remove(cacheKey); } public void SetAgentActiveGroup(string AgentID, GroupMembershipDelegate d) { GroupMembershipData activeGroup = d(); string cacheKey = "active-" + AgentID.ToString(); - lock (m_Cache) - if (m_Cache.Contains(cacheKey)) - m_Cache.AddOrUpdate(cacheKey, activeGroup, GROUPS_CACHE_TIMEOUT); + m_Cache.AddOrUpdate(cacheKey, activeGroup, GROUPS_CACHE_TIMEOUT); } public ExtendedGroupMembershipData GetAgentActiveMembership(string AgentID, GroupMembershipDelegate d) @@ -241,9 +228,9 @@ namespace OpenSim.Groups } // not cached - if (!m_ActiveRequests.ContainsKey(cacheKey)) + if (!m_ActiveRequests.Contains(cacheKey)) { - m_ActiveRequests.Add(cacheKey, true); + m_ActiveRequests.Add(cacheKey); firstCall = true; } } @@ -253,12 +240,8 @@ namespace OpenSim.Groups try { membership = d(); - - lock (m_Cache) - { - m_Cache.AddOrUpdate(cacheKey, membership, GROUPS_CACHE_TIMEOUT); - return (ExtendedGroupMembershipData)membership; - } + m_Cache.AddOrUpdate(cacheKey, membership, GROUPS_CACHE_TIMEOUT); + return (ExtendedGroupMembershipData)membership; } finally { @@ -290,9 +273,9 @@ namespace OpenSim.Groups } // not cached - if (!m_ActiveRequests.ContainsKey(cacheKey)) + if (!m_ActiveRequests.Contains(cacheKey)) { - m_ActiveRequests.Add(cacheKey, true); + m_ActiveRequests.Add(cacheKey); firstCall = true; } } @@ -302,11 +285,8 @@ namespace OpenSim.Groups try { membership = d(); - lock (m_Cache) - { - m_Cache.AddOrUpdate(cacheKey, membership, GROUPS_CACHE_TIMEOUT); - return (ExtendedGroupMembershipData)membership; - } + m_Cache.AddOrUpdate(cacheKey, membership, GROUPS_CACHE_TIMEOUT); + return (ExtendedGroupMembershipData)membership; } finally { @@ -337,9 +317,9 @@ namespace OpenSim.Groups } // not cached - if (!m_ActiveRequests.ContainsKey(cacheKey)) + if (!m_ActiveRequests.Contains(cacheKey)) { - m_ActiveRequests.Add(cacheKey, true); + m_ActiveRequests.Add(cacheKey); firstCall = true; } } @@ -349,11 +329,8 @@ namespace OpenSim.Groups try { memberships = d(); - lock (m_Cache) - { - m_Cache.AddOrUpdate(cacheKey, memberships, GROUPS_CACHE_TIMEOUT); - return (List)memberships; - } + m_Cache.AddOrUpdate(cacheKey, memberships, GROUPS_CACHE_TIMEOUT); + return (List)memberships; } finally { @@ -385,9 +362,9 @@ namespace OpenSim.Groups } // not cached - if (!m_ActiveRequests.ContainsKey(cacheKey)) + if (!m_ActiveRequests.Contains(cacheKey)) { - m_ActiveRequests.Add(cacheKey, true); + m_ActiveRequests.Add(cacheKey); firstCall = true; } } @@ -403,13 +380,8 @@ namespace OpenSim.Groups else members = new List(); - lock (m_Cache) - { - //m_Cache.AddOrUpdate(cacheKey, members, GROUPS_CACHE_TIMEOUT); - m_Cache.AddOrUpdate(cacheKey, _members, GROUPS_CACHE_TIMEOUT); - - return (List)members; - } + m_Cache.AddOrUpdate(cacheKey, _members, GROUPS_CACHE_TIMEOUT); + return (List)members; } finally { @@ -433,16 +405,10 @@ namespace OpenSim.Groups role.RoleID = roleID; role.Title = title; - lock (m_Cache) - { - m_Cache.AddOrUpdate("role-" + roleID.ToString(), role, GROUPS_CACHE_TIMEOUT); + m_Cache.AddOrUpdate("role-" + roleID.ToString(), role, GROUPS_CACHE_TIMEOUT); // also remove this list - if (m_Cache.Contains("roles-" + groupID.ToString())) - m_Cache.Remove("roles-" + groupID.ToString()); - - } - + m_Cache.Remove("roles-" + groupID.ToString()); return true; } @@ -463,22 +429,15 @@ namespace OpenSim.Groups r.Powers = powers; r.Title = title; - m_Cache.Update("role-" + roleID.ToString(), r, GROUPS_CACHE_TIMEOUT); + m_Cache.AddOrUpdate("role-" + roleID.ToString(), r, GROUPS_CACHE_TIMEOUT); } return true; } else { - lock (m_Cache) - { - if (m_Cache.Contains("role-" + roleID.ToString())) - m_Cache.Remove("role-" + roleID.ToString()); - - // also remove these lists, because they will have an outdated role - if (m_Cache.Contains("roles-" + groupID.ToString())) - m_Cache.Remove("roles-" + groupID.ToString()); - - } + m_Cache.Remove("role-" + roleID.ToString()); + // also remove these lists, because they will have an outdated role + m_Cache.Remove("roles-" + groupID.ToString()); return false; } @@ -490,18 +449,11 @@ namespace OpenSim.Groups lock (m_Cache) { - if (m_Cache.Contains("role-" + roleID.ToString())) - m_Cache.Remove("role-" + roleID.ToString()); - + m_Cache.Remove("role-" + roleID.ToString()); // also remove the list, because it will have an removed role - if (m_Cache.Contains("roles-" + groupID.ToString())) - m_Cache.Remove("roles-" + groupID.ToString()); - - if (m_Cache.Contains("roles-" + groupID.ToString() + "-" + RequestingAgentID.ToString())) - m_Cache.Remove("roles-" + groupID.ToString() + "-" + RequestingAgentID.ToString()); - - if (m_Cache.Contains("rolemembers-" + RequestingAgentID.ToString() + "-" + groupID.ToString())) - m_Cache.Remove("rolemembers-" + RequestingAgentID.ToString() + "-" + groupID.ToString()); + m_Cache.Remove("roles-" + groupID.ToString()); + m_Cache.Remove("roles-" + groupID.ToString() + "-" + RequestingAgentID.ToString()); + m_Cache.Remove("rolemembers-" + RequestingAgentID.ToString() + "-" + groupID.ToString()); } } @@ -519,9 +471,9 @@ namespace OpenSim.Groups return (List)roles; // not cached - if (!m_ActiveRequests.ContainsKey(cacheKey)) + if (!m_ActiveRequests.Contains(cacheKey)) { - m_ActiveRequests.Add(cacheKey, true); + m_ActiveRequests.Add(cacheKey); firstCall = true; } } @@ -533,11 +485,8 @@ namespace OpenSim.Groups roles = d(); if (roles != null) { - lock (m_Cache) - { - m_Cache.AddOrUpdate(cacheKey, roles, GROUPS_CACHE_TIMEOUT); - return (List)roles; - } + m_Cache.AddOrUpdate(cacheKey, roles, GROUPS_CACHE_TIMEOUT); + return (List)roles; } } finally @@ -569,9 +518,9 @@ namespace OpenSim.Groups } // not cached - if (!m_ActiveRequests.ContainsKey(cacheKey)) + if (!m_ActiveRequests.Contains(cacheKey)) { - m_ActiveRequests.Add(cacheKey, true); + m_ActiveRequests.Add(cacheKey); firstCall = true; } } @@ -587,16 +536,13 @@ namespace OpenSim.Groups else rmembers = new List(); - lock (m_Cache) - { - // For some strange reason, when I cache the list of GroupRoleMembersData, - // it gets emptied out. The TryGet gets an empty list... - //m_Cache.AddOrUpdate(cacheKey, rmembers, GROUPS_CACHE_TIMEOUT); - // Caching the list of ExtendedGroupRoleMembersData doesn't show that issue - // I don't get it. - m_Cache.AddOrUpdate(cacheKey, _rmembers, GROUPS_CACHE_TIMEOUT); - return (List)rmembers; - } + // For some strange reason, when I cache the list of GroupRoleMembersData, + // it gets emptied out. The TryGet gets an empty list... + //m_Cache.AddOrUpdate(cacheKey, rmembers, GROUPS_CACHE_TIMEOUT); + // Caching the list of ExtendedGroupRoleMembersData doesn't show that issue + // I don't get it. + m_Cache.AddOrUpdate(cacheKey, _rmembers, GROUPS_CACHE_TIMEOUT); + return (List)rmembers; } finally { @@ -671,12 +617,10 @@ namespace OpenSim.Groups } cacheKey = "roles-" + GroupID.ToString() + "-" + AgentID.ToString(); - if (m_Cache.Contains(cacheKey)) - m_Cache.Remove(cacheKey); + m_Cache.Remove(cacheKey); cacheKey = "rolemembers-" + RequestingAgentID.ToString() + "-" + GroupID.ToString(); - if (m_Cache.Contains(cacheKey)) - m_Cache.Remove(cacheKey); + m_Cache.Remove(cacheKey); } } } @@ -700,9 +644,9 @@ namespace OpenSim.Groups } // not cached - if (!m_ActiveRequests.ContainsKey(cacheKey)) + if (!m_ActiveRequests.Contains(cacheKey)) { - m_ActiveRequests.Add(cacheKey, true); + m_ActiveRequests.Add(cacheKey); firstCall = true; } } @@ -712,12 +656,8 @@ namespace OpenSim.Groups try { roles = d(); - lock (m_Cache) - { - m_Cache.AddOrUpdate(cacheKey, roles, GROUPS_CACHE_TIMEOUT); - m_ActiveRequests.Remove(cacheKey); - return (List)roles; - } + m_Cache.AddOrUpdate(cacheKey, roles, GROUPS_CACHE_TIMEOUT); + return (List)roles; } finally { @@ -737,12 +677,10 @@ namespace OpenSim.Groups { // Invalidate cached info, because it has ActiveRoleID and Powers string cacheKey = "membership-" + AgentID.ToString() + "-" + GroupID.ToString(); - if (m_Cache.Contains(cacheKey)) - m_Cache.Remove(cacheKey); + m_Cache.Remove(cacheKey); cacheKey = "memberships-" + AgentID.ToString(); - if (m_Cache.Contains(cacheKey)) - m_Cache.Remove(cacheKey); + m_Cache.Remove(cacheKey); } } @@ -757,8 +695,7 @@ namespace OpenSim.Groups m_Cache.Remove(cacheKey); cacheKey = "memberships-" + AgentID.ToString(); - if (m_Cache.Contains(cacheKey)) - m_Cache.Remove(cacheKey); + m_Cache.Remove(cacheKey); cacheKey = "active-" + AgentID.ToString(); object m = null; @@ -775,14 +712,9 @@ namespace OpenSim.Groups { if (d()) { - lock (m_Cache) - { - m_Cache.AddOrUpdate("notice-" + noticeID.ToString(), notice, GROUPS_CACHE_TIMEOUT); - string cacheKey = "notices-" + groupID.ToString(); - if (m_Cache.Contains(cacheKey)) - m_Cache.Remove(cacheKey); - - } + m_Cache.AddOrUpdate("notice-" + noticeID.ToString(), notice, GROUPS_CACHE_TIMEOUT); + string cacheKey = "notices-" + groupID.ToString(); + m_Cache.Remove(cacheKey); return true; } @@ -808,9 +740,9 @@ namespace OpenSim.Groups } // not cached - if (!m_ActiveRequests.ContainsKey(cacheKey)) + if (!m_ActiveRequests.Contains(cacheKey)) { - m_ActiveRequests.Add(cacheKey, true); + m_ActiveRequests.Add(cacheKey); firstCall = true; } } @@ -821,11 +753,8 @@ namespace OpenSim.Groups { GroupNoticeInfo _notice = d(); - lock (m_Cache) - { - m_Cache.AddOrUpdate(cacheKey, _notice, GROUPS_CACHE_TIMEOUT); - return _notice; - } + m_Cache.AddOrUpdate(cacheKey, _notice, GROUPS_CACHE_TIMEOUT); + return _notice; } finally { @@ -856,9 +785,9 @@ namespace OpenSim.Groups } // not cached - if (!m_ActiveRequests.ContainsKey(cacheKey)) + if (!m_ActiveRequests.Contains(cacheKey)) { - m_ActiveRequests.Add(cacheKey, true); + m_ActiveRequests.Add(cacheKey); firstCall = true; } } @@ -869,11 +798,8 @@ namespace OpenSim.Groups { notices = d(); - lock (m_Cache) - { - m_Cache.AddOrUpdate(cacheKey, notices, GROUPS_CACHE_TIMEOUT); - return (List)notices; - } + m_Cache.AddOrUpdate(cacheKey, notices, GROUPS_CACHE_TIMEOUT); + return (List)notices; } finally {