#19707: TransactionMiddleware leaks transaction state
-------------------------------------+-------------------------------------
     Reporter:  akaariai             |                    Owner:  nobody
         Type:  Bug                  |                   Status:  closed
    Component:  Database layer       |                  Version:  1.4
  (models, ORM)                      |               Resolution:  fixed
     Severity:  Release blocker      |             Triage Stage:  Accepted
     Keywords:                       |      Needs documentation:  0
    Has patch:  0                    |  Patch needs improvement:  1
  Needs tests:  0                    |                    UI/UX:  0
Easy pickings:  0                    |
-------------------------------------+-------------------------------------

Comment (by akaariai):

 One way a rollback might fail is if a connection goes away in the middle
 of a request. I just tried (using the attached test project), and if a
 connection goes away between the testapp.views.view create() and finishing
 the request, then the rollback will fail on MySQL. And, if there is no
 try-except, then the connection will leak transaction state. psycopg2
 actually manages this situation correctly and the rollback() and close()
 will succeed. As a complete shocker mysql doesn't. Now, dropped db
 connections are rare, but they are something Django should survive.
 Unfortunately the DB API 2 has nothing guaranteeing that rollback() and/or
 close() will not raise exceptions in this case.

 (To reproduce, place a breakpoint after the testapp.views.view create(),
 shut down the dbserver, continue the request).

 Raise is a good idea, but only after all the connections have been looped
 through, otherwise the later connections might leak state. Would
 log.exception() to request log be good enough?

-- 
Ticket URL: <https://code.djangoproject.com/ticket/19707#comment:14>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To post to this group, send email to django-updates@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to