mirror of
https://github.com/django/django.git
synced 2024-12-23 09:36:06 +00:00
Fixed #18135 -- Close connection used for db version checking
On MySQL when checking the server version, a new connection could be created but never closed. This could result in open connections on server startup.
This commit is contained in:
parent
a8a81aae20
commit
4423757c0c
@ -418,11 +418,20 @@ class DatabaseWrapper(BaseDatabaseWrapper):
|
||||
@cached_property
|
||||
def mysql_version(self):
|
||||
if not self.server_version:
|
||||
new_connection = False
|
||||
if not self._valid_connection():
|
||||
# Ensure we have a connection with the DB by using a temporary
|
||||
# cursor
|
||||
new_connection = True
|
||||
self.cursor().close()
|
||||
m = server_version_re.match(self.connection.get_server_info())
|
||||
server_info = self.connection.get_server_info()
|
||||
if new_connection:
|
||||
# Make sure we close the connection
|
||||
self.connection.close()
|
||||
self.connection = None
|
||||
m = server_version_re.match(server_info)
|
||||
if not m:
|
||||
raise Exception('Unable to determine MySQL version from version string %r' % self.connection.get_server_info())
|
||||
raise Exception('Unable to determine MySQL version from version string %r' % server_info)
|
||||
self.server_version = tuple([int(x) for x in m.groups()])
|
||||
return self.server_version
|
||||
|
||||
|
@ -89,6 +89,12 @@ class MySQLTests(TestCase):
|
||||
else:
|
||||
self.assertFalse(found_reset)
|
||||
|
||||
@unittest.skipUnless(connection.vendor == 'mysql',
|
||||
"Test valid only for MySQL")
|
||||
def test_server_version_connections(self):
|
||||
connection.close()
|
||||
connection.mysql_version
|
||||
self.assertTrue(connection.connection is None)
|
||||
|
||||
class DateQuotingTest(TestCase):
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user