Replace all retrying with tenacity in Panko

Change-Id: I7e61fa4dad70801cdbc1f543fe18d7c1a64116b0
This commit is contained in:
“zhangshengping2012” 2016-12-07 17:49:07 +08:00
parent 16f4f43033
commit a57db4e64a
4 changed files with 23 additions and 19 deletions

View File

@ -17,9 +17,9 @@
from oslo_config import cfg
from oslo_log import log
import retrying
import six.moves.urllib.parse as urlparse
from stevedore import driver
import tenacity
LOG = log.getLogger(__name__)
@ -57,9 +57,11 @@ class InvalidMarker(Exception):
def get_connection_from_config(conf):
retries = conf.database.max_retries
# Convert retry_interval secs to msecs for retry decorator
@retrying.retry(wait_fixed=conf.database.retry_interval * 1000,
stop_max_attempt_number=retries if retries >= 0 else None)
@tenacity.retry(
wait=tenacity.wait_fixed(conf.database.retry_interval),
stop=(tenacity.stop_after_attempt(retries) if retries >= 0
else tenacity.stop_never)
)
def _inner():
url = (getattr(conf.database, 'event_connection') or
conf.database.connection)

View File

@ -21,8 +21,8 @@ from oslo_log import log
from oslo_utils import netutils
import pymongo
import pymongo.errors
import retrying
import six
import tenacity
from panko.i18n import _, _LI
@ -145,11 +145,12 @@ class ConnectionPool(object):
def _safe_mongo_call(max_retries, retry_interval):
return retrying.retry(
retry_on_exception=lambda e: isinstance(
e, pymongo.errors.AutoReconnect),
wait_fixed=retry_interval * 1000,
stop_max_attempt_number=max_retries if max_retries >= 0 else None
return tenacity.retry(
retry=tenacity.retry_if_exception_type(
pymongo.errors.AutoReconnect),
wait=tenacity.wait_fixed(retry_interval),
stop=(tenacity.stop_after_attempt(max_retries) if max_retries >= 0
else tenacity.stop_never)
)

View File

@ -17,7 +17,6 @@
import mock
from oslotest import base
import retrying
from panko.event.storage import impl_log
from panko.event.storage import impl_sqlalchemy
@ -45,17 +44,19 @@ class ConnectionRetryTest(base.BaseTestCase):
self.CONF = service.prepare_service([], config_files=[])
def test_retries(self):
with mock.patch.object(
retrying.Retrying, 'should_reject') as retry_reject:
# stevedore gives warning log instead of any exception
with mock.patch.object(storage, 'get_connection',
side_effect=Exception) as retries:
try:
self.CONF.set_override("connection", "no-such-engine://",
self.CONF.set_override("retry_interval", 1,
group="database")
self.CONF.set_override("retry_interval", 0.00001,
self.CONF.set_override("max_retries", 3,
group="database")
storage.get_connection_from_config(self.CONF)
except RuntimeError as err:
self.assertIn('no-such-engine', six.text_type(err))
self.assertEqual(10, retry_reject.call_count)
except Exception:
self.assertEqual(3, retries.call_count)
else:
self.fail()
class ConnectionConfigTest(base.BaseTestCase):

View File

@ -3,7 +3,7 @@
# process, which may cause wedges in the gate later.
debtcollector>=1.2.0 # Apache-2.0
retrying!=1.3.0,>=1.2.3 # Apache-2.0
tenacity>=3.1.0 # Apache-2.0
keystonemiddleware!=4.1.0,>=4.0.0 # Apache-2.0
lxml>=2.3 # BSD
oslo.db>=4.1.0 # Apache-2.0