]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
include InterfaceError for mariadb disconnect check
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 14 Dec 2021 21:46:50 +0000 (16:46 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 16 Dec 2021 14:17:29 +0000 (09:17 -0500)
Corrected the error classes inspected for the "is_disconnect" check for the
``mariadbconnector`` dialect, which was failing for disconnects that
occurred due to common MySQL/MariaDB error codes such as 2006; the DBAPI
appears to currently use the ``mariadb.InterfaceError`` exception class for
disconnect errors such as error code 2006, which has been added to the list
of classes checked.

For the current "real reconnect test", shutting down the mariadb
connection from the client side produces
ProgrammingError("Connection isn't valid anymore") which we also
continue to intercept.

Fixes: #7457
Change-Id: I0b37cd7a73359a23ad756ff2af0a9333c841221b
(cherry picked from commit 3a33fa8b0acd9220ef4428ac6a56ebd8d40c3762)

doc/build/changelog/unreleased_14/7457.rst [new file with mode: 0644]
lib/sqlalchemy/dialects/mysql/base.py

diff --git a/doc/build/changelog/unreleased_14/7457.rst b/doc/build/changelog/unreleased_14/7457.rst
new file mode 100644 (file)
index 0000000..b1942b0
--- /dev/null
@@ -0,0 +1,11 @@
+.. change::
+    :tags: bug, mariadb
+    :tickets: 7457
+
+    Corrected the error classes inspected for the "is_disconnect" check for the
+    ``mariadbconnector`` dialect, which was failing for disconnects that
+    occurred due to common MySQL/MariaDB error codes such as 2006; the DBAPI
+    appears to currently use the ``mariadb.InterfaceError`` exception class for
+    disconnect errors such as error code 2006, which has been added to the list
+    of classes checked.
+
index a9e3d0de7d9e5ed09d9fd04d2fb572df5efa5292..91356500f7f1d0b2ee2ca083d7293976c16da42b 100644 (file)
@@ -2578,16 +2578,21 @@ class MySQLDialect(default.DefaultDialect):
 
     def is_disconnect(self, e, connection, cursor):
         if isinstance(
-            e, (self.dbapi.OperationalError, self.dbapi.ProgrammingError)
+            e,
+            (
+                self.dbapi.OperationalError,
+                self.dbapi.ProgrammingError,
+                self.dbapi.InterfaceError,
+            ),
+        ) and self._extract_error_code(e) in (
+            1927,
+            2006,
+            2013,
+            2014,
+            2045,
+            2055,
         ):
-            return self._extract_error_code(e) in (
-                1927,
-                2006,
-                2013,
-                2014,
-                2045,
-                2055,
-            )
+            return True
         elif isinstance(
             e, (self.dbapi.InterfaceError, self.dbapi.InternalError)
         ):