summaryrefslogtreecommitdiffstats
path: root/bitbake
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2019-09-19 13:20:56 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2019-09-19 20:30:35 +0100
commit886a71438f46d6c49f171998a2ecaf9590638fbe (patch)
treed37673f2b4ebc1c9029f872f1392443f2067e150 /bitbake
parent2af45501fd998771b2102b9724be2a6d6a4eab7b (diff)
downloadpoky-886a71438f46d6c49f171998a2ecaf9590638fbe.tar.gz
bitbake: utils: Add ionice option to prunedir
Autobuilder type infrastructure can benefit from deletion of certain files as background IO due to the way Linux filesystem priority works. We have problems where build directories as part of oe-selftest being delete starves the running tasks of IO to the point builds take much longer to compelte. Having this option of running the deletion at "idle" helps a lot with that. (Bitbake rev: 797354d285f6d624d9adb52bab65823572da0e39) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake')
-rw-r--r--bitbake/lib/bb/utils.py11
1 files changed, 7 insertions, 4 deletions
diff --git a/bitbake/lib/bb/utils.py b/bitbake/lib/bb/utils.py
index 3e90b6a306..d035949b3d 100644
--- a/bitbake/lib/bb/utils.py
+++ b/bitbake/lib/bb/utils.py
@@ -677,7 +677,7 @@ def _check_unsafe_delete_path(path):
677 return True 677 return True
678 return False 678 return False
679 679
680def remove(path, recurse=False): 680def remove(path, recurse=False, ionice=False):
681 """Equivalent to rm -f or rm -rf""" 681 """Equivalent to rm -f or rm -rf"""
682 if not path: 682 if not path:
683 return 683 return
@@ -686,7 +686,10 @@ def remove(path, recurse=False):
686 if _check_unsafe_delete_path(path): 686 if _check_unsafe_delete_path(path):
687 raise Exception('bb.utils.remove: called with dangerous path "%s" and recurse=True, refusing to delete!' % path) 687 raise Exception('bb.utils.remove: called with dangerous path "%s" and recurse=True, refusing to delete!' % path)
688 # shutil.rmtree(name) would be ideal but its too slow 688 # shutil.rmtree(name) would be ideal but its too slow
689 subprocess.check_call(['rm', '-rf'] + glob.glob(path)) 689 cmd = []
690 if ionice:
691 cmd = ['ionice', '-c', '3']
692 subprocess.check_call(cmd + ['rm', '-rf'] + glob.glob(path))
690 return 693 return
691 for name in glob.glob(path): 694 for name in glob.glob(path):
692 try: 695 try:
@@ -695,12 +698,12 @@ def remove(path, recurse=False):
695 if exc.errno != errno.ENOENT: 698 if exc.errno != errno.ENOENT:
696 raise 699 raise
697 700
698def prunedir(topdir): 701def prunedir(topdir, ionice=False):
699 # Delete everything reachable from the directory named in 'topdir'. 702 # Delete everything reachable from the directory named in 'topdir'.
700 # CAUTION: This is dangerous! 703 # CAUTION: This is dangerous!
701 if _check_unsafe_delete_path(topdir): 704 if _check_unsafe_delete_path(topdir):
702 raise Exception('bb.utils.prunedir: called with dangerous path "%s", refusing to delete!' % topdir) 705 raise Exception('bb.utils.prunedir: called with dangerous path "%s", refusing to delete!' % topdir)
703 remove(topdir, recurse=True) 706 remove(topdir, recurse=True, ionice=ionice)
704 707
705# 708#
706# Could also use return re.compile("(%s)" % "|".join(map(re.escape, suffixes))).sub(lambda mo: "", var) 709# Could also use return re.compile("(%s)" % "|".join(map(re.escape, suffixes))).sub(lambda mo: "", var)