bitbake: cooker: Fix inotify watches causing memory resident bitbake corruption

Thanks to great debugging from pavel@zhukoff.net we had a simpler reproducer
for the corruption see in oe-selftest when using BB_SERVER_TIMEOUT=60, i.e.
with bitbake in memory resident mode. This was effectively:

oe-selftest -r devtool.DevtoolUpgradeTests.test_devtool_upgrade devtool.DevtoolUpgradeTests.test_devtool_upgrade_git -j 1 -K

The issue is that if directories are removed (such as workspace), if
they are added again, we don't have the watches in place any more. This
patch adds some slightly paranoid checks to ensure we do the correct things
for directory additions and removals (we track directories, not files
specifically to avoid running out of watches).

[YOCTO #14023]

(Bitbake rev: 2c414f659d793d732041614caedd773959eb4f27)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie
2022-03-25 14:51:43 +00:00
parent cff6c1a18d
commit 7e273d09d0

View File

@@ -253,6 +253,11 @@ class BBCooker:
return
if not event.pathname in self.configwatcher.bbwatchedfiles:
return
if "IN_ISDIR" in event.maskname:
if "IN_CREATE" in event.maskname:
self.add_filewatch([[event.pathname]], watcher=self.configwatcher, dirs=True)
elif "IN_DELETE" in event.maskname and event.pathname in self.watcher.bbseen:
self.configwatcher.bbseen.remove(event.pathname)
if not event.pathname in self.inotify_modified_files:
self.inotify_modified_files.append(event.pathname)
self.baseconfig_valid = False
@@ -266,6 +271,11 @@ class BBCooker:
if event.pathname.endswith("bitbake-cookerdaemon.log") \
or event.pathname.endswith("bitbake.lock"):
return
if "IN_ISDIR" in event.maskname:
if "IN_CREATE" in event.maskname:
self.add_filewatch([[event.pathname]], dirs=True)
elif "IN_DELETE" in event.maskname and event.pathname in self.watcher.bbseen:
self.watcher.bbseen.remove(event.pathname)
if not event.pathname in self.inotify_modified_files:
self.inotify_modified_files.append(event.pathname)
self.parsecache_valid = False