Re: Proposal to improve stability on mgr modules.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Oh... I think I was going to make some kind of footnote along the
lines of "other than switching to another language" but then thought
better of it :-)





On Tue, Mar 9, 2021 at 12:30 PM Ernesto Puerta <epuertat@xxxxxxxxxx> wrote:
>
> Thank you, John!
>
> BTW I looked for that "[1]" footnote in your reply but couldn't find any?
>
> Kind Regards,
> Ernesto
>
>
> On Mon, Mar 8, 2021 at 9:57 PM John Spray <jcspray@xxxxxxxxx> wrote:
>>
>> Hey Ernesto,
>>
>> I haven't used pex, it looks like it wants to generate executables,
>> but they're zip files that include a dump of vendored packages (and it
>> has an --inherit-path option to respect systemwide packages) so maybe
>> it's a useful building block.
>>
>> To be honest I never ended up with an approach that made me happy[1].
>> My hazy recollection from hacking builds out of virtualenvs is that
>> virtualenv tends to get a bit confusing in the interplay between
>> --system-site-packages and dependency resolution for packages within
>> the env (sorry to be vague, this was a few years ago).
>>
>> If I was doing it today, my starting point would be to keep it as
>> simple as possible and unzip specific versions of packages into a
>> tree, avoiding virtualenv (and the games it plays with import paths)
>> if possible.  That also keeps your vendoring very intentional, and
>> avoids risk of sprawling second order dependencies + the associated
>> supply chain risks.
>>
>> John
>>
>>
>>
>>
>> On Mon, Mar 8, 2021 at 4:14 PM Ernesto Puerta <epuertat@xxxxxxxxxx> wrote:
>> >
>> > Glad to see you here, John!
>> >
>> > Any past experience, recommendations on packaging and releasing formats or patterns for those virtualenvs? I remember that Juanmi was exploring pex (https://github.com/pantsbuild/pex) for cephadm.
>> >
>> > Kind Regards,
>> >
>> > Ernesto
>> >
>> >
>> > On Mon, Mar 8, 2021 at 2:44 PM John Spray <jcspray@xxxxxxxxx> wrote:
>> >>
>> >> From experience of doing this on a couple of other projects, the thing
>> >> to watch out for is any python package with native/binary
>> >> dependencies.  Pure python dependencies are easy to embed, things with
>> >> a binary component are usually not worth the trouble - your vendored
>> >> python modules can and will break when the underlying .so gets updated
>> >> in an unexpected way.  Or to look at it another way, things with
>> >> binary dependencies are worthwhile to manage as RPMs, because they
>> >> have natural RPM dependencies for the libwhatever/libwhatever-devel
>> >> that they wrap.
>> >>
>> >> You might also want to make sure anything that involves crypto is RPM
>> >> packaged, to keep the single path for delivering critical fixes to
>> >> those components.
>> >>
>> >> Annoyingly, the python packaging format doesn't make it easy to
>> >> distinguish them - lots of things that "pip install" are actually
>> >> compiling C code with undeclared header dependencies - so it comes
>> >> down to careful review.
>> >>
>> >> John
>> >>
>> >>
>> >> On Mon, Mar 8, 2021 at 1:23 PM Ernesto Puerta <epuertat@xxxxxxxxxx> wrote:
>> >> >
>> >> > Additionally, to make this comparison fairer, we should also take into account not only the code we currently have, but the quality and features we could deliver by relying on mature yet-not-packaged dependencies (I'm thinking on typing-extensions, pydantic, websockets or fastapi among others). Bringing fresh dependencies into the project right now involves ensuring that they're available for a combination of ~5-6 distro-release pairs (Ubuntu, CentOS, OpenSUSE, FreeBSD ports) and that's often a showstopper.
>> >> >
>> >> > --
>> >> > Ernesto
>> >> >
>> >> >
>> >> > On Mon, Mar 8, 2021 at 1:26 PM Alfonso Martinez Hidalgo <almartin@xxxxxxxxxx> wrote:
>> >> >>
>> >> >> Hi all,
>> >> >>
>> >> >> In the last weeks the mgr dashboard module has suffered several bugs
>> >> >> related to python package versions:
>> >> >>
>> >> >> 1)  mgr/dashboard: dashboard hangs when accessing it
>> >> >> https://tracker.ceph.com/issues/48973
>> >> >> cheroot 8.5.1 was causing a hang: needed to upgrade to cheroot distro
>> >> >> version 8.5.2
>> >> >>
>> >> >> 2) mgr/dashboard: ERROR: test_a_set_login_credentials
>> >> >> (tasks.mgr.dashboard.test_auth.AuthTest)
>> >> >> https://tracker.ceph.com/issues/49574
>> >> >>
>> >> >> Adapt code to PyJWT version >= 2.0.0 (our tests were relying on version==1.6.4)
>> >> >>
>> >> >> 3) No possibility to use (in nautilus branch) features from "six"
>> >> >> package version
>> >> >> like "ensure_text" (available in version >=1.12) due to the fact that
>> >> >> distros like ubuntu bionic seem to be stuck on version 1.11
>> >> >>
>> >> >> Taking into consideration all the above and the fact that version
>> >> >> pinning/constraint can provide
>> >> >> stability & reliability, e.g.:
>> >> >> https://github.com/psf/requests/blob/master/setup.py#L44
>> >> >> https://github.com/tiangolo/fastapi/blob/master/pyproject.toml#L34
>> >> >>
>> >> >> PROPOSAL:
>> >> >> Including a virtualenv (or equivalent) in mgr(dashboard) packag(es)
>> >> >> (created during build process)
>> >> >> with some pinned dependencies so we are no longer dependent on system
>> >> >> packages for the specified packages.
>> >> >>
>> >> >> We're already doing it for Dashboard Frontend (Angular Single Page
>> >> >> App) npm dependencies:
>> >> >> https://github.com/ceph/ceph/blob/master/src/pybind/mgr/dashboard/frontend/package.json#L77
>> >> >>
>> >> >> PROS:
>> >> >> * Stability: no longer exposed to potential bugs coming from
>> >> >> side-effects of third-party decisions,
>> >> >> like distro maintainers package upgrade policy.
>> >> >>
>> >> >> * Reliability: code tested against well-known package versions; avoid
>> >> >> the problem of having
>> >> >> disparity of package versions in several distros & distro releases.
>> >> >>
>> >> >> * Flexibility: possibility of using packages that right now are not
>> >> >> available on all supported distros
>> >> >> (or required version not available).
>> >> >>
>> >> >> CONS:
>> >> >> * Package build size increase: we should measure the new size and
>> >> >> maybe considering an incremental approach:
>> >> >> as a first step, pinning only those packages that are "problematic"
>> >> >> (have high version disparity across distros/releases, those not
>> >> >> available on supported distros, etc).
>> >> >>
>> >> >> * Taking care of CVE-related security updates for pinned versions:
>> >> >> 1 possibility is tracking the security updates with tools like this:
>> >> >> https://docs.github.com/en/github/managing-security-vulnerabilities/configuring-dependabot-security-updates
>> >> >>
>> >> >>
>> >> >> Let me know any other considerations that we should take into account.
>> >> >>
>> >> >> Regards,
>> >> >> --
>> >> >>
>> >> >> Alfonso Martínez
>> >> >>
>> >> >> Senior Software Engineer, Ceph Storage
>> >> >>
>> >> >> Red Hat
>> >> >>
>> >> > _______________________________________________
>> >> > Dev mailing list -- dev@xxxxxxx
>> >> > To unsubscribe send an email to dev-leave@xxxxxxx
>> >>
>>
_______________________________________________
Dev mailing list -- dev@xxxxxxx
To unsubscribe send an email to dev-leave@xxxxxxx




[Index of Archives]     [CEPH Users]     [Ceph Devel]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux