Fixed #34825 -- Avoided setting unused connections when initializing parallel workers.

This commit is contained in:
David Sanders 2023-09-22 19:21:37 +10:00 committed by Mariusz Felisiak
parent 4f2ae0644d
commit a5905b164d
2 changed files with 8 additions and 2 deletions

View File

@ -406,6 +406,7 @@ def _init_worker(
process_setup=None, process_setup=None,
process_setup_args=None, process_setup_args=None,
debug_mode=None, debug_mode=None,
used_aliases=None,
): ):
""" """
Switch to databases dedicated to this worker. Switch to databases dedicated to this worker.
@ -430,7 +431,8 @@ def _init_worker(
django.setup() django.setup()
setup_test_environment(debug=debug_mode) setup_test_environment(debug=debug_mode)
for alias in connections: db_aliases = used_aliases or connections
for alias in db_aliases:
connection = connections[alias] connection = connections[alias]
if start_method == "spawn": if start_method == "spawn":
# Restore initial settings in spawned processes. # Restore initial settings in spawned processes.
@ -491,6 +493,7 @@ class ParallelTestSuite(unittest.TestSuite):
self.buffer = buffer self.buffer = buffer
self.initial_settings = None self.initial_settings = None
self.serialized_contents = None self.serialized_contents = None
self.used_aliases = None
super().__init__() super().__init__()
def run(self, result): def run(self, result):
@ -520,6 +523,7 @@ class ParallelTestSuite(unittest.TestSuite):
self.process_setup.__func__, self.process_setup.__func__,
self.process_setup_args, self.process_setup_args,
self.debug_mode, self.debug_mode,
self.used_aliases,
], ],
) )
args = [ args = [
@ -1052,6 +1056,7 @@ class DiscoverRunner:
suite.serialized_aliases = set( suite.serialized_aliases = set(
alias for alias, serialize in databases.items() if serialize alias for alias, serialize in databases.items() if serialize
) )
suite.used_aliases = set(databases)
with self.time_keeper.timed("Total database setup"): with self.time_keeper.timed("Total database setup"):
old_config = self.setup_databases( old_config = self.setup_databases(
aliases=databases, aliases=databases,

View File

@ -748,8 +748,9 @@ class TestRunnerInitializerTests(SimpleTestCase):
# Initializer must be a function. # Initializer must be a function.
self.assertIs(mocked_pool.call_args.kwargs["initializer"], _init_worker) self.assertIs(mocked_pool.call_args.kwargs["initializer"], _init_worker)
initargs = mocked_pool.call_args.kwargs["initargs"] initargs = mocked_pool.call_args.kwargs["initargs"]
self.assertEqual(len(initargs), 6) self.assertEqual(len(initargs), 7)
self.assertEqual(initargs[5], True) # debug_mode self.assertEqual(initargs[5], True) # debug_mode
self.assertEqual(initargs[6], {db.DEFAULT_DB_ALIAS}) # Used database aliases.
class Ticket17477RegressionTests(AdminScriptTestCase): class Ticket17477RegressionTests(AdminScriptTestCase):