summaryrefslogtreecommitdiff
path: root/trove/common/utils.py
diff options
context:
space:
mode:
authorKasper Hasior <k.hasior@samsung.com>2019-03-26 13:54:46 +0100
committerKasper Hasior <k.hasior@samsung.com>2019-03-27 09:50:48 +0100
commit0c8a5ee9f0773db5fd7243d1a6013e755007c084 (patch)
treeb30df2c2e1ddbc862812c77594669ffb0e3ec851 /trove/common/utils.py
parentb00bad9495ccbba46cd05a6b904b54a52859bf6f (diff)
downloadtrove-0c8a5ee9f0773db5fd7243d1a6013e755007c084.tar.gz
Fix poll_until exception type
This patch adds catching loopingcall.LoopingCallTimeOut and raising PollTimeOut exceptions. Without this change we didn't know which exception would be thrown in case of task timeout in function poll_until. As in the rest of the trove code we catch only PollTimeOut exception it was possible to miss loopingcall.LoopingCallTimeOut. Change-Id: Ic3f8bdf99e82ac5c438354a4f3af7c6856d14f34
Diffstat (limited to 'trove/common/utils.py')
-rw-r--r--trove/common/utils.py18
1 files changed, 11 insertions, 7 deletions
diff --git a/trove/common/utils.py b/trove/common/utils.py
index 7710923c..91ed1698 100644
--- a/trove/common/utils.py
+++ b/trove/common/utils.py
@@ -18,7 +18,6 @@ import collections
import inspect
import os
import shutil
-import time
import uuid
from eventlet.timeout import Timeout
@@ -186,14 +185,11 @@ class MethodInspector(object):
def build_polling_task(retriever, condition=lambda value: value,
sleep_time=1, time_out=0):
- start_time = time.time()
def poll_and_check():
obj = retriever()
if condition(obj):
raise loopingcall.LoopingCallDone(retvalue=obj)
- if time_out > 0 and time.time() - start_time > time_out:
- raise exception.PollTimeOut
return loopingcall.BackOffLoopingCall(
f=poll_and_check).start(initial_delay=False,
@@ -201,6 +197,14 @@ def build_polling_task(retriever, condition=lambda value: value,
max_interval=30, timeout=time_out)
+def wait_for_task(polling_task):
+ """Waits for the task until it is finished"""
+ try:
+ return polling_task.wait()
+ except loopingcall.LoopingCallTimeOut:
+ raise exception.PollTimeOut
+
+
def poll_until(retriever, condition=lambda value: value,
sleep_time=1, time_out=0):
"""Retrieves object until it passes condition, then returns it.
@@ -209,9 +213,9 @@ def poll_until(retriever, condition=lambda value: value,
amount of time is eclipsed.
"""
-
- return build_polling_task(retriever, condition=condition,
- sleep_time=sleep_time, time_out=time_out).wait()
+ task = build_polling_task(retriever, condition=condition,
+ sleep_time=sleep_time, time_out=time_out)
+ return wait_for_task(task)
# Copied from nova.api.openstack.common in the old code.