[openstack-dev] [oslo][oslo.service] looping.RetryDecorator behavior

Joshua Harlow harlowja at fastmail.com
Sat Sep 23 04:50:41 UTC 2017


Hi Renat,

I was more just saying that depending on your situation it might be 
better to switch to using tenacity (not that the retry decorator is 
deprecated, though I wouldn't personally use it).

As you mentioned in 
https://bugs.launchpad.net/oslo.service/+bug/1718635/comments/1 this 
class and decorator is not thread safe so if that is a concern for you 
then that is also better in tenacity.

I think a lot of usage of that decorator though is like the following:

def main_func():

    @loopingcall.RetryDecorator
    def inner_func():
       <do something that may need retries>

    <do something>
    inner_func()
    <do more something>

So likely thread-safety was never a concern, though I can't quite say... 
I think (but I might be wrong) when that class/code was being proposed I 
recommended just using 'retrying' (the precursor to tenacity) but 
bygones be bygones...

Renat Akhmerov wrote:
> Thanks Josh,
>
> I’m not sure I fully understand your point though. You mean it’s a
> legacy (deprecated?) code that we should never use in our code? Should
> it be considered a private class of oslo_service?
>
> In our global requirements tenacity is configured as "tenacity>=3.2.1”,
> should we bump it to 4.4.0?
>
> Renat Akhmerov
> @Nokia
>
> On 21 Sep 2017, 22:42 +0700, Joshua Harlow <harlowja at fastmail.com>, wrote:
>> It does look like is sort of a bug,
>>
>> Though in all honesty I wouldn't be using oslo.service or that looping
>> code in the future for doing retrying...
>>
>> https://pypi.python.org/pypi/tenacity is a much better library with more
>> `natural` syntax and works more as one would expect (even under threaded
>> situations).
>>
>> If I could of I would of never let 'loopingcall.py' become a file that
>> exists, but the past is the past, ha.
>>
>> Renat Akhmerov wrote:
>>> Hi Oslo team,
>>>
>>> Can you please check the bug [1]?
>>>
>>> There may be a problem with how looping.RetryDecorator works. Just
>>> stumbled on it in Mistral. Not sure if it’s really a bug or made by
>>> design. If it’s by design then maybe we need to have more accurate
>>> documentation for it.
>>>
>>> FYI: We use this decorator in Mistral and it’s also used in Nova, [2].
>>>
>>> [1] https://bugs.launchpad.net/oslo.service/+bug/1718635
>>> [2]
>>> http://git.openstack.org/cgit/openstack/nova/tree/nova/virt/disk/mount/api.py
>>>
>>> Thanks
>>>
>>> Renat Akhmerov
>>> @Nokia
>>>
>>> __________________________________________________________________________
>>> OpenStack Development Mailing List (not for usage questions)
>>> Unsubscribe:
>>> OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
>>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>>
>> __________________________________________________________________________
>> OpenStack Development Mailing List (not for usage questions)
>> Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
> __________________________________________________________________________
> OpenStack Development Mailing List (not for usage questions)
> Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev



More information about the OpenStack-dev mailing list