[Opensim-dev] oddities with asset storage
Melanie
melanie at t-data.com
Thu Feb 19 01:07:19 UTC 2009
This is something i have though about. However, it would not work in
OSGrid. Regions may go away, and they may go away permanently.
Anything in a prim inventory at that time is refcounted and would
not be released. Ever.
So, you'd need a ref list, to purge invalid refs. That is where the
inpracticability begins. A redf list for each and every asset,
listing either avatar UUID or region UUID?
If assets are 51 mio, how long will the reflist table be?
Melanie
Buckaroo Mu wrote:
> Here's my L$0.02, for what it's worth - why not maintain a 'reference
> count' in the asset entry?
>
> Resident A creates a prim, takes it into inventory. Asset is created,
> inventory item pointing to asset is created, asset->useagecount++. User
> gives away 15 copies of item, asset->usagecount+=15. Resident A deletes
> original item, inventory item goes away, asset->usagecount--.
>
> Resident B rezzes item on sim. If item is no-copy, asset->usagecount--.
> If it's copy, and Resident B (or Resident C) takes it back into
> inventory, asset->usagecount++ (they would have two copies of it).
> Resident B deletes both copies from inventory, asset->usagecount -=2.
>
> If asset->usagecount == 0, asset gets deleted.
>
> Tell me why this wouldn't work. I'm sure there's a simple reason, but I
> can't think of it. All of this is assuming that the asset is no-mod -
> any change to the asset creates a new UUID, correct? But if the asset is
> rezzed, then taken back into inventory, it should have the same UUID,
> thus adding one to the usage count.
>
> -Buckaroo
>
> Melanie wrote:
>> All you described is design behavior.
>>
>>
>> Prim items in world are not assets. They are stored exclusively in
>> the prims tables of the region.
>>
>> Once taken, they become an asset. The name is totally meaningless,
>> it reflects whatever was the name at creation. Nothing else. It
>> never changes from there on.
>>
>> On deleting the inventory item, assets remain. There is no easy or
>> practicable way to conclusively say that an asset is trash, because
>> we don't know.
>>
>> In your test case, your (human) mind could know this for a fact,
>> however, the silicon mind of the asset server can't.
>>
>> This is because you may have given the object to another user, or
>> put a copy into a prim.
>>
>> These copies would refer to the same asset, that is what "implictily
>> shared" means.
>>
>> So, any asset may, at any time, have any number of links to it, even
>> zero.
>>
>> Like a website, you don't know who linked to it. If you remove it,
>> you leave dead links. Assets are the same. Except, you get "Asset
>> missing from database".
>>
>> So, assetas are NOT 1-to-1 with inventory items, and they _never_
>> get deleted.
>>
>> They have to be reaped, and there is a big discussion over how to
>> best do that, running right now.
>>
>> Melanie
>>
>>
>> Dirk Krause wrote:
>>
>>> Hi,
>>>
>>> I did a little test with a fresh OpenSim installation (yes, thanks for
>>> the installer!),
>>> to get a grip on what I learned from Melanie yesterday.
>>>
>>> I wrote a little python script to help me monitor these tables:
>>> inventoryStore/inventoryItems
>>> assetStorage/assets
>>> http://pastebin.com/mc9e6574 , be warned: ugly code.
>>>
>>> I started OpenSim and logged in a 'Test User' with the SL viewer.
>>>
>>> (Just to mention it - first time log in in as test users creates
>>> 4 'blank' entries in assets.)
>>>
>>> The inventoryItems table was initially empty.
>>>
>>> Now I rezzed a cube and renamed it to 'p1'.
>>> inventoryStore/inventoryItems was still empty.
>>> To my surprise no new entry shows up in assetStorage/assets.
>>>
>>> Picking up the cube ('take') created an entry named 'p1' in the
>>> inventory and in the asset table.
>>>
>>> Now I renamed the cube in Test Users inventory to 'p2'.
>>> The name in inventoryStore/inventoryItems changes to 'p2'.
>>> The entry in assetStorage/assets stays 'p1'. As mentioned on the list
>>> before,
>>> the asset name is useless, since the user only sees the name in the
>>> inventory.
>>>
>>> Now I deleted 'p2' in my inventory - 'p2's parentfolderID changes to
>>> 'Trash'.
>>> Now I emptied the trash - the inventory table is empty again, which is
>>> fine,
>>> but here's the big one:
>>> the assetStorage/assets still holds the reference to 'p1'.
>>>
>>> Just to make sure I shut down the simulator and opened it again, and it
>>> was still there.
>>>
>>> Now, doesn't that mean, that the database increases over time with no
>>> hope to find
>>> these assets that actually should be gone? or is there some magic
>>> purging that happens,
>>> and that I missed?
>>>
>>> This would mean that any grid runs into a severe problem over time.
>>>
>>> Best,
>>> Dirk/Bart
>>> _______________________________________________
>>> Opensim-dev mailing list
>>> Opensim-dev at lists.berlios.de
>>> https://lists.berlios.de/mailman/listinfo/opensim-dev
>>>
>>>
>>>
>>
>> _______________________________________________
>> Opensim-dev mailing list
>> Opensim-dev at lists.berlios.de
>> https://lists.berlios.de/mailman/listinfo/opensim-dev
>>
>>
>>
>
> _______________________________________________
> 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