summaryrefslogtreecommitdiffstats
path: root/src/lib/Bcfg2/Server/FileMonitor
diff options
context:
space:
mode:
authorChris St. Pierre <chris.a.st.pierre@gmail.com>2012-09-05 14:36:15 -0400
committerChris St. Pierre <chris.a.st.pierre@gmail.com>2012-09-05 14:55:33 -0400
commitcd7b0b3d40a5a340d5b47819f94a21c9faf23120 (patch)
tree67dc3b8f53b0921aade0ba5603d5f1c9cff85eb5 /src/lib/Bcfg2/Server/FileMonitor
parent84e8fc36c4d8524c8094daf31955dce8c0a624ea (diff)
downloadbcfg2-cd7b0b3d40a5a340d5b47819f94a21c9faf23120.tar.gz
bcfg2-cd7b0b3d40a5a340d5b47819f94a21c9faf23120.tar.bz2
bcfg2-cd7b0b3d40a5a340d5b47819f94a21c9faf23120.zip
added server-side client metadata object caching
Diffstat (limited to 'src/lib/Bcfg2/Server/FileMonitor')
-rw-r--r--src/lib/Bcfg2/Server/FileMonitor/Inotify.py7
-rw-r--r--src/lib/Bcfg2/Server/FileMonitor/__init__.py11
2 files changed, 13 insertions, 5 deletions
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()