Fix bugs with sync offloads

This makes server tests work, but doesn't retrieve client tests
correctly.

BUG=chromium:1008530
TEST=run with test_that

Change-Id: I8ce6047508ad20422a24b56fd8e80ecd8d54091e
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/autotest/+/2137977
Commit-Queue: Jacob Kopczynski <[email protected]>
Tested-by: Jacob Kopczynski <[email protected]>
Reviewed-by: Alex Zamorzaev <[email protected]>
diff --git a/server/autoserv b/server/autoserv
index 4166f2a..cf20dc1 100755
--- a/server/autoserv
+++ b/server/autoserv
@@ -506,6 +506,10 @@
     except AttributeError:
       logging.debug("No Parser.options.args.")
 
+    try:
+      logging.debug("Parser.options is %r", parser.options)
+    except AttributeError:
+      logging.debug("No Parser.options.")
     job_kwargs = {
             'control': control,
             'args': parser.args[1:],
diff --git a/server/server_job.py b/server/server_job.py
index 258a942..7beda38 100644
--- a/server/server_job.py
+++ b/server/server_job.py
@@ -42,6 +42,7 @@
 from autotest_lib.server import site_gtest_runner
 from autotest_lib.server import subcommand
 from autotest_lib.server import test
+from autotest_lib.server.autotest import OFFLOAD_ENVVAR
 from autotest_lib.server import utils as server_utils
 from autotest_lib.server.cros.dynamic_suite import frontend_wrappers
 from autotest_lib.server import hosts
@@ -823,13 +824,16 @@
                     utils.open_write_close(server_control_file, control)
 
                 sync_dir = self._offload_dir_target_path()
-                namespace['synchronous_offload_dir'] = sync_dir
                 if self._sync_offload_dir:
                     logging.info("Preparing synchronous offload dir")
                     self.create_marker_file()
                     logging.info("Offload dir and marker file ready")
+                    logging.debug("Results dir is %s", self.resultdir)
+                    logging.debug("Synchronous offload dir is %s", sync_dir)
                 logging.info("Processing control file")
                 namespace['use_packaging'] = use_packaging
+                namespace['synchronous_offload_dir'] = sync_dir
+                os.environ[OFFLOAD_ENVVAR] = sync_dir
                 self._execute_code(server_control_file, namespace)
                 logging.info("Finished processing control file")
 
@@ -888,7 +892,7 @@
         return os.path.join(self.resultdir, self._sync_offload_dir)
 
 
-    def _client_offload_dir_lambda_generator(self, file_path, offload_path):
+    def _client_off_dir_lambda_generator(self, file_path, offload_path):
         """Generate a parallel_simple-runnable function to mirror offload dir
 
         @param file_path: File to copy as the marker file
@@ -926,26 +930,26 @@
             str(datetime.utcnow())
         )
         # Make the server-side directory regardless
-        os.makedirs(
-            self._offload_dir_target_path(force_server=True),
-            exist_ok=True
-        )
+        try:
+          os.makedirs(self._offload_dir_target_path(force_server=True))
+        except OSError as e:
+          if e.errno != errno.EEXIST:
+            raise
         offload_path = self._offload_dir_target_path()
         if self._client:
             _, path = tempfile.mkstemp()
             try:
                 utils.open_write_close(path, marker_string)
                 self.parallel_simple(
-                    self._client_offload_dir_lambda_generator(
-                        path, marker_string, offload_path
-                    ),
+                    self._client_off_dir_lambda_generator(path, offload_path),
                     self.machines
                 )
             finally:
                 os.remove(path)
         else:
             utils.open_write_close(
-                os.path.join(os.path.dirname(offload_path),"marker"),
+                os.path.join(os.path.dirname(offload_path),
+                             "sync_offloads_marker"),
                 marker_string
             )
         return self._offload_dir_target_path()
diff --git a/server/site_tests/dummy_SynchronousOffloadServer/dummy_SynchronousOffloadServer.py b/server/site_tests/dummy_SynchronousOffloadServer/dummy_SynchronousOffloadServer.py
index dc9ba47..8d440cc 100644
--- a/server/site_tests/dummy_SynchronousOffloadServer/dummy_SynchronousOffloadServer.py
+++ b/server/site_tests/dummy_SynchronousOffloadServer/dummy_SynchronousOffloadServer.py
@@ -15,6 +15,10 @@
     DIR = os.getenv('SYNCHRONOUS_OFFLOAD_DIR', "")
     if DIR == "":
       raise error.TestFail("Did not find value for SYNCHRONOUS_OFFLOAD_DIR")
+    if not os.path.isdir(DIR):
+      raise error.TestFail("$SYNCHRONOUS_OFFLOAD_DIR=%s, which is not "
+                           "a valid directory." % DIR)
+    logging.debug("Writing to directory %s", DIR)
     with open(os.path.join(DIR,"test_file"), "w") as f:
       f.write("Test string which should be offloaded")
       logging.debug("Wrote string to test file.")