From cecdedb73bf0dfed66964c91b08256b100997289 Mon Sep 17 00:00:00 2001 From: Narayan Desai Date: Wed, 6 May 2009 19:17:53 +0000 Subject: 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 --- src/lib/Server/XMLRPC.py | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) (limited to 'src/lib/Server/XMLRPC.py') 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 -- cgit v1.2.3-1-g7c22