64e50494f2
This functionality has been available upstream since SQLALchemy 1.2 [1]. However, for oslo.db to use this feature while maintaining full behavior, we need at least SQLAlchemy 2.0.5 to provide complete event support. In particular, oslo.db adds several new "is disconnect" conditions including those specific to Galera. Behavior of the handle_error event is modified to expect the "pre-ping" calling form, which may not have an "engine" present (only a dialect), and additionally takes advantage of the new is_pre_ping attribute which informs on the correct way to affect the disconnection status within the ping handler. Change-Id: I50d862d3cbb126987a63209795352c6e801ed919
39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
from oslo_utils import versionutils
|
|
|
|
from sqlalchemy import __version__
|
|
|
|
|
|
_vers = versionutils.convert_version_to_tuple(__version__)
|
|
sqla_2 = _vers >= (2, )
|
|
|
|
native_pre_ping_event_support = _vers >= (2, 0, 5)
|
|
|
|
|
|
def dialect_from_exception_context(ctx):
|
|
if sqla_2:
|
|
# SQLAlchemy 2.0 still has context.engine, however if the
|
|
# exception context is called in the context of a ping handler,
|
|
# engine is not present. need to use dialect instead
|
|
return ctx.dialect
|
|
else:
|
|
return ctx.engine.dialect
|
|
|
|
|
|
def driver_connection(connection):
|
|
if sqla_2:
|
|
return connection.connection.driver_connection
|
|
else:
|
|
return connection.connection.connection
|