From 73849c1179c3ed78661f0b1d2c3f9bb40944e4bc Mon Sep 17 00:00:00 2001 From: Zack Cerza Date: Sat, 8 Mar 2014 15:19:31 -0600 Subject: [PATCH] Update safe_while's suggested usage pattern I didn't love the way safe_while was encouraged to be used and it didn't fit right with the new no-raising behavior. Now it's encouraged to be used like this: with safe_while() as proceed: while proceed(): do_things() Signed-off-by: Zack Cerza --- teuthology/contextutil.py | 8 +++--- teuthology/misc.py | 5 ++-- teuthology/test/test_contextutil.py | 39 ++++++++++++++++++----------- 3 files changed, 31 insertions(+), 21 deletions(-) diff --git a/teuthology/contextutil.py b/teuthology/contextutil.py index 4e46c9ef73c4e..29958cebd56cc 100644 --- a/teuthology/contextutil.py +++ b/teuthology/contextutil.py @@ -58,10 +58,10 @@ class safe_while(object): The most simple example possible will try 10 times sleeping for 6 seconds: >>> from teuthology.contexutil import safe_while - >>> with safe_while() as bomb: - ... while 1: - ... bomb() + >>> with safe_while() as proceed: + ... while proceed(): ... # repetitive code here + ... print "hello world" ... Traceback (most recent call last): ... @@ -125,8 +125,10 @@ class safe_while(object): raise MaxWhileTries(error_msg) else: log.warning(error_msg) + return False self.sleeper(self.sleep_current) self.sleep_current += self.increment + return True def __enter__(self): return self diff --git a/teuthology/misc.py b/teuthology/misc.py index 5cf520fe83bad..c075e56d6dd51 100644 --- a/teuthology/misc.py +++ b/teuthology/misc.py @@ -821,9 +821,8 @@ def wait_until_healthy(ctx, remote): Wait until a Ceph cluster is healthy. Give up after 15min. """ testdir = get_testdir(ctx) - with safe_while(tries=(900 / 6), action="wait_until_healthy") as timeout: - while True: # finite - timeout() + with safe_while(tries=(900 / 6), action="wait_until_healthy") as proceed: + while proceed(): r = remote.run( args=[ 'adjust-ulimits', diff --git a/teuthology/test/test_contextutil.py b/teuthology/test/test_contextutil.py index ccef3dcc31a30..2465459cd0fcb 100644 --- a/teuthology/test/test_contextutil.py +++ b/teuthology/test/test_contextutil.py @@ -1,27 +1,29 @@ from pytest import raises from teuthology import contextutil +from logging import ERROR class TestSafeWhile(object): def setup(self): + contextutil.log.setLevel(ERROR) self.fake_sleep = lambda s: True self.s_while = contextutil.safe_while def test_6_5_10_deal(self): with raises(contextutil.MaxWhileTries): - with self.s_while(_sleeper=self.fake_sleep) as bomb: - while 1: - bomb() + with self.s_while(_sleeper=self.fake_sleep) as proceed: + while proceed(): + pass def test_6_0_1_deal(self): with raises(contextutil.MaxWhileTries) as error: with self.s_while( tries=1, _sleeper=self.fake_sleep - ) as bomb: - while 1: - bomb() + ) as proceed: + while proceed(): + pass msg = error.value[0] assert 'waiting for 6 seconds' in msg @@ -31,9 +33,9 @@ class TestSafeWhile(object): with self.s_while( sleep=1, _sleeper=self.fake_sleep - ) as bomb: - while 1: - bomb() + ) as proceed: + while proceed(): + pass msg = error.value[0] assert 'waiting for 10 seconds' in msg @@ -43,9 +45,9 @@ class TestSafeWhile(object): with self.s_while( increment=1, _sleeper=self.fake_sleep - ) as bomb: - while 1: - bomb() + ) as proceed: + while proceed(): + pass msg = error.value[0] assert 'waiting for 105 seconds' in msg @@ -55,9 +57,16 @@ class TestSafeWhile(object): with self.s_while( action='doing the thing', _sleeper=self.fake_sleep - ) as bomb: - while 1: - bomb() + ) as proceed: + while proceed(): + pass msg = error.value[0] assert "'doing the thing'" in msg + + def test_no_raise(self): + with self.s_while(_raise=False, _sleeper=self.fake_sleep) as proceed: + while proceed(): + pass + + assert True -- 2.39.5