diff options
author | Dmitry Tantsur <dtantsur@redhat.com> | 2015-01-15 15:22:36 +0100 |
---|---|---|
committer | Dmitry Tantsur <dtantsur@redhat.com> | 2015-02-03 16:36:12 +0100 |
commit | d3d3164a6b8bc4ff5fdd02ea4ba22e411868b729 (patch) | |
tree | 79f2fd864d3219216f6934f6842f0af319c59190 /ironic/conductor | |
parent | dc5b9c65d00a7d7a1f153f9d4d0243754bb39761 (diff) | |
download | ironic-d3d3164a6b8bc4ff5fdd02ea4ba22e411868b729.tar.gz |
Add support for driver-specific periodic tasks
Syncs openstack.common.periodic_task to
commit 0848516902444ca83dd4998655cae3901d038d
(https://review.openstack.org/#/c/148854/).
This patch also makes service start running periodic tasks
after init_host() is called.
Change-Id: I63ee4ce30b3684e53158fe5f985efd04e4e88fef
Implements: blueprint driver-periodic-tasks
Diffstat (limited to 'ironic/conductor')
-rw-r--r-- | ironic/conductor/manager.py | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/ironic/conductor/manager.py b/ironic/conductor/manager.py index 67c3c0a98..9bc69de1b 100644 --- a/ironic/conductor/manager.py +++ b/ironic/conductor/manager.py @@ -43,6 +43,7 @@ a change, etc. import collections import datetime +import inspect import tempfile import threading @@ -212,6 +213,16 @@ class ConductorManager(periodic_task.PeriodicTasks): LOG.error(msg, self.host) raise exception.NoDriversLoaded(conductor=self.host) + # Collect driver-specific periodic tasks + for driver_obj in driver_factory.drivers().values(): + self._collect_periodic_tasks(driver_obj) + for iface_name in (driver_obj.core_interfaces + + driver_obj.standard_interfaces + + ['vendor']): + iface = getattr(driver_obj, iface_name, None) + if iface: + self._collect_periodic_tasks(iface) + # clear all locks held by this conductor before registering self.dbapi.clear_node_reservations_for_conductor(self.host) try: @@ -248,6 +259,11 @@ class ConductorManager(periodic_task.PeriodicTasks): LOG.critical(_LC('Failed to start keepalive')) self.del_host() + def _collect_periodic_tasks(self, obj): + for n, method in inspect.getmembers(obj, inspect.ismethod): + if getattr(method, '_periodic_enabled', False): + self.add_periodic_task(method) + def del_host(self): self._keepalive_evt.set() try: |