rrs/tools: use layer index lock

We check out different revisions while we do this processing, and so
does the layer index update script, so we shouldn't be allowing both to
run at once or nasty stuff will happen.

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
This commit is contained in:
Paul Eggleton 2018-03-26 17:40:33 +13:00
parent 2afa51b108
commit 291f6bfde7
3 changed files with 161 additions and 136 deletions

View File

@ -71,6 +71,7 @@ def get_commit_info(info, logger):
Recreate Maintainership history from the beginning Recreate Maintainership history from the beginning
""" """
def maintainer_history(options, logger): def maintainer_history(options, logger):
fetchdir = settings.LAYER_FETCH_DIR
maintplans = MaintenancePlan.objects.filter(updates_enabled=True) maintplans = MaintenancePlan.objects.filter(updates_enabled=True)
if not maintplans.exists(): if not maintplans.exists():
logger.error('No enabled maintenance plans found') logger.error('No enabled maintenance plans found')
@ -78,11 +79,17 @@ def maintainer_history(options, logger):
no_maintainer, _ = Maintainer.objects.get_or_create(name='No maintainer') no_maintainer, _ = Maintainer.objects.get_or_create(name='No maintainer')
lockfn = os.path.join(fetchdir, "layerindex.lock")
lockfile = utils.lock_file(lockfn)
if not lockfile:
logger.error("Layer index lock timeout expired")
sys.exit(1)
try:
for maintplan in maintplans: for maintplan in maintplans:
for item in maintplan.maintenanceplanlayerbranch_set.all(): for item in maintplan.maintenanceplanlayerbranch_set.all():
layerbranch = item.layerbranch layerbranch = item.layerbranch
urldir = str(layerbranch.layer.get_fetch_dir()) urldir = str(layerbranch.layer.get_fetch_dir())
repodir = os.path.join(settings.LAYER_FETCH_DIR, urldir) repodir = os.path.join(fetchdir, urldir)
layerdir = os.path.join(repodir, layerbranch.vcs_subdir) layerdir = os.path.join(repodir, layerbranch.vcs_subdir)
utils.runcmd("git checkout master -f", layerdir, logger=logger) utils.runcmd("git checkout master -f", layerdir, logger=logger)
@ -164,6 +171,8 @@ def maintainer_history(options, logger):
raise DryRunRollbackException raise DryRunRollbackException
except DryRunRollbackException: except DryRunRollbackException:
pass pass
finally:
utils.unlock_file(lockfile)
if __name__=="__main__": if __name__=="__main__":
parser = optparse.OptionParser(usage = """%prog [options]""") parser = optparse.OptionParser(usage = """%prog [options]""")

View File

@ -93,6 +93,13 @@ def upgrade_history(options, logger):
if not maintplans.exists(): if not maintplans.exists():
logger.error('No enabled maintenance plans found') logger.error('No enabled maintenance plans found')
sys.exit(1) sys.exit(1)
lockfn = os.path.join(fetchdir, "layerindex.lock")
lockfile = utils.lock_file(lockfn)
if not lockfile:
logger.error("Layer index lock timeout expired")
sys.exit(1)
try:
for maintplan in maintplans: for maintplan in maintplans:
for maintplanbranch in maintplan.maintenanceplanlayerbranch_set.all(): for maintplanbranch in maintplan.maintenanceplanlayerbranch_set.all():
layerbranch = maintplanbranch.layerbranch layerbranch = maintplanbranch.layerbranch
@ -169,6 +176,8 @@ def upgrade_history(options, logger):
if commit_list: if commit_list:
utils.runcmd("git clean -dfx", repodir, logger=logger) utils.runcmd("git clean -dfx", repodir, logger=logger)
finally:
utils.unlock_file(lockfile)
if __name__=="__main__": if __name__=="__main__":
parser = optparse.OptionParser(usage = """%prog [options]""") parser = optparse.OptionParser(usage = """%prog [options]""")

View File

@ -147,12 +147,17 @@ if __name__=="__main__":
logger.debug("Starting upstream history...") logger.debug("Starting upstream history...")
try:
maintplans = MaintenancePlan.objects.filter(updates_enabled=True) maintplans = MaintenancePlan.objects.filter(updates_enabled=True)
if not maintplans.exists(): if not maintplans.exists():
logger.error('No enabled maintenance plans found') logger.error('No enabled maintenance plans found')
sys.exit(1) sys.exit(1)
lockfn = os.path.join(fetchdir, "layerindex.lock")
lockfile = utils.lock_file(lockfn)
if not lockfile:
logger.error("Layer index lock timeout expired")
sys.exit(1)
try:
origsyspath = sys.path origsyspath = sys.path
for maintplan in maintplans: for maintplan in maintplans:
@ -207,3 +212,5 @@ if __name__=="__main__":
raise DryRunRollbackException raise DryRunRollbackException
except DryRunRollbackException: except DryRunRollbackException:
pass pass
finally:
utils.unlock_file(lockfile)