missed another UserAccounts cache, add a few locks
parent
9c75f8a57e
commit
c53d74274d
|
@ -153,12 +153,15 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.UserAccounts
|
||||||
public UserAccount GetUserAccount(UUID scopeID, UUID userID)
|
public UserAccount GetUserAccount(UUID scopeID, UUID userID)
|
||||||
{
|
{
|
||||||
bool inCache = false;
|
bool inCache = false;
|
||||||
UserAccount account = m_Cache.Get(userID, out inCache);
|
UserAccount account;
|
||||||
|
lock(m_Cache)
|
||||||
|
account = m_Cache.Get(userID, out inCache);
|
||||||
if (inCache)
|
if (inCache)
|
||||||
return account;
|
return account;
|
||||||
|
|
||||||
account = UserAccountService.GetUserAccount(scopeID, userID);
|
account = UserAccountService.GetUserAccount(scopeID, userID);
|
||||||
m_Cache.Cache(userID, account);
|
lock(m_Cache)
|
||||||
|
m_Cache.Cache(userID, account);
|
||||||
|
|
||||||
return account;
|
return account;
|
||||||
}
|
}
|
||||||
|
@ -166,13 +169,16 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.UserAccounts
|
||||||
public UserAccount GetUserAccount(UUID scopeID, string firstName, string lastName)
|
public UserAccount GetUserAccount(UUID scopeID, string firstName, string lastName)
|
||||||
{
|
{
|
||||||
bool inCache = false;
|
bool inCache = false;
|
||||||
UserAccount account = m_Cache.Get(firstName + " " + lastName, out inCache);
|
UserAccount account;
|
||||||
|
lock(m_Cache)
|
||||||
|
account = m_Cache.Get(firstName + " " + lastName, out inCache);
|
||||||
if (inCache)
|
if (inCache)
|
||||||
return account;
|
return account;
|
||||||
|
|
||||||
account = UserAccountService.GetUserAccount(scopeID, firstName, lastName);
|
account = UserAccountService.GetUserAccount(scopeID, firstName, lastName);
|
||||||
if (account != null)
|
if (account != null)
|
||||||
m_Cache.Cache(account.PrincipalID, account);
|
lock(m_Cache)
|
||||||
|
m_Cache.Cache(account.PrincipalID, account);
|
||||||
|
|
||||||
return account;
|
return account;
|
||||||
}
|
}
|
||||||
|
@ -184,9 +190,42 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.UserAccounts
|
||||||
|
|
||||||
public List<UserAccount> GetUserAccounts(UUID scopeID, List<string> IDs)
|
public List<UserAccount> GetUserAccounts(UUID scopeID, List<string> IDs)
|
||||||
{
|
{
|
||||||
return UserAccountService.GetUserAccounts(scopeID, IDs);
|
List<UserAccount> ret = new List<UserAccount>();
|
||||||
}
|
List<string> missing = new List<string>();
|
||||||
|
|
||||||
|
// still another cache..
|
||||||
|
bool inCache = false;
|
||||||
|
UUID uuid = UUID.Zero;
|
||||||
|
UserAccount account;
|
||||||
|
foreach(string id in IDs)
|
||||||
|
{
|
||||||
|
if(UUID.TryParse(id, out uuid))
|
||||||
|
{
|
||||||
|
lock(m_Cache)
|
||||||
|
account = m_Cache.Get(uuid, out inCache);
|
||||||
|
if (inCache)
|
||||||
|
ret.Add(account);
|
||||||
|
else
|
||||||
|
missing.Add(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(missing.Count == 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
List<UserAccount> ext = UserAccountService.GetUserAccounts(scopeID, missing);
|
||||||
|
if(ext != null && ext.Count > 0)
|
||||||
|
{
|
||||||
|
ret.AddRange(ext);
|
||||||
|
foreach(UserAccount acc in ext)
|
||||||
|
{
|
||||||
|
if(acc != null)
|
||||||
|
lock(m_Cache)
|
||||||
|
m_Cache.Cache(acc.PrincipalID, acc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
public List<UserAccount> GetUserAccountsWhere(UUID scopeID, string query)
|
public List<UserAccount> GetUserAccountsWhere(UUID scopeID, string query)
|
||||||
{
|
{
|
||||||
|
|
|
@ -128,7 +128,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.UserAccounts
|
||||||
// flags, title, etc. And country, don't forget country!
|
// flags, title, etc. And country, don't forget country!
|
||||||
private void OnNewClient(IClientAPI client)
|
private void OnNewClient(IClientAPI client)
|
||||||
{
|
{
|
||||||
m_Cache.Remove(client.Name);
|
lock(m_Cache)
|
||||||
|
m_Cache.Remove(client.Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Overwritten methods from IUserAccountService
|
#region Overwritten methods from IUserAccountService
|
||||||
|
@ -136,12 +137,16 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.UserAccounts
|
||||||
public override UserAccount GetUserAccount(UUID scopeID, UUID userID)
|
public override UserAccount GetUserAccount(UUID scopeID, UUID userID)
|
||||||
{
|
{
|
||||||
bool inCache = false;
|
bool inCache = false;
|
||||||
UserAccount account = m_Cache.Get(userID, out inCache);
|
UserAccount account;
|
||||||
|
lock(m_Cache)
|
||||||
|
account = m_Cache.Get(userID, out inCache);
|
||||||
if (inCache)
|
if (inCache)
|
||||||
return account;
|
return account;
|
||||||
|
|
||||||
account = base.GetUserAccount(scopeID, userID);
|
account = base.GetUserAccount(scopeID, userID);
|
||||||
m_Cache.Cache(userID, account);
|
lock(m_Cache)
|
||||||
|
if(account != null)
|
||||||
|
m_Cache.Cache(userID, account);
|
||||||
|
|
||||||
return account;
|
return account;
|
||||||
}
|
}
|
||||||
|
@ -149,13 +154,16 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.UserAccounts
|
||||||
public override UserAccount GetUserAccount(UUID scopeID, string firstName, string lastName)
|
public override UserAccount GetUserAccount(UUID scopeID, string firstName, string lastName)
|
||||||
{
|
{
|
||||||
bool inCache = false;
|
bool inCache = false;
|
||||||
UserAccount account = m_Cache.Get(firstName + " " + lastName, out inCache);
|
UserAccount account;
|
||||||
|
lock(m_Cache)
|
||||||
|
account = m_Cache.Get(firstName + " " + lastName, out inCache);
|
||||||
if (inCache)
|
if (inCache)
|
||||||
return account;
|
return account;
|
||||||
|
|
||||||
account = base.GetUserAccount(scopeID, firstName, lastName);
|
account = base.GetUserAccount(scopeID, firstName, lastName);
|
||||||
if (account != null)
|
if (account != null)
|
||||||
m_Cache.Cache(account.PrincipalID, account);
|
lock(m_Cache)
|
||||||
|
m_Cache.Cache(account.PrincipalID, account);
|
||||||
|
|
||||||
return account;
|
return account;
|
||||||
}
|
}
|
||||||
|
@ -173,7 +181,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.UserAccounts
|
||||||
{
|
{
|
||||||
if(UUID.TryParse(id, out uuid))
|
if(UUID.TryParse(id, out uuid))
|
||||||
{
|
{
|
||||||
account = m_Cache.Get(uuid, out inCache);
|
lock(m_Cache)
|
||||||
|
account = m_Cache.Get(uuid, out inCache);
|
||||||
if (inCache)
|
if (inCache)
|
||||||
accs.Add(account);
|
accs.Add(account);
|
||||||
else
|
else
|
||||||
|
@ -184,8 +193,16 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.UserAccounts
|
||||||
if(missing.Count > 0)
|
if(missing.Count > 0)
|
||||||
{
|
{
|
||||||
List<UserAccount> ext = base.GetUserAccounts(scopeID, missing);
|
List<UserAccount> ext = base.GetUserAccounts(scopeID, missing);
|
||||||
if(ext != null)
|
if(ext != null && ext.Count >0 )
|
||||||
|
{
|
||||||
accs.AddRange(ext);
|
accs.AddRange(ext);
|
||||||
|
foreach(UserAccount acc in ext)
|
||||||
|
{
|
||||||
|
if(acc != null)
|
||||||
|
lock(m_Cache)
|
||||||
|
m_Cache.Cache(acc.PrincipalID, acc);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return accs;
|
return accs;
|
||||||
|
|
Loading…
Reference in New Issue