Import and convert to oslo loopingcall.

Import the oslo looping call implementation (which is a copy of
nova's), delete nova's local copy, convert all users to the new
location.

It should be noted that the oslo implementation of
FixedIntervalLoopingCall measures time from the start of the
periodic task, not the end, so periodic tasks will run with a
constant frequency instead of the frequency changing depending on
how long the periodic task takes to run.

Change-Id: Ia62ce1988f5373c09146efa6b3b1d1dc094d50c4
This commit is contained in:
Michael Still 2013-04-09 13:25:38 +10:00
parent 4c82958f3d
commit 0490eab24c
2 changed files with 12 additions and 11 deletions

View File

@ -29,6 +29,7 @@ from oslo.config import cfg
from nova import exception from nova import exception
from nova.openstack.common import log as logging from nova.openstack.common import log as logging
from nova.openstack.common import loopingcall
from nova import paths from nova import paths
from nova import utils from nova import utils
from nova.virt.baremetal import baremetal_states from nova.virt.baremetal import baremetal_states
@ -149,10 +150,10 @@ class IPMI(base.PowerManager):
if self._is_power("on"): if self._is_power("on"):
self.state = baremetal_states.ACTIVE self.state = baremetal_states.ACTIVE
raise utils.LoopingCallDone() raise loopingcall.LoopingCallDone()
if self.retries > CONF.baremetal.ipmi_power_retry: if self.retries > CONF.baremetal.ipmi_power_retry:
self.state = baremetal_states.ERROR self.state = baremetal_states.ERROR
raise utils.LoopingCallDone() raise loopingcall.LoopingCallDone()
try: try:
self.retries += 1 self.retries += 1
self._exec_ipmitool("power on") self._exec_ipmitool("power on")
@ -160,7 +161,7 @@ class IPMI(base.PowerManager):
LOG.exception(_("IPMI power on failed")) LOG.exception(_("IPMI power on failed"))
self.retries = 0 self.retries = 0
timer = utils.FixedIntervalLoopingCall(_wait_for_power_on) timer = loopingcall.FixedIntervalLoopingCall(_wait_for_power_on)
timer.start(interval=0.5).wait() timer.start(interval=0.5).wait()
def _power_off(self): def _power_off(self):
@ -171,10 +172,10 @@ class IPMI(base.PowerManager):
if self._is_power("off"): if self._is_power("off"):
self.state = baremetal_states.DELETED self.state = baremetal_states.DELETED
raise utils.LoopingCallDone() raise loopingcall.LoopingCallDone()
if self.retries > CONF.baremetal.ipmi_power_retry: if self.retries > CONF.baremetal.ipmi_power_retry:
self.state = baremetal_states.ERROR self.state = baremetal_states.ERROR
raise utils.LoopingCallDone() raise loopingcall.LoopingCallDone()
try: try:
self.retries += 1 self.retries += 1
self._exec_ipmitool("power off") self._exec_ipmitool("power off")
@ -182,7 +183,7 @@ class IPMI(base.PowerManager):
LOG.exception(_("IPMI power off failed")) LOG.exception(_("IPMI power off failed"))
self.retries = 0 self.retries = 0
timer = utils.FixedIntervalLoopingCall(_wait_for_power_off) timer = loopingcall.FixedIntervalLoopingCall(_wait_for_power_off)
timer.start(interval=0.5).wait() timer.start(interval=0.5).wait()
def _set_pxe_for_next_boot(self): def _set_pxe_for_next_boot(self):

View File

@ -30,8 +30,8 @@ from nova import exception
from nova.openstack.common.db import exception as db_exc from nova.openstack.common.db import exception as db_exc
from nova.openstack.common import fileutils from nova.openstack.common import fileutils
from nova.openstack.common import log as logging from nova.openstack.common import log as logging
from nova.openstack.common import loopingcall
from nova.openstack.common import timeutils from nova.openstack.common import timeutils
from nova import utils
from nova.virt.baremetal import baremetal_states from nova.virt.baremetal import baremetal_states
from nova.virt.baremetal import base from nova.virt.baremetal import base
from nova.virt.baremetal import db from nova.virt.baremetal import db
@ -458,7 +458,7 @@ class PXE(base.NodeDriver):
if instance['uuid'] != row.get('instance_uuid'): if instance['uuid'] != row.get('instance_uuid'):
locals['error'] = _("Node associated with another instance" locals['error'] = _("Node associated with another instance"
" while waiting for deploy of %s") " while waiting for deploy of %s")
raise utils.LoopingCallDone() raise loopingcall.LoopingCallDone()
status = row.get('task_state') status = row.get('task_state')
if (status == baremetal_states.DEPLOYING if (status == baremetal_states.DEPLOYING
@ -470,7 +470,7 @@ class PXE(base.NodeDriver):
baremetal_states.ACTIVE): baremetal_states.ACTIVE):
LOG.info(_("PXE deploy completed for instance %s") LOG.info(_("PXE deploy completed for instance %s")
% instance['uuid']) % instance['uuid'])
raise utils.LoopingCallDone() raise loopingcall.LoopingCallDone()
elif status == baremetal_states.DEPLOYFAIL: elif status == baremetal_states.DEPLOYFAIL:
locals['error'] = _("PXE deploy failed for instance %s") locals['error'] = _("PXE deploy failed for instance %s")
except exception.NodeNotFound: except exception.NodeNotFound:
@ -482,11 +482,11 @@ class PXE(base.NodeDriver):
locals['error'] = _("Timeout reached while waiting for " locals['error'] = _("Timeout reached while waiting for "
"PXE deploy of instance %s") "PXE deploy of instance %s")
if locals['error']: if locals['error']:
raise utils.LoopingCallDone() raise loopingcall.LoopingCallDone()
expiration = timeutils.utcnow() + datetime.timedelta( expiration = timeutils.utcnow() + datetime.timedelta(
seconds=CONF.baremetal.pxe_deploy_timeout) seconds=CONF.baremetal.pxe_deploy_timeout)
timer = utils.FixedIntervalLoopingCall(_wait_for_deploy) timer = loopingcall.FixedIntervalLoopingCall(_wait_for_deploy)
timer.start(interval=1).wait() timer.start(interval=1).wait()
if locals['error']: if locals['error']: