From 75c880a6f3631a527b532773a8a493309a96028e Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Fri, 9 Nov 2012 00:59:18 +0000 Subject: Update parent inventory folder version numbers when folders are moved/created/deleted to match version numbers cached by viewers. This is done in the way that one would expect (e.g. moving a folder increments version number on both source and destination parent folders). This should hopefully improve viewer reuse of its cached inventory information. Currently MySQL only but will be implement for SQLite/MSSQL if there are no issues. --- OpenSim/Services/InventoryService/XInventoryService.cs | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) (limited to 'OpenSim/Services/InventoryService/XInventoryService.cs') diff --git a/OpenSim/Services/InventoryService/XInventoryService.cs b/OpenSim/Services/InventoryService/XInventoryService.cs index 309dab4..9abc5e4 100644 --- a/OpenSim/Services/InventoryService/XInventoryService.cs +++ b/OpenSim/Services/InventoryService/XInventoryService.cs @@ -400,16 +400,7 @@ namespace OpenSim.Services.InventoryService public virtual bool MoveFolder(InventoryFolderBase folder) { - XInventoryFolder[] x = m_Database.GetFolders( - new string[] { "folderID" }, - new string[] { folder.ID.ToString() }); - - if (x.Length == 0) - return false; - - x[0].parentFolderID = folder.ParentID; - - return m_Database.StoreFolder(x[0]); + return m_Database.MoveFolder(folder.ID.ToString(), folder.ParentID.ToString()); } // We don't check the principal's ID here -- cgit v1.1 From 2aa58c58435e0071da185d32a3f3cb622f699de0 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Sat, 17 Nov 2012 01:01:14 +0000 Subject: Do not allow invariants to change on calls to XInventoryService.UpdateItem() This is to help track down http://opensimulator.org/mantis/view.php?id=6359 where creator IDs on items and rezzed objects have been reported to sometimes change. This should never happen - a particular item should never change creators (if an item is given then a new item (with new id) is created). Invariants are inventory type, asset type, folder (changed only on MoveItems()), CreatorIdentification and Owner. If caller attempts to change an invariant, warning is logged but other properties are still changed. If you see this warning, reporting on Mantis 6359 would be very welcome with the exact operation being done at the time. --- .../Services/InventoryService/XInventoryService.cs | 40 ++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'OpenSim/Services/InventoryService/XInventoryService.cs') diff --git a/OpenSim/Services/InventoryService/XInventoryService.cs b/OpenSim/Services/InventoryService/XInventoryService.cs index 9abc5e4..00faa44 100644 --- a/OpenSim/Services/InventoryService/XInventoryService.cs +++ b/OpenSim/Services/InventoryService/XInventoryService.cs @@ -476,6 +476,46 @@ namespace OpenSim.Services.InventoryService // m_log.InfoFormat( // "[XINVENTORY SERVICE]: Updating item {0} {1} in folder {2}", item.Name, item.ID, item.Folder); + InventoryItemBase retrievedItem = GetItem(item); + + if (retrievedItem == null) + { + m_log.WarnFormat( + "[XINVENTORY SERVICE]: Tried to update item {0} {1}, owner {2} but no existing item found.", + item.Name, item.ID, item.Owner); + + return false; + } + + // Do not allow invariants to change. Changes to folder ID occur in MoveItems() + if (retrievedItem.InvType != item.InvType + || retrievedItem.AssetType != item.AssetType + || retrievedItem.Folder != item.Folder + || retrievedItem.CreatorIdentification != item.CreatorIdentification + || retrievedItem.Owner != item.Owner) + { + m_log.WarnFormat( + "[XINVENTORY SERVICE]: Caller to UpdateItem() for {0} {1} tried to alter property(s) that should be invariant, (InvType, AssetType, Folder, CreatorIdentification, Owner), existing ({2}, {3}, {4}, {5}, {6}), update ({7}, {8}, {9}, {10}, {11})", + retrievedItem.Name, + retrievedItem.ID, + retrievedItem.InvType, + retrievedItem.AssetType, + retrievedItem.Folder, + retrievedItem.CreatorIdentification, + retrievedItem.Owner, + item.InvType, + item.AssetType, + item.Folder, + item.CreatorIdentification, + item.Owner); + + item.InvType = retrievedItem.InvType; + item.AssetType = retrievedItem.AssetType; + item.Folder = retrievedItem.Folder; + item.CreatorIdentification = retrievedItem.CreatorIdentification; + item.Owner = retrievedItem.Owner; + } + return m_Database.StoreItem(ConvertFromOpenSim(item)); } -- cgit v1.1