Refactor the core pidfile code out of autoserv and into a common lib
module, and add a similar pidfile option to the parser.
Risk: Low
Visibility: Adds an (opt-in) .parser_execute pidfile to the parser.
Signed-off-by: John Admanski <jadmanski@google.com>
git-svn-id: http://test.kernel.org/svn/autotest/trunk@2538 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/server/autoserv b/server/autoserv
index b6ba572..e33aba2 100755
--- a/server/autoserv
+++ b/server/autoserv
@@ -10,34 +10,12 @@
import common
from autotest_lib.server import server_job, utils, autoserv_parser, autotest
-from autotest_lib.client.common_lib import debug
+from autotest_lib.client.common_lib import debug, pidfile
debug.configure(module='server')
-class PidFileManager(object):
- pid_file = None
- num_tests_failed = 0
-
- def open_pid_file(self, results_dir):
- pid_file_path = os.path.join(results_dir, '.autoserv_execute')
- assert not os.path.exists(pid_file_path)
- self.pid_file = open(pid_file_path, 'w')
- self.pid_file.write(str(os.getpid()) + '\n')
- self.pid_file.flush()
-
-
- def close_pid_file(self, exit_code, signal_code=0):
- if not self.pid_file:
- return
- real_exit_code = (exit_code << 8) | (signal_code & 0xFF)
- self.pid_file.write(str(real_exit_code) + '\n')
- self.pid_file.write(str(self.num_tests_failed) + '\n')
- self.pid_file.close()
- self.pid_file = None
-
-
def run_autoserv(pid_file_manager, results, parser):
# send stdin to /dev/null
dev_null = os.open(os.devnull, os.O_RDONLY)
@@ -49,7 +27,7 @@
# Implement SIGTERM handler
def handle_sigint(signum, frame):
- pid_file_manager.close_pid_file(1, signal.SIGTERM)
+ pid_file_manager.close_file(1, signal.SIGTERM)
os.killpg(os.getpgrp(), signal.SIGKILL)
# Set signal handler
@@ -156,8 +134,6 @@
def main():
- pid_file_manager = PidFileManager()
-
# grab the parser
parser = autoserv_parser.autoserv_parser
@@ -176,8 +152,10 @@
sys.exit(1)
print "Results placed in %s" % results
+ pid_file_manager = pidfile.PidFileManager("autoserv", results)
+
if parser.options.write_pidfile:
- pid_file_manager.open_pid_file(results)
+ pid_file_manager.open_file()
autotest.BaseAutotest.set_install_in_tmpdir(
parser.options.install_in_tmpdir)
@@ -194,7 +172,7 @@
# an 'abort' and return 1.
exit_code = 1
finally:
- pid_file_manager.close_pid_file(exit_code)
+ pid_file_manager.close_file(exit_code)
sys.exit(exit_code)