If asset data already exists with the required hash then don't rewrite it

xassetservice
Justin Clark-Casey (justincc) 2012-03-03 00:05:02 +00:00
parent 94b323d1d8
commit 2535a4cafc
1 changed files with 59 additions and 17 deletions

View File

@ -168,7 +168,6 @@ namespace OpenSim.Data.MySQL
using (MySqlTransaction transaction = dbcon.BeginTransaction()) using (MySqlTransaction transaction = dbcon.BeginTransaction())
{ {
string assetName = asset.Name; string assetName = asset.Name;
if (asset.Name.Length > 64) if (asset.Name.Length > 64)
{ {
@ -220,11 +219,13 @@ namespace OpenSim.Data.MySQL
return; return;
} }
if (!ExistsData(dbcon, transaction, hash))
{
try try
{ {
using (MySqlCommand cmd = using (MySqlCommand cmd =
new MySqlCommand( new MySqlCommand(
"replace INTO xassetsdata(hash, data) VALUES(?hash, ?data)", "INSERT INTO xassetsdata(hash, data) VALUES(?hash, ?data)",
dbcon)) dbcon))
{ {
cmd.Parameters.AddWithValue("?hash", hash); cmd.Parameters.AddWithValue("?hash", hash);
@ -241,6 +242,7 @@ namespace OpenSim.Data.MySQL
return; return;
} }
}
transaction.Commit(); transaction.Commit();
} }
@ -284,6 +286,46 @@ namespace OpenSim.Data.MySQL
// //
// } // }
/// <summary>
/// We assume we already have the m_dbLock.
/// </summary>
/// TODO: need to actually use the transaction.
/// <param name="dbcon"></param>
/// <param name="transaction"></param>
/// <param name="hash"></param>
/// <returns></returns>
private bool ExistsData(MySqlConnection dbcon, MySqlTransaction transaction, string hash)
{
// m_log.DebugFormat("[ASSETS DB]: Checking for asset {0}", uuid);
bool exists = false;
using (MySqlCommand cmd = new MySqlCommand("SELECT hash FROM xassetsdata WHERE hash=?hash", dbcon))
{
cmd.Parameters.AddWithValue("?hash", hash);
try
{
using (MySqlDataReader dbReader = cmd.ExecuteReader(CommandBehavior.SingleRow))
{
if (dbReader.Read())
{
// m_log.DebugFormat("[ASSETS DB]: Found asset {0}", uuid);
exists = true;
}
}
}
catch (Exception e)
{
m_log.ErrorFormat(
"[XASSETS DB]: MySql failure in ExistsData fetching hash {0}. Exception {1}{2}",
hash, e.Message, e.StackTrace);
}
}
return exists;
}
/// <summary> /// <summary>
/// Check if the asset exists in the database /// Check if the asset exists in the database
/// </summary> /// </summary>