summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexandru DAMIAN <alexandru.damian@intel.com>2015-04-10 15:57:06 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2015-04-11 16:21:48 +0100
commit8e64c535af64bb58e98be2d65398c50c23c6e52d (patch)
tree4e43e231078177ba2cf11618c66fa9f0ad4d904c
parent763bff1f2210734c189f44478466125c3ce0a8b2 (diff)
downloadpoky-8e64c535af64bb58e98be2d65398c50c23c6e52d.tar.gz
poky-8e64c535af64bb58e98be2d65398c50c23c6e52d.tar.bz2
poky-8e64c535af64bb58e98be2d65398c50c23c6e52d.zip
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 <alexandru.damian@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--bitbake/lib/bb/cooker.py30
1 files changed, 23 insertions, 7 deletions
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()