From 8e64c535af64bb58e98be2d65398c50c23c6e52d Mon Sep 17 00:00:00 2001 From: Alexandru DAMIAN Date: Fri, 10 Apr 2015 15:57:06 +0100 Subject: bitbake: cooker: read file watches on server idle The inotify facility monitoring changes to the config files could be overwhelmed by massive changes to the watched files while server is running. This patch adds verification the notification watches to the server idle functions, in addition to the cooker updateCache command which executes only infrequently, thus preventing overflowing the notification buffer. [YOCTO #7316] (Bitbake rev: 996e663fd5c254292f44eca46f5fdc95af897f98) (Bitbake rev: b44694b1efc7389536df2f901a8b70321edfeeba) Signed-off-by: Alexandru DAMIAN Signed-off-by: Richard Purdie --- bitbake/lib/bb/cooker.py | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) (limited to 'bitbake/lib') diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index 3909dc09f7..2f2a8523af 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py @@ -133,6 +133,19 @@ class BBCooker: self.initConfigurationData() + + self.inotify_modified_files = [] + + def _process_inotify_updates(server, notifier_list, abort): + for n in notifier_list: + if n.check_events(timeout=0): + # read notified events and enqeue them + n.read_events() + n.process_events() + return True + + self.configuration.server_register_idlecallback(_process_inotify_updates, [self.confignotifier, self.notifier]) + self.baseconfig_valid = True self.parsecache_valid = False @@ -171,11 +184,13 @@ class BBCooker: signal.signal(signal.SIGHUP, self.sigterm_exception) def config_notifications(self, event): - bb.parse.update_cache(event.path) + if not event.path in self.inotify_modified_files: + self.inotify_modified_files.append(event.path) self.baseconfig_valid = False def notifications(self, event): - bb.parse.update_cache(event.path) + if not event.path in self.inotify_modified_files: + self.inotify_modified_files.append(event.path) self.parsecache_valid = False def add_filewatch(self, deps, watcher=None): @@ -1336,11 +1351,12 @@ class BBCooker: raise bb.BBHandledException() if self.state != state.parsing: - for n in [self.confignotifier, self.notifier]: - if n.check_events(timeout=0): - # read notified events and enqeue them - n.read_events() - n.process_events() + + # reload files for which we got notifications + for p in self.inotify_modified_files: + bb.parse.update_cache(p) + self.inotify_modified_files = [] + if not self.baseconfig_valid: logger.debug(1, "Reloading base configuration data") self.initConfigurationData() -- cgit v1.2.3-54-g00ecf