]> code.ossystems Code Review - openembedded-core.git/commitdiff
oe-build-perf-test: enable locking
authorMarkus Lehtonen <markus.lehtonen@linux.intel.com>
Thu, 23 Jun 2016 15:48:11 +0000 (18:48 +0300)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Fri, 1 Jul 2016 15:08:52 +0000 (16:08 +0100)
Makes it possible to guard that multiple tests are not run in parallel.

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
scripts/oe-build-perf-test

index 9dd073cdfb4dee24658816f536fd1187f3f17edf..64873c90aac5ea18b7d248d5267842002e421b4a 100755 (executable)
@@ -15,6 +15,8 @@
 #
 """Build performance test script"""
 import argparse
+import errno
+import fcntl
 import logging
 import os
 import sys
@@ -33,6 +35,19 @@ logging.basicConfig(level=logging.INFO, format=LOG_FORMAT)
 log = logging.getLogger()
 
 
+def acquire_lock(lock_f):
+    """Acquire flock on file"""
+    log.debug("Acquiring lock %s", os.path.abspath(lock_f.name))
+    try:
+        fcntl.flock(lock_f, fcntl.LOCK_EX | fcntl.LOCK_NB)
+    except IOError as err:
+        if err.errno == errno.EAGAIN:
+            return False
+        raise
+    log.debug("Lock acquired")
+    return True
+
+
 def pre_run_sanity_check():
     """Sanity check of build environment"""
     build_dir = os.environ.get("BUILDDIR")
@@ -72,6 +87,9 @@ def parse_args(argv):
                         help='Enable debug level logging')
     parser.add_argument('--globalres-file',
                         help="Append results to 'globalres' csv file")
+    parser.add_argument('--lock-file', default='./oe-build-perf.lock',
+                        metavar='FILENAME',
+                        help="Lock file to use")
 
     return parser.parse_args(argv)
 
@@ -83,6 +101,11 @@ def main(argv=None):
     if args.debug:
         log.setLevel(logging.DEBUG)
 
+    lock_f = open(args.lock_file, 'w')
+    if not acquire_lock(lock_f):
+        log.error("Another instance of this script is running, exiting...")
+        return 1
+
     if not pre_run_sanity_check():
         return 1