Remove parts locking from data classes since these are using a copy of the scene object

prebuild-update
Justin Clark-Casey (justincc) 2010-08-26 00:17:26 +01:00
parent 166ab59420
commit 692cf3c657
4 changed files with 160 additions and 173 deletions

View File

@ -89,7 +89,6 @@ namespace OpenSim.Data.MSSQL
Dictionary<UUID, SceneObjectGroup> objects = new Dictionary<UUID, SceneObjectGroup>(); Dictionary<UUID, SceneObjectGroup> objects = new Dictionary<UUID, SceneObjectGroup>();
SceneObjectGroup grp = null; SceneObjectGroup grp = null;
string sql = "SELECT *, " + string sql = "SELECT *, " +
"sort = CASE WHEN prims.UUID = prims.SceneGroupID THEN 0 ELSE 1 END " + "sort = CASE WHEN prims.UUID = prims.SceneGroupID THEN 0 ELSE 1 END " +
"FROM prims " + "FROM prims " +
@ -232,65 +231,62 @@ namespace OpenSim.Data.MSSQL
/// <param name="regionUUID"></param> /// <param name="regionUUID"></param>
public void StoreObject(SceneObjectGroup obj, UUID regionUUID) public void StoreObject(SceneObjectGroup obj, UUID regionUUID)
{ {
lock (obj.Children) _Log.DebugFormat("[MSSQL]: Adding/Changing SceneObjectGroup: {0} to region: {1}, object has {2} prims.", obj.UUID, regionUUID, obj.Children.Count);
using (SqlConnection conn = new SqlConnection(m_connectionString))
{ {
_Log.DebugFormat("[MSSQL]: Adding/Changing SceneObjectGroup: {0} to region: {1}, object has {2} prims.", obj.UUID, regionUUID, obj.Children.Count); conn.Open();
SqlTransaction transaction = conn.BeginTransaction();
using (SqlConnection conn = new SqlConnection(m_connectionString))
try
{ {
conn.Open(); foreach (SceneObjectPart sceneObjectPart in obj.Children.Values)
SqlTransaction transaction = conn.BeginTransaction(); {
//Update prim
using (SqlCommand sqlCommand = conn.CreateCommand())
{
sqlCommand.Transaction = transaction;
try
{
StoreSceneObjectPrim(sceneObjectPart, sqlCommand, obj.UUID, regionUUID);
}
catch (SqlException sqlEx)
{
_Log.ErrorFormat("[REGION DB]: Store SceneObjectPrim SQL error: {0} at line {1}", sqlEx.Message, sqlEx.LineNumber);
throw;
}
}
//Update primshapes
using (SqlCommand sqlCommand = conn.CreateCommand())
{
sqlCommand.Transaction = transaction;
try
{
StoreSceneObjectPrimShapes(sceneObjectPart, sqlCommand, obj.UUID, regionUUID);
}
catch (SqlException sqlEx)
{
_Log.ErrorFormat("[REGION DB]: Store SceneObjectPrimShapes SQL error: {0} at line {1}", sqlEx.Message, sqlEx.LineNumber);
throw;
}
}
}
transaction.Commit();
}
catch (Exception ex)
{
_Log.ErrorFormat("[REGION DB]: Store SceneObjectGroup error: {0}, Rolling back...", ex.Message);
try try
{ {
foreach (SceneObjectPart sceneObjectPart in obj.Children.Values) transaction.Rollback();
{
//Update prim
using (SqlCommand sqlCommand = conn.CreateCommand())
{
sqlCommand.Transaction = transaction;
try
{
StoreSceneObjectPrim(sceneObjectPart, sqlCommand, obj.UUID, regionUUID);
}
catch (SqlException sqlEx)
{
_Log.ErrorFormat("[REGION DB]: Store SceneObjectPrim SQL error: {0} at line {1}", sqlEx.Message, sqlEx.LineNumber);
throw;
}
}
//Update primshapes
using (SqlCommand sqlCommand = conn.CreateCommand())
{
sqlCommand.Transaction = transaction;
try
{
StoreSceneObjectPrimShapes(sceneObjectPart, sqlCommand, obj.UUID, regionUUID);
}
catch (SqlException sqlEx)
{
_Log.ErrorFormat("[REGION DB]: Store SceneObjectPrimShapes SQL error: {0} at line {1}", sqlEx.Message, sqlEx.LineNumber);
throw;
}
}
}
transaction.Commit();
} }
catch (Exception ex) catch (Exception ex2)
{ {
_Log.ErrorFormat("[REGION DB]: Store SceneObjectGroup error: {0}, Rolling back...", ex.Message); //Show error
try _Log.InfoFormat("[REGION DB]: Rollback of SceneObjectGroup store transaction failed with error: {0}", ex2.Message);
{
transaction.Rollback();
}
catch (Exception ex2)
{
//Show error
_Log.InfoFormat("[REGION DB]: Rollback of SceneObjectGroup store transaction failed with error: {0}", ex2.Message);
}
} }
} }
} }

View File

@ -135,115 +135,112 @@ namespace OpenSim.Data.MySQL
dbcon.Open(); dbcon.Open();
MySqlCommand cmd = dbcon.CreateCommand(); MySqlCommand cmd = dbcon.CreateCommand();
lock (obj.Children) foreach (SceneObjectPart prim in obj.Children.Values)
{ {
foreach (SceneObjectPart prim in obj.Children.Values) cmd.Parameters.Clear();
{
cmd.Parameters.Clear(); cmd.CommandText = "replace into prims (" +
"UUID, CreationDate, " +
cmd.CommandText = "replace into prims (" + "Name, Text, Description, " +
"UUID, CreationDate, " + "SitName, TouchName, ObjectFlags, " +
"Name, Text, Description, " + "OwnerMask, NextOwnerMask, GroupMask, " +
"SitName, TouchName, ObjectFlags, " + "EveryoneMask, BaseMask, PositionX, " +
"OwnerMask, NextOwnerMask, GroupMask, " + "PositionY, PositionZ, GroupPositionX, " +
"EveryoneMask, BaseMask, PositionX, " + "GroupPositionY, GroupPositionZ, VelocityX, " +
"PositionY, PositionZ, GroupPositionX, " + "VelocityY, VelocityZ, AngularVelocityX, " +
"GroupPositionY, GroupPositionZ, VelocityX, " + "AngularVelocityY, AngularVelocityZ, " +
"VelocityY, VelocityZ, AngularVelocityX, " + "AccelerationX, AccelerationY, " +
"AngularVelocityY, AngularVelocityZ, " + "AccelerationZ, RotationX, " +
"AccelerationX, AccelerationY, " + "RotationY, RotationZ, " +
"AccelerationZ, RotationX, " + "RotationW, SitTargetOffsetX, " +
"RotationY, RotationZ, " + "SitTargetOffsetY, SitTargetOffsetZ, " +
"RotationW, SitTargetOffsetX, " + "SitTargetOrientW, SitTargetOrientX, " +
"SitTargetOffsetY, SitTargetOffsetZ, " + "SitTargetOrientY, SitTargetOrientZ, " +
"SitTargetOrientW, SitTargetOrientX, " + "RegionUUID, CreatorID, " +
"SitTargetOrientY, SitTargetOrientZ, " + "OwnerID, GroupID, " +
"RegionUUID, CreatorID, " + "LastOwnerID, SceneGroupID, " +
"OwnerID, GroupID, " + "PayPrice, PayButton1, " +
"LastOwnerID, SceneGroupID, " + "PayButton2, PayButton3, " +
"PayPrice, PayButton1, " + "PayButton4, LoopedSound, " +
"PayButton2, PayButton3, " + "LoopedSoundGain, TextureAnimation, " +
"PayButton4, LoopedSound, " + "OmegaX, OmegaY, OmegaZ, " +
"LoopedSoundGain, TextureAnimation, " + "CameraEyeOffsetX, CameraEyeOffsetY, " +
"OmegaX, OmegaY, OmegaZ, " + "CameraEyeOffsetZ, CameraAtOffsetX, " +
"CameraEyeOffsetX, CameraEyeOffsetY, " + "CameraAtOffsetY, CameraAtOffsetZ, " +
"CameraEyeOffsetZ, CameraAtOffsetX, " + "ForceMouselook, ScriptAccessPin, " +
"CameraAtOffsetY, CameraAtOffsetZ, " + "AllowedDrop, DieAtEdge, " +
"ForceMouselook, ScriptAccessPin, " + "SalePrice, SaleType, " +
"AllowedDrop, DieAtEdge, " + "ColorR, ColorG, ColorB, ColorA, " +
"SalePrice, SaleType, " + "ParticleSystem, ClickAction, Material, " +
"ColorR, ColorG, ColorB, ColorA, " + "CollisionSound, CollisionSoundVolume, " +
"ParticleSystem, ClickAction, Material, " + "PassTouches, " +
"CollisionSound, CollisionSoundVolume, " + "LinkNumber, MediaURL) values (" + "?UUID, " +
"PassTouches, " + "?CreationDate, ?Name, ?Text, " +
"LinkNumber, MediaURL) values (" + "?UUID, " + "?Description, ?SitName, ?TouchName, " +
"?CreationDate, ?Name, ?Text, " + "?ObjectFlags, ?OwnerMask, ?NextOwnerMask, " +
"?Description, ?SitName, ?TouchName, " + "?GroupMask, ?EveryoneMask, ?BaseMask, " +
"?ObjectFlags, ?OwnerMask, ?NextOwnerMask, " + "?PositionX, ?PositionY, ?PositionZ, " +
"?GroupMask, ?EveryoneMask, ?BaseMask, " + "?GroupPositionX, ?GroupPositionY, " +
"?PositionX, ?PositionY, ?PositionZ, " + "?GroupPositionZ, ?VelocityX, " +
"?GroupPositionX, ?GroupPositionY, " + "?VelocityY, ?VelocityZ, ?AngularVelocityX, " +
"?GroupPositionZ, ?VelocityX, " + "?AngularVelocityY, ?AngularVelocityZ, " +
"?VelocityY, ?VelocityZ, ?AngularVelocityX, " + "?AccelerationX, ?AccelerationY, " +
"?AngularVelocityY, ?AngularVelocityZ, " + "?AccelerationZ, ?RotationX, " +
"?AccelerationX, ?AccelerationY, " + "?RotationY, ?RotationZ, " +
"?AccelerationZ, ?RotationX, " + "?RotationW, ?SitTargetOffsetX, " +
"?RotationY, ?RotationZ, " + "?SitTargetOffsetY, ?SitTargetOffsetZ, " +
"?RotationW, ?SitTargetOffsetX, " + "?SitTargetOrientW, ?SitTargetOrientX, " +
"?SitTargetOffsetY, ?SitTargetOffsetZ, " + "?SitTargetOrientY, ?SitTargetOrientZ, " +
"?SitTargetOrientW, ?SitTargetOrientX, " + "?RegionUUID, ?CreatorID, ?OwnerID, " +
"?SitTargetOrientY, ?SitTargetOrientZ, " + "?GroupID, ?LastOwnerID, ?SceneGroupID, " +
"?RegionUUID, ?CreatorID, ?OwnerID, " + "?PayPrice, ?PayButton1, ?PayButton2, " +
"?GroupID, ?LastOwnerID, ?SceneGroupID, " + "?PayButton3, ?PayButton4, ?LoopedSound, " +
"?PayPrice, ?PayButton1, ?PayButton2, " + "?LoopedSoundGain, ?TextureAnimation, " +
"?PayButton3, ?PayButton4, ?LoopedSound, " + "?OmegaX, ?OmegaY, ?OmegaZ, " +
"?LoopedSoundGain, ?TextureAnimation, " + "?CameraEyeOffsetX, ?CameraEyeOffsetY, " +
"?OmegaX, ?OmegaY, ?OmegaZ, " + "?CameraEyeOffsetZ, ?CameraAtOffsetX, " +
"?CameraEyeOffsetX, ?CameraEyeOffsetY, " + "?CameraAtOffsetY, ?CameraAtOffsetZ, " +
"?CameraEyeOffsetZ, ?CameraAtOffsetX, " + "?ForceMouselook, ?ScriptAccessPin, " +
"?CameraAtOffsetY, ?CameraAtOffsetZ, " + "?AllowedDrop, ?DieAtEdge, ?SalePrice, " +
"?ForceMouselook, ?ScriptAccessPin, " + "?SaleType, ?ColorR, ?ColorG, " +
"?AllowedDrop, ?DieAtEdge, ?SalePrice, " + "?ColorB, ?ColorA, ?ParticleSystem, " +
"?SaleType, ?ColorR, ?ColorG, " + "?ClickAction, ?Material, ?CollisionSound, " +
"?ColorB, ?ColorA, ?ParticleSystem, " + "?CollisionSoundVolume, ?PassTouches, ?LinkNumber, ?MediaURL)";
"?ClickAction, ?Material, ?CollisionSound, " +
"?CollisionSoundVolume, ?PassTouches, ?LinkNumber, ?MediaURL)"; FillPrimCommand(cmd, prim, obj.UUID, regionUUID);
FillPrimCommand(cmd, prim, obj.UUID, regionUUID); ExecuteNonQuery(cmd);
ExecuteNonQuery(cmd); cmd.Parameters.Clear();
cmd.Parameters.Clear(); cmd.CommandText = "replace into primshapes (" +
"UUID, Shape, ScaleX, ScaleY, " +
cmd.CommandText = "replace into primshapes (" + "ScaleZ, PCode, PathBegin, PathEnd, " +
"UUID, Shape, ScaleX, ScaleY, " + "PathScaleX, PathScaleY, PathShearX, " +
"ScaleZ, PCode, PathBegin, PathEnd, " + "PathShearY, PathSkew, PathCurve, " +
"PathScaleX, PathScaleY, PathShearX, " + "PathRadiusOffset, PathRevolutions, " +
"PathShearY, PathSkew, PathCurve, " + "PathTaperX, PathTaperY, PathTwist, " +
"PathRadiusOffset, PathRevolutions, " + "PathTwistBegin, ProfileBegin, ProfileEnd, " +
"PathTaperX, PathTaperY, PathTwist, " + "ProfileCurve, ProfileHollow, Texture, " +
"PathTwistBegin, ProfileBegin, ProfileEnd, " + "ExtraParams, State, Media) values (?UUID, " +
"ProfileCurve, ProfileHollow, Texture, " + "?Shape, ?ScaleX, ?ScaleY, ?ScaleZ, " +
"ExtraParams, State, Media) values (?UUID, " + "?PCode, ?PathBegin, ?PathEnd, " +
"?Shape, ?ScaleX, ?ScaleY, ?ScaleZ, " + "?PathScaleX, ?PathScaleY, " +
"?PCode, ?PathBegin, ?PathEnd, " + "?PathShearX, ?PathShearY, " +
"?PathScaleX, ?PathScaleY, " + "?PathSkew, ?PathCurve, ?PathRadiusOffset, " +
"?PathShearX, ?PathShearY, " + "?PathRevolutions, ?PathTaperX, " +
"?PathSkew, ?PathCurve, ?PathRadiusOffset, " + "?PathTaperY, ?PathTwist, " +
"?PathRevolutions, ?PathTaperX, " + "?PathTwistBegin, ?ProfileBegin, " +
"?PathTaperY, ?PathTwist, " + "?ProfileEnd, ?ProfileCurve, " +
"?PathTwistBegin, ?ProfileBegin, " + "?ProfileHollow, ?Texture, ?ExtraParams, " +
"?ProfileEnd, ?ProfileCurve, " + "?State, ?Media)";
"?ProfileHollow, ?Texture, ?ExtraParams, " +
"?State, ?Media)"; FillShapeCommand(cmd, prim);
FillShapeCommand(cmd, prim); ExecuteNonQuery(cmd);
ExecuteNonQuery(cmd);
}
cmd.Dispose();
} }
cmd.Dispose();
} }
} }
} }

View File

@ -360,13 +360,10 @@ namespace OpenSim.Data.SQLite
lock (ds) lock (ds)
{ {
lock (obj.Children) foreach (SceneObjectPart prim in obj.Children.Values)
{ {
foreach (SceneObjectPart prim in obj.Children.Values) // m_log.Info("[REGION DB]: Adding obj: " + obj.UUID + " to region: " + regionUUID);
{ addPrim(prim, obj.UUID, regionUUID);
// m_log.Info("[REGION DB]: Adding obj: " + obj.UUID + " to region: " + regionUUID);
addPrim(prim, obj.UUID, regionUUID);
}
} }
} }

View File

@ -327,13 +327,10 @@ namespace OpenSim.Data.SQLiteLegacy
lock (ds) lock (ds)
{ {
lock (obj.Children) foreach (SceneObjectPart prim in obj.Children.Values)
{ {
foreach (SceneObjectPart prim in obj.Children.Values) // m_log.Info("[REGION DB]: Adding obj: " + obj.UUID + " to region: " + regionUUID);
{ addPrim(prim, obj.UUID, regionUUID);
// m_log.Info("[REGION DB]: Adding obj: " + obj.UUID + " to region: " + regionUUID);
addPrim(prim, obj.UUID, regionUUID);
}
} }
} }