summaryrefslogtreecommitdiffstats
path: root/bitbake
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 /bitbake
parent763bff1f2210734c189f44478466125c3ce0a8b2 (diff)
downloadpoky-8e64c535af64bb58e98be2d65398c50c23c6e52d.tar.gz
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>
Diffstat (limited to 'bitbake')
-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:
133 133
134 134
135 self.initConfigurationData() 135 self.initConfigurationData()
136
137 self.inotify_modified_files = []
138
139 def _process_inotify_updates(server, notifier_list, abort):
140 for n in notifier_list:
141 if n.check_events(timeout=0):
142 # read notified events and enqeue them
143 n.read_events()
144 n.process_events()
145 return True
146
147 self.configuration.server_register_idlecallback(_process_inotify_updates, [self.confignotifier, self.notifier])
148
136 self.baseconfig_valid = True 149 self.baseconfig_valid = True
137 self.parsecache_valid = False 150 self.parsecache_valid = False
138 151
@@ -171,11 +184,13 @@ class BBCooker:
171 signal.signal(signal.SIGHUP, self.sigterm_exception) 184 signal.signal(signal.SIGHUP, self.sigterm_exception)
172 185
173 def config_notifications(self, event): 186 def config_notifications(self, event):
174 bb.parse.update_cache(event.path) 187 if not event.path in self.inotify_modified_files:
188 self.inotify_modified_files.append(event.path)
175 self.baseconfig_valid = False 189 self.baseconfig_valid = False
176 190
177 def notifications(self, event): 191 def notifications(self, event):
178 bb.parse.update_cache(event.path) 192 if not event.path in self.inotify_modified_files:
193 self.inotify_modified_files.append(event.path)
179 self.parsecache_valid = False 194 self.parsecache_valid = False
180 195
181 def add_filewatch(self, deps, watcher=None): 196 def add_filewatch(self, deps, watcher=None):
@@ -1336,11 +1351,12 @@ class BBCooker:
1336 raise bb.BBHandledException() 1351 raise bb.BBHandledException()
1337 1352
1338 if self.state != state.parsing: 1353 if self.state != state.parsing:
1339 for n in [self.confignotifier, self.notifier]: 1354
1340 if n.check_events(timeout=0): 1355 # reload files for which we got notifications
1341 # read notified events and enqeue them 1356 for p in self.inotify_modified_files:
1342 n.read_events() 1357 bb.parse.update_cache(p)
1343 n.process_events() 1358 self.inotify_modified_files = []
1359
1344 if not self.baseconfig_valid: 1360 if not self.baseconfig_valid:
1345 logger.debug(1, "Reloading base configuration data") 1361 logger.debug(1, "Reloading base configuration data")
1346 self.initConfigurationData() 1362 self.initConfigurationData()