From bde363b57205c7e12d68ba71c254e6ffccd9210f Mon Sep 17 00:00:00 2001
From: Justin Clarke Casey
Date: Mon, 4 Feb 2008 17:30:53 +0000
Subject: * Synchronize asset storage operations to mysql as well as reads *
 This may help with asset server mysql problems, since both the previous
 osgrid failures occurred when both a read and write were attempted in the
 same second

---
 OpenSim/Framework/Data.MySQL/MySQLAssetData.cs | 66 ++++++++++++++------------
 1 file changed, 35 insertions(+), 31 deletions(-)

diff --git a/OpenSim/Framework/Data.MySQL/MySQLAssetData.cs b/OpenSim/Framework/Data.MySQL/MySQLAssetData.cs
index 567412f..407d6d2 100644
--- a/OpenSim/Framework/Data.MySQL/MySQLAssetData.cs
+++ b/OpenSim/Framework/Data.MySQL/MySQLAssetData.cs
@@ -76,6 +76,7 @@ namespace OpenSim.Framework.Data.MySQL
                         _dbConnection.Connection);
                 MySqlParameter p = cmd.Parameters.Add("?id", MySqlDbType.Binary, 16);
                 p.Value = assetID.GetBytes();
+                
                 try
                 {
                     using (MySqlDataReader dbReader = cmd.ExecuteReader(CommandBehavior.SingleRow))
@@ -107,39 +108,42 @@ namespace OpenSim.Framework.Data.MySQL
         }
 
         public void CreateAsset(AssetBase asset)
-        {
-            MySqlCommand cmd =
-                new MySqlCommand(
-                    "REPLACE INTO assets(id, name, description, assetType, invType, local, temporary, data)" +
-                    "VALUES(?id, ?name, ?description, ?assetType, ?invType, ?local, ?temporary, ?data)",
-                    _dbConnection.Connection);
-
-            // need to ensure we dispose
-            try
-            {            
-                using (cmd)
-                {
-                    MySqlParameter p = cmd.Parameters.Add("?id", MySqlDbType.Binary, 16);
-                    p.Value = asset.FullID.GetBytes();
-                    cmd.Parameters.AddWithValue("?name", asset.Name);
-                    cmd.Parameters.AddWithValue("?description", asset.Description);
-                    cmd.Parameters.AddWithValue("?assetType", asset.Type);
-                    cmd.Parameters.AddWithValue("?invType", asset.InvType);
-                    cmd.Parameters.AddWithValue("?local", asset.Local);
-                    cmd.Parameters.AddWithValue("?temporary", asset.Temporary);
-                    cmd.Parameters.AddWithValue("?data", asset.Data);
-                    cmd.ExecuteNonQuery();
-                    cmd.Dispose();
+        {            
+            lock (_dbConnection)
+            {
+                MySqlCommand cmd =
+                    new MySqlCommand(
+                        "REPLACE INTO assets(id, name, description, assetType, invType, local, temporary, data)" +
+                        "VALUES(?id, ?name, ?description, ?assetType, ?invType, ?local, ?temporary, ?data)",
+                        _dbConnection.Connection);
+            
+                // need to ensure we dispose
+                try
+                {            
+                    using (cmd)
+                    {
+                        MySqlParameter p = cmd.Parameters.Add("?id", MySqlDbType.Binary, 16);
+                        p.Value = asset.FullID.GetBytes();
+                        cmd.Parameters.AddWithValue("?name", asset.Name);
+                        cmd.Parameters.AddWithValue("?description", asset.Description);
+                        cmd.Parameters.AddWithValue("?assetType", asset.Type);
+                        cmd.Parameters.AddWithValue("?invType", asset.InvType);
+                        cmd.Parameters.AddWithValue("?local", asset.Local);
+                        cmd.Parameters.AddWithValue("?temporary", asset.Temporary);
+                        cmd.Parameters.AddWithValue("?data", asset.Data);
+                        cmd.ExecuteNonQuery();
+                        cmd.Dispose();
+                    }
                 }
+                catch (Exception e)
+                {
+                    MainLog.Instance.Error(
+                        "ASSETS", 
+                        "MySql failure creating asset {0} with name {1}" + Environment.NewLine + e.ToString()
+                       + Environment.NewLine + "Attempting reconnection", asset.FullID, asset.Name);
+                    _dbConnection.Reconnect();
+                }   
             }
-            catch (Exception e)
-            {
-                MainLog.Instance.Error(
-                    "ASSETS", 
-                    "MySql failure creating asset {0} with name {1}" + Environment.NewLine + e.ToString()
-                   + Environment.NewLine + "Attempting reconnection", asset.FullID, asset.Name);
-                _dbConnection.Reconnect();
-            }                
         }
 
         public void UpdateAsset(AssetBase asset)
-- 
cgit v1.1