use is_retriable from neutron-lib
The db api is_retriable function is now available in neutron-lib. This patch consumes it by removing is_retriable and related internal functions and using neutron-lib's version where applicable. NeutronLibImpact Change-Id: Ie33a4eb4d1e52b2d985c9498edea2efb63ef569c
This commit is contained in:
parent
ef71a924cf
commit
9849209bbd
|
@ -18,12 +18,8 @@ import weakref
|
|||
|
||||
from neutron_lib.db import api
|
||||
from neutron_lib.db import model_base
|
||||
from neutron_lib import exceptions
|
||||
from neutron_lib.objects import exceptions as obj_exc
|
||||
from oslo_config import cfg
|
||||
from oslo_db import exception as db_exc
|
||||
from oslo_log import log as logging
|
||||
from oslo_utils import excutils
|
||||
from osprofiler import opts as profiler_opts
|
||||
import osprofiler.sqlalchemy
|
||||
from pecan import util as p_util
|
||||
|
@ -31,7 +27,6 @@ import six
|
|||
import sqlalchemy
|
||||
from sqlalchemy import event # noqa
|
||||
from sqlalchemy import orm
|
||||
from sqlalchemy.orm import exc
|
||||
|
||||
|
||||
def set_hook(engine):
|
||||
|
@ -54,35 +49,6 @@ MAX_RETRIES = 10
|
|||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def is_retriable(e):
|
||||
if getattr(e, '_RETRY_EXCEEDED', False):
|
||||
return False
|
||||
if _is_nested_instance(e, (db_exc.DBDeadlock, exc.StaleDataError,
|
||||
db_exc.DBConnectionError,
|
||||
db_exc.DBDuplicateEntry, db_exc.RetryRequest,
|
||||
obj_exc.NeutronDbObjectDuplicateEntry)):
|
||||
return True
|
||||
# looking savepoints mangled by deadlocks. see bug/1590298 for details.
|
||||
return _is_nested_instance(e, db_exc.DBError) and '1305' in str(e)
|
||||
|
||||
|
||||
def _tag_retriables_as_unretriable(f):
|
||||
"""Puts a flag on retriable exceptions so is_retriable returns False.
|
||||
|
||||
This decorator can be used outside of a retry decorator to prevent
|
||||
decorators higher up from retrying again.
|
||||
"""
|
||||
@six.wraps(f)
|
||||
def wrapped(*args, **kwargs):
|
||||
try:
|
||||
return f(*args, **kwargs)
|
||||
except Exception as e:
|
||||
with excutils.save_and_reraise_exception():
|
||||
if is_retriable(e):
|
||||
setattr(e, '_RETRY_EXCEEDED', True)
|
||||
return wrapped
|
||||
|
||||
|
||||
def _copy_if_lds(item):
|
||||
"""Deepcopy lists/dicts/sets, leave everything else alone."""
|
||||
return copy.deepcopy(item) if isinstance(item, (list, dict, set)) else item
|
||||
|
@ -124,17 +90,6 @@ def retry_if_session_inactive(context_var_name='context'):
|
|||
return decorator
|
||||
|
||||
|
||||
def _is_nested_instance(e, etypes):
|
||||
"""Check if exception or its inner excepts are an instance of etypes."""
|
||||
if isinstance(e, etypes):
|
||||
return True
|
||||
if isinstance(e, exceptions.MultipleExceptions):
|
||||
return any(_is_nested_instance(i, etypes) for i in e.inner_exceptions)
|
||||
if isinstance(e, db_exc.DBError):
|
||||
return _is_nested_instance(e.inner_exception, etypes)
|
||||
return False
|
||||
|
||||
|
||||
@event.listens_for(orm.session.Session, "after_flush")
|
||||
def add_to_rel_load_list(session, flush_context=None):
|
||||
# keep track of new items to load relationships on during commit
|
||||
|
|
|
@ -19,6 +19,7 @@ from neutron_lib.api.definitions import portbindings
|
|||
from neutron_lib.api.definitions import provider_net as provider
|
||||
from neutron_lib.api import validators
|
||||
from neutron_lib import constants
|
||||
from neutron_lib.db import api as lib_db_api
|
||||
from neutron_lib import exceptions as exc
|
||||
from neutron_lib.exceptions import multiprovidernet as mpnet_exc
|
||||
from neutron_lib.exceptions import vlantransparent as vlan_exc
|
||||
|
@ -420,7 +421,7 @@ class MechanismManager(stevedore.named.NamedExtensionManager):
|
|||
that upper layer can handle it or error in ML2 player
|
||||
:raises: neutron.plugins.ml2.common.MechanismDriverError
|
||||
if any mechanism driver call fails. or DB retriable error when
|
||||
raise_db_retriable=False. See neutron.db.api.is_retriable for
|
||||
raise_db_retriable=False. See neutron_lib.db.api.is_retriable for
|
||||
what db exception is retriable
|
||||
"""
|
||||
errors = []
|
||||
|
@ -428,7 +429,7 @@ class MechanismManager(stevedore.named.NamedExtensionManager):
|
|||
try:
|
||||
getattr(driver.obj, method_name)(context)
|
||||
except Exception as e:
|
||||
if raise_db_retriable and db_api.is_retriable(e):
|
||||
if raise_db_retriable and lib_db_api.is_retriable(e):
|
||||
with excutils.save_and_reraise_exception():
|
||||
LOG.debug("DB exception raised by Mechanism driver "
|
||||
"'%(name)s' in %(method)s",
|
||||
|
@ -451,7 +452,7 @@ class MechanismManager(stevedore.named.NamedExtensionManager):
|
|||
"""Notify all mechanism drivers during network creation.
|
||||
|
||||
:raises: DB retriable error if create_network_precommit raises them
|
||||
See neutron.db.api.is_retriable for what db exception is retriable
|
||||
See neutron_lib.db.api.is_retriable for what db exception is retriable
|
||||
or neutron.plugins.ml2.common.MechanismDriverError
|
||||
if any mechanism driver create_network_precommit call fails.
|
||||
|
||||
|
@ -482,7 +483,7 @@ class MechanismManager(stevedore.named.NamedExtensionManager):
|
|||
"""Notify all mechanism drivers during network update.
|
||||
|
||||
:raises: DB retriable error if create_network_precommit raises them
|
||||
See neutron.db.api.is_retriable for what db exception is retriable
|
||||
See neutron_lib.db.api.is_retriable for what db exception is retriable
|
||||
or neutron.plugins.ml2.common.MechanismDriverError
|
||||
if any mechanism driver update_network_precommit call fails.
|
||||
|
||||
|
@ -512,7 +513,7 @@ class MechanismManager(stevedore.named.NamedExtensionManager):
|
|||
"""Notify all mechanism drivers during network deletion.
|
||||
|
||||
:raises: DB retriable error if create_network_precommit raises them
|
||||
See neutron.db.api.is_retriable for what db exception is retriable
|
||||
See neutron_lib.db.api.is_retriable for what db exception is retriable
|
||||
or neutron.plugins.ml2.common.MechanismDriverError
|
||||
if any mechanism driver delete_network_precommit call fails.
|
||||
|
||||
|
@ -546,7 +547,7 @@ class MechanismManager(stevedore.named.NamedExtensionManager):
|
|||
"""Notify all mechanism drivers during subnet creation.
|
||||
|
||||
:raises: DB retriable error if create_network_precommit raises them
|
||||
See neutron.db.api.is_retriable for what db exception is retriable
|
||||
See neutron_lib.db.api.is_retriable for what db exception is retriable
|
||||
or neutron.plugins.ml2.common.MechanismDriverError
|
||||
if any mechanism driver create_subnet_precommit call fails.
|
||||
|
||||
|
@ -576,7 +577,7 @@ class MechanismManager(stevedore.named.NamedExtensionManager):
|
|||
"""Notify all mechanism drivers during subnet update.
|
||||
|
||||
:raises: DB retriable error if create_network_precommit raises them
|
||||
See neutron.db.api.is_retriable for what db exception is retriable
|
||||
See neutron_lib.db.api.is_retriable for what db exception is retriable
|
||||
or neutron.plugins.ml2.common.MechanismDriverError
|
||||
if any mechanism driver update_subnet_precommit call fails.
|
||||
|
||||
|
@ -606,7 +607,7 @@ class MechanismManager(stevedore.named.NamedExtensionManager):
|
|||
"""Notify all mechanism drivers during subnet deletion.
|
||||
|
||||
:raises: DB retriable error if create_network_precommit raises them
|
||||
See neutron.db.api.is_retriable for what db exception is retriable
|
||||
See neutron_lib.db.api.is_retriable for what db exception is retriable
|
||||
or neutron.plugins.ml2.common.MechanismDriverError
|
||||
if any mechanism driver delete_subnet_precommit call fails.
|
||||
|
||||
|
@ -640,7 +641,7 @@ class MechanismManager(stevedore.named.NamedExtensionManager):
|
|||
"""Notify all mechanism drivers during port creation.
|
||||
|
||||
:raises: DB retriable error if create_network_precommit raises them
|
||||
See neutron.db.api.is_retriable for what db exception is retriable
|
||||
See neutron_lib.db.api.is_retriable for what db exception is retriable
|
||||
or neutron.plugins.ml2.common.MechanismDriverError
|
||||
if any mechanism driver create_port_precommit call fails.
|
||||
|
||||
|
@ -670,7 +671,7 @@ class MechanismManager(stevedore.named.NamedExtensionManager):
|
|||
"""Notify all mechanism drivers during port update.
|
||||
|
||||
:raises: DB retriable error if create_network_precommit raises them
|
||||
See neutron.db.api.is_retriable for what db exception is retriable
|
||||
See neutron_lib.db.api.is_retriable for what db exception is retriable
|
||||
or neutron.plugins.ml2.common.MechanismDriverError
|
||||
if any mechanism driver update_port_precommit call fails.
|
||||
|
||||
|
@ -700,7 +701,7 @@ class MechanismManager(stevedore.named.NamedExtensionManager):
|
|||
"""Notify all mechanism drivers during port deletion.
|
||||
|
||||
:raises:DB retriable error if create_network_precommit raises them
|
||||
See neutron.db.api.is_retriable for what db exception is retriable
|
||||
See neutron_lib.db.api.is_retriable for what db exception is retriable
|
||||
or neutron.plugins.ml2.common.MechanismDriverError
|
||||
if any mechanism driver delete_port_precommit call fails.
|
||||
|
||||
|
|
Loading…
Reference in New Issue