If a user upgrades a dependency, he only need to update the
3rdparty/libray_name directory with his updates, no need to re-run the
bootstrap script.

After the user upgrade a dependency, he need to re-run `make` command, and
make command can catch up this new change.


On Tue, Mar 8, 2016 at 1:58 PM, Alex Clemmer <clemmer.alexan...@gmail.com>
wrote:

> It's not clear to me what happens when a user upgrades a dependency.
> It seems like they'd need to re-run the `bootstrap` script, is that
> correct?
>
> On Mon, Mar 7, 2016 at 5:23 PM, zhiwei <zhiw...@gmail.com> wrote:
> > I don't think store tarballs in Mesos git repository is a good idea, even
> > in another 3rdparty repo.
> >
> > *So my opinion is:*
> >
> > Add a 3rdparty configure file(/support/3rdparty.config), the file format
> > can be:
> >
> > library_name git_repo_url git_tag/branch/commit_id .patch_file
> >
> > zookeeper https://github.com/apache/zookeeper.git release-3.4.8
> > zookeeper.patch
> > leveldb https://github.com/google/leveldb.git v1.4 leveldb.patch
> > ... ... ... ...
> >
> > In bootstrap file:
> >
> > 1. Traverse the support/3rdparty.config
> >
> > 2. If there is already a 3rdparty/library_name directory, skip and
> continue
> > another item.
> >
> > 3. Clone the library code, switch to the defined tag/branch/commit_id,
> > apply the .patch file.
> >
> > 4. Do the rest steps.
> >
> > So if users want to use their own 3rdparty libraries, he can checkout
> code
> > to the /3rdparty/library_name and the bootstrap script will skip this
> > library.
> >
> > And in Mesos repository, we only need to maintain the
> > support/3rdparty.config file and the .patch files.
> >
> >
> > On Tue, Mar 8, 2016 at 2:05 AM, Alex Clemmer <
> clemmer.alexan...@gmail.com>
> > wrote:
> >
> >> So, at this point we have a bunch of different reviews open for
> >> this[1], and I'd like to use this as an opportunity to start nudging
> >> people towards thinking about possibly transitioning to a scheme where
> >> the tarballs that are currently held in the `3rdparty/` directory are
> >> moved to some external place, and retrieved for users out-of-band, as
> >> necessary to build Mesos.
> >>
> >> In particular, doing this (as you all likely know) is very expensive
> >> because git stores a complete copy of the entire tarball, for each
> >> different revision in history, so if you have updated a tarball twice,
> >> you have two complete copies rolling around in the `.git/` folder. It
> >> seems like there are not many benefits for keeping this scheme, other
> >> than the fact that it's pretty easy to implement.
> >>
> >> I'm not sure what it would take to transition the autotools build
> >> system, but just recapping earlier what I said about the CMake build
> >> system: The easiest thing to do (which we've already mostly done) is
> >> to allow people to rope in tarballs from some mirror of the `3rdparty`
> >> github repository[2]. Right now we have facilities that let you host
> >> it either on your local FS or on a remote URL, and we'll download (if
> >> necessary) and untar into the familliar place in the `build/` folder.
> >> Easy! We could even have `bootstrap` clone the repository and make
> >> CMake automatically pull in that repository if it's out of date.
> >>
> >> Thoughts? I recognize that this might be overcomplicating the problem
> >> a bit, but I figured I'd throw the hat in the ring because this has
> >> always kind of bothered me. :)
> >>
> >>
> >> [1] They are:
> >> https://reviews.apache.org/r/44252/
> >> https://reviews.apache.org/r/44382/
> >> https://reviews.apache.org/r/44372/
> >> https://reviews.apache.org/r/44378/
> >> https://reviews.apache.org/r/44376/
> >> https://reviews.apache.org/r/44257/
> >>
> >> [2] https://github.com/3rdparty/mesos-3rdparty
> >>
> >> On Tue, Mar 1, 2016 at 10:48 AM, Alex Clemmer
> >> <clemmer.alexan...@gmail.com> wrote:
> >> > It doesn't seem to be the case that these things are mutually
> >> > exclusive -- it is well within our purview to accept only a specific
> >> > range of versions for any particular dependency, and error out if
> >> > someone tries to select a version outside that range. The only thing
> >> > these commits add is more fine-grained control over which of the
> >> > supported versions you are allowed to select.
> >> >
> >> > At this point, there are no such guards, but that is certainly
> >> > something that can be added.
> >> >
> >> > On Tue, Mar 1, 2016 at 10:17 AM, Neil Conway <neil.con...@gmail.com>
> >> wrote:
> >> >> The prospect of downloading dependencies from "rando" locations is
> >> >> concerning to me :)
> >> >>
> >> >> Mesos can easily come to depend on implementation details of a
> >> >> dependency that might change in a minor release. For example, a
> recent
> >> >> change [1] depends on the connection retry logic in the Zk client
> >> >> library in a fairly delicate way. I also wouldn't want users to
> >> >> randomly upgrade to, say, protobuf 2.6.1 without it being thoroughly
> >> >> tested. Increasing the support matrix of different users on different
> >> >> platforms running arbitrarily different versions of third-party
> >> >> dependencies doesn't seem like a net improvement to me.
> >> >>
> >> >> My two cents: if Windows requires additional dependencies that we
> >> >> aren't currently vendoring, I would personally opt for (a) vendoring
> >> >> those additional dependencies (b) ensuring that the vendored versions
> >> >> we ship are modern enough to support all the platforms we care about.
> >> >> Are there important use-cases that aren't supported by this scheme?
> >> >>
> >> >> Neil
> >> >>
> >> >> [1]
> >>
> https://github.com/apache/mesos/commit/c2d496ed430eaf7daee3e57edefa39c25af2aa43
> >> >>
> >> >> On Tue, Mar 1, 2016 at 10:00 AM, Alex Clemmer
> >> >> <clemmer.alexan...@gmail.com> wrote:
> >> >>> I guess a tl;dr might be in order.
> >> >>>
> >> >>> Basically: the CMake build system already supports roping in
> tarballs
> >> >>> from rando places on the filesystem or Internet, so I think it makes
> >> >>> sense to rope them in at configure time, and so I'm proposing we
> >> >>> re-appropriate the sophisticated tools we already have to do this
> for
> >> >>> WIndows, into a more general solution that is useful to other exotic
> >> >>> platforms, rather than just Windows.
> >> >>>
> >> >>> As always, super interested to hear feedback, I'd love to know if I
> >> >>> missed something.
> >> >>>
> >> >>> On Tue, Mar 1, 2016 at 9:58 AM, Alex Clemmer
> >> >>> <clemmer.alexan...@gmail.com> wrote:
> >> >>>> This is a great time to discuss the Mesos dependency channel story
> in
> >> >>>> general, because it has had to evolve a bit to fit the
> requirements of
> >> >>>> Windows, and some of the issues you describe are issues we had to
> >> >>>> resolve (at least partially) to support the Windows integration
> work.
> >> >>>>
> >> >>>> More particularly, our problems are: first, Windows frequently
> >> >>>> requires newer versions of dependencies (due to poor support of
> MSVC
> >> >>>> 1900), so we have had to develop reasonably robust
> version-selection
> >> >>>> mechanisms, so that Windows can get specific versions of different
> >> >>>> packages. This means that the Mesos project does not have to evolve
> >> >>>> the dependency support story in lock step, which in the long term
> may
> >> >>>> actually be required, as some platforms (e.g., those run by
> >> >>>> governmental organizations) are more conservative about what
> >> >>>> dependencies are introduced on their clusters.
> >> >>>>
> >> >>>> Second, because Windows does not have a package manager, it became
> >> >>>> necessary for the CMake build system to support actually hitting
> some
> >> >>>> remote (possiblty the internet) to rope in the tarballs of
> arbitrary
> >> >>>> (and arbitrarily-versioned) dependencies that we normally expect to
> >> >>>> already be installed (such as APR or cURL).
> >> >>>>
> >> >>>> This last point is actually more convenient than it seems. Our
> CMake
> >> >>>> implementation recently[1][2] introduced a flag that lets you
> specify
> >> >>>> something like `cmake .. -D3RDPARTY_DEPENDENCIES=/some/path/or/url`
> >> >>>> and it will proactively look for tarballs in the location you give
> it
> >> >>>> -- and that location can be either a path on your filesystem, or a
> >> >>>> URI, like the 3rdparty remote in github[3] that is owned by the
> GitHub
> >> >>>> community. From the "exotic platform" perspective this is great
> >> >>>> because it makes it trivial for people building (say) Windows to
> >> >>>> upgrade to a version not supported by CMake:
> >> >>>>
> >> >>>> * Put a tarball of a new version somewhere on the filesystem. Say,
> we
> >> >>>> decide to use glog 0.3.4 instead of 0.3.3, so we just put that
> tarball
> >> >>>> for 0.3.4 in a well-known place in the filesystem.
> >> >>>> * Update the version of glog in Versions.cmake.
> >> >>>> * When you run cmake, just run `cmake ..
> >> >>>> -D3RDPARTY_DEPENDENCIES=/my/fancy/3rdparty/path`
> >> >>>> * Builds against new dep! Magic!
> >> >>>>
> >> >>>> Much of this was developed out of expediency, but going forward I
> >> >>>> think a reasonable approach to dealing with the third-party channel
> >> >>>> might be (and I would LOVE feedback on this):
> >> >>>>
> >> >>>> WORKFLOW THAT ASSUMES INTERNET ACCESS ON BUILD MACHINE:
> >> >>>> * Clone a copy of mesos.
> >> >>>> * (When we do a normal clone of Mesos, there are no tarballs in the
> >> >>>> `3rdparty/` directory.)
> >> >>>> * Run `bootstrap`.
> >> >>>> * `mkdir build && cd build && cmake ..`. Part of the CMake
> >> >>>> configuration step will be to `git clone` a copy of
> >> >>>> `https://github.com/3rdparty/mesos-3rdparty`. (If you don't know,
> the
> >> >>>> 3rdparty account is owned by the Mesos community, and the
> >> >>>> `mesos-3rdparty` is where we store canonical copies of all our
> >> >>>> third-party tarballs.)
> >> >>>> * This dumps all the tarballs into a folder, `mesos-3rdparty`.
> >> >>>> * We build against the tarballs we retrieved. Optionally you are
> >> >>>> allowed to set the versions in `Versions.cmake` and mesos will
> "just
> >> >>>> build" against those versions (as long as they are supported, and
> we
> >> >>>> will complain if they're not).
> >> >>>> * If you `git pull` and find that Mesos has upgraded its
> dependencies,
> >> >>>> and a version is out of date, then when you next build, CMake will
> >> >>>> explode automatically (even if you've built before) and ask you to
> >> >>>> `git pull` to update your `mesos-3rdparty` repository.
> >> >>>>
> >> >>>>
> >> >>>> WORKFLOW THAT DOES NOT ASSUME INTERNET ACCESS ON BUILD MACHINE:
> >> >>>> Much like the above, except when you run cmake, you do `cmake ..
> >> >>>> -D3RDPARTY_DEPENDENCIES="path/to/mesos-3rdparty/mirror"`. This will
> >> >>>> tell CMake to not clone the mirror itself, but to look for an
> existing
> >> >>>> mirror at the location specified.
> >> >>>>
> >> >>>>
> >> >>>> WHAT WE'VE IMPLEMENTED:
> >> >>>> We obviously haven't deleted the tarballs in 3rdparty, and the
> error
> >> >>>> reporting around `Versions.cmake` and asking people to re-pull
> when a
> >> >>>> version has been upgraded are not there, but a lot of the rest of
> this
> >> >>>> is already in place. For example, yesterday we checked in an
> >> >>>> implementation of the `-D3RDPARTY_DEPENDENCIES` flag[1][2], which
> >> >>>> allows you to tell CMake to build against third-party dependencies
> >> >>>> mirrored either at a local path (e.g.,
> >> >>>> `-D3RDPARTY_DEPENDENCIES="/your/path/here"`) or at a remote URI
> (e.g.,
> >> >>>> `-D3RDPARTY_DEPENDENCIES=
> https://github.com/3rdparty/mesos-3rdparty`
> >> ).
> >> >>>>
> >> >>>>
> >> >>>> [1]
> >>
> https://github.com/apache/mesos/commit/6306b7d62dd5cbb34fa82636dfbb46cee46d0bf8
> >> >>>> [2]
> >>
> https://github.com/apache/mesos/commit/3f7501b818662097f41b2d756b2389f6ed9fa5eb
> >> >>>> [3] https://github.com/3rdparty/mesos-3rdparty
> >> >>>>
> >> >>>> On Tue, Mar 1, 2016 at 7:56 AM, Kapil Arya <ka...@mesosphere.io>
> >> wrote:
> >> >>>>>>
> >> >>>>>> *3. 3rdparty/libprocess/3rdparty/stout/tests/
> protobuf_tests.pb.cc/h
> >> >>>>>> <http://protobuf_tests.pb.cc/h> files.*
> >> >>>>>>
> >> >>>>>>     Can anyone tell me why hardcode these two files in Mesos
> repo?
> >> I think
> >> >>>>>> these two files can be dynamically generated during make check,
> >> this will
> >> >>>>>> make it not depend on protoc version.
> >> >>>>>>
> >> >>>>>
> >> >>>>> I think it's just due to the nature of the way dependencies are
> >> structured
> >> >>>>> in 3rdparty. Alex Rukletsov and I thought about fixing it but at
> >> that time,
> >> >>>>> there was some complication due to protoc related dependency paths
> >> not
> >> >>>>> being resolved properly or something like that (I don't remember
> >> exactly).
> >> >>>>> I think there is a way to do it in the current structure, but I
> >> strongly
> >> >>>>> suspect that this will get much better if/when we go ahead with
> >> 3rdparty
> >> >>>>> flattening.
> >> >>>>>
> >> >>>>> It will be great if you have any other comments, thanks.
> >> >>>>>>
> >> >>>>
> >> >>>>
> >> >>>>
> >> >>>> --
> >> >>>> Alex
> >> >>>>
> >> >>>> Theory is the first term in the Taylor series of practice. --
> Thomas M
> >> >>>> Cover (1992)
> >> >>>
> >> >>>
> >> >>>
> >> >>> --
> >> >>> Alex
> >> >>>
> >> >>> Theory is the first term in the Taylor series of practice. --
> Thomas M
> >> >>> Cover (1992)
> >> >
> >> >
> >> >
> >> > --
> >> > Alex
> >> >
> >> > Theory is the first term in the Taylor series of practice. -- Thomas M
> >> > Cover (1992)
> >>
> >>
> >>
> >> --
> >> Alex
> >>
> >> Theory is the first term in the Taylor series of practice. -- Thomas M
> >> Cover (1992)
> >>
>
>
>
> --
> Alex
>
> Theory is the first term in the Taylor series of practice. -- Thomas M
> Cover (1992)
>

Reply via email to