All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sascha Silbe <silbe@linux.vnet.ibm.com>
To: qemu-devel@nongnu.org, Fam Zheng <famz@redhat.com>
Cc: "Alex Bennée" <alex.bennee@linaro.org>
Subject: [Qemu-devel] [PATCH v2 1/7] docker.py: don't hang on large docker output
Date: Wed, 24 Aug 2016 20:30:57 +0200	[thread overview]
Message-ID: <1472063464-790-2-git-send-email-silbe@linux.vnet.ibm.com> (raw)
In-Reply-To: <1472063464-790-1-git-send-email-silbe@linux.vnet.ibm.com>

Unlike Popen.communicate(), subprocess.call() doesn't read from the
stdout file descriptor. If the child process produces more output than
fits into the pipe buffer, it will block indefinitely.

If we don't intend to consume the output, just send it straight to
/dev/null to avoid this issue.

Signed-off-by: Sascha Silbe <silbe@linux.vnet.ibm.com>
Reviewed-by: Janosch Frank <frankja@linux.vnet.ibm.com>
---
This fixes a hang for me when building the Ubuntu docker image (empty
docker image cache).

 tests/docker/docker.py | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/tests/docker/docker.py b/tests/docker/docker.py
index 222a105..efb2bf4 100755
--- a/tests/docker/docker.py
+++ b/tests/docker/docker.py
@@ -25,6 +25,10 @@ from tarfile import TarFile, TarInfo
 from StringIO import StringIO
 from shutil import copy, rmtree
 
+
+DEVNULL = open(os.devnull, 'wb')
+
+
 def _text_checksum(text):
     """Calculate a digest string unique to the text content"""
     return hashlib.sha1(text).hexdigest()
@@ -34,8 +38,7 @@ def _guess_docker_command():
     commands = [["docker"], ["sudo", "-n", "docker"]]
     for cmd in commands:
         if subprocess.call(cmd + ["images"],
-                           stdout=subprocess.PIPE,
-                           stderr=subprocess.PIPE) == 0:
+                           stdout=DEVNULL, stderr=DEVNULL) == 0:
             return cmd
     commands_txt = "\n".join(["  " + " ".join(x) for x in commands])
     raise Exception("Cannot find working docker command. Tried:\n%s" % \
@@ -98,7 +101,7 @@ class Docker(object):
 
     def _do(self, cmd, quiet=True, infile=None, **kwargs):
         if quiet:
-            kwargs["stdout"] = subprocess.PIPE
+            kwargs["stdout"] = DEVNULL
         if infile:
             kwargs["stdin"] = infile
         return subprocess.call(self._command + cmd, **kwargs)
-- 
1.9.1

  reply	other threads:[~2016-08-24 18:31 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-24 18:30 [Qemu-devel] [PATCH v2 0/7] docker tests fixes Sascha Silbe
2016-08-24 18:30 ` Sascha Silbe [this message]
2016-09-06  1:30   ` [Qemu-devel] [PATCH v2 1/7] docker.py: don't hang on large docker output Fam Zheng
2016-09-06 18:31     ` Sascha Silbe
2016-09-07  1:53       ` Fam Zheng
2016-09-07  1:59         ` Eric Blake
2016-08-24 18:30 ` [Qemu-devel] [PATCH v2 2/7] docker: avoid dependency on 'realpath' package Sascha Silbe
2016-08-24 18:30 ` [Qemu-devel] [PATCH v2 3/7] docker: debian-bootstrap.pre: print helpful message if DEB_ARCH/DEB_TYPE unset Sascha Silbe
2016-09-06  1:47   ` Fam Zheng
2016-09-06 18:45     ` Sascha Silbe
2016-08-24 18:31 ` [Qemu-devel] [PATCH v2 4/7] docker: print warning if EXECUTABLE is not set when building debootstrap image Sascha Silbe
2016-08-24 18:31 ` [Qemu-devel] [PATCH v2 5/7] docker: make sure debootstrap is at least 1.0.67 Sascha Silbe
2016-09-06  1:43   ` Fam Zheng
2016-09-06 18:54     ` Sascha Silbe
2016-08-24 18:31 ` [Qemu-devel] [PATCH v2 6/7] docker: build debootstrap after cloning Sascha Silbe
2016-08-24 18:31 ` [Qemu-devel] [PATCH v2 7/7] docker: silence debootstrap when --quiet is given Sascha Silbe

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

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1472063464-790-2-git-send-email-silbe@linux.vnet.ibm.com \
    --to=silbe@linux.vnet.ibm.com \
    --cc=alex.bennee@linaro.org \
    --cc=famz@redhat.com \
    --cc=qemu-devel@nongnu.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.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.