* If an orphaned group is found in the mysql or mssql databases (i.e. there is no prim where UUID = SceneGroupID), then force one prim to have UUID = SceneGroupID.
* A warning is posted about this on startup giving the location of the object * This should allow one class of persistently undeletable prims to be removed * This change should not cause any issues, but I still suggest that you backup your database beforehand * If this doesn't work for previously linked objects, then you could also try the workaround in http://opensimulator.org/mantis/view.php?id=3059 * This change has been made to mysql and mssql, but sqlite appears to work in a different way0.6.3-post-fixes
parent
ea6e4a95ce
commit
13f069b945
|
@ -79,7 +79,6 @@ namespace OpenSim.Data.MSSQL
|
|||
|
||||
//Migration settings
|
||||
_Database.CheckMigration(_migrationStore);
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -124,10 +123,9 @@ namespace OpenSim.Data.MSSQL
|
|||
else
|
||||
sceneObjectPart.Shape = BuildShape(reader);
|
||||
|
||||
sceneObjectPart.FolderID = sceneObjectPart.UUID; // A relic from when we
|
||||
// we thought prims contained
|
||||
// folder objects. In
|
||||
// A relic from when we we thought that prims contained folder objects. In
|
||||
// reality, prim == folder
|
||||
sceneObjectPart.FolderID = sceneObjectPart.UUID;
|
||||
sceneObjectParts.Add(sceneObjectPart);
|
||||
|
||||
UUID groupID = new UUID(reader["SceneGroupID"].ToString());
|
||||
|
@ -139,6 +137,20 @@ namespace OpenSim.Data.MSSQL
|
|||
|
||||
lastGroupID = groupID;
|
||||
|
||||
// There sometimes exist OpenSim bugs that 'orphan groups' so that none of the prims are
|
||||
// recorded as the root prim (for which the UUID must equal the persisted group UUID). In
|
||||
// this case, force the UUID to be the same as the group UUID so that at least these can be
|
||||
// deleted (we need to change the UUID so that any other prims in the linkset can also be
|
||||
// deleted).
|
||||
if (sceneObjectPart.UUID != groupID && groupID != UUID.Zero)
|
||||
{
|
||||
_Log.WarnFormat(
|
||||
"[REGION DB]: Found root prim {0} {1} at {2} where group was actually {3}. Forcing UUID to group UUID",
|
||||
sceneObjectPart.Name, sceneObjectPart.UUID, sceneObjectPart.GroupPosition, groupID);
|
||||
|
||||
sceneObjectPart.UUID = groupID;
|
||||
}
|
||||
|
||||
grp = new SceneObjectGroup(sceneObjectPart);
|
||||
}
|
||||
else
|
||||
|
@ -162,10 +174,9 @@ namespace OpenSim.Data.MSSQL
|
|||
//Load the inventory off all sceneobjects within the region
|
||||
LoadItems(sceneObjectParts);
|
||||
|
||||
_Log.DebugFormat("[DATABASE] Loaded {0} objects using {1} prims", sceneObjectGroups.Count, sceneObjectParts.Count);
|
||||
_Log.DebugFormat("[REGION DB]: Loaded {0} objects using {1} prims", sceneObjectGroups.Count, sceneObjectParts.Count);
|
||||
|
||||
return sceneObjectGroups;
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -216,7 +227,7 @@ namespace OpenSim.Data.MSSQL
|
|||
/// <param name="regionUUID"></param>
|
||||
public void StoreObject(SceneObjectGroup obj, UUID regionUUID)
|
||||
{
|
||||
_Log.InfoFormat("[REGION DB]: Adding/Changing SceneObjectGroup: {0} to region: {1}, object has {2} prims.", obj.UUID, regionUUID, obj.Children.Count);
|
||||
_Log.InfoFormat("[MSSQL]: Adding/Changing SceneObjectGroup: {0} to region: {1}, object has {2} prims.", obj.UUID, regionUUID, obj.Children.Count);
|
||||
|
||||
using (SqlConnection conn = _Database.DatabaseConnection())
|
||||
{
|
||||
|
@ -404,7 +415,7 @@ ELSE
|
|||
/// <param name="regionUUID">regionUUID (is this used anyway</param>
|
||||
public void RemoveObject(UUID objectID, UUID regionUUID)
|
||||
{
|
||||
_Log.InfoFormat("[REGION DB]: Removing obj: {0} from region: {1}", objectID, regionUUID);
|
||||
_Log.InfoFormat("[MSSQL]: Removing obj: {0} from region: {1}", objectID, regionUUID);
|
||||
|
||||
//Remove from prims and primsitem table
|
||||
string sqlPrims = string.Format("DELETE FROM PRIMS WHERE SceneGroupID = '{0}'", objectID);
|
||||
|
@ -1483,8 +1494,6 @@ VALUES
|
|||
return parameters.ToArray();
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#endregion
|
||||
|
|
|
@ -456,6 +456,20 @@ namespace OpenSim.Data.MySQL
|
|||
|
||||
lastGroupID = groupID;
|
||||
|
||||
// There sometimes exist OpenSim bugs that 'orphan groups' so that none of the prims are
|
||||
// recorded as the root prim (for which the UUID must equal the persisted group UUID). In
|
||||
// this case, force the UUID to be the same as the group UUID so that at least these can be
|
||||
// deleted (we need to change the UUID so that any other prims in the linkset can also be
|
||||
// deleted).
|
||||
if (prim.UUID != groupID && groupID != UUID.Zero)
|
||||
{
|
||||
m_log.WarnFormat(
|
||||
"[REGION DB]: Found root prim {0} {1} at {2} where group was actually {3}. Forcing UUID to group UUID",
|
||||
prim.Name, prim.UUID, prim.GroupPosition, groupID);
|
||||
|
||||
prim.UUID = groupID;
|
||||
}
|
||||
|
||||
grp = new SceneObjectGroup(prim);
|
||||
}
|
||||
else
|
||||
|
@ -484,7 +498,7 @@ namespace OpenSim.Data.MySQL
|
|||
foreach (SceneObjectPart part in prims)
|
||||
LoadItems(part);
|
||||
|
||||
m_log.DebugFormat("[DATABASE] Loaded {0} objects using {1} prims", objects.Count, prims.Count);
|
||||
m_log.DebugFormat("[REGION DB]: Loaded {0} objects using {1} prims", objects.Count, prims.Count);
|
||||
|
||||
return objects;
|
||||
}
|
||||
|
|
|
@ -419,6 +419,7 @@ namespace OpenSim.Data.SQLite
|
|||
|
||||
string uuid = (string) primRow["UUID"];
|
||||
string objID = (string) primRow["SceneGroupID"];
|
||||
|
||||
if (uuid == objID) //is new SceneObjectGroup ?
|
||||
{
|
||||
SceneObjectGroup group = new SceneObjectGroup();
|
||||
|
@ -451,6 +452,7 @@ namespace OpenSim.Data.SQLite
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Now fill the groups with part data
|
||||
foreach (DataRow primRow in primsForRegion)
|
||||
{
|
||||
|
@ -470,10 +472,11 @@ namespace OpenSim.Data.SQLite
|
|||
}
|
||||
else
|
||||
{
|
||||
m_log.Info(
|
||||
m_log.Warn(
|
||||
"[REGION DB]: No shape found for prim in storage, so setting default box shape");
|
||||
prim.Shape = PrimitiveBaseShape.Default;
|
||||
}
|
||||
|
||||
createdObjects[new UUID(objID)].AddPart(prim);
|
||||
LoadItems(prim);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue