guix-devel
[Top][All Lists]
Advanced

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

Re: [PATCH 2/2] scripts: Add 'publish' command.


From: David Thompson
Subject: Re: [PATCH 2/2] scripts: Add 'publish' command.
Date: Sun, 29 Mar 2015 13:29:58 -0400
User-agent: Notmuch/0.18.2 (http://notmuchmail.org) Emacs/24.4.1 (x86_64-pc-linux-gnu)

Mark H Weaver <address@hidden> writes:

> address@hidden (Ludovic Courtès) writes:
>
>> David Thompson <address@hidden> skribis:
>>
>>> +(define (render-nar request store-item)
>>> +  "Render archive of the store path corresponding to STORE-ITEM."
>>> +  (let ((store-path (string-append %store-directory "/" store-item)))
>>> +    ;; The ISO-8859-1 charset *must* be used otherwise HTTP clients will
>>> +    ;; interpret the byte stream as UTF-8 and arbitrarily change invalid 
>>> byte
>>> +    ;; sequences.
>>> +    (if (file-exists? store-path)
>>> +        (values '((content-type . (application/x-nix-archive
>>> +                                   (charset . "ISO-8859-1"))))
>>> +                (lambda (port)
>>> +                  (write-file store-path port)))
>>> +        (not-found request))))
>>
>> This is OK for now, but I just realized that this will be blocking the
>> server for the duration of the whole transfer.  Someone could DoS you by
>> substituting TeX Live.  ;-)
>>
>> We’ll need a solution but it seems that it’ll be hard to avoid threads.
>>
>> Thoughts?
>
> I haven't looked closely, but how about using subprocesses instead of
> threads?

That's along the lines of what I was thinking.  One could spawn a bunch
of 'guix publish' processes on different ports and put a load balancer
in front of them.

I think that this problem, if it is to be solved with more Scheme code,
is an issue to address in Guile core by changing the http server
implementation.

-- 
David Thompson
Web Developer - Free Software Foundation - http://fsf.org
GPG Key: 0FF1D807
Support the FSF: https://fsf.org/donate



reply via email to

[Prev in Thread] Current Thread [Next in Thread]