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_config import cfg
|
||||||
from oslo_log import log
|
from oslo_log import log
|
||||||
import retrying
|
|
||||||
import six.moves.urllib.parse as urlparse
|
import six.moves.urllib.parse as urlparse
|
||||||
from stevedore import driver
|
from stevedore import driver
|
||||||
|
import tenacity
|
||||||
|
|
||||||
|
|
||||||
LOG = log.getLogger(__name__)
|
LOG = log.getLogger(__name__)
|
||||||
|
@ -57,9 +57,11 @@ class InvalidMarker(Exception):
|
||||||
def get_connection_from_config(conf):
|
def get_connection_from_config(conf):
|
||||||
retries = conf.database.max_retries
|
retries = conf.database.max_retries
|
||||||
|
|
||||||
# Convert retry_interval secs to msecs for retry decorator
|
@tenacity.retry(
|
||||||
@retrying.retry(wait_fixed=conf.database.retry_interval * 1000,
|
wait=tenacity.wait_fixed(conf.database.retry_interval),
|
||||||
stop_max_attempt_number=retries if retries >= 0 else None)
|
stop=(tenacity.stop_after_attempt(retries) if retries >= 0
|
||||||
|
else tenacity.stop_never)
|
||||||
|
)
|
||||||
def _inner():
|
def _inner():
|
||||||
url = (getattr(conf.database, 'event_connection') or
|
url = (getattr(conf.database, 'event_connection') or
|
||||||
conf.database.connection)
|
conf.database.connection)
|
||||||
|
|
|
@ -21,8 +21,8 @@ from oslo_log import log
|
||||||
from oslo_utils import netutils
|
from oslo_utils import netutils
|
||||||
import pymongo
|
import pymongo
|
||||||
import pymongo.errors
|
import pymongo.errors
|
||||||
import retrying
|
|
||||||
import six
|
import six
|
||||||
|
import tenacity
|
||||||
|
|
||||||
from panko.i18n import _, _LI
|
from panko.i18n import _, _LI
|
||||||
|
|
||||||
|
@ -145,11 +145,12 @@ class ConnectionPool(object):
|
||||||
|
|
||||||
|
|
||||||
def _safe_mongo_call(max_retries, retry_interval):
|
def _safe_mongo_call(max_retries, retry_interval):
|
||||||
return retrying.retry(
|
return tenacity.retry(
|
||||||
retry_on_exception=lambda e: isinstance(
|
retry=tenacity.retry_if_exception_type(
|
||||||
e, pymongo.errors.AutoReconnect),
|
pymongo.errors.AutoReconnect),
|
||||||
wait_fixed=retry_interval * 1000,
|
wait=tenacity.wait_fixed(retry_interval),
|
||||||
stop_max_attempt_number=max_retries if max_retries >= 0 else None
|
stop=(tenacity.stop_after_attempt(max_retries) if max_retries >= 0
|
||||||
|
else tenacity.stop_never)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
|
|
||||||
import mock
|
import mock
|
||||||
from oslotest import base
|
from oslotest import base
|
||||||
import retrying
|
|
||||||
|
|
||||||
from panko.event.storage import impl_log
|
from panko.event.storage import impl_log
|
||||||
from panko.event.storage import impl_sqlalchemy
|
from panko.event.storage import impl_sqlalchemy
|
||||||
|
@ -45,17 +44,19 @@ class ConnectionRetryTest(base.BaseTestCase):
|
||||||
self.CONF = service.prepare_service([], config_files=[])
|
self.CONF = service.prepare_service([], config_files=[])
|
||||||
|
|
||||||
def test_retries(self):
|
def test_retries(self):
|
||||||
with mock.patch.object(
|
# stevedore gives warning log instead of any exception
|
||||||
retrying.Retrying, 'should_reject') as retry_reject:
|
with mock.patch.object(storage, 'get_connection',
|
||||||
|
side_effect=Exception) as retries:
|
||||||
try:
|
try:
|
||||||
self.CONF.set_override("connection", "no-such-engine://",
|
self.CONF.set_override("retry_interval", 1,
|
||||||
group="database")
|
group="database")
|
||||||
self.CONF.set_override("retry_interval", 0.00001,
|
self.CONF.set_override("max_retries", 3,
|
||||||
group="database")
|
group="database")
|
||||||
storage.get_connection_from_config(self.CONF)
|
storage.get_connection_from_config(self.CONF)
|
||||||
except RuntimeError as err:
|
except Exception:
|
||||||
self.assertIn('no-such-engine', six.text_type(err))
|
self.assertEqual(3, retries.call_count)
|
||||||
self.assertEqual(10, retry_reject.call_count)
|
else:
|
||||||
|
self.fail()
|
||||||
|
|
||||||
|
|
||||||
class ConnectionConfigTest(base.BaseTestCase):
|
class ConnectionConfigTest(base.BaseTestCase):
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
# process, which may cause wedges in the gate later.
|
# process, which may cause wedges in the gate later.
|
||||||
|
|
||||||
debtcollector>=1.2.0 # Apache-2.0
|
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
|
keystonemiddleware!=4.1.0,>=4.0.0 # Apache-2.0
|
||||||
lxml>=2.3 # BSD
|
lxml>=2.3 # BSD
|
||||||
oslo.db>=4.1.0 # Apache-2.0
|
oslo.db>=4.1.0 # Apache-2.0
|
||||||
|
|
Loading…
Reference in New Issue