diff options
author | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2013-07-09 08:49:54 -0400 |
---|---|---|
committer | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2013-07-09 08:49:59 -0400 |
commit | accbb1831ae88e57baabf01a783fe7a8ee0a0ccb (patch) | |
tree | e2f675f438e35a6109018acb979a9d091b6d7b63 | |
parent | a0f20bdde06ccb7be85f59e1b8fbf57e1c492e64 (diff) | |
download | bcfg2-accbb1831ae88e57baabf01a783fe7a8ee0a0ccb.tar.gz bcfg2-accbb1831ae88e57baabf01a783fe7a8ee0a0ccb.tar.bz2 bcfg2-accbb1831ae88e57baabf01a783fe7a8ee0a0ccb.zip |
Core: apply FAM blocking option to all commands that start a server
-rw-r--r-- | src/lib/Bcfg2/Server/Core.py | 26 | ||||
-rwxr-xr-x | src/sbin/bcfg2-info | 2 | ||||
-rwxr-xr-x | src/sbin/bcfg2-lint | 2 | ||||
-rwxr-xr-x | src/sbin/bcfg2-test | 2 | ||||
-rwxr-xr-x | tools/bcfg2-profile-templates.py | 2 | ||||
-rwxr-xr-x | tools/bcfg2_local.py | 2 |
6 files changed, 26 insertions, 10 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): diff --git a/src/sbin/bcfg2-info b/src/sbin/bcfg2-info index 406e7e003..cc9b03b80 100755 --- a/src/sbin/bcfg2-info +++ b/src/sbin/bcfg2-info @@ -717,7 +717,7 @@ Bcfg2 client itself.""") def run(self, args): # pylint: disable=W0221 try: self.load_plugins() - self.fam.handle_events_in_interval(1) + self.block_for_fam_events(handle_events=True) if args: self.onecmd(" ".join(args)) else: diff --git a/src/sbin/bcfg2-lint b/src/sbin/bcfg2-lint index ab3b6450f..9ceb1dd04 100755 --- a/src/sbin/bcfg2-lint +++ b/src/sbin/bcfg2-lint @@ -73,7 +73,7 @@ def load_server(setup): """ load server """ core = Bcfg2.Server.Core.BaseCore(setup) core.load_plugins() - core.fam.handle_events_in_interval(0.1) + core.block_for_fam_events(handle_events=True) return core diff --git a/src/sbin/bcfg2-test b/src/sbin/bcfg2-test index a7a6781a9..7c38a65d8 100755 --- a/src/sbin/bcfg2-test +++ b/src/sbin/bcfg2-test @@ -157,7 +157,7 @@ def get_core(setup): """ Get a server core, with events handled """ core = Bcfg2.Server.Core.BaseCore(setup) core.load_plugins() - core.fam.handle_events_in_interval(0.1) + core.block_for_fam_events(handle_events=True) return core diff --git a/tools/bcfg2-profile-templates.py b/tools/bcfg2-profile-templates.py index f4069e454..2b0ca6d63 100755 --- a/tools/bcfg2-profile-templates.py +++ b/tools/bcfg2-profile-templates.py @@ -67,7 +67,7 @@ def main(): logger.info("Bcfg2 server core loaded") core.load_plugins() logger.debug("Plugins loaded") - core.fam.handle_events_in_interval(0.1) + core.block_for_fam_events(handle_events=True) logger.debug("Repository events processed") if setup['args']: diff --git a/tools/bcfg2_local.py b/tools/bcfg2_local.py index 8c164e52e..3c90a3ea5 100755 --- a/tools/bcfg2_local.py +++ b/tools/bcfg2_local.py @@ -20,7 +20,7 @@ class LocalCore(BaseCore): Bcfg2.Server.Core.BaseCore.__init__(self, setup=setup) setup['syslog'], setup['logging'] = saved self.load_plugins() - self.fam.handle_events_in_interval(0.1) + self.block_for_fam_events(handle_events=True) def _daemonize(self): return True |