diff --git a/masakari/__init__.py b/masakari/__init__.py index 28f10424..4073dc93 100644 --- a/masakari/__init__.py +++ b/masakari/__init__.py @@ -26,4 +26,9 @@ import os os.environ['EVENTLET_NO_GREENDNS'] = 'yes' +# NOTE(rpodolyaka): import oslo_service first, so that it makes eventlet hub +# use a monotonic clock to avoid issues with drifts of system time (see +# LP 1510234 for details) +import oslo_service # noqa + import eventlet # noqa diff --git a/masakari/service.py b/masakari/service.py index ba5168f1..949a105f 100644 --- a/masakari/service.py +++ b/masakari/service.py @@ -41,6 +41,17 @@ LOG = logging.getLogger(__name__) CONF = masakari.conf.CONF +def assert_eventlet_uses_monotonic_clock(): + import eventlet.hubs as hubs + import monotonic + + hub = hubs.get_hub() + if hub.clock is not monotonic.monotonic: + raise RuntimeError( + 'eventlet hub is not using a monotonic clock - ' + 'periodic tasks will be affected by drifts of system time.') + + class Service(service.Service): """Service object for binaries running on hosts. @@ -78,6 +89,7 @@ class Service(service.Service): } def start(self): + assert_eventlet_uses_monotonic_clock() verstr = version.version_string_with_package() LOG.info('Starting %(topic)s (version %(version)s)', { 'topic': self.topic,