Skip to content

Commit 3d5d243

Browse files
author
Gabriel Monroy
committed
fix(tests): close db connections during threaded execution
This appears to resolve https://code.djangoproject.com/ticket/22420 allowing us to get test coverage for threads executed within TransactionTestCases.
1 parent 5710ccb commit 3d5d243

1 file changed

Lines changed: 20 additions & 1 deletion

File tree

controller/api/models.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from celery.canvas import group
1515
from django.conf import settings
1616
from django.contrib.auth.models import User
17-
from django.db import models
17+
from django.db import models, connections
1818
from django.db.models import Max
1919
from django.db.models.signals import post_delete
2020
from django.db.models.signals import post_save
@@ -36,6 +36,20 @@ def log_event(app, msg, level=logging.INFO):
3636
logger.log(level, msg)
3737

3838

39+
def close_db_connections(func, *args, **kwargs):
40+
"""
41+
Decorator to close db connections during threaded execution
42+
43+
Note this is necessary to work around:
44+
https://code.djangoproject.com/ticket/22420
45+
"""
46+
def _inner(*args, **kwargs):
47+
func(*args, **kwargs)
48+
for conn in connections.all():
49+
conn.close()
50+
return _inner
51+
52+
3953
class AuditedModel(models.Model):
4054
"""Add created and updated fields to a model."""
4155

@@ -290,18 +304,21 @@ def _get_command(self):
290304

291305
_command = property(_get_command)
292306

307+
@close_db_connections
293308
@transition(field=state, source=INITIALIZED, target=CREATED)
294309
def create(self):
295310
image = self.release.image
296311
c_type = self.type
297312
self._scheduler.create(self._job_id, image, self._command.format(**locals()))
298313

314+
@close_db_connections
299315
@transition(field=state,
300316
source=[CREATED, UP, DOWN],
301317
target=UP, crashed=DOWN)
302318
def start(self):
303319
self._scheduler.start(self._job_id)
304320

321+
@close_db_connections
305322
@transition(field=state,
306323
source=[INITIALIZED, CREATED, UP, DOWN],
307324
target=UP,
@@ -320,10 +337,12 @@ def deploy(self, release):
320337
# destroy old container
321338
self._scheduler.destroy(old_job_id)
322339

340+
@close_db_connections
323341
@transition(field=state, source=UP, target=DOWN)
324342
def stop(self):
325343
self._scheduler.stop(self._job_id)
326344

345+
@close_db_connections
327346
@transition(field=state,
328347
source=[INITIALIZED, CREATED, UP, DOWN],
329348
target=DESTROYED)

0 commit comments

Comments
 (0)