From e1b5c612472b9d1acf47383c0bf75b555daff2e6 Mon Sep 17 00:00:00 2001
From: Master ScienceSim
Date: Thu, 4 Feb 2010 13:19:30 -0800
Subject: Updated MySQL connection management to use the MySQL connection
pooling. This should accommodate various timeout problems that exist with the
current connection pool code in a more general and standard way.
---
OpenSim/Data/MySQL/MySQLUserData.cs | 676 ++++++++++++++----------------------
1 file changed, 265 insertions(+), 411 deletions(-)
(limited to 'OpenSim/Data/MySQL/MySQLUserData.cs')
diff --git a/OpenSim/Data/MySQL/MySQLUserData.cs b/OpenSim/Data/MySQL/MySQLUserData.cs
index 04f872f..2cf88b8 100644
--- a/OpenSim/Data/MySQL/MySQLUserData.cs
+++ b/OpenSim/Data/MySQL/MySQLUserData.cs
@@ -33,6 +33,7 @@ using System.Reflection;
using System.Text.RegularExpressions;
using System.Threading;
using log4net;
+using MySql.Data.MySqlClient;
using OpenMetaverse;
using OpenSim.Framework;
@@ -45,15 +46,9 @@ namespace OpenSim.Data.MySQL
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
- ///
- /// Database manager for MySQL
- ///
- public MySQLManager database;
-
- ///
- /// Better DB manager. Swap-in replacement too.
- ///
- public Dictionary m_dbconnections = new Dictionary();
+ private MySQLManager m_database;
+ private string m_connectionString;
+ private object m_dbLock = new object();
public int m_maxConnections = 10;
public int m_lastConnect;
@@ -63,7 +58,6 @@ namespace OpenSim.Data.MySQL
private string m_userFriendsTableName = "userfriends";
private string m_appearanceTableName = "avatarappearance";
private string m_attachmentsTableName = "avatarattachments";
- private string m_connectString;
public override void Initialise()
{
@@ -71,41 +65,6 @@ namespace OpenSim.Data.MySQL
throw new PluginNotInitialisedException(Name);
}
- public MySQLSuperManager GetLockedConnection(string why)
- {
- int lockedCons = 0;
- while (true)
- {
- m_lastConnect++;
-
- // Overflow protection
- if (m_lastConnect == int.MaxValue)
- m_lastConnect = 0;
-
- MySQLSuperManager x = m_dbconnections[m_lastConnect%m_maxConnections];
- if (!x.Locked)
- {
- x.GetLock();
- x.Running = why;
- return x;
- }
-
- lockedCons++;
- if (lockedCons > m_maxConnections)
- {
- lockedCons = 0;
- Thread.Sleep(1000); // Wait some time before searching them again.
- m_log.Debug(
- "WARNING: All threads are in use. Probable cause: Something didnt release a mutex properly, or high volume of requests inbound.");
- m_log.Debug("Current connections-in-use dump:");
- foreach (KeyValuePair kvp in m_dbconnections)
- {
- m_log.Debug(kvp.Value.Running);
- }
- }
- }
- }
-
///
/// Initialise User Interface
/// Loads and initialises the MySQL storage plugin
@@ -115,55 +74,18 @@ namespace OpenSim.Data.MySQL
/// connect string.
public override void Initialise(string connect)
{
- if (connect == String.Empty)
- {
- // TODO: actually do something with our connect string
- // instead of loading the second config
-
- m_log.Warn("Using obsoletely mysql_connection.ini, try using user_source connect string instead");
- IniFile iniFile = new IniFile("mysql_connection.ini");
- string settingHostname = iniFile.ParseFileReadValue("hostname");
- string settingDatabase = iniFile.ParseFileReadValue("database");
- string settingUsername = iniFile.ParseFileReadValue("username");
- string settingPassword = iniFile.ParseFileReadValue("password");
- string settingPooling = iniFile.ParseFileReadValue("pooling");
- string settingPort = iniFile.ParseFileReadValue("port");
-
- m_connectString = "Server=" + settingHostname + ";Port=" + settingPort + ";Database=" + settingDatabase +
- ";User ID=" +
- settingUsername + ";Password=" + settingPassword + ";Pooling=" + settingPooling + ";";
-
- m_log.Info("Creating " + m_maxConnections + " DB connections...");
- for (int i = 0; i < m_maxConnections; i++)
- {
- m_log.Info("Connecting to DB... [" + i + "]");
- MySQLSuperManager msm = new MySQLSuperManager();
- msm.Manager = new MySQLManager(m_connectString);
- m_dbconnections.Add(i, msm);
- }
-
- database = new MySQLManager(m_connectString);
- }
- else
- {
- m_connectString = connect;
- database = new MySQLManager(m_connectString);
-
- m_log.Info("Creating " + m_maxConnections + " DB connections...");
- for (int i = 0; i < m_maxConnections; i++)
- {
- m_log.Info("Connecting to DB... [" + i + "]");
- MySQLSuperManager msm = new MySQLSuperManager();
- msm.Manager = new MySQLManager(m_connectString);
- m_dbconnections.Add(i, msm);
- }
- }
+ m_connectionString = connect;
+ m_database = new MySQLManager(connect);
// This actually does the roll forward assembly stuff
Assembly assem = GetType().Assembly;
- Migration m = new Migration(database.Connection, assem, "UserStore");
- m.Update();
+ using (MySql.Data.MySqlClient.MySqlConnection dbcon = new MySql.Data.MySqlClient.MySqlConnection(m_connectionString))
+ {
+ dbcon.Open();
+ Migration m = new Migration(dbcon, assem, "UserStore");
+ m.Update();
+ }
}
public override void Dispose()
@@ -173,35 +95,32 @@ namespace OpenSim.Data.MySQL
// see IUserDataPlugin
public override UserProfileData GetUserByName(string user, string last)
{
- MySQLSuperManager dbm = GetLockedConnection("GetUserByName");
-
try
{
Dictionary param = new Dictionary();
param["?first"] = user;
param["?second"] = last;
- IDbCommand result =
- dbm.Manager.Query(
- "SELECT * FROM " + m_usersTableName + " WHERE username = ?first AND lastname = ?second", param);
- IDataReader reader = result.ExecuteReader();
-
- UserProfileData row = dbm.Manager.readUserRow(reader);
+ using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
+ {
+ dbcon.Open();
- reader.Dispose();
- result.Dispose();
- return row;
+ using (IDbCommand result = m_database.Query(dbcon,
+ "SELECT * FROM " + m_usersTableName + " WHERE username = ?first AND lastname = ?second", param))
+ {
+ using (IDataReader reader = result.ExecuteReader())
+ {
+ UserProfileData row = m_database.readUserRow(reader);
+ return row;
+ }
+ }
+ }
}
catch (Exception e)
{
- dbm.Manager.Reconnect();
- m_log.Error(e.ToString());
+ m_log.Error(e.Message, e);
return null;
}
- finally
- {
- dbm.Release();
- }
}
#region User Friends List Data
@@ -216,38 +135,38 @@ namespace OpenSim.Data.MySQL
param["?friendPerms"] = perms.ToString();
param["?datetimestamp"] = dtvalue.ToString();
- MySQLSuperManager dbm = GetLockedConnection("AddNewUserFriend");
-
try
{
- IDbCommand adder =
- dbm.Manager.Query(
+ using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
+ {
+ dbcon.Open();
+
+ using (IDbCommand adder = m_database.Query(dbcon,
"INSERT INTO `" + m_userFriendsTableName + "` " +
"(`ownerID`,`friendID`,`friendPerms`,`datetimestamp`) " +
"VALUES " +
"(?ownerID,?friendID,?friendPerms,?datetimestamp)",
- param);
- adder.ExecuteNonQuery();
+ param))
+ {
+ adder.ExecuteNonQuery();
+ }
- adder =
- dbm.Manager.Query(
+ using (IDbCommand adder = m_database.Query(dbcon,
"INSERT INTO `" + m_userFriendsTableName + "` " +
"(`ownerID`,`friendID`,`friendPerms`,`datetimestamp`) " +
"VALUES " +
"(?friendID,?ownerID,?friendPerms,?datetimestamp)",
- param);
- adder.ExecuteNonQuery();
+ param))
+ {
+ adder.ExecuteNonQuery();
+ }
+ }
}
catch (Exception e)
{
- dbm.Manager.Reconnect();
- m_log.Error(e.ToString());
+ m_log.Error(e.Message, e);
return;
}
- finally
- {
- dbm.Release();
- }
}
public override void RemoveUserFriend(UUID friendlistowner, UUID friend)
@@ -256,32 +175,32 @@ namespace OpenSim.Data.MySQL
param["?ownerID"] = friendlistowner.ToString();
param["?friendID"] = friend.ToString();
- MySQLSuperManager dbm = GetLockedConnection("RemoveUserFriend");
-
try
{
- IDbCommand updater =
- dbm.Manager.Query(
- "delete from " + m_userFriendsTableName + " where ownerID = ?ownerID and friendID = ?friendID",
- param);
- updater.ExecuteNonQuery();
+ using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
+ {
+ dbcon.Open();
- updater =
- dbm.Manager.Query(
- "delete from " + m_userFriendsTableName + " where ownerID = ?friendID and friendID = ?ownerID",
- param);
- updater.ExecuteNonQuery();
+ using (IDbCommand updater = m_database.Query(dbcon,
+ "delete from " + m_userFriendsTableName + " where ownerID = ?ownerID and friendID = ?friendID",
+ param))
+ {
+ updater.ExecuteNonQuery();
+ }
+
+ using (IDbCommand updater = m_database.Query(dbcon,
+ "delete from " + m_userFriendsTableName + " where ownerID = ?friendID and friendID = ?ownerID",
+ param))
+ {
+ updater.ExecuteNonQuery();
+ }
+ }
}
catch (Exception e)
{
- dbm.Manager.Reconnect();
- m_log.Error(e.ToString());
+ m_log.Error(e.Message, e);
return;
}
- finally
- {
- dbm.Release();
- }
}
public override void UpdateUserFriendPerms(UUID friendlistowner, UUID friend, uint perms)
@@ -291,28 +210,27 @@ namespace OpenSim.Data.MySQL
param["?friendID"] = friend.ToString();
param["?friendPerms"] = perms.ToString();
- MySQLSuperManager dbm = GetLockedConnection("UpdateUserFriendPerms");
-
try
{
- IDbCommand updater =
- dbm.Manager.Query(
- "update " + m_userFriendsTableName +
- " SET friendPerms = ?friendPerms " +
- "where ownerID = ?ownerID and friendID = ?friendID",
- param);
- updater.ExecuteNonQuery();
+ using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
+ {
+ dbcon.Open();
+
+ using (IDbCommand updater = m_database.Query(dbcon,
+ "update " + m_userFriendsTableName +
+ " SET friendPerms = ?friendPerms " +
+ "where ownerID = ?ownerID and friendID = ?friendID",
+ param))
+ {
+ updater.ExecuteNonQuery();
+ }
+ }
}
catch (Exception e)
{
- dbm.Manager.Reconnect();
- m_log.Error(e.ToString());
+ m_log.Error(e.Message, e);
return;
}
- finally
- {
- dbm.Release();
- }
}
public override List GetUserFriendList(UUID friendlistowner)
@@ -322,87 +240,83 @@ namespace OpenSim.Data.MySQL
Dictionary param = new Dictionary();
param["?ownerID"] = friendlistowner.ToString();
- MySQLSuperManager dbm = GetLockedConnection("GetUserFriendList");
-
try
{
- //Left Join userfriends to itself
- IDbCommand result =
- dbm.Manager.Query(
+ using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
+ {
+ dbcon.Open();
+
+ //Left Join userfriends to itself
+ using (IDbCommand result = m_database.Query(dbcon,
"select a.ownerID,a.friendID,a.friendPerms,b.friendPerms as ownerperms from " +
m_userFriendsTableName + " as a, " + m_userFriendsTableName + " as b" +
" where a.ownerID = ?ownerID and b.ownerID = a.friendID and b.friendID = a.ownerID",
- param);
- IDataReader reader = result.ExecuteReader();
-
- while (reader.Read())
- {
- FriendListItem fli = new FriendListItem();
- fli.FriendListOwner = new UUID((string) reader["ownerID"]);
- fli.Friend = new UUID((string) reader["friendID"]);
- fli.FriendPerms = (uint) Convert.ToInt32(reader["friendPerms"]);
-
- // This is not a real column in the database table, it's a joined column from the opposite record
- fli.FriendListOwnerPerms = (uint) Convert.ToInt32(reader["ownerperms"]);
-
- Lfli.Add(fli);
+ param))
+ {
+ using (IDataReader reader = result.ExecuteReader())
+ {
+ while (reader.Read())
+ {
+ FriendListItem fli = new FriendListItem();
+ fli.FriendListOwner = new UUID((string)reader["ownerID"]);
+ fli.Friend = new UUID((string)reader["friendID"]);
+ fli.FriendPerms = (uint)Convert.ToInt32(reader["friendPerms"]);
+
+ // This is not a real column in the database table, it's a joined column from the opposite record
+ fli.FriendListOwnerPerms = (uint)Convert.ToInt32(reader["ownerperms"]);
+
+ Lfli.Add(fli);
+ }
+ }
+ }
}
-
- reader.Dispose();
- result.Dispose();
}
catch (Exception e)
{
- dbm.Manager.Reconnect();
- m_log.Error(e.ToString());
+ m_log.Error(e.Message, e);
return Lfli;
}
- finally
- {
- dbm.Release();
- }
return Lfli;
}
override public Dictionary GetFriendRegionInfos (List uuids)
{
- MySQLSuperManager dbm = GetLockedConnection("GetFriendRegionInfos");
Dictionary infos = new Dictionary();
try
{
- foreach (UUID uuid in uuids)
+ using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
{
- Dictionary param = new Dictionary();
- param["?uuid"] = uuid.ToString();
- IDbCommand result =
- dbm.Manager.Query("select agentOnline,currentHandle from " + m_agentsTableName +
- " where UUID = ?uuid", param);
+ dbcon.Open();
- IDataReader reader = result.ExecuteReader();
- while (reader.Read())
+ foreach (UUID uuid in uuids)
{
- FriendRegionInfo fri = new FriendRegionInfo();
- fri.isOnline = (sbyte)reader["agentOnline"] != 0;
- fri.regionHandle = (ulong)reader["currentHandle"];
-
- infos[uuid] = fri;
+ Dictionary param = new Dictionary();
+ param["?uuid"] = uuid.ToString();
+
+ using (IDbCommand result = m_database.Query(dbcon, "select agentOnline,currentHandle from " + m_agentsTableName +
+ " where UUID = ?uuid", param))
+ {
+ using (IDataReader reader = result.ExecuteReader())
+ {
+ while (reader.Read())
+ {
+ FriendRegionInfo fri = new FriendRegionInfo();
+ fri.isOnline = (sbyte)reader["agentOnline"] != 0;
+ fri.regionHandle = (ulong)reader["currentHandle"];
+
+ infos[uuid] = fri;
+ }
+ }
+ }
}
-
- reader.Dispose();
- result.Dispose();
}
}
catch (Exception e)
{
m_log.Warn("[MYSQL]: Got exception on trying to find friends regions:", e);
- dbm.Manager.Reconnect();
- m_log.Error(e.ToString());
- }
- finally
- {
- dbm.Release();
+ m_log.Error(e.Message, e);
}
return infos;
@@ -423,76 +337,73 @@ namespace OpenSim.Data.MySQL
Dictionary param = new Dictionary();
param["?first"] = objAlphaNumericPattern.Replace(querysplit[0], String.Empty) + "%";
param["?second"] = objAlphaNumericPattern.Replace(querysplit[1], String.Empty) + "%";
- MySQLSuperManager dbm = GetLockedConnection("GeneratePickerResults");
try
{
- IDbCommand result =
- dbm.Manager.Query(
+ using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
+ {
+ dbcon.Open();
+
+ using (IDbCommand result = m_database.Query(dbcon,
"SELECT UUID,username,lastname FROM " + m_usersTableName +
" WHERE username like ?first AND lastname like ?second LIMIT 100",
- param);
- IDataReader reader = result.ExecuteReader();
-
- while (reader.Read())
- {
- AvatarPickerAvatar user = new AvatarPickerAvatar();
- user.AvatarID = new UUID((string) reader["UUID"]);
- user.firstName = (string) reader["username"];
- user.lastName = (string) reader["lastname"];
- returnlist.Add(user);
+ param))
+ {
+ using (IDataReader reader = result.ExecuteReader())
+ {
+ while (reader.Read())
+ {
+ AvatarPickerAvatar user = new AvatarPickerAvatar();
+ user.AvatarID = new UUID((string)reader["UUID"]);
+ user.firstName = (string)reader["username"];
+ user.lastName = (string)reader["lastname"];
+ returnlist.Add(user);
+ }
+ }
+ }
}
- reader.Dispose();
- result.Dispose();
}
catch (Exception e)
{
- dbm.Manager.Reconnect();
- m_log.Error(e.ToString());
+ m_log.Error(e.Message, e);
return returnlist;
}
- finally
- {
- dbm.Release();
- }
}
else
{
- MySQLSuperManager dbm = GetLockedConnection("GeneratePickerResults");
-
try
{
Dictionary param = new Dictionary();
param["?first"] = objAlphaNumericPattern.Replace(querysplit[0], String.Empty) + "%";
- IDbCommand result =
- dbm.Manager.Query(
+ using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
+ {
+ dbcon.Open();
+
+ using (IDbCommand result = m_database.Query(dbcon,
"SELECT UUID,username,lastname FROM " + m_usersTableName +
" WHERE username like ?first OR lastname like ?first LIMIT 100",
- param);
- IDataReader reader = result.ExecuteReader();
-
- while (reader.Read())
- {
- AvatarPickerAvatar user = new AvatarPickerAvatar();
- user.AvatarID = new UUID((string) reader["UUID"]);
- user.firstName = (string) reader["username"];
- user.lastName = (string) reader["lastname"];
- returnlist.Add(user);
+ param))
+ {
+ using (IDataReader reader = result.ExecuteReader())
+ {
+ while (reader.Read())
+ {
+ AvatarPickerAvatar user = new AvatarPickerAvatar();
+ user.AvatarID = new UUID((string)reader["UUID"]);
+ user.firstName = (string)reader["username"];
+ user.lastName = (string)reader["lastname"];
+ returnlist.Add(user);
+ }
+ }
+ }
}
- reader.Dispose();
- result.Dispose();
}
catch (Exception e)
{
- dbm.Manager.Reconnect();
- m_log.Error(e.ToString());
+ m_log.Error(e.Message, e);
return returnlist;
}
- finally
- {
- dbm.Release();
- }
}
return returnlist;
}
@@ -504,32 +415,30 @@ namespace OpenSim.Data.MySQL
/// User profile data
public override UserProfileData GetUserByUUID(UUID uuid)
{
- MySQLSuperManager dbm = GetLockedConnection("GetUserByUUID");
try
{
Dictionary param = new Dictionary();
param["?uuid"] = uuid.ToString();
- IDbCommand result = dbm.Manager.Query("SELECT * FROM " + m_usersTableName + " WHERE UUID = ?uuid", param);
- IDataReader reader = result.ExecuteReader();
-
- UserProfileData row = dbm.Manager.readUserRow(reader);
-
- reader.Dispose();
- result.Dispose();
+ using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
+ {
+ dbcon.Open();
- return row;
+ using (IDbCommand result = m_database.Query(dbcon, "SELECT * FROM " + m_usersTableName + " WHERE UUID = ?uuid", param))
+ {
+ using (IDataReader reader = result.ExecuteReader())
+ {
+ UserProfileData row = m_database.readUserRow(reader);
+ return row;
+ }
+ }
+ }
}
catch (Exception e)
{
- dbm.Manager.Reconnect();
- m_log.Error(e.ToString());
+ m_log.Error(e.Message, e);
return null;
}
- finally
- {
- dbm.Release();
- }
}
///
@@ -565,25 +474,18 @@ namespace OpenSim.Data.MySQL
param["?UUID"] = AgentID.ToString();
param["?webLoginKey"] = WebLoginKey.ToString();
- MySQLSuperManager dbm = GetLockedConnection("StoreWebLoginKey");
-
try
{
- dbm.Manager.ExecuteParameterizedSql(
- "update " + m_usersTableName + " SET webLoginKey = ?webLoginKey " +
- "where UUID = ?UUID",
- param);
+ m_database.ExecuteParameterizedSql(
+ "update " + m_usersTableName + " SET webLoginKey = ?webLoginKey " +
+ "where UUID = ?UUID",
+ param);
}
catch (Exception e)
{
- dbm.Manager.Reconnect();
- m_log.Error(e.ToString());
+ m_log.Error(e.Message, e);
return;
}
- finally
- {
- dbm.Release();
- }
}
///
@@ -593,34 +495,30 @@ namespace OpenSim.Data.MySQL
/// The users session
public override UserAgentData GetAgentByUUID(UUID uuid)
{
- MySQLSuperManager dbm = GetLockedConnection("GetAgentByUUID");
-
try
{
Dictionary param = new Dictionary();
param["?uuid"] = uuid.ToString();
- IDbCommand result = dbm.Manager.Query("SELECT * FROM " + m_agentsTableName + " WHERE UUID = ?uuid",
- param);
- IDataReader reader = result.ExecuteReader();
-
- UserAgentData row = dbm.Manager.readAgentRow(reader);
-
- reader.Dispose();
- result.Dispose();
+ using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
+ {
+ dbcon.Open();
- return row;
+ using (IDbCommand result = m_database.Query(dbcon, "SELECT * FROM " + m_agentsTableName + " WHERE UUID = ?uuid", param))
+ {
+ using (IDataReader reader = result.ExecuteReader())
+ {
+ UserAgentData row = m_database.readAgentRow(reader);
+ return row;
+ }
+ }
+ }
}
catch (Exception e)
{
- dbm.Manager.Reconnect();
- m_log.Error(e.ToString());
+ m_log.Error(e.Message, e);
return null;
}
- finally
- {
- dbm.Release();
- }
}
///
@@ -634,27 +532,22 @@ namespace OpenSim.Data.MySQL
{
return;
}
- MySQLSuperManager dbm = GetLockedConnection("AddNewUserProfile");
try
{
- dbm.Manager.insertUserRow(user.ID, user.FirstName, user.SurName, user.Email, user.PasswordHash, user.PasswordSalt,
- user.HomeRegion, user.HomeRegionID, user.HomeLocation.X, user.HomeLocation.Y,
- user.HomeLocation.Z,
- user.HomeLookAt.X, user.HomeLookAt.Y, user.HomeLookAt.Z, user.Created,
- user.LastLogin, user.UserInventoryURI, user.UserAssetURI,
- user.CanDoMask, user.WantDoMask,
- user.AboutText, user.FirstLifeAboutText, user.Image,
- user.FirstLifeImage, user.WebLoginKey, user.UserFlags, user.GodLevel, user.CustomType, user.Partner);
+ m_database.insertUserRow(
+ user.ID, user.FirstName, user.SurName, user.Email, user.PasswordHash, user.PasswordSalt,
+ user.HomeRegion, user.HomeRegionID, user.HomeLocation.X, user.HomeLocation.Y,
+ user.HomeLocation.Z,
+ user.HomeLookAt.X, user.HomeLookAt.Y, user.HomeLookAt.Z, user.Created,
+ user.LastLogin, user.UserInventoryURI, user.UserAssetURI,
+ user.CanDoMask, user.WantDoMask,
+ user.AboutText, user.FirstLifeAboutText, user.Image,
+ user.FirstLifeImage, user.WebLoginKey, user.UserFlags, user.GodLevel, user.CustomType, user.Partner);
}
catch (Exception e)
{
- dbm.Manager.Reconnect();
- m_log.Error(e.ToString());
- }
- finally
- {
- dbm.Release();
+ m_log.Error(e.Message, e);
}
}
@@ -668,19 +561,13 @@ namespace OpenSim.Data.MySQL
if (agent.ProfileID == zero || agent.SessionID == zero)
return;
- MySQLSuperManager dbm = GetLockedConnection("AddNewUserAgent");
try
{
- dbm.Manager.insertAgentRow(agent);
+ m_database.insertAgentRow(agent);
}
catch (Exception e)
{
- dbm.Manager.Reconnect();
- m_log.Error(e.ToString());
- }
- finally
- {
- dbm.Release();
+ m_log.Error(e.Message, e);
}
}
@@ -690,24 +577,24 @@ namespace OpenSim.Data.MySQL
/// The profile data to use to update the DB
public override bool UpdateUserProfile(UserProfileData user)
{
- MySQLSuperManager dbm = GetLockedConnection("UpdateUserProfile");
try
{
- dbm.Manager.updateUserRow(user.ID, user.FirstName, user.SurName, user.Email, user.PasswordHash, user.PasswordSalt,
- user.HomeRegion, user.HomeRegionID, user.HomeLocation.X, user.HomeLocation.Y,
- user.HomeLocation.Z, user.HomeLookAt.X,
- user.HomeLookAt.Y, user.HomeLookAt.Z, user.Created, user.LastLogin,
- user.UserInventoryURI,
- user.UserAssetURI, user.CanDoMask, user.WantDoMask, user.AboutText,
- user.FirstLifeAboutText, user.Image, user.FirstLifeImage, user.WebLoginKey,
- user.UserFlags, user.GodLevel, user.CustomType, user.Partner);
+ m_database.updateUserRow(
+ user.ID, user.FirstName, user.SurName, user.Email, user.PasswordHash, user.PasswordSalt,
+ user.HomeRegion, user.HomeRegionID, user.HomeLocation.X, user.HomeLocation.Y,
+ user.HomeLocation.Z, user.HomeLookAt.X,
+ user.HomeLookAt.Y, user.HomeLookAt.Z, user.Created, user.LastLogin,
+ user.UserInventoryURI,
+ user.UserAssetURI, user.CanDoMask, user.WantDoMask, user.AboutText,
+ user.FirstLifeAboutText, user.Image, user.FirstLifeImage, user.WebLoginKey,
+ user.UserFlags, user.GodLevel, user.CustomType, user.Partner);
+
+ return true;
}
- finally
+ catch
{
- dbm.Release();
+ return false;
}
-
- return true;
}
///
@@ -742,41 +629,40 @@ namespace OpenSim.Data.MySQL
///
public override AvatarAppearance GetUserAppearance(UUID user)
{
- MySQLSuperManager dbm = GetLockedConnection("GetUserAppearance");
try
{
Dictionary param = new Dictionary();
param["?owner"] = user.ToString();
- IDbCommand result = dbm.Manager.Query(
- "SELECT * FROM " + m_appearanceTableName + " WHERE owner = ?owner", param);
- IDataReader reader = result.ExecuteReader();
-
- AvatarAppearance appearance = dbm.Manager.readAppearanceRow(reader);
-
- reader.Dispose();
- result.Dispose();
-
- if (null == appearance)
+ using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
{
- m_log.WarnFormat("[USER DB] No appearance found for user {0}", user.ToString());
- return null;
- }
-
- appearance.SetAttachments(GetUserAttachments(user));
+ dbcon.Open();
- return appearance;
+ using (IDbCommand result = m_database.Query(dbcon, "SELECT * FROM " + m_appearanceTableName + " WHERE owner = ?owner", param))
+ {
+ using (IDataReader reader = result.ExecuteReader())
+ {
+ AvatarAppearance appearance = m_database.readAppearanceRow(reader);
+
+ if (appearance == null)
+ {
+ m_log.WarnFormat("[USER DB] No appearance found for user {0}", user.ToString());
+ return null;
+ }
+ else
+ {
+ appearance.SetAttachments(GetUserAttachments(user));
+ return appearance;
+ }
+ }
+ }
+ }
}
catch (Exception e)
{
- dbm.Manager.Reconnect();
- m_log.Error(e.ToString());
+ m_log.Error(e.Message, e);
return null;
}
- finally
- {
- dbm.Release();
- }
}
///
@@ -787,22 +673,16 @@ namespace OpenSim.Data.MySQL
// override
public override void UpdateUserAppearance(UUID user, AvatarAppearance appearance)
{
- MySQLSuperManager dbm = GetLockedConnection("UpdateUserAppearance");
try
{
appearance.Owner = user;
- dbm.Manager.insertAppearanceRow(appearance);
+ m_database.insertAppearanceRow(appearance);
UpdateUserAttachments(user, appearance.GetAttachments());
}
catch (Exception e)
{
- dbm.Manager.Reconnect();
- m_log.Error(e.ToString());
- }
- finally
- {
- dbm.Release();
+ m_log.Error(e.Message, e);
}
}
@@ -829,43 +709,33 @@ namespace OpenSim.Data.MySQL
Dictionary param = new Dictionary();
param["?uuid"] = agentID.ToString();
- MySQLSuperManager dbm = GetLockedConnection("GetUserAttachments");
-
try
{
- IDbCommand result = dbm.Manager.Query(
- "SELECT attachpoint, item, asset from " + m_attachmentsTableName + " WHERE UUID = ?uuid", param);
- IDataReader reader = result.ExecuteReader();
-
- Hashtable ret = dbm.Manager.readAttachments(reader);
+ using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
+ {
+ dbcon.Open();
- reader.Dispose();
- result.Dispose();
- return ret;
+ using (IDbCommand result = m_database.Query(dbcon,
+ "SELECT attachpoint, item, asset from " + m_attachmentsTableName + " WHERE UUID = ?uuid", param))
+ {
+ using (IDataReader reader = result.ExecuteReader())
+ {
+ Hashtable ret = m_database.readAttachments(reader);
+ return ret;
+ }
+ }
+ }
}
catch (Exception e)
{
- dbm.Manager.Reconnect();
- m_log.Error(e.ToString());
+ m_log.Error(e.Message, e);
return null;
}
- finally
- {
- dbm.Release();
- }
}
public void UpdateUserAttachments(UUID agentID, Hashtable data)
{
- MySQLSuperManager dbm = GetLockedConnection("UpdateUserAttachments");
- try
- {
- dbm.Manager.writeAttachments(agentID, data);
- }
- finally
- {
- dbm.Release();
- }
+ m_database.writeAttachments(agentID, data);
}
public override void ResetAttachments(UUID userID)
@@ -873,19 +743,10 @@ namespace OpenSim.Data.MySQL
Dictionary param = new Dictionary();
param["?uuid"] = userID.ToString();
- MySQLSuperManager dbm = GetLockedConnection("ResetAttachments");
-
- try
- {
- dbm.Manager.ExecuteParameterizedSql(
- "UPDATE " + m_attachmentsTableName +
- " SET asset = '00000000-0000-0000-0000-000000000000' WHERE UUID = ?uuid",
- param);
- }
- finally
- {
- dbm.Release();
- }
+ m_database.ExecuteParameterizedSql(
+ "UPDATE " + m_attachmentsTableName +
+ " SET asset = '00000000-0000-0000-0000-000000000000' WHERE UUID = ?uuid",
+ param);
}
public override void LogoutUsers(UUID regionID)
@@ -893,25 +754,18 @@ namespace OpenSim.Data.MySQL
Dictionary param = new Dictionary();
param["?regionID"] = regionID.ToString();
- MySQLSuperManager dbm = GetLockedConnection("LogoutUsers");
-
try
{
- dbm.Manager.ExecuteParameterizedSql(
- "update " + m_agentsTableName + " SET agentOnline = 0 " +
- "where currentRegion = ?regionID",
- param);
+ m_database.ExecuteParameterizedSql(
+ "update " + m_agentsTableName + " SET agentOnline = 0 " +
+ "where currentRegion = ?regionID",
+ param);
}
catch (Exception e)
{
- dbm.Manager.Reconnect();
- m_log.Error(e.ToString());
+ m_log.Error(e.Message, e);
return;
}
- finally
- {
- dbm.Release();
- }
}
}
}
--
cgit v1.1