Remove database connection locking in MySQLXAssetData. This is unnecessary as connections aren't shared and transactions are already in place where necessary.

0.8-extended
Justin Clark-Casey (justincc) 2014-08-22 20:34:33 +01:00 committed by Justin Clark-Casey
parent 3d49be21bc
commit a068c1dd9d
1 changed files with 170 additions and 188 deletions

View File

@ -57,7 +57,6 @@ namespace OpenSim.Data.MySQL
private bool m_enableCompression = false; private bool m_enableCompression = false;
private string m_connectionString; private string m_connectionString;
private object m_dbLock = new object();
/// <summary> /// <summary>
/// We can reuse this for all hashing since all methods are single-threaded through m_dbBLock /// We can reuse this for all hashing since all methods are single-threaded through m_dbBLock
@ -131,8 +130,7 @@ namespace OpenSim.Data.MySQL
// m_log.DebugFormat("[MYSQL XASSET DATA]: Looking for asset {0}", assetID); // m_log.DebugFormat("[MYSQL XASSET DATA]: Looking for asset {0}", assetID);
AssetBase asset = null; AssetBase asset = null;
lock (m_dbLock)
{
using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
{ {
dbcon.Open(); dbcon.Open();
@ -168,12 +166,12 @@ namespace OpenSim.Data.MySQL
{ {
MemoryStream outputStream = new MemoryStream(); MemoryStream outputStream = new MemoryStream();
WebUtil.CopyStream(decompressionStream, outputStream, int.MaxValue); WebUtil.CopyStream(decompressionStream, outputStream, int.MaxValue);
// int compressedLength = asset.Data.Length; // int compressedLength = asset.Data.Length;
asset.Data = outputStream.ToArray(); asset.Data = outputStream.ToArray();
// m_log.DebugFormat( // m_log.DebugFormat(
// "[XASSET DB]: Decompressed {0} {1} to {2} bytes from {3}", // "[XASSET DB]: Decompressed {0} {1} to {2} bytes from {3}",
// asset.ID, asset.Name, asset.Data.Length, compressedLength); // asset.ID, asset.Name, asset.Data.Length, compressedLength);
} }
} }
@ -187,7 +185,6 @@ namespace OpenSim.Data.MySQL
} }
} }
} }
}
return asset; return asset;
} }
@ -201,8 +198,6 @@ namespace OpenSim.Data.MySQL
{ {
// m_log.DebugFormat("[XASSETS DB]: Storing asset {0} {1}", asset.Name, asset.ID); // m_log.DebugFormat("[XASSETS DB]: Storing asset {0} {1}", asset.Name, asset.ID);
lock (m_dbLock)
{
using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
{ {
dbcon.Open(); dbcon.Open();
@ -233,7 +228,7 @@ namespace OpenSim.Data.MySQL
using (GZipStream compressionStream = new GZipStream(outputStream, CompressionMode.Compress, false)) using (GZipStream compressionStream = new GZipStream(outputStream, CompressionMode.Compress, false))
{ {
// Console.WriteLine(WebUtil.CopyTo(new MemoryStream(asset.Data), compressionStream, int.MaxValue)); // Console.WriteLine(WebUtil.CopyTo(new MemoryStream(asset.Data), compressionStream, int.MaxValue));
// We have to close the compression stream in order to make sure it writes everything out to the underlying memory output stream. // We have to close the compression stream in order to make sure it writes everything out to the underlying memory output stream.
compressionStream.Close(); compressionStream.Close();
byte[] compressedData = outputStream.ToArray(); byte[] compressedData = outputStream.ToArray();
@ -310,7 +305,6 @@ namespace OpenSim.Data.MySQL
} }
} }
} }
}
/// <summary> /// <summary>
/// Updates the access time of the asset if it was accessed above a given threshhold amount of time. /// Updates the access time of the asset if it was accessed above a given threshhold amount of time.
@ -328,8 +322,6 @@ namespace OpenSim.Data.MySQL
if ((now - Utils.UnixTimeToDateTime(accessTime)).TotalDays < DaysBetweenAccessTimeUpdates) if ((now - Utils.UnixTimeToDateTime(accessTime)).TotalDays < DaysBetweenAccessTimeUpdates)
return; return;
lock (m_dbLock)
{
using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
{ {
dbcon.Open(); dbcon.Open();
@ -354,7 +346,6 @@ namespace OpenSim.Data.MySQL
} }
} }
} }
}
/// <summary> /// <summary>
/// We assume we already have the m_dbLock. /// We assume we already have the m_dbLock.
@ -411,8 +402,6 @@ namespace OpenSim.Data.MySQL
string ids = "'" + string.Join("','", uuids) + "'"; string ids = "'" + string.Join("','", uuids) + "'";
string sql = string.Format("SELECT ID FROM assets WHERE ID IN ({0})", ids); string sql = string.Format("SELECT ID FROM assets WHERE ID IN ({0})", ids);
lock (m_dbLock)
{
using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
{ {
dbcon.Open(); dbcon.Open();
@ -428,7 +417,6 @@ namespace OpenSim.Data.MySQL
} }
} }
} }
}
bool[] results = new bool[uuids.Length]; bool[] results = new bool[uuids.Length];
for (int i = 0; i < uuids.Length; i++) for (int i = 0; i < uuids.Length; i++)
@ -449,8 +437,6 @@ namespace OpenSim.Data.MySQL
{ {
List<AssetMetadata> retList = new List<AssetMetadata>(count); List<AssetMetadata> retList = new List<AssetMetadata>(count);
lock (m_dbLock)
{
using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
{ {
dbcon.Open(); dbcon.Open();
@ -487,7 +473,6 @@ namespace OpenSim.Data.MySQL
m_log.Error("[XASSETS DB]: MySql failure fetching asset set" + Environment.NewLine + e.ToString()); m_log.Error("[XASSETS DB]: MySql failure fetching asset set" + Environment.NewLine + e.ToString());
} }
} }
}
return retList; return retList;
} }
@ -496,8 +481,6 @@ namespace OpenSim.Data.MySQL
{ {
// m_log.DebugFormat("[XASSETS DB]: Deleting asset {0}", id); // m_log.DebugFormat("[XASSETS DB]: Deleting asset {0}", id);
lock (m_dbLock)
{
using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
{ {
dbcon.Open(); dbcon.Open();
@ -511,7 +494,6 @@ namespace OpenSim.Data.MySQL
// TODO: How do we deal with data from deleted assets? Probably not easily reapable unless we // TODO: How do we deal with data from deleted assets? Probably not easily reapable unless we
// keep a reference count (?) // keep a reference count (?)
} }
}
return true; return true;
} }