diff options
author | Alexander Sulfrian <alexander@sulfrian.net> | 2014-11-10 19:55:16 +0100 |
---|---|---|
committer | Alexander Sulfrian <alexander@sulfrian.net> | 2014-11-10 19:55:16 +0100 |
commit | da93fb540c28be3341ec0d37d1fbd90153fb750c (patch) | |
tree | 9615b3ddcc594ba5fb6a89dbce2516adab641153 /src/lib/Bcfg2/Reporting/Collector.py | |
parent | 389ce1a86b704222ddc9458cd49c281e7601b803 (diff) | |
parent | f6b3d6dc89e4ba5c2ec643931394db45b8c7f176 (diff) | |
download | bcfg2-da93fb540c28be3341ec0d37d1fbd90153fb750c.tar.gz bcfg2-da93fb540c28be3341ec0d37d1fbd90153fb750c.tar.bz2 bcfg2-da93fb540c28be3341ec0d37d1fbd90153fb750c.zip |
Merge remote branch 'upstream/maint'
* upstream/maint: (59 commits)
Client/Tools/APT: fix pylint errors, enable check
Client/Tools/APT: fix exception name
SYSV: add a migration tool to change simplename attributes to simplefile
doc: Update SYSV datastream format docs
SYSV: change instances of simplename to simplefile
Client/Tools/APT: handle exceptions gracefully
Server/Plugins/Packages: add debsrc attribute to url_map
schemas/packages.xsd: add default value for debsrc
Options.py: Fix database OPTIONS parsing
doc: Fix typos
doc: Add note about Decisions fix for 1.3.6
testsuite: Fix tools __init__.py unit test
Tools: Fix install of non-whitelisted services
doc: Add 1.3.6 release notes
fix keyboard interrupt during intial event handling
Server/Core: also shutdown on exceptions during fam blocking
Reporting: better exception handling
Packages: add name to additional_data for Sources
Packages: add name to sources
YUM: Add options to enable and disable Yum plugins
...
Conflicts:
debian/changelog
doc/conf.py
doc/releases/index.txt
doc/server/database.txt
doc/server/plugins/generators/cfg.txt
doc/server/plugins/generators/sslca.txt
man/bcfg2.conf.5
misc/bcfg2-selinux.spec
misc/bcfg2.spec
osx/Makefile
osx/macports/Portfile
schemas/packages.xsd
solaris-ips/MANIFEST.bcfg2-server.header
solaris-ips/MANIFEST.bcfg2.header
solaris-ips/Makefile
solaris-ips/pkginfo.bcfg2
solaris-ips/pkginfo.bcfg2-server
solaris/Makefile
solaris/pkginfo.bcfg2
solaris/pkginfo.bcfg2-server
src/lib/Bcfg2/Client/Client.py
src/lib/Bcfg2/Client/Proxy.py
src/lib/Bcfg2/Client/Tools/APT.py
src/lib/Bcfg2/Client/Tools/Action.py
src/lib/Bcfg2/Client/Tools/SYSV.py
src/lib/Bcfg2/Client/Tools/YUM.py
src/lib/Bcfg2/Client/Tools/__init__.py
src/lib/Bcfg2/Options.py
src/lib/Bcfg2/Reporting/Collector.py
src/lib/Bcfg2/Reporting/templates/base.html
src/lib/Bcfg2/Server/Admin/__init__.py
src/lib/Bcfg2/Server/BuiltinCore.py
src/lib/Bcfg2/Server/Core.py
src/lib/Bcfg2/Server/Plugins/Packages/Apt.py
src/lib/Bcfg2/Server/Plugins/Probes.py
src/lib/Bcfg2/settings.py
src/lib/Bcfg2/version.py
testsuite/Testsrc/Testlib/TestClient/TestTools/Test_init.py
testsuite/Testsrc/test_code_checks.py
Diffstat (limited to 'src/lib/Bcfg2/Reporting/Collector.py')
-rw-r--r-- | src/lib/Bcfg2/Reporting/Collector.py | 38 |
1 files changed, 22 insertions, 16 deletions
diff --git a/src/lib/Bcfg2/Reporting/Collector.py b/src/lib/Bcfg2/Reporting/Collector.py index 88e8f68eb..90b9f0ec7 100644 --- a/src/lib/Bcfg2/Reporting/Collector.py +++ b/src/lib/Bcfg2/Reporting/Collector.py @@ -1,3 +1,4 @@ +import os import sys import atexit import daemon @@ -5,13 +6,12 @@ import logging import time import threading -# pylint: disable=E0611 from lockfile import LockFailed, LockTimeout +# pylint: disable=E0611 try: - from lockfile.pidlockfile import PIDLockFile - from lockfile import Error as PIDFileError + from daemon.pidfile import TimeoutPIDLockFile except ImportError: - from daemon.pidlockfile import PIDLockFile, PIDFileError + from daemon.pidlockfile import TimeoutPIDLockFile # pylint: enable=E0611 import Bcfg2.Logger @@ -128,25 +128,31 @@ class ReportingCollector(object): if Bcfg2.Options.setup.daemon: self.logger.debug("Daemonizing") + self.context.pidfile = TimeoutPIDLockFile( + Bcfg2.Options.setup.daemon, acquire_timeout=5) + # Attempt to ensure lockfile is able to be created and not stale try: - self.context.pidfile = PIDLockFile(Bcfg2.Options.setup.daemon) - self.context.open() + self.context.pidfile.acquire() except LockFailed: self.logger.error("Failed to daemonize: %s" % sys.exc_info()[1]) self.shutdown() return except LockTimeout: - self.logger.error("Failed to daemonize: " - "Failed to acquire lock on %s" % - self.setup['daemon']) - self.shutdown() - return - except PIDFileError: - self.logger.error("Error writing pid file: %s" % - sys.exc_info()[1]) - self.shutdown() - return + try: # attempt to break the lock + os.kill(self.context.pidfile.read_pid(), 0) + except (OSError, TypeError): # No process with locked PID + self.context.pidfile.break_lock() + else: + self.logger.error("Failed to daemonize: " + "Failed to acquire lock on %s" % + Bcfg2.Options.setup.daemon) + self.shutdown() + return + else: + self.context.pidfile.release() + + self.context.open() self.logger.info("Starting daemon") self.transport.start_monitor(self) |