[openstack-dev] [stable][requirements] External dependency caps introduced in 499db6b

Joshua Harlow harlowja at outlook.com
Tue Feb 17 22:27:26 UTC 2015


Joe Gordon wrote:
>
>
> On Tue, Feb 17, 2015 at 4:19 AM, Sean Dague <sean at dague.net
> <mailto:sean at dague.net>> wrote:
>
>     On 02/16/2015 08:50 PM, Ian Cordasco wrote:
>      > On 2/16/15, 16:08, "Sean Dague" <sean at dague.net
>     <mailto:sean at dague.net>> wrote:
>      >
>      >> On 02/16/2015 02:08 PM, Doug Hellmann wrote:
>      >>>
>      >>>
>      >>> On Mon, Feb 16, 2015, at 01:01 PM, Ian Cordasco wrote:
>      >>>> Hey everyone,
>      >>>>
>      >>>> The os-ansible-deployment team was working on updates to add
>     support
>      >>>> for
>      >>>> the latest version of juno and noticed some interesting version
>      >>>> specifiers
>      >>>> introduced into global-requirements.txt in January. It
>     introduced some
>      >>>> version specifiers that seem a bit impossible like the one for
>     requests
>      >>>> [1]. There are others that equate presently to pinning the
>     versions of
>      >>>> the
>      >>>> packages [2, 3, 4].
>      >>>>
>      >>>> I understand fully and support the commit because of how it
>     improves
>      >>>> pretty much everyone’s quality of life (no fires to put out in the
>      >>>> middle
>      >>>> of the night on the weekend). I’m also aware that a lot of the
>      >>>> downstream
>      >>>> redistributors tend to work from global-requirements.txt when
>      >>>> determining
>      >>>> what to package/support.
>      >>>>
>      >>>> It seems to me like there’s room to clean up some of these
>     requirements
>      >>>> to
>      >>>> make them far more explicit and less misleading to the human
>     eye (even
>      >>>> though tooling like pip can easily parse/understand these).
>      >>>
>      >>> I think that's the idea. These requirements were generated
>      >>> automatically, and fixed issues that were holding back several
>     projects.
>      >>> Now we can apply updates to them by hand, to either move the lower
>      >>> bounds down (as in the case Ihar pointed out with stevedore) or
>     clean up
>      >>> the range definitions. We should not raise the limits of any Oslo
>      >>> libraries, and we should consider raising the limits of third-party
>      >>> libraries very carefully.
>      >>>
>      >>> We should make those changes on one library at a time, so we
>     can see
>      >>> what effect each change has on the other requirements.
>      >>>
>      >>>>
>      >>>> I also understand that stable-maint may want to occasionally
>     bump the
>      >>>> caps
>      >>>> to see if newer versions will not break everything, so what is the
>      >>>> right
>      >>>> way forward? What is the best way to both maintain a stable
>     branch with
>      >>>> known working dependencies while helping out those who do so
>     much work
>      >>>> for
>      >>>> us (downstream and stable-maint) and not permanently pinning
>     to certain
>      >>>> working versions?
>      >>>
>      >>> Managing the upper bounds is still under discussion. Sean
>     pointed out
>      >>> that we might want hard caps so that updates to stable branch were
>      >>> explicit. I can see either side of that argument and am still
>     on the
>      >>> fence about the best approach.
>      >>
>      >> History has shown that it's too much work keeping testing
>     functioning
>      >> for stable branches if we leave dependencies uncapped. If particular
>      >> people are interested in bumping versions when releases happen, it's
>      >> easy enough to do with a requirements proposed update. It will
>     even run
>      >> tests that in most cases will prove that it works.
>      >>
>      >> It might even be possible for someone to build some automation
>     that did
>      >> that as stuff from pypi released so we could have the best of both
>      >> worlds. But I think capping is definitely something we want as a
>      >> project, and it reflects the way that most deployments will
>     consume this
>      >> code.
>      >>
>      >>      -Sean
>      >>
>      >> --
>      >> Sean Dague
>      >> http://dague.net
>      >
>      > Right. No one is arguing the very clear benefits of all of this.
>      >
>      > I’m just wondering if for the example version identifiers that I
>     gave in
>      > my original message (and others that are very similar) if we want
>     to make
>      > the strings much simpler for people who tend to work from them (i.e.,
>      > downstream re-distributors whose jobs are already difficult
>     enough). I’ve
>      > offered to help at least one of them in the past who maintains all of
>      > their distro’s packages themselves, but they refused so I’d like
>     to help
>      > them anyway possible. Especially if any of them chime in as this
>     being
>      > something that would be helpful.
>
>     Ok, your links got kind of scrambled. Can you next time please inline
>     the key relevant content in the email, because I think we all missed the
>     original message intent as the key content was only in footnotes.
>
>      From my point of view, normalization patches would be fine.
>
>     requests>=1.2.1,!=2.4.0,<=2.2.1
>
>     Is actually an odd one, because that's still there because we're using
>     Trusty level requests in the tests, and my ability to have devstack not
>     install that has thus far failed.
>
>     Things like:
>
>     osprofiler>=0.3.0,<=0.3.0 # Apache-2.0
>
>     Can clearly be normalized to osprofiler==0.3.0 if you want to propose
>     the patch manually.
>
>
> global-requirements for stable branches serves two uses:
>
> 1. Specify the set of dependencies that we would like to test against
> 2.  A tool fordownstream packagers to use when determining what to
> package/support.
>
> For #1, Ideally we would like a set of all dependencies, including
> transitive, with explicit versions (very similar to the output of
> pip-freeze). But for #2 the standard requirement file with a range is
> preferred. Putting an upper bound on each dependency, instead of using a
> '==' was a compromise between the two use cases.
>
> Going forward I propose we have a requirements.in
> <http://requirements.in> and a requirements.txt file. The
> requirements.in <http://requirements.in> file would contain the range of
> dependencies, and requirements.txt would contain the pinned set, and
> eventually the pinned set including transitive dependencies.
>
> Thoughts?

+1 from me.

>
>
>              -Sean
>
>     --
>     Sean Dague
>     http://dague.net
>
>     __________________________________________________________________________
>     OpenStack Development Mailing List (not for usage questions)
>     Unsubscribe:
>     OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
>     <http://OpenStack-dev-request@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