[storm] what causes: storm.exceptions.LostObjectError: Can't obtain values from the database

Gerdus van Zyl gerdusvanzyl at gmail.com
Fri Jan 7 08:49:29 UTC 2011


Can't you just add an autoincrementing integer primary key (surrogate key)?
or even a field to store a uuid

On Fri, Jan 7, 2011 at 10:39 AM, Steve Kieu <msh.computing at gmail.com> wrote:

> Hi there,
>
> Yes you are right - The table should have the compose key as unique but
> VirtualMart does not do it - and imposing it cause problem.
>
> Thank you very much for your help, I highly appreciated it and learned
> another experience with storm :-)
>
> Cheers,
>
>
>
>
>
> On Fri, Jan 7, 2011 at 9:19 AM, Steve Kieu <msh.computing at gmail.com>wrote:
>
>>
>> I have thought about a case - if the compose primary key is *not* actually
>> unique in the db it may cause the problem
>>
>> so I will try your idea tonight (I am at work now ) to see if it gets
>> fixed, probably have to change the logic there )
>>
>> Thanks
>>
>>
>>
>> On Fri, Jan 7, 2011 at 9:13 AM, Steve Kieu <msh.computing at gmail.com>wrote:
>>
>>> I think (from reading storm doc somewhere) I can use a unique compose key
>>> to tell storm that it can be used as primary tuple in get function. In fact
>>> I used this in various other scripts which runs fine.
>>>
>>> If this is the problem it does not explain why everything is working -
>>> that is I can print out all Product, etc inside the find tuple - I can even
>>> create new record for the ProductDiscountHistory fine. Bad thing *only*
>>> happen when I change the product_discount_id of the Product to use the new
>>> discount.
>>>
>>> I tried to use find in getone method - no change
>>>
>>> Tried to invalidate the pt  after saving the id key, then get the Product
>>> using that id key and change its product_discount_id, - no change
>>>
>>> Enable DEBUG in storm and does not print any usefull information - just
>>> the last SQL statement as normal and boom - error
>>>
>>> Nevertheless I will try your suggestion tonight but I strongly believe it
>>> does not solve the problem. It happens with both python version 2.7.1 and
>>> Ubuntu lucid stock python (2.6.x) so unlikely it is python GC problem
>>>
>>>
>>>
>>> Cheers,
>>>
>>>
>>>
>>>
>>> On Fri, Jan 7, 2011 at 6:00 AM, Gerdus van Zyl <gerdusvanzyl at gmail.com>wrote:
>>>
>>>> in ProductDiscount
>>>> you have both:
>>>> __storm_primary__ = 'amount', 'is_percent', 'start_date'
>>>> and
>>>> id = Int(name='discount_id', primary=True)
>>>>
>>>> I don't think that you can have two definition of the primary key that
>>>> are different;
>>>>
>>>> and then in ProductDiscount.getone
>>>> you use
>>>> one = store.get(ProductDiscount, (amount, is_percent, start_date) )
>>>> according to me you need to use find
>>>>
>>>>
>>>> On Thu, Jan 6, 2011 at 3:12 PM, Steve Kieu <msh.computing at gmail.com>wrote:
>>>>
>>>>> Hello,
>>>>>
>>>>> I have a simple script (attached to this email )- and evrytime I run, i
>>>>> got
>>>>>
>>>>>
>>>>> stevek at lenovo:~/hang-hieu-uc/python$ python bulk_price_update.py
>>>>> Number of record: 202
>>>>> /usr/lib/python2.6/dist-packages/storm/database.py:342: Warning: Data
>>>>> truncated for column 'amount' at row 1
>>>>>   return function(*args, **kwargs)
>>>>> Traceback (most recent call last):
>>>>>   File "bulk_price_update.py", line 137, in <module>
>>>>>     process()
>>>>>   File "bulk_price_update.py", line 129, in process
>>>>>     new_pt.product_discount_id = new_pd.id; store.flush()
>>>>>   File "/usr/lib/python2.6/dist-packages/storm/properties.py", line 60,
>>>>> in __get__
>>>>>     return obj_info.variables[column].get()
>>>>>   File "/usr/lib/python2.6/dist-packages/storm/variables.py", line 178,
>>>>> in get
>>>>>     self.event.emit("resolve-lazy-value", self, self._lazy_value)
>>>>>   File "/usr/lib/python2.6/dist-packages/storm/event.py", line 53, in
>>>>> emit
>>>>>     if callback(owner, *(args+data)) is False:
>>>>>   File "/usr/lib/python2.6/dist-packages/storm/store.py", line 891, in
>>>>> _resolve_lazy_value
>>>>>     result, result.get_one())
>>>>>   File "/usr/lib/python2.6/dist-packages/storm/store.py", line 746, in
>>>>> _set_values
>>>>>     raise LostObjectError("Can't obtain values from the database "
>>>>> storm.exceptions.LostObjectError: Can't obtain values from the database
>>>>> (object got removed?)
>>>>>
>>>>> I am stuck at new idea to fix it, please help
>>>>>
>>>>> If I do not modify the product_discount_id of a product then it printed
>>>>> values fine and create in the history table fine. First I directly modify
>>>>> the  pt object, but then try to get a product again using pt.id,
>>>>> however it does not help in both cases.
>>>>>
>>>>> The DB is VirutalMart DB if it helps
>>>>>
>>>>> Many thanks in advance
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Steve Kieu
>>>>>
>>>>> --
>>>>> storm mailing list
>>>>> storm at lists.canonical.com
>>>>> Modify settings or unsubscribe at:
>>>>> https://lists.ubuntu.com/mailman/listinfo/storm
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Gerdus van Zyl
>>>> http://about.me/gerdus
>>>>
>>>
>>>
>>>
>>> --
>>> Steve Kieu
>>>
>>
>>
>>
>> --
>> Steve Kieu
>>
>
>
>
> --
> Steve Kieu
>



-- 
Gerdus van Zyl
http://about.me/gerdus
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.ubuntu.com/archives/storm/attachments/20110107/cfa4d55a/attachment-0001.html>


More information about the storm mailing list