From: Mark H Weaver <mhw@netris.org>
To: Tobias Geerinckx-Rice <me@tobias.gr>
Cc: 26201@debbugs.gnu.org, guix-sysadmin@gnu.org
Subject: bug#26201: hydra.gnu.org uses ‘guix publish’ for nars and narinfos
Date: Fri, 24 Mar 2017 04:12:50 -0400 [thread overview]
Message-ID: <87y3vvozy5.fsf@netris.org> (raw)
In-Reply-To: <25b2472a-c705-53fe-f94f-04de9a2d484e@tobias.gr> (Tobias Geerinckx-Rice's message of "Thu, 23 Mar 2017 19:52:30 +0100")
Hi,
Tobias Geerinckx-Rice <me@tobias.gr> writes:
> On 23/03/17 19:36, Mark H Weaver wrote:
>> One question: what will happen in the case of multiple concurrent
>> requests for the same nar? Will multiple nar-pack-and-bzip2 processes
>> be run on-demand?
>
> I think this used to be the case with the previous nginx configuration,
> but the recent changes pushed by Ludo' were aimed in part at preventing
> that.
>
>> Recall that the nginx proxy will pass all of those requests through,
>
> Are you sure? I was under the impression¹ that this is exactly what
> ‘proxy_cache_lock on;’ prevents. I'm no nginx guru, obviously, so please
> — anyone! — correct me if I'm misguided.
I agree that "proxy_cache_lock on" should prevent multiple concurrent
requests for the same URL, but unfortunately its behavior is quite
undesirable, and arguably worse than leaving it off in our case. See:
https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_lock
Specifically:
Other requests of the same cache element will either wait for a
response to appear in the cache or the cache lock for this element to
be released, up to the time set by the proxy_cache_lock_timeout
directive.
In our problem case, it takes more than an hour for Hydra to finish
sending a response for the 'texlive-texmf' nar. During that time, the
nar will be slowly sent to the first client while it's being packed and
bzipped on-demand.
IIUC, with "proxy_cache_lock on", we have two choices of how other
client requests will be treated:
(1) If we increase "proxy_cache_lock_timeout" to a huge value, then
there will *no* data sent to the other clients until the first
client has received the entire nar, which means they wait over an
hour before receiving the first byte. I guess this will result in
timeouts on the client side.
(2) If "proxy_cache_lock_timeout" is *not* huge, then all other clients
will get failure responses until the first client has received the
entire nar.
Either way, this would cause users to see the same download failures
(requiring user work-arounds like --fallback) that this fix is intended
to prevent for 'texlive-texmf', but instead of happening only for that
one nar, it will now happen for *all* large nars.
Or at least that's what I'd expect based on my reading of the nginx docs
linked above. I haven't tried it.
IMO, the best solution is to *never* generate nars on Hydra in response
to client requests, but rather to have the build slaves pack and
compress the nars, copy them to Hydra, and then serve them as static
files using nginx.
A far inferior solution, but possibly acceptable and closer to the
current approach, would be to arrange for all concurrent responses for
the same nar to be sent incrementally from a single nar-packing process.
More concretely, while packing and sending a nar response to the first
client, the data would also be written to a file. Subsequent requests
for the same nar would be serviced using the equivalent of:
tail --bytes=+0 --follow FILENAME
This way, no one would have to wait an hour to receive the first byte.
What do you think?
Mark
next prev parent reply other threads:[~2017-03-24 8:14 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-21 1:44 bug#26201: No notification of cache misses when downloading substitutes dian_cecht
2017-03-21 2:46 ` Tobias Geerinckx-Rice
2017-03-21 2:52 ` dian_cecht
2017-03-21 3:57 ` Tobias Geerinckx-Rice
2017-03-21 4:48 ` dian_cecht
2017-03-21 6:21 ` Tobias Geerinckx-Rice
2017-03-21 6:49 ` dian_cecht
2017-03-21 14:55 ` Tobias Geerinckx-Rice
2017-03-21 15:32 ` dian_cecht
2017-03-21 16:07 ` Tobias Geerinckx-Rice
2017-03-24 2:15 ` Maxim Cournoyer
2017-03-21 12:59 ` Florian Pelz
2017-03-21 15:35 ` dian_cecht
2017-03-21 16:43 ` Ludovic Courtès
2017-03-21 17:08 ` Tobias Geerinckx-Rice
2017-03-22 22:06 ` Ludovic Courtès
2017-03-23 19:25 ` bug#26201: hydra.gnu.org uses ‘guix publish’ for nars and narinfos Tobias Geerinckx-Rice
2017-03-22 22:22 ` Ludovic Courtès
2017-03-23 10:29 ` Ricardo Wurmus
2017-03-23 18:36 ` Mark H Weaver
2017-03-23 18:52 ` Tobias Geerinckx-Rice
2017-03-24 8:12 ` Mark H Weaver [this message]
2017-03-24 9:25 ` Ludovic Courtès
2017-04-17 21:36 ` Ludovic Courtès
2017-04-18 21:27 ` Ludovic Courtès
2017-04-19 14:24 ` bug#26201: Heads-up: hydra.gnu.org uses ‘guix publish --cache’ Ludovic Courtès
2017-03-26 17:35 ` bug#26201: hydra.gnu.org uses ‘guix publish’ for nars and narinfos Tobias Geerinckx-Rice
2017-03-27 18:47 ` Tobias Geerinckx-Rice
2017-03-28 14:47 ` Ludovic Courtès
2017-05-03 8:11 ` Mark H Weaver
2017-05-03 9:25 ` Ludovic Courtès
2017-03-27 11:20 ` bug#26201: Bandwidth when retrieving substitutes Ludovic Courtès
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87y3vvozy5.fsf@netris.org \
--to=mhw@netris.org \
--cc=26201@debbugs.gnu.org \
--cc=guix-sysadmin@gnu.org \
--cc=me@tobias.gr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).