From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Thompson Subject: Re: [PATCH 2/2] scripts: Add 'publish' command. Date: Sun, 29 Mar 2015 13:29:58 -0400 Message-ID: <87lhifhfu1.fsf@fsf.org> References: <87egon1xkg.fsf@fsf.org> <878uev1xcz.fsf@fsf.org> <87k2yeha77.fsf@gnu.org> <87wq22gyxb.fsf@fsf.org> <87pp7u6p31.fsf@gnu.org> <87h9t3buuj.fsf@netris.org> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:50698) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YcH29-0005aN-O8 for guix-devel@gnu.org; Sun, 29 Mar 2015 13:30:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YcH28-0005NN-ND for guix-devel@gnu.org; Sun, 29 Mar 2015 13:30:01 -0400 In-Reply-To: <87h9t3buuj.fsf@netris.org> List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org To: Mark H Weaver , Ludovic =?utf-8?Q?Court=C3=A8s?= Cc: guix-devel@gnu.org Mark H Weaver writes: > ludo@gnu.org (Ludovic Court=C3=A8s) writes: > >> David Thompson 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 wi= ll >>> + ;; interpret the byte stream as UTF-8 and arbitrarily change inval= id 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=E2=80=99ll need a solution but it seems that it=E2=80=99ll 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. --=20 David Thompson Web Developer - Free Software Foundation - http://fsf.org GPG Key: 0FF1D807 Support the FSF: https://fsf.org/donate