Improve the liveness checking for services

With this modification both nova-manage and scheduler use the flag
service_down_time and check positive and negative values in a
correct way.
Fixes bug: 867674.

Change-Id: I15c48d80cafa2089cd228c09c61b0a1e513730e8
This commit is contained in:
David Subiros
2011-08-05 16:35:56 +01:00
committed by Stanislaw Pitucha
parent 75a3fbb21e
commit ad74424768
3 changed files with 12 additions and 5 deletions

View File

@@ -1021,7 +1021,7 @@ class ServiceCommands(object):
_('Updated_At')) _('Updated_At'))
for svc in services: for svc in services:
delta = now - (svc['updated_at'] or svc['created_at']) 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" art = (alive and ":-)") or "XXX"
active = 'enabled' active = 'enabled'
if svc['disabled']: if svc['disabled']:

View File

@@ -21,8 +21,6 @@
Scheduler base class that all Schedulers should inherit from Scheduler base class that all Schedulers should inherit from
""" """
import datetime
from nova import db from nova import db
from nova import exception from nova import exception
from nova import flags from nova import flags
@@ -143,8 +141,8 @@ class Scheduler(object):
"""Check whether a service is up based on last heartbeat.""" """Check whether a service is up based on last heartbeat."""
last_heartbeat = service['updated_at'] or service['created_at'] last_heartbeat = service['updated_at'] or service['created_at']
# Timestamps in DB are UTC. # Timestamps in DB are UTC.
elapsed = utils.utcnow() - last_heartbeat elapsed = utils.total_seconds(utils.utcnow() - last_heartbeat)
return elapsed < datetime.timedelta(seconds=FLAGS.service_down_time) return abs(elapsed) <= FLAGS.service_down_time
def hosts_up(self, context, topic): def hosts_up(self, context, topic):
"""Return the list of hosts that have a running service for topic.""" """Return the list of hosts that have a running service for topic."""

View File

@@ -1009,3 +1009,12 @@ def make_dev_path(dev, partition=None, base='/dev'):
if partition: if partition:
path += str(partition) path += str(partition)
return path 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