summaryrefslogtreecommitdiffstats
path: root/nova/service.py
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-01-07 06:50:10 +0000
committerGerrit Code Review <review@openstack.org>2013-01-07 06:50:10 +0000
commit8446973b4a77c665a3c1344b75898004fad7ce32 (patch)
treec822ff00809d26e6e326d1fa670945994875b801 /nova/service.py
parent9279e0052f300eb0f64d63c970d34c050d744906 (diff)
parent9fb647ec100133b1ee5903535507c74d408f4790 (diff)
downloadnova-8446973b4a77c665a3c1344b75898004fad7ce32.tar.gz
nova-8446973b4a77c665a3c1344b75898004fad7ce32.tar.xz
nova-8446973b4a77c665a3c1344b75898004fad7ce32.zip
Merge "Refactor periodic tasks."
Diffstat (limited to 'nova/service.py')
-rw-r--r--nova/service.py38
1 files changed, 21 insertions, 17 deletions
diff --git a/nova/service.py b/nova/service.py
index 4c93fefa8..fc0ac4a1b 100644
--- a/nova/service.py
+++ b/nova/service.py
@@ -49,9 +49,9 @@ service_opts = [
cfg.IntOpt('report_interval',
default=10,
help='seconds between nodes reporting state to datastore'),
- cfg.IntOpt('periodic_interval',
- default=60,
- help='seconds between running periodic tasks'),
+ cfg.BoolOpt('periodic_enable',
+ default=True,
+ help='enable periodic tasks'),
cfg.IntOpt('periodic_fuzzy_delay',
default=60,
help='range of seconds to randomly delay when starting the'
@@ -371,7 +371,8 @@ class Service(object):
it state to the database services table."""
def __init__(self, host, binary, topic, manager, report_interval=None,
- periodic_interval=None, periodic_fuzzy_delay=None,
+ periodic_enable=None, periodic_fuzzy_delay=None,
+ periodic_interval_max=None,
*args, **kwargs):
self.host = host
self.binary = binary
@@ -380,8 +381,9 @@ class Service(object):
manager_class = importutils.import_class(self.manager_class_name)
self.manager = manager_class(host=self.host, *args, **kwargs)
self.report_interval = report_interval
- self.periodic_interval = periodic_interval
+ self.periodic_enable = periodic_enable
self.periodic_fuzzy_delay = periodic_fuzzy_delay
+ self.periodic_interval_max = periodic_interval_max
self.saved_args, self.saved_kwargs = args, kwargs
self.timers = []
self.backdoor_port = None
@@ -433,15 +435,15 @@ class Service(object):
if pulse:
self.timers.append(pulse)
- if self.periodic_interval:
+ if self.periodic_enable:
if self.periodic_fuzzy_delay:
initial_delay = random.randint(0, self.periodic_fuzzy_delay)
else:
initial_delay = None
- periodic = utils.LoopingCall(self.periodic_tasks)
- periodic.start(interval=self.periodic_interval,
- initial_delay=initial_delay)
+ periodic = utils.DynamicLoopingCall(self.periodic_tasks)
+ periodic.start(initial_delay=initial_delay,
+ periodic_interval_max=self.periodic_interval_max)
self.timers.append(periodic)
def _create_service_ref(self, context):
@@ -460,8 +462,8 @@ class Service(object):
@classmethod
def create(cls, host=None, binary=None, topic=None, manager=None,
- report_interval=None, periodic_interval=None,
- periodic_fuzzy_delay=None):
+ report_interval=None, periodic_enable=None,
+ periodic_fuzzy_delay=None, periodic_interval_max=None):
"""Instantiates class and passes back application object.
:param host: defaults to CONF.host
@@ -469,8 +471,9 @@ class Service(object):
:param topic: defaults to bin_name - 'nova-' part
:param manager: defaults to CONF.<topic>_manager
:param report_interval: defaults to CONF.report_interval
- :param periodic_interval: defaults to CONF.periodic_interval
+ :param periodic_enable: defaults to CONF.periodic_enable
:param periodic_fuzzy_delay: defaults to CONF.periodic_fuzzy_delay
+ :param periodic_interval_max: if set, the max time to wait between runs
"""
if not host:
@@ -486,14 +489,15 @@ class Service(object):
manager = CONF.get(manager_cls, None)
if report_interval is None:
report_interval = CONF.report_interval
- if periodic_interval is None:
- periodic_interval = CONF.periodic_interval
+ if periodic_enable is None:
+ periodic_enable = CONF.periodic_enable
if periodic_fuzzy_delay is None:
periodic_fuzzy_delay = CONF.periodic_fuzzy_delay
service_obj = cls(host, binary, topic, manager,
report_interval=report_interval,
- periodic_interval=periodic_interval,
- periodic_fuzzy_delay=periodic_fuzzy_delay)
+ periodic_enable=periodic_enable,
+ periodic_fuzzy_delay=periodic_fuzzy_delay,
+ periodic_interval_max=periodic_interval_max)
return service_obj
@@ -529,7 +533,7 @@ class Service(object):
def periodic_tasks(self, raise_on_error=False):
"""Tasks to be run at a periodic interval."""
ctxt = context.get_admin_context()
- self.manager.periodic_tasks(ctxt, raise_on_error=raise_on_error)
+ return self.manager.periodic_tasks(ctxt, raise_on_error=raise_on_error)
class WSGIService(object):