Node manager integration test writes to stderr in chunks.
authorPeter Amstutz <pamstutz@veritasgenetics.com>
Fri, 27 Apr 2018 15:51:51 +0000 (11:51 -0400)
committerPeter Amstutz <pamstutz@veritasgenetics.com>
Fri, 27 Apr 2018 15:55:33 +0000 (11:55 -0400)
Handles EAGAIN when getting pipe buffer backpressure.  no issue #

Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <pamstutz@veritasgenetics.com>

services/nodemanager/tests/integration_test.py

index 508e626639cb2857e989e9f342fbaf8be2da8aba..1699b5739015864b92fc465f39acb8df43e8b6e3 100755 (executable)
@@ -21,6 +21,7 @@ import logging
 import stat
 import tempfile
 import shutil
+import errno
 from functools import partial
 import arvados
 import StringIO
@@ -256,7 +257,18 @@ def run_test(name, actions, checks, driver_class, jobs, provider):
         logger.info("%s passed", name)
     else:
         if isinstance(detail_content, StringIO.StringIO):
-            sys.stderr.write(detail_content.getvalue())
+            detail_content.seek(0)
+            chunk = detail_content.read(4096)
+            while chunk:
+                try:
+                    sys.stderr.write(chunk)
+                    chunk = detail_content.read(4096)
+                except IOError as e:
+                    if e.errno == errno.EAGAIN:
+                        # try again (probably pipe buffer full)
+                        pass
+                    else:
+                        raise
         logger.info("%s failed", name)
 
     return code