diff options
author | Narayan Desai <desai@mcs.anl.gov> | 2009-05-06 19:17:53 +0000 |
---|---|---|
committer | Narayan Desai <desai@mcs.anl.gov> | 2009-05-06 19:17:53 +0000 |
commit | cecdedb73bf0dfed66964c91b08256b100997289 (patch) | |
tree | e066b5717b22ef84e3503e3049b0d58fa0b8c883 /src/lib/Server/XMLRPC.py | |
parent | e55c9c0e1980b8c1bb808acbaeafd27a9b1cf5d1 (diff) | |
download | bcfg2-cecdedb73bf0dfed66964c91b08256b100997289.tar.gz bcfg2-cecdedb73bf0dfed66964c91b08256b100997289.tar.bz2 bcfg2-cecdedb73bf0dfed66964c91b08256b100997289.zip |
Clean up File Monitoring code/adapt to new server infrastructure
git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@5202 ce84e21b-d406-0410-9b95-82705330c041
Diffstat (limited to 'src/lib/Server/XMLRPC.py')
-rw-r--r-- | src/lib/Server/XMLRPC.py | 32 |
1 files changed, 14 insertions, 18 deletions
diff --git a/src/lib/Server/XMLRPC.py b/src/lib/Server/XMLRPC.py index 4e97271bc..36d7c3b79 100644 --- a/src/lib/Server/XMLRPC.py +++ b/src/lib/Server/XMLRPC.py @@ -4,10 +4,11 @@ import logging import lxml.etree import select import socket +import threading import time import xmlrpclib -from Bcfg2.Component import Component, exposed +from Bcfg2.Component import Component, automatic, exposed, locking import Bcfg2.Server.Core logger = logging.getLogger('server') @@ -25,6 +26,7 @@ class bcfg2_server(Component, Bcfg2.Server.Core.Core): '''XML RPC interfaces for the server core''' name = 'bcfg2-server' + implementation = 'bcfg2-server' def __init__(self, setup): Component.__init__(self) @@ -32,26 +34,20 @@ class bcfg2_server(Component, setup['password'], setup['encoding'], setup['filemonitor']) self.ca = setup['ca'] - self.process_initial_fam_events() + self.fam_thread = threading.Thread(target=self._file_monitor_thread) + self.fam_thread.start() - def process_initial_fam_events(self): - events = False + def _file_monitor_thread(self): + famfd = self.fam.fileno() while True: try: - rsockinfo = select.select([self.fam.fileno()], [], [], 15)[0] - if not rsockinfo: - if events: - break - else: - logger.error("Hit event timeout without getting " - "any events; GAMIN/FAM problem?") - continue - events = True - i = 0 - while self.fam.Service() or i < 10: - i += 1 - time.sleep(0.1) - except socket.error: + if famfd: + rsockinfo = select.select([famfd], [], []) + else: + while not self.fam.pending(): + time.sleep(15) + self.fam.handle_event_set(self.lock) + except: continue @exposed |