yahoo-eng-team team mailing list archive
-
yahoo-eng-team team
-
Mailing list archive
-
Message #22785
[Bug 1364986] Re: oslo.db now wraps all DB exceptions
** Changed in: nova
Status: Fix Committed => Fix Released
** Changed in: nova
Milestone: None => juno-rc1
--
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to OpenStack Compute (nova).
https://bugs.launchpad.net/bugs/1364986
Title:
oslo.db now wraps all DB exceptions
Status in OpenStack Compute (Nova):
Fix Released
Bug description:
tl;dr
In a few versions of oslo.db (maybe when we release 1.0.0?), every
project using oslo.db should inspect their code and remove usages of
'raw' DB exceptions like IntegrityError/OperationalError/etc from
except clauses and replace them with the corresponding custom
exceptions from oslo.db (at least a base one - DBError).
Full version
A recent commit to oslo.db changed the way the 'raw' DB exceptions are
wrapped (e.g. IntegrityError, OperationalError, etc). Previously, we
used decorators on Session methods and wrapped those exceptions with
oslo.db custom ones. This is mostly useful for handling them later
(e.g. to retry DB API methods on deadlocks).
The problem with Session decorators was that it wasn't possible to
catch and wrap all possible exceptions. E.g. SA Core exceptions and
exceptions raised in Query.all() calls were ignored. Now we are using
a low level SQLAlchemy event to catch all possible DB exceptions. This
means that if consuming projects had workarounds for those cases and
expected 'raw' exceptions instead of oslo.db ones, they would be
broken. That's why we *temporarily* added both 'raw' exceptions and
new ones to expect clauses in consuming projects code when they were
ported to using of oslo.db to make the transition smooth and allow
them to work with different oslo.db versions.
On the positive side, we now have a solution for problems like
https://bugs.launchpad.net/nova/+bug/1283987 when exceptions in Query
methods calls weren't handled properly.
In a few releases of oslo.db we can safely remove 'raw' DB exceptions
like IntegrityError/OperationalError/etc from projects code and except
only oslo.db specific ones like
DBDuplicateError/DBReferenceError/DBDeadLockError/etc (at least, we
wrap all the DB exceptions with our base exception DBError, if we
haven't found a better match).
oslo.db exceptions and their description:
https://github.com/openstack/oslo.db/blob/master/oslo/db/exception.py
To manage notifications about this bug go to:
https://bugs.launchpad.net/nova/+bug/1364986/+subscriptions
References