from oslo_config import cfg
from oslo_db import api as oslo_db_api
+from oslo_db import exception as db_exc
from oslo_db.sqlalchemy import session
from oslo_utils import uuidutils
from sqlalchemy import exc
_FACADE = None
MAX_RETRIES = 10
-retry_db_errors = oslo_db_api.wrap_db_retry(max_retries=MAX_RETRIES,
- retry_on_deadlock=True)
+is_deadlock = lambda e: isinstance(e, db_exc.DBDeadlock)
+retry_db_errors = oslo_db_api.wrap_db_retry(
+ max_retries=MAX_RETRIES,
+ exception_checker=is_deadlock
+)
def _create_facade_lazily():
retry_interval=0.1,
inc_retry_interval=True,
retry_on_request=True,
- retry_on_deadlock=True)
+ exception_checker=db_api.is_deadlock)
def make_reservation(self, context, tenant_id, resources, deltas, plugin):
# Lock current reservation table
# NOTE(salv-orlando): This routine uses DB write locks.
{'type': self.get_type(), 'range': current_range})
@oslo_db_api.wrap_db_retry(
- max_retries=db_api.MAX_RETRIES, retry_on_deadlock=True)
+ max_retries=db_api.MAX_RETRIES,
+ exception_checker=db_api.is_deadlock)
def sync_allocations(self):
# determine current configured allocatable tunnel ids
tunnel_ids = set()
return self._bind_port_if_needed(port_context)
@oslo_db_api.wrap_db_retry(
- max_retries=db_api.MAX_RETRIES,
- retry_on_deadlock=True, retry_on_request=True,
- exception_checker=lambda e: isinstance(e, sa_exc.StaleDataError)
+ max_retries=db_api.MAX_RETRIES, retry_on_request=True,
+ exception_checker=lambda e: isinstance(e, (sa_exc.StaleDataError,
+ os_db_exception.DBDeadlock))
)
def update_port_status(self, context, port_id, status, host=None,
network=None):
# ensure that an UPDATE statement is emitted rather than an INSERT one
@oslo_db_api.wrap_db_retry(
max_retries=db_api.MAX_RETRIES,
- retry_on_deadlock=True,
exception_checker=lambda exc:
- isinstance(exc, oslo_db_exception.DBDuplicateEntry))
+ isinstance(exc, (oslo_db_exception.DBDuplicateEntry,
+ oslo_db_exception.DBDeadlock)))
def _set_quota_usage(self, context, tenant_id, in_use):
return quota_api.set_quota_usage(
context, self.name, tenant_id, in_use=in_use)