[Opensim-dev] So I decided to give this one more shot before I start chopping it up with a chainsaw.......

Justin Clark-Casey jjustincc at googlemail.com
Fri Dec 14 07:43:14 UTC 2007


I guess you don't get Mantis notifications Teravus?  I attached a patch 
to use Guid over the inventory comms with that Mantis last night.  Give 
it a whirl :)

Regards,

--
justincc

Teravus Ovares wrote:
> Hey Guys'n Gals.. 
>  
> Digging into Bug number 145 on Mantis..    I discovered profuse and 
> prolific use of the unserializable LLUUID in inventory..    It's used 
> *everywhere*.    
>  
> It's no wonder inventory is spotty and error prone!
>  
> It's used in InventoryFolderBase
> It's used in InventoryItemBase
> It's used in the REST calls
> All of this data is being transferred over Grid Communications :/
>  
> Once again, I restate that the LLUUID is no longer serializable.  It 
> now implements the IComparable interface which is *not* 
> serializable..   Therefore, it can 'never' be used in any grid 
> communications, period.
>  
> We all need to take a good look at the grid inventory service and 
> 'fix' all uses of LLUUID.
>  
> It's *really* easy to use a Guid instead.     
>  
> To go from a System.Guid to a LLUUID, you instantiate a new LLUUID and 
> pass the Guid to it's constructor.  
> ex:
>  
> Guid gAgentID = 'xxxxxxx-xx-x--x-x--xx';
>  
> LLUUID AgentID = new LLUUID(gAgentID);
>  
>  
> To go from a LLUUID to a guid, you use the UUID property of the LLUUID.
> ex:
>  
> Guid gAgentID = AgentID.UUID;
>  
> So, given that you've got a userID LLUUID..      to get it over grid 
> communications reliably..  you have to turn it into a Guid.
>  
> requester.BeginPostObject<*Guid*>(_inventoryServerUrl + 
> "/GetInventory/", *userID.UUID*);
>  
> Then on the receiving side,
>  
>  httpServer.AddStreamHandler(
>                 new RestDeserialisehandler<*Guid*, 
> InventoryCollection>("POST", "/GetInventory/",
>                                                                                   
> m_inventoryService.GetUserInventory));
>  
> public InventoryCollection GetUserInventory(*Guid userID*)
>         {
>             InventoryCollection invCollection = new InventoryCollection();
>             List<InventoryFolderBase> folders;
>             List<InventoryItemBase> allItems;
>             if (TryGetUsersInventory(*new LLUUID(userID),* out 
> folders, out allItems))
>             {
>                 invCollection.AllItems = allItems;
>                 invCollection.Folders = folders;
>                 invCollection.UserID = *new LLUUID(userID);*
>             }
>             return invCollection;
>         }
>  
> Additionally,
> Any object that encapsulates a LLUUID directly, is NOT 
> serializable...   that means..   the objects;
>  
> InventoyFolderBase
> and
> InventoryItemBase
>  
> Are not serializable because they encapsulate LLUUIDs.  This is *bad* 
> :D.  They cannot go over Grid Communications reliably.
>  
> They all need to be changed to Guids, or we'll continue to have spotty 
> inventory.
>  
>  :D
>  
> I'm mentioning this because it's a big problem..  
>  
> I don't really know this portion of the code well..   so if I edit it, 
> it's likely to break..  hence the subject.
>  
> Someone take this on please..   so I don't have to chop it up with a 
> chainsaw..    grind it down with a tree stump grinder, run it over 
> with a steam roller and jack-hammer it to itty bitty bite sized 
> serializable components that can reliably be transferred over grid 
> communications. :D
>  
> Best Regards
>  
> Tera
> ------------------------------------------------------------------------
>
> _______________________________________________
> Opensim-dev mailing list
> Opensim-dev at lists.berlios.de
> https://lists.berlios.de/mailman/listinfo/opensim-dev
>   




More information about the Opensim-dev mailing list