Merge "Replace all retrying with tenacity in Panko"
This commit is contained in:
commit
ade3613b21
@ -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)
|
||||
|
@ -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)
|
||||
)
|
||||
|
||||
|
||||
|
@ -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):
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user