unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Andy Patterson <ajpatter@uwaterloo.ca>
To: guix-devel@gnu.org
Subject: [PATCH] scripts: substitute: Avoid infinite looping when updating the substitute list
Date: Sun, 5 Jul 2015 20:21:06 -0400	[thread overview]
Message-ID: <5599C9F2.4080207@uwaterloo.ca> (raw)

[-- Attachment #1: Type: text/plain, Size: 1016 bytes --]

Hi,

I was having trouble using substitutes, so I decided to investigate it.
I found out that when retrieving the batch of .narinfo files from the
server, my connection was always being closed after the first response.
Therefore, I would always be reconnecting to the server with every
request in the batch still to process, and this reconnecting would be
repeated infinitely, or at least until my Internet went down. Based on
the documentation for the "connection: close" header, I think that this
first response should be complete, so we can use it. Maybe I'm wrong;
I'm not totally familiar with how http works.

I also considered ensuring that a good response code was received, but
the handler deals with error response codes as well, so it seemed
superfluous.

This patch will make use of the last response from the server, before
reconnecting to try the next one. With it I was able to successfully
build and run links.

Let me know if my understanding is off, or if there's a better approach.

Thanks,

Andy

[-- Attachment #2: 0001-scripts-substitute-Avoid-infinite-looping-when-updat.patch --]
[-- Type: text/x-patch, Size: 1304 bytes --]

From 633c491e2dad4c3a70eb045177c17bd2552d63f3 Mon Sep 17 00:00:00 2001
From: Andy Patterson <ajpatter@uwaterloo.ca>
Date: Sun, 5 Jul 2015 19:34:05 -0400
Subject: [PATCH] scripts: substitute: Avoid infinite looping when updating the
 substitute list

* guix/scripts/substitute.scm (http-multiple-get): Make use of the current
  response before reconnecting.
---
 guix/scripts/substitute.scm | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/guix/scripts/substitute.scm b/guix/scripts/substitute.scm
index 8b4fa36..e767d0f 100755
--- a/guix/scripts/substitute.scm
+++ b/guix/scripts/substitute.scm
@@ -468,8 +468,9 @@ to read the response body.  Return the list of results."
              ;; case we have to try again.  Check whether that is the case.
              (match (assq 'connection (response-headers resp))
                (('connection 'close)
-                (close-port p)
-                (connect requests result))        ;try again
+                (let ((first-result (proc head resp body)))
+                  (close-port p)
+                  (connect tail (cons first-result result))))     ;try again
                (_
                 (loop tail                        ;keep going
                       (cons (proc head resp body) result)))))))))))
-- 
2.4.5


             reply	other threads:[~2015-07-06  0:53 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-06  0:21 Andy Patterson [this message]
2015-07-06 23:08 ` [PATCH] scripts: substitute: Avoid infinite looping when updating the substitute list Ludovic Courtès
2015-07-07  0:08   ` Andy Patterson
2015-07-07 14:52     ` 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=5599C9F2.4080207@uwaterloo.ca \
    --to=ajpatter@uwaterloo.ca \
    --cc=guix-devel@gnu.org \
    /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).