Skip to content

Commit aa1f743

Browse files
committed
[silx.util.retry] fix resetting the timeout timer when iterating
1 parent cfbf5d5 commit aa1f743

File tree

2 files changed

+28
-3
lines changed

2 files changed

+28
-3
lines changed

src/silx/utils/retry.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,12 @@ def _retry_loop(retry_timeout=None, retry_period=None, retry_on_error=None):
8585
retry_state = {"t0": t0, "exception": None, "retry_on_error": retry_on_error}
8686
while True:
8787
yield retry_state
88-
if retry_period is not None:
89-
time.sleep(retry_period)
90-
if has_timeout and (time.time() - t0) > retry_timeout:
88+
if has_timeout and (time.time() - retry_state["t0"]) > retry_timeout:
9189
err_msg = "%s seconds" % retry_timeout
9290
cause = retry_state.get("exception")
9391
raise RetryTimeoutError(err_msg) from cause
92+
if retry_period is not None:
93+
time.sleep(retry_period)
9494

9595

9696
def retry(

src/silx/utils/test/test_retry.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,3 +210,28 @@ def test_retry_wrong_generator(self):
210210
@retry.retry()
211211
def method():
212212
yield from range(3)
213+
214+
def test_retry_iter_reset(self):
215+
failure_count = 0
216+
retry_period = 0.2
217+
failure_duration = 0.6
218+
219+
nfailures = int(failure_duration/retry_period + 0.5)
220+
retry_timeout = failure_duration + retry_period
221+
222+
@retry.retry(retry_period=retry_period, retry_timeout=retry_timeout)
223+
def iter_silx(start_index=0):
224+
nonlocal failure_count
225+
226+
# This takes `10 * retry_period` seconds
227+
if start_index == 0:
228+
for i in range(10):
229+
time.sleep(retry_period)
230+
yield i
231+
232+
# This will fail for slightly longer than `failure_duration` seconds
233+
if failure_count <= nfailures:
234+
failure_count += 1
235+
raise retry.RetryError()
236+
237+
assert list(iter_silx()) == list(range(10))

0 commit comments

Comments
 (0)