﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
20373	Simple Multi-DB read replica unit test raises TransactionManagementError	TTimo	nobody	"(I posted this on the ML initially, but I suspect it's a bug in the testing framework. A complete example is attached. Empty unit test, with no routers and a read replica DB setup gives a TransactionManagementError)

--

I started assessing multi-db support in Django 1.5.1, I'm interested in having read replicas and a write master.

I've figured out all the easy stuff: using TEST_MIRROR in the DATABASES setting, writing a simple router that splits read and write traffic, all according to the documentation. I can run a test server and issue some calls manually, but I have not been able to run simple unit tests.

The most simple test I can build fails during _pre_setup() with a ""TransactionManagementError: Transaction managed block ended with pending COMMIT/ROLLBACK""

My databases are MySQL EC2 RDS instances, the replication is working fine, the tables are InnoDB etc.

I know there is active development around transaction management code in Django lately, so maybe I've stumbled on a bug? I'm attaching a simple test setup that should make it easy to reproduce.

Any advice would be greatly appreciated.

Cheers,
TTimo

{{{
./manage.py test readreplica
Creating test database for alias 'default'...
E
======================================================================
ERROR: testTest (readreplica.tests.Test)
----------------------------------------------------------------------
Traceback (most recent call last):
  File ""/usr/local/lib/python2.7/dist-packages/django/test/testcases.py"", line 240, in __call__
    self._pre_setup()
  File ""/usr/local/lib/python2.7/dist-packages/django/test/testcases.py"", line 462, in _pre_setup
    self._fixture_setup()
  File ""/usr/local/lib/python2.7/dist-packages/django/test/testcases.py"", line 822, in _fixture_setup
    if not connections_support_transactions():
  File ""/usr/local/lib/python2.7/dist-packages/django/test/testcases.py"", line 809, in connections_support_transactions
    for conn in connections.all())
  File ""/usr/local/lib/python2.7/dist-packages/django/test/testcases.py"", line 809, in <genexpr>
    for conn in connections.all())
  File ""/usr/local/lib/python2.7/dist-packages/django/utils/functional.py"", line 48, in __get__
    res = instance.__dict__[self.func.__name__] = self.func(instance)
  File ""/usr/local/lib/python2.7/dist-packages/django/db/backends/__init__.py"", line 627, in supports_transactions
    self.connection.leave_transaction_management()
  File ""/usr/local/lib/python2.7/dist-packages/django/db/backends/__init__.py"", line 319, in leave_transaction_management
    ""Transaction managed block ended with pending COMMIT/ROLLBACK"")
TransactionManagementError: Transaction managed block ended with pending COMMIT/ROLLBACK

----------------------------------------------------------------------
Ran 0 tests in 0.084s

FAILED (errors=1)
Destroying test database for alias 'default'...
}}}"	Bug	closed	Testing framework	1.5	Normal	needsinfo			Unreviewed	0	0	0	0	0	0
