summaryrefslogtreecommitdiffstats
path: root/openstack/common/loopingcall.py
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-11-23 04:25:41 +0000
committerGerrit Code Review <review@openstack.org>2012-11-23 04:25:41 +0000
commitb4c0767e5529eb5d58aed90643354dbee83efefe (patch)
tree7616972e2211a0f491b24f24a804c34b1957c011 /openstack/common/loopingcall.py
parent0781c7bc3632950c1336ecfb47707f48a6ab3734 (diff)
parent615d76910388d3590ad77e9cfce7ded421b060c0 (diff)
downloadoslo-b4c0767e5529eb5d58aed90643354dbee83efefe.tar.gz
oslo-b4c0767e5529eb5d58aed90643354dbee83efefe.tar.xz
oslo-b4c0767e5529eb5d58aed90643354dbee83efefe.zip
Merge "Account for tasks duration in LoopingCall delay"
Diffstat (limited to 'openstack/common/loopingcall.py')
-rw-r--r--openstack/common/loopingcall.py9
1 files changed, 8 insertions, 1 deletions
diff --git a/openstack/common/loopingcall.py b/openstack/common/loopingcall.py
index 1d34519..be044d8 100644
--- a/openstack/common/loopingcall.py
+++ b/openstack/common/loopingcall.py
@@ -24,6 +24,7 @@ from eventlet import greenthread
from openstack.common.gettextutils import _
from openstack.common import log as logging
+from openstack.common import timeutils
LOG = logging.getLogger(__name__)
@@ -62,10 +63,16 @@ class LoopingCall(object):
try:
while self._running:
+ start = timeutils.utcnow()
self.f(*self.args, **self.kw)
+ end = timeutils.utcnow()
if not self._running:
break
- greenthread.sleep(interval)
+ delay = interval - timeutils.delta_seconds(start, end)
+ if delay <= 0:
+ LOG.warn(_('task run outlasted interval by %s sec') %
+ -delay)
+ greenthread.sleep(delay if delay > 0 else 0)
except LoopingCallDone, e:
self.stop()
done.send(e.retvalue)