From cd7b0b3d40a5a340d5b47819f94a21c9faf23120 Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Wed, 5 Sep 2012 14:36:15 -0400 Subject: added server-side client metadata object caching --- src/lib/Bcfg2/Server/FileMonitor/Inotify.py | 7 ++++--- src/lib/Bcfg2/Server/FileMonitor/__init__.py | 11 +++++++++-- 2 files changed, 13 insertions(+), 5 deletions(-) (limited to 'src/lib/Bcfg2/Server/FileMonitor') diff --git a/src/lib/Bcfg2/Server/FileMonitor/Inotify.py b/src/lib/Bcfg2/Server/FileMonitor/Inotify.py index 097fc0b42..a20dc4ad5 100644 --- a/src/lib/Bcfg2/Server/FileMonitor/Inotify.py +++ b/src/lib/Bcfg2/Server/FileMonitor/Inotify.py @@ -27,14 +27,13 @@ class Inotify(Pseudo, pyinotify.ProcessEvent): # these are created in start() after the server is done forking self.notifier = None self.wm = None - self.started = False self.add_q = [] def start(self): + Pseudo.start(self) self.wm = pyinotify.WatchManager() self.notifier = pyinotify.ThreadedNotifier(self.wm, self) self.notifier.start() - self.started = True for monitor in self.add_q: self.AddMonitor(*monitor) self.add_q = [] @@ -142,5 +141,7 @@ class Inotify(Pseudo, pyinotify.ProcessEvent): return path def shutdown(self): - if self.started: + Pseudo.shutdown(self) + if self.notifier: self.notifier.stop() + diff --git a/src/lib/Bcfg2/Server/FileMonitor/__init__.py b/src/lib/Bcfg2/Server/FileMonitor/__init__.py index 251e04e4f..fd0cb66f1 100644 --- a/src/lib/Bcfg2/Server/FileMonitor/__init__.py +++ b/src/lib/Bcfg2/Server/FileMonitor/__init__.py @@ -37,6 +37,7 @@ class FileMonitor(object): if ignore is None: ignore = [] self.ignore = ignore + self.started = False def __str__(self): return "%s: %s" % (__name__, self.__class__.__name__) @@ -49,7 +50,7 @@ class FileMonitor(object): def start(self): """ start threads or anything else that needs to be done after the server forks and daemonizes """ - pass + self.started = True def debug_log(self, msg): if self.debug: @@ -73,6 +74,8 @@ class FileMonitor(object): return 0 def handle_one_event(self, event): + if not self.started: + self.start() if self.should_ignore(event): return if event.requestID not in self.handles: @@ -90,6 +93,8 @@ class FileMonitor(object): (event.code2str(), event.filename, err)) def handle_event_set(self, lock=None): + if not self.started: + self.start() count = 1 event = self.get_event() start = time() @@ -108,6 +113,8 @@ class FileMonitor(object): logger.info("Handled %d events in %.03fs" % (count, (end - start))) def handle_events_in_interval(self, interval): + if not self.started: + self.start() end = time() + interval while time() < end: if self.pending(): @@ -117,7 +124,7 @@ class FileMonitor(object): sleep(0.5) def shutdown(self): - pass + self.started = False available = dict() -- cgit v1.2.3-1-g7c22