mirror of
git://git.yoctoproject.org/layerindex-web.git
synced 2025-07-19 03:49:10 +02:00
update.py: add an option --timeout for lockfile
We have an update.py running periodically in background, but we also need to run it manually, for example, run it to update actual_branch, the manually run usually failed because can't get lockfile, we have to run it again and again. A timeout option helps a lot in such a case. Now the following command can make sure we can run the command successfully: $ update.py -b master -a actual_branch -t 2000 Signed-off-by: Robert Yang <liezhi.yang@windriver.com> Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
This commit is contained in:
parent
f4f2146370
commit
f7e63f1814
|
@ -156,6 +156,9 @@ def main():
|
|||
parser.add_option("-l", "--layer",
|
||||
help = "Specify layers to update (use commas to separate multiple). Default is all published layers.",
|
||||
action="store", dest="layers")
|
||||
parser.add_option("-t", "--timeout",
|
||||
help = "Specify timeout in seconds to get layerindex.lock. Default is 30 seconds.",
|
||||
type="int", action="store", dest="timeout", default=30)
|
||||
parser.add_option("-r", "--reload",
|
||||
help = "Reload recipe data instead of updating since last update",
|
||||
action="store_true", dest="reload")
|
||||
|
@ -265,7 +268,7 @@ def main():
|
|||
update.save()
|
||||
try:
|
||||
lockfn = os.path.join(fetchdir, "layerindex.lock")
|
||||
lockfile = utils.lock_file(lockfn)
|
||||
lockfile = utils.lock_file(lockfn, options.timeout, logger)
|
||||
if not lockfile:
|
||||
logger.error("Layer index lock timeout expired")
|
||||
sys.exit(1)
|
||||
|
|
|
@ -309,8 +309,10 @@ class ListHandler(logging.Handler):
|
|||
return log
|
||||
|
||||
|
||||
def lock_file(fn):
|
||||
starttime = time.time()
|
||||
def lock_file(fn, timeout=30, logger=None):
|
||||
start = time.time()
|
||||
last = start
|
||||
counter = 1
|
||||
while True:
|
||||
lock = open(fn, 'w')
|
||||
try:
|
||||
|
@ -318,8 +320,14 @@ def lock_file(fn):
|
|||
return lock
|
||||
except IOError:
|
||||
lock.close()
|
||||
if time.time() - starttime > 30:
|
||||
current = time.time()
|
||||
if current - start > timeout:
|
||||
return None
|
||||
# Print a message in every 5 seconds
|
||||
if logger and (current - last > 5):
|
||||
last = current
|
||||
logger.info('Trying to get lock on %s (tried %s seconds) ...' % (fn, (5 * counter)))
|
||||
counter += 1
|
||||
|
||||
def unlock_file(lock):
|
||||
fcntl.flock(lock, fcntl.LOCK_UN)
|
||||
|
|
Loading…
Reference in New Issue
Block a user