Conversation
|
Hi @jwendell. Thanks for your PR. I'm waiting for a istio member to verify that this patch is reasonable to test. If it is, they should reply with I understand the commands that are listed here. DetailsInstructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here. |
|
we should not do this and we need to make sure the pr itself doesn’t bloat up the repo size |
ldemailly
left a comment
There was a problem hiding this comment.
as discussed on the mailing list
also making a gigantic test pr is not helpful
|
Here's the mailing list thread for those that're interested. Creating the PR doesn't hurt anything and helps drive the discussion forward, since it'd stalled in the mailing list. |
|
I think this is an important decision - we'll never reach 100% consensus,
but would be good to discuss
it more formally in the appropriate WG. I'm personally +1 on some form of
vendor checkin - and
I think air-gaped builds are a valid and critical requirement, and vendor
provide other benefits.
Given the strong opinions - I think it's worth trying first with a vendor
git sub-module. We can create
another istio/vendor git tree for that. For me the test is if 'go get' will
download the sub-module
correctly and finally work for istio. While git sub-modules have their own
problems we may get
the same benefits.
It is important to be consistent with other projects - like kubernetes,
etcd, etc - using vendor,
so I don't think the argument that istio devs will suffer terribly if we
check it in is valid. "dep" is great
and we'll continue to use it to keep vendor in sync with semver, but it
can't provide the isolation.
I agree with the concern that vendor update PRs will be large - but it is
also a chance to at
least superficially see/review what changed in projects we depend on when
we do the periodic update.
Costin
…On Thu, Jan 18, 2018 at 4:48 PM, Zack Butcher ***@***.***> wrote:
Here's the mailing list thread for those that're interested.
<https://groups.google.com/d/msg/istio-dev/vpz5w1C-C_0/rb5B9IvHAAAJ>
Creating the PR doesn't hurt anything and helps drive the discussion
forward, since it'd stalled in the mailing list.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
<#2691 (comment)>, or mute
the thread
<https://github.com/notifications/unsubscribe-auth/AAFI6kHezpNwfgIIXjMWdPuvXGQb4Ik4ks5tL-ZlgaJpZM4RjxU->
.
|
|
Gave the single submodule for the whole vendor dir a quick try this morning - Side note: when all of these dependencies were originally vendored with dep it seems like we failed to run |
|
I'm experimenting with submoduling vendor. Here's an issue: When you run I'm afraid that, in order to workaround situations like this, we'll have to create an unnecessary complex Makefile/scripts solutions. Also, we should make sure that releases would include vendor dir by default in tarballs. Do you know of a golang project that has vendor as a submodule? I guess that if it's so good as it sounds, projects like kubernetes would use it, no? |
|
@jwendell would you also mind running the |
9b382f6 to
9f165a7
Compare
|
@zachgersh thanks for the Before prune: After prune: I've made this change and force-pushed to this PR. It's worth to note, in this PR, only the first commit (Add vendor to SCM) is the giant one, others are easy to review :-). |
|
We should ask Kubernetes folks what their plans are. Some choices that the
team made were way before tools like dep, faster "go", and some github
features existed, so it's not necessarily true that they would make the
same choices now.
…On Fri, Jan 19, 2018 at 9:38 AM Jonh Wendell ***@***.***> wrote:
@zachgersh <https://github.com/zachgersh> thanks for the dep prune hint.
It indeed saved a lot of bytes!
Before prune:
19515 files changed, 7844506 insertions(+), 1 deletion(-)
$ du -csh vendor/
363M vendor/
After prune:
5291 files changed, 1627481 insertions(+), 2 deletions(-)
$ du -csh vendor/
65M vendor/
I've made this change and force-pushed to this PR.
It's worth to note, in this PR, only the first commit (Add vendor to SCM)
is the giant one, others are easy to review :-).
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
<#2691 (comment)>, or mute
the thread
<https://github.com/notifications/unsubscribe-auth/AJGIxg5pwxCj59r9AG3S5xoULQPp48MHks5tMNMugaJpZM4RjxU->
.
|
We need a target / automation to update the vendor either way (basically dep ensure + commit script). I don't see how it'd be more complicated to do so in a submodule than the base. With the benefit of not trashing the main repo with hundreds of file changes each time we rev up a dependency |
|
I don't think this thread will reach agreement - please write a small
proposal and add it to the agenda for next release
WG meeting, with the 3 options.
I'm +1 on checking in vendor as in your PR, but I think the submodule
option (while it creates complexity and is
not used by any project I know) is more likely to sail trough.
Either way - releasing a .tar.gz with all source and vendor as part of the
release is a MUST.
To be clear: this is not an issue of space or downloads. No matter what,
the developer will download all the
vendor - either just the vendor files from one repo ( your PR), from 2
repos ( submodule ), or 100 repos ( dep ensure).
In the 100 repo we'll actually download much more - the entire git history
of all deps is downloaded, and then
a copy is made to vendor. The first 2 options will use far less space.
The download time is also much faster from 1 or 2 repos.
It's also not a burden on github - they likely dedup on SHA, so they'll not
waste a lot of disk.
I think the main valid concern raised is that 'vendor' update PRs will be
large, hard to review/submit - and create
aesthetic discomfort to some developers.
Costin
…On Fri, Jan 19, 2018 at 10:53 AM, Laurent Demailly ***@***.*** > wrote:
Here's an issue: When you run dep it will delete and recreate the vendor
dir, thus erasing the submodule status, making vendor dir an ordinary dir.
I'm afraid that, in order to workaround situations like this, we'll have
to create an unnecessary complex Makefile/scripts solutions.
We need a target / automation to update the vendor either way (basically
dep ensure + commit script). I don't see how it'd be more complicated to do
so in a submodule than the base. With the benefit of not trashing the main
repo with hundreds of file changes each time we rev up a dependency
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<#2691 (comment)>, or mute
the thread
<https://github.com/notifications/unsubscribe-auth/AAFI6ihWKSwQq_v4HLFleYSvX6t1boKFks5tMOS_gaJpZM4RjxU->
.
|
|
@jwendell PR needs rebase |
|
BTW - if possible, please do a 'time git clone ...istio -b your_pr' on a
clean directory, as well as
a 'time git clone istio' and 'time dep ensure --vendor-only'. And a 'du
-sh' on the istio directory in both
cases, as well as a du -sh in the pkg directory (for the space taken by dep
cloning all dependency git)
Good to have data.
Costin
…On Fri, Jan 19, 2018 at 2:28 PM, Costin Manolache ***@***.***> wrote:
I don't think this thread will reach agreement - please write a small
proposal and add it to the agenda for next release
WG meeting, with the 3 options.
I'm +1 on checking in vendor as in your PR, but I think the submodule
option (while it creates complexity and is
not used by any project I know) is more likely to sail trough.
Either way - releasing a .tar.gz with all source and vendor as part of the
release is a MUST.
To be clear: this is not an issue of space or downloads. No matter what,
the developer will download all the
vendor - either just the vendor files from one repo ( your PR), from 2
repos ( submodule ), or 100 repos ( dep ensure).
In the 100 repo we'll actually download much more - the entire git history
of all deps is downloaded, and then
a copy is made to vendor. The first 2 options will use far less space.
The download time is also much faster from 1 or 2 repos.
It's also not a burden on github - they likely dedup on SHA, so they'll
not waste a lot of disk.
I think the main valid concern raised is that 'vendor' update PRs will be
large, hard to review/submit - and create
aesthetic discomfort to some developers.
Costin
On Fri, Jan 19, 2018 at 10:53 AM, Laurent Demailly <
***@***.***> wrote:
> Here's an issue: When you run dep it will delete and recreate the vendor
> dir, thus erasing the submodule status, making vendor dir an ordinary dir.
>
> I'm afraid that, in order to workaround situations like this, we'll have
> to create an unnecessary complex Makefile/scripts solutions.
>
> We need a target / automation to update the vendor either way (basically
> dep ensure + commit script). I don't see how it'd be more complicated to do
> so in a submodule than the base. With the benefit of not trashing the main
> repo with hundreds of file changes each time we rev up a dependency
>
> —
> You are receiving this because you commented.
> Reply to this email directly, view it on GitHub
> <#2691 (comment)>, or mute
> the thread
> <https://github.com/notifications/unsubscribe-auth/AAFI6ihWKSwQq_v4HLFleYSvX6t1boKFks5tMOS_gaJpZM4RjxU->
> .
>
|
|
cc @geeknoid |
|
If offline and reproducible are the main motivations then there will need to be a story on a build that doesn't make queries to git (mostly via bin/get_workspace_status). Ideally the behaviors of an on-line and off-line build have minimal differences--few people will test offline builds, and even fewer will check that the result of the build is the same. I suppose it's possible to have make run get_workspace_status and store the results in a file somewhere that's consumed by the other components but I don't have any decent ideas on how/when to trigger a refresh of the file. This vendor/ directory might only address the go part of the build, as the docker part seems to pull from remote locations (via actual pull, or "apt get"), though I'm not sure if it's up to istio or proxies to make this work offline. I'm not strictly for or against at this point--I haven't done any analysis yet since presently I'm still focused on getting things migrated over to make (& addressing regressions, not all of which are attributable to make) while trying to keep a partial eye out for other changes that break things or complicate things (reproducibility or otherwise). |
9f165a7 to
87a44c4
Compare
|
@jwendell PR needs rebase |
87a44c4 to
3b022e7
Compare
|
air-gapped builds are a must as @costinm points out. However, as @ldemailly points out, I'm not a fan of checking in thousands of files that may change in the main repo creating a monstrous repository over the long term in terms of size and review requirements. Someone in this thread suggested checking with the Kubernetes team if they would make the same choice again or if they would suggest a different approach. This seems like a pretty valid idea to me. Would someone mind following up on that request? Cheers |
14ee2b8 to
9472914
Compare
|
here is the alternative: #3348 - 8mbytes sub module - PTAL |
|
@jwendell PR needs rebase |
9472914 to
be5a87f
Compare
|
It appears this comes down to a question of trade-offs, i.e. is it worth checking in the vendor directory to istio/istio and keeping things simple or modifying the build process to support sub-modules and coordinating releases across multiple repos. We were supposed to discuss this in yesterday's call but did not manage to do so as it was pushed down the agenda, it would be good to make this a high priority issue on next week's agenda if we cannot get a consensus through these discussions. |
be5a87f to
0b9a7ad
Compare
|
Noted and agreed. We should get a closure since it has been dragging for
weeks. I will put this as the first agenda next week
…On Feb 9, 2018 7:51 AM, "Kevin Conner" ***@***.***> wrote:
It appears this comes down to a question of trade-offs, i.e. is it worth
checking in the vendor directory to istio/istio and keeping things simple
or modifying the build process to support sub-modules and coordinating
releases across multiple repos.
We were supposed to discuss this in yesterday's call but did not manage to
do so as it was pushed down the agenda, it would be good to make this a
high priority issue on next week's agenda if we cannot get a consensus
through these discussions.
—
You are receiving this because your review was requested.
Reply to this email directly, view it on GitHub
<#2691 (comment)>, or mute
the thread
<https://github.com/notifications/unsubscribe-auth/AeRtkNcGU5xK2LJx0cuKIr_AjHrGEMcFks5tTGlugaJpZM4RjxU->
.
|
|
there is no “modifying the build process” difference between submodule or direct checkin - either way a small change is needed |
|
@ldemailly Unfortunately I believe you are missing some important aspects but I will try to elaborate on the problems with submodules on the other PR. I also don't believe they both require changes, with the submodule approach you will have to modify the scripts to use git rather than dep however when committing to the same repo they should work without any necessary changes. Of course submodules also changes the developer flow which could lead to more serious issues but please take a look at the other PR and comment there. |
|
the current istio build has a bunch of dep run logic which will need to be removed/moved to a separate target either way (when a dependency update is needed instead of mandatory to build) - more detailed reply in #3348 (comment) |
|
@jwendell PR needs rebase |
0b9a7ad to
c3dc50b
Compare
c3dc50b to
c9aa861
Compare
|
@jwendell: The following tests failed, say
DetailsInstructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here. |
|
@jwendell PR needs rebase |
|
Thanks for having brought up the issue ! Fixed through #3348 #3678 #3697 |
Inspired by https://groups.google.com/forum/#!topic/istio-dev/vpz5w1C-C_0
This is an initial approach to have the vendor dir checked in. It brings the benefit of a totally reproducible and offline build. The normal workflow for building Istio with this feature in would be just 1) Download it (tarball tgz for example) and 2) run
make. It should work out of the box in an offline system.It's worth noting that other [big] projects like kubernetes do this way. I believe it brings more pros than cons (like a bigger repo).
Thoughts?