diff --git a/bin/nova-manage b/bin/nova-manage index acaf052161e..244c11869ff 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -1021,7 +1021,7 @@ class ServiceCommands(object): _('Updated_At')) for svc in services: delta = now - (svc['updated_at'] or svc['created_at']) - alive = (delta.seconds <= 15) + alive = abs(utils.total_seconds(delta)) <= FLAGS.service_down_time art = (alive and ":-)") or "XXX" active = 'enabled' if svc['disabled']: diff --git a/nova/scheduler/driver.py b/nova/scheduler/driver.py index 7bf26cfdf28..577503cd8ef 100644 --- a/nova/scheduler/driver.py +++ b/nova/scheduler/driver.py @@ -21,8 +21,6 @@ Scheduler base class that all Schedulers should inherit from """ -import datetime - from nova import db from nova import exception from nova import flags @@ -143,8 +141,8 @@ def service_is_up(service): """Check whether a service is up based on last heartbeat.""" last_heartbeat = service['updated_at'] or service['created_at'] # Timestamps in DB are UTC. - elapsed = utils.utcnow() - last_heartbeat - return elapsed < datetime.timedelta(seconds=FLAGS.service_down_time) + elapsed = utils.total_seconds(utils.utcnow() - last_heartbeat) + return abs(elapsed) <= FLAGS.service_down_time def hosts_up(self, context, topic): """Return the list of hosts that have a running service for topic.""" diff --git a/nova/utils.py b/nova/utils.py index 7d34a87d869..ad585ba1cc3 100644 --- a/nova/utils.py +++ b/nova/utils.py @@ -1009,3 +1009,12 @@ def make_dev_path(dev, partition=None, base='/dev'): if partition: path += str(partition) return path + + +def total_seconds(td): + """Local total_seconds implementation for compatibility with python 2.6""" + if hasattr(td, 'total_seconds'): + return td.total_seconds() + else: + return ((td.days * 86400 + td.seconds) * 10 ** 6 + + td.microseconds) / 10.0 ** 6