[Kimchi-devel] [PATCH] [Wok] Implement update methods for object store
Jose Ricardo Ziviani
joserz at linux.vnet.ibm.com
Thu Apr 7 19:00:49 UTC 2016
CANCELLED
please, do not consider this patch
On 07-04-2016 15:13, Paulo Ricardo Paz Vital wrote:
> On Apr 07 02:38PM, Lucio Correia wrote:
>> On 07-04-2016 14:28, Jose Ricardo Ziviani wrote:
>>> - This commit implements two new methods for object store, update_data
>>> and update_id. Now it's possible to update an existing data
>>> instead of delete/create.
>>>
>>> Signed-off-by: Jose Ricardo Ziviani <joserz at linux.vnet.ibm.com>
>>> ---
>>> src/wok/objectstore.py | 13 +++++++++++++
>>> tests/test_objectstore.py | 11 +++++++++++
>>> 2 files changed, 24 insertions(+)
>>>
>>> diff --git a/src/wok/objectstore.py b/src/wok/objectstore.py
>>> index ff3796c..5ec87eb 100644
>>> --- a/src/wok/objectstore.py
>>> +++ b/src/wok/objectstore.py
>>> @@ -94,6 +94,19 @@ class ObjectStoreSession(object):
>>> (ident, obj_type, jsonstr, version))
>>> self.conn.commit()
>>>
>>> + def update_data(self, obj_type, ident, data):
>>> + jsonstr = json.dumps(data)
>>> + c = self.conn.cursor()
>>> + c.execute('UPDATE objects SET json=? WHERE id=? AND type=?',
>>> + (jsonstr, ident, obj_type))
>>> + self.conn.commit()
>> I see that store() could be used to update existent entries as well, because
>> it first removes the entry and then adds it again with same id.
>> Is there any difference here?
I was going to use update when editing templates, it was a semantic
issue but I changed the way I'm implementing template edit
>>
>
> In addition to Lucio's question, I'd like to know which case impacts more in
> perfomance: update or remove/add (store again)?
Good point, I've been looking for benchmarks on the internet but didn't
find anything reliable.
One guy made some measurements
(http://stackoverflow.com/a/29141391/54837), it took 30ms to update 500
rows against 62ms to delete/insert but there are more variables to consider.
Anyway, on our case I don't think it makes any difference due to the
amount of data we handle.
>
>>
>>> +
>>> + def update_id(self, obj_type, ident, new_ident):
>>> + c = self.conn.cursor()
>>> + c.execute('UPDATE objects SET id=? WHERE id=? AND type=?',
>>> + (new_ident, ident, obj_type))
>>> + self.conn.commit()
>>> +
>>>
>>> class ObjectStore(object):
>>> def __init__(self, location=None):
>>> diff --git a/tests/test_objectstore.py b/tests/test_objectstore.py
>>> index 3ea7b70..d6ea434 100644
>>> --- a/tests/test_objectstore.py
>>> +++ b/tests/test_objectstore.py
>>> @@ -82,6 +82,17 @@ class ObjectStoreTests(unittest.TestCase):
>>> item = session.get_object_version('fǒǒ', 'těst1')
>>> self.assertEquals(get_version().split('-')[0], item[0])
>>>
>>> + # test update data
>>> + session.update_data('fǒǒ', 'těst1', {'α': 5})
>>> + item = session.get('fǒǒ', 'těst1')
>>> + self.assertEquals(5, item[u'α'])
>>> +
>>> + # test update id
>>> + session.update_id('fǒǒ', 'těst1', 'těst2')
>>> + item = session.get('fǒǒ', 'těst2')
>>> + self.assertEquals(5, item[u'α'])
>>> +
>>> +
>>> def test_object_store_threaded(self):
>>> def worker(ident):
>>> with store as session:
>>>
>>>
>>>
>>> _______________________________________________
>>> Kimchi-devel mailing list
>>> Kimchi-devel at ovirt.org
>>> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>>>
>>
>>
>> --
>> Lucio Correia
>> Software Engineer
>> IBM LTC Brazil
>>
>> _______________________________________________
>> Kimchi-devel mailing list
>> Kimchi-devel at ovirt.org
>> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>
--
Jose Ricardo Ziviani
-----------------------------
Software Engineer
Linux Technology Center - IBM
More information about the Kimchi-devel
mailing list