aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorMW2009-02-04 16:00:39 +0000
committerMW2009-02-04 16:00:39 +0000
commit8d6bd1b650481173c881262b0fcd79f5e1bd5d00 (patch)
tree03628bed8a7a559b55f8929163224c71df970984
parentClosing the requestStream and setting a 10 sec timeout for getting it. (diff)
downloadopensim-SC-8d6bd1b650481173c881262b0fcd79f5e1bd5d00.zip
opensim-SC-8d6bd1b650481173c881262b0fcd79f5e1bd5d00.tar.gz
opensim-SC-8d6bd1b650481173c881262b0fcd79f5e1bd5d00.tar.bz2
opensim-SC-8d6bd1b650481173c881262b0fcd79f5e1bd5d00.tar.xz
Added a ForceSceneObjectBackup method to Scene, which as it says forces a database backup/update on the SceneObjectGroup.
This is now called at the beginning of DeRezObject, so we know the database is upto date before we attempt to delete a object. Fix Mantis #1004 Which happened because Database backups don't happen if a object is still selected, so when you select a part in a link-set and then unlink it and then delete it, all without unselecting the prim at all. The unlink changes never get updated to the database. So then when the call to delete the prim from the database happens, which is called with the SceneObjectId. That SceneObjectId is never found, as the database still has that prim as part of another link set. It is possible that these changes might have to be reverted and for us to find a different method of fixing the problem. If the performance overhead is too high or it causes any other problems.
-rw-r--r--OpenSim/Region/Environment/Scenes/EventManager.cs4
-rw-r--r--OpenSim/Region/Environment/Scenes/Scene.Inventory.cs4
-rw-r--r--OpenSim/Region/Environment/Scenes/Scene.cs10
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs4
4 files changed, 17 insertions, 5 deletions
diff --git a/OpenSim/Region/Environment/Scenes/EventManager.cs b/OpenSim/Region/Environment/Scenes/EventManager.cs
index 618e6b5..bba7eed 100644
--- a/OpenSim/Region/Environment/Scenes/EventManager.cs
+++ b/OpenSim/Region/Environment/Scenes/EventManager.cs
@@ -52,7 +52,7 @@ namespace OpenSim.Region.Environment.Scenes
52 52
53 public event OnTerrainTickDelegate OnTerrainTick; 53 public event OnTerrainTickDelegate OnTerrainTick;
54 54
55 public delegate void OnBackupDelegate(IRegionDataStore datastore); 55 public delegate void OnBackupDelegate(IRegionDataStore datastore, bool forceBackup);
56 56
57 public event OnBackupDelegate OnBackup; 57 public event OnBackupDelegate OnBackup;
58 58
@@ -504,7 +504,7 @@ namespace OpenSim.Region.Environment.Scenes
504 handlerBackup = OnBackup; 504 handlerBackup = OnBackup;
505 if (handlerBackup != null) 505 if (handlerBackup != null)
506 { 506 {
507 handlerBackup(dstore); 507 handlerBackup(dstore, false);
508 } 508 }
509 } 509 }
510 510
diff --git a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs
index cb9aee2..bc80d56 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs
@@ -1686,6 +1686,10 @@ namespace OpenSim.Region.Environment.Scenes
1686 1686
1687 SceneObjectGroup grp = part.ParentGroup; 1687 SceneObjectGroup grp = part.ParentGroup;
1688 1688
1689 //force a database backup/update on this SceneObjectGroup
1690 //So that we know the database is upto date, for when deleting the object from it
1691 ForceSceneObjectBackup(grp);
1692
1689 bool permissionToTake = false; 1693 bool permissionToTake = false;
1690 bool permissionToDelete = false; 1694 bool permissionToDelete = false;
1691 1695
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
index 32bd9aa..194d782 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -728,7 +728,7 @@ namespace OpenSim.Region.Environment.Scenes
728 { 728 {
729 if (!entity.IsDeleted && entity is SceneObjectGroup && ((SceneObjectGroup)entity).HasGroupChanged) 729 if (!entity.IsDeleted && entity is SceneObjectGroup && ((SceneObjectGroup)entity).HasGroupChanged)
730 { 730 {
731 ((SceneObjectGroup)entity).ProcessBackup(m_storageManager.DataStore); 731 ((SceneObjectGroup)entity).ProcessBackup(m_storageManager.DataStore, false);
732 } 732 }
733 } 733 }
734 734
@@ -1052,6 +1052,14 @@ namespace OpenSim.Region.Environment.Scenes
1052 } 1052 }
1053 } 1053 }
1054 1054
1055 public void ForceSceneObjectBackup(SceneObjectGroup group)
1056 {
1057 if (group != null)
1058 {
1059 group.ProcessBackup(m_storageManager.DataStore, true);
1060 }
1061 }
1062
1055 public void AddReturn(UUID agentID, string objectName, Vector3 location, string reason) 1063 public void AddReturn(UUID agentID, string objectName, Vector3 location, string reason)
1056 { 1064 {
1057 lock (m_returns) 1065 lock (m_returns)
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
index 9c29338..5ae95ee 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
@@ -1222,7 +1222,7 @@ namespace OpenSim.Region.Environment.Scenes
1222 /// Processes backup. 1222 /// Processes backup.
1223 /// </summary> 1223 /// </summary>
1224 /// <param name="datastore"></param> 1224 /// <param name="datastore"></param>
1225 public void ProcessBackup(IRegionDataStore datastore) 1225 public void ProcessBackup(IRegionDataStore datastore, bool forcedBackup)
1226 { 1226 {
1227 if (!m_isBackedUp) 1227 if (!m_isBackedUp)
1228 return; 1228 return;
@@ -1265,7 +1265,7 @@ namespace OpenSim.Region.Environment.Scenes
1265 if (HasGroupChanged) 1265 if (HasGroupChanged)
1266 { 1266 {
1267 // don't backup while it's selected or you're asking for changes mid stream. 1267 // don't backup while it's selected or you're asking for changes mid stream.
1268 if (isTimeToPersist()) 1268 if ((isTimeToPersist()) || (forcedBackup))
1269 { 1269 {
1270 m_log.DebugFormat( 1270 m_log.DebugFormat(
1271 "[SCENE]: Storing {0}, {1} in {2}", 1271 "[SCENE]: Storing {0}, {1} in {2}",