Attached is a very large patch that adds support for running a
distributed Autotest service.  Previously, the scheduler could only
execute autoservs locally and all results were written directly to the
local filesystem.  This placed a limit on the number of machines that
could be concurrently tested by a single Autotest service instance due
to the strain of running many autoserv processes on a single machine.

With this change, the scheduler can spread autoserv processes among a
number of machines and gather all results to a single results
repository machine.  This allows vastly improved scalability for a
single Autotest service instance.  See
http://autotest.kernel.org/wiki/DistributedServerSetup for more
details.

Note that the single-server setup is still supported and the global
configuration defaults to this setup, so existing service instances
should continue to run.

Steve

Signed-off-by: Steve Howard <[email protected]>




git-svn-id: http://test.kernel.org/svn/autotest/trunk@2596 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/server/hosts/abstract_ssh.py b/server/hosts/abstract_ssh.py
index 9a5b38f..c6707d1 100644
--- a/server/hosts/abstract_ssh.py
+++ b/server/hosts/abstract_ssh.py
@@ -1,5 +1,5 @@
 import os, sys, time, types, socket, traceback, shutil
-from autotest_lib.client.common_lib import error
+from autotest_lib.client.common_lib import error, debug
 from autotest_lib.server import utils, autotest
 from autotest_lib.server.hosts import site_host
 
@@ -41,7 +41,8 @@
         format (%s@%s:%s).
         """
 
-        print '_copy_files: copying %s to %s' % (sources, dest)
+        debug.get_logger().debug('_copy_files: copying %s to %s' %
+                                 (sources, dest))
         try:
             ssh = make_ssh_command(self.user, self.port)
             if delete_dest:
@@ -289,3 +290,12 @@
                 self.machine_install()
             except NotImplementedError, e:
                 sys.stderr.write(str(e) + "\n\n")
+
+
+class LoggerFile(object):
+    def write(self, data):
+        debug.get_logger().debug(data)
+
+
+    def flush(self):
+        pass