← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 1635395] Re: Replace usage of 'retrying' with 'tenacity'

 

Reviewed:  https://review.openstack.org/365106
Committed: https://git.openstack.org/cgit/openstack/neutron/commit/?id=e8bd6424e930556f296aaa492f2f8d62c52f7edf
Submitter: Jenkins
Branch:    master

commit e8bd6424e930556f296aaa492f2f8d62c52f7edf
Author: Boden R <bodenvmw@xxxxxxxxx>
Date:   Fri Sep 2 13:34:06 2016 -0600

    Replace retrying with tenacity
    
    We are replacing all usages of the 'retrying' package with
    'tenacity' as the author of retrying is not actively maintaining
    the project. Tenacity is a fork of retrying, but has improved the
    interface and extensibility (see [1] for more details). Our end
    goal here is removing the retrying package from our requirements.
    
    Tenacity provides the same functionality as retrying, but has the
    following major differences to account for:
    - Tenacity uses seconds rather than ms as retrying did.
    - Tenacity has different kwargs for the decorator and
    Retrying class itself.
    - Tenacity has a different approach for retrying args by
    using classes for its stop/wait/retry kwargs.
    - By default tenacity raises a RetryError if a retried callable
    times out; retrying raises the last exception from the callable.
    Tenacity provides backwards compatibility here by offering
    the 'reraise' kwarg.
    - Tenacity defines 'time.sleep' as a default value for a kwarg.
    That said consumers who need to mock patch time.sleep
    need to account for this via mocking of time.sleep before
    tenacity is imported.
    - For retries that check a result, tenacity will raise if the retried
    function raises, whereas retrying retried on all exceptions.
    
    This patch updates all usages of retrying with tenacity.
    Unit tests will be included where applicable.
    
    Note: This change is not newton critical so projects are welcome
    to hold off on committing until post-newton. Ideally this change
    will merge by the first part of Ocata so dependant functionality
    can land and have time to solidify for Ocata.
    
    [1] https://github.com/jd/tenacity
    
    Closes-Bug: #1635395
    
    Change-Id: I1c0620894d07d58efbba5226b5244fec950354ca


** Changed in: neutron
       Status: In Progress => Fix Released

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to neutron.
https://bugs.launchpad.net/bugs/1635395

Title:
  Replace usage of 'retrying' with 'tenacity'

Status in neutron:
  Fix Released

Bug description:
  Today a number of OpenStack projects use the 'retrying' library [1]
  for generic retry behavior. While retrying provides a functional API,
  its author no longer actively maintains the repo and hasn't responded
  to numerous PRs, emails, etc. (more discussion in [2]). As a result,
  we can't push fixes/features to retrying to support various
  initiatives such as [3].

  A fellow stacker graciously forked the retrying repo and revamped it's API to provide greater functionality/pluggablility; called tenacity [4]. While tenacity provides the same functionality as retrying, it has some notable differences such as:
  - Tenacity uses seconds rather than ms as retrying did.
  - Tenacity has different kwargs for the decorator and
  Retrying class itself.
  - Tenacity has a different approach for retrying args by
  using classes for its stop/wait/retry kwargs.
  - By default tenacity raises a RetryError if a retried callable
  times out; retrying raises the last exception from the callable.
  Tenacity provides backwards compatibility here by offering
  the 'reraise' kwarg.
  - Tenacity defines 'time.sleep' as a default value for a kwarg.
  That said consumers who need to mock patch time.sleep
  need to account for this via mocking of time.sleep before
  tenacity is imported.
  - For retries that check a result, tenacity will raise if the retried
  function raises, whereas retrying retried on all exceptions.

  We'd like to move from retrying to tenacity and eventually remove
  retrying from global requirements all together.

  For projects using retrying, the move to tenacity (hopefully) isn't
  overly intrusive, but must take the above differences into
  consideration.

  While I'm working to move all affected projects [6] from retrying to
  tenacity, this effort is a work in progress (under [5]).


  [1] https://github.com/rholder/retrying
  [2] https://review.openstack.org/#/c/321867/
  [3] http://lists.openstack.org/pipermail/openstack-dev/2016-April/092914.html
  [4] https://github.com/jd/tenacity
  [5] https://review.openstack.org/#/q/message:%22Replace+retrying+with+tenacity%22
  [6] http://codesearch.openstack.org/?q=retrying&i=nope&files=.*.txt&repos=

To manage notifications about this bug go to:
https://bugs.launchpad.net/neutron/+bug/1635395/+subscriptions


References