]> git-server-git.apps.pok.os.sepia.ceph.com Git - teuthology.git/commitdiff
Instead of StreamHandler, rework copy_file_to()
authorZack Cerza <zack@redhat.com>
Tue, 26 Jul 2016 19:58:34 +0000 (13:58 -0600)
committerZack Cerza <zack@redhat.com>
Tue, 26 Jul 2016 21:00:44 +0000 (15:00 -0600)
Signed-off-by: Zack Cerza <zack@redhat.com>
teuthology/orchestra/run.py

index c5b1c77fb2bc3cacb0f1c6fb89c5300bb78cc8f6..4754cb5ee5c15f787dce51d0cf62ab4f1d0ed4a9 100644 (file)
@@ -114,16 +114,14 @@ class RemoteProcess(object):
             # Log the stream
             host_log = self.logger.getChild(self.hostname)
             stream_log = host_log.getChild(stream_name)
-            # If stream_obj is an actual stream, have the logging module write
-            # to it as well
-            if stream_obj is not None:
-                stream_log.addHandler(logging.StreamHandler(stream_obj))
-            greenlet = gevent.spawn(
-                copy_file_to,
-                getattr(self, stream_name),
-                stream_log,
+            self.add_greenlet(
+                gevent.spawn(
+                    copy_file_to,
+                    getattr(self, stream_name),
+                    stream_log,
+                    stream_obj,
+                )
             )
-            self.add_greenlet(greenlet)
             setattr(self, stream_name, stream_obj)
         elif self._wait:
             # FIXME: Is this actually true?
@@ -267,20 +265,19 @@ def copy_and_close(src, fdst):
     fdst.close()
 
 
-def copy_file_to(f, dst):
+def copy_file_to(src, logger, stream=None):
     """
     Copy file
-    :param f: file to be copied.
-    :param dst: destination
-    :param host: original host location
+    :param src: file to be copied.
+    :param logger: the logger object
+    :param stream: an optional file-like object which will receive a copy of
+                   src.
     """
-    if hasattr(dst, 'log'):
-        # looks like a Logger to me; not using isinstance to make life
-        # easier for unit tests
-        handler = copy_to_log
-    else:
-        handler = shutil.copyfileobj
-    return handler(f, dst)
+    if stream is not None:
+        shutil.copyfileobj(src, stream)
+        stream.seek(0)
+        src = stream
+    copy_to_log(src, logger)
 
 
 def spawn_asyncresult(fn, *args, **kwargs):