-
Notifications
You must be signed in to change notification settings - Fork 521
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
New Package Handling Proposal #1777
Comments
Will it do a full update of the index? That would mean you would have to do as many HTTP requests as you have known packages. If you allow top-level apps to configure repos does that mean |
The way I had it in mind is that when we update the package index, we take the list of all current locally known applications (i.e. all the projects you have developed on your system based on the cache index we maintain) and go fetch new versions for them. Hopefully over a single keepalive HTTPS connection to avoid handshaking super often, ideally with pipelining enabled so that we are less likely to suffer jittery head-of-line blocking in aggregate This is under a cost model I assumed to be based on bytes transferred; if you have 100,000 packages but only have seen 150, it would probably be cheaper to get the 150 rather than pruning 99% of them on reception, and would likely keep a smaller working memory size for the build tool on smaller devices. It is what I thought was the main incentive behind the Hex API v2. If you pay hosting by the request though, I can see why that would be a concern since it flips the cost budget around. |
Assuming updating the index is fast, which it is in my experience, what's the benefit of I am not worried about costs, I am only looking from a user perspective. |
We had to disable pipelining on httpc because it breaks on fast networks, there is some race condition that I haven't found the cause of yet. On hex we configure httpc to use 8 keep-alive connections instead. |
The case where it might be useful that jumps to mind is one where your local copy has a reference to a package that was in its first hour of existence and has since changed checksums on a re-publish. Another case could be one where you have an order of hex indices like Aside from that, my expectation is that |
We should get these broken into individual cards so they can go on the project board. |
I've added the main ones in order, but skipped some of them for now. |
I'm not liking the idea of having to put all these providers under an unstable namespace. I think a better idea is to simply make |
That can work. Should we have a diverging branch for it? Or we're freezing mainline dev until then? If so we should cut a release earlier than later. |
I think we can make that call once I get to the first PR. |
I've crossed out the task in I've checked off the tasks completed by the branch |
I'll close this since the nice to have were mostly pointing to some ad-hoc vendoring/Monorepo mechanism that would better be tackled elsewhere. The rest was all completed. |
This is a large laundry list to discuss and track all the work to do with future package management.
Objectives
Invariants
Step 1
First develop copies of all providers under the 'unstable' or 'experimental' namespace so people can try them theremaybe some fancy macro stuff to avoid having to otherwise duplicate code for all dependencies since a non-namespaced dialyzer will need to depend on non-namespaced install_depsrebar3 update
only updates known packages in its local index, and ignores unseen onesStep 2
{Index, ActualKey}
which allows to do clean lookups on eachrebar3 update
to update all indexes known, and maybe to specify per-index updates{uuid, "1.7.3", {pkg, uuid_erl}}
is shorthand for{uuid, {"1.7.3", undefined}, {pkg, uuid_erl}}
which resolves after a search to{uuid, {"1.7.3", "c5df97"}, {pkg, uuid_erl}}
?)checksum
field maybe?{pkg, Name, Vsn, Hash}
as an internal format must stay the sameStep 3
Fold back experimental providers to replace regular ones, deprecate old stuffmaybe fold back into mainline after each phasedo we want to add the old providers as 'deprecated' namespace in case of an issue?Nice to have
rebar3 vendor
command that takes the current lockfile, fetches all the packages for them, and dumps a local copy of the index with only the required apps; this just lifts the local indexThe text was updated successfully, but these errors were encountered: