summaryrefslogtreecommitdiffstats
path: root/src/lib/Bcfg2/Server
diff options
context:
space:
mode:
authorChris St. Pierre <chris.a.st.pierre@gmail.com>2013-07-09 08:49:54 -0400
committerChris St. Pierre <chris.a.st.pierre@gmail.com>2013-07-09 08:49:59 -0400
commitaccbb1831ae88e57baabf01a783fe7a8ee0a0ccb (patch)
treee2f675f438e35a6109018acb979a9d091b6d7b63 /src/lib/Bcfg2/Server
parenta0f20bdde06ccb7be85f59e1b8fbf57e1c492e64 (diff)
downloadbcfg2-accbb1831ae88e57baabf01a783fe7a8ee0a0ccb.tar.gz
bcfg2-accbb1831ae88e57baabf01a783fe7a8ee0a0ccb.tar.bz2
bcfg2-accbb1831ae88e57baabf01a783fe7a8ee0a0ccb.zip
Core: apply FAM blocking option to all commands that start a server
Diffstat (limited to 'src/lib/Bcfg2/Server')
-rw-r--r--src/lib/Bcfg2/Server/Core.py26
1 files changed, 21 insertions, 5 deletions
diff --git a/src/lib/Bcfg2/Server/Core.py b/src/lib/Bcfg2/Server/Core.py
index ecd68e1e4..a22531d2d 100644
--- a/src/lib/Bcfg2/Server/Core.py
+++ b/src/lib/Bcfg2/Server/Core.py
@@ -728,6 +728,26 @@ class BaseCore(object):
self.setup.reparse()
self.metadata_cache.expire()
+ def block_for_fam_events(self, handle_events=False):
+ """ Block until all fam events have been handleed, optionally
+ handling events as well. (Setting ``handle_events=True`` is
+ useful for local server cores that don't spawn an event
+ handling thread.)"""
+ slept = 0
+ log_interval = 3
+ if handle_events:
+ self.fam.handle_events_in_interval(1)
+ slept += 1
+ if self.setup['fam_blocking']:
+ time.sleep(1)
+ slept += 1
+ while self.fam.pending() != 0:
+ time.sleep(1)
+ slept += 1
+ if slept % log_interval == 0:
+ self.logger.debug("Sleeping to handle FAM events...")
+ self.logger.debug("Slept %s seconds while handling FAM events" % slept)
+
def run(self):
""" Run the server core. This calls :func:`_daemonize`,
:func:`_run`, starts the :attr:`fam_thread`, and calls
@@ -777,13 +797,9 @@ class BaseCore(object):
self.shutdown()
raise
- if self.setup['fam_blocking']:
- time.sleep(1)
- while self.fam.pending() != 0:
- time.sleep(1)
-
if self.debug_flag:
self.set_debug(None, self.debug_flag)
+ self.block_for_fam_events()
self._block()
def _daemonize(self):