#23110: TransactionManagementError when exception is thrown in
django/contrib/sessions/backends/cached_db.py
-------------------------------------+--------------------
     Reporter:  karthikr             |      Owner:  nobody
         Type:  Bug                  |     Status:  new
    Component:  Core (Cache system)  |    Version:  1.6
     Severity:  Normal               |   Keywords:
 Triage Stage:  Unreviewed           |  Has patch:  0
Easy pickings:  0                    |      UI/UX:  0
-------------------------------------+--------------------
 I was in the process of upgrading from django 1.5.1 to 1.6.5, and found
 this wierd issue. When I try to access any block of code which accesses
 the request.user object, the transaction.commit() fails because of the
 session. (Session matching query does not exist)


 {{{
 Environment:


 Request Method: GET
 Request URL: http://dev.wnyc.net:9876/in_iframe/accounts/login/

 Django Version: 1.6.5
 Python Version: 2.7.3


 Traceback:
 File "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-
 packages/django/core/handlers/base.py" in get_response
   137.                 response = response.render()
 File "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-
 packages/django/template/response.py" in render
   105.             self.content = self.rendered_content
 File "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-
 packages/django/template/response.py" in rendered_content
   82.         content = template.render(context)
 File "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-
 packages/django/db/transaction.py" in inner
   371.                 return func(*args, **kwargs)
 File "/home/kravindra/workspace/puppysite/puppy/settings/monkeypatch.py"
 in render
   67.             return
 self.template_obj.render_unicode(**context_to_dict(context))
 File "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-
 packages/mako/template.py" in render_unicode
   198.                                 as_unicode=True)
 File "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-
 packages/mako/runtime.py" in _render
   403.     _render_context(template, callable_, context, *args,
 **_kwargs_for_callable(callable_, data))
 File "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-
 packages/mako/runtime.py" in _render_context
   434.         _exec_template(inherit, lclcontext, args=args,
 kwargs=kwargs)
 File "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-
 packages/mako/runtime.py" in _exec_template
   457.         callable_(context, *args, **kwargs)
 File "/tmp/kravindra/makopuppy/puppysite/base/really_stripped.html.py" in
 render_body
   88.         __M_writer(unicode(self.body()))
 File "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-
 packages/mako/runtime.py" in <lambda>
   278.             return lambda *args, **kwargs:callable_(self.context,
 *args, **kwargs)
 File "/tmp/kravindra/makopuppy/puppysite/registration/login.html.py" in
 render_body
   72.             runtime._include_file(context,
 u'/registration/socialregistration.html', _template_uri)
 File "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-
 packages/mako/runtime.py" in _include_file
   341.     callable_(ctx, **_kwargs_for_include(callable_, context._orig,
 **kwargs))
 File
 "/tmp/kravindra/makopuppy/puppysite/registration/socialregistration.html.py"
 in render_body
   66.             __M_writer(unicode(django_template_tag(request,
 template_tag_function, template_path)))
 File "/home/kravindra/workspace/puppysite/puppy/util/templateutils.py" in
 django_template_tag
   30.         tag_context =
 Context(dict_=template_tag_function(context_getting_context))
 File "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-
 packages/socialregistration/templatetags/facebook_tags.py" in
 facebook_button
   15.     logged_in = context['request'].user.is_authenticated()
 File "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-
 packages/django/utils/functional.py" in inner
   213.             self._setup()
 File "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-
 packages/django/utils/functional.py" in _setup
   298.         self._wrapped = self._setupfunc()
 File "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-
 packages/django/contrib/auth/middleware.py" in <lambda>
   18.         request.user = SimpleLazyObject(lambda: get_user(request))
 File "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-
 packages/django/contrib/auth/middleware.py" in get_user
   10.         request._cached_user = auth.get_user(request)
 File "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-
 packages/django/contrib/auth/__init__.py" in get_user
   140.         user_id = request.session[SESSION_KEY]
 File "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-
 packages/django/contrib/sessions/backends/base.py" in __getitem__
   47.         return self._session[key]
 File "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-
 packages/django/contrib/sessions/backends/base.py" in _get_session
   173.                 self._session_cache = self.load()
 File "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-
 packages/django/contrib/sessions/backends/cached_db.py" in load
   52.                 self.create()
 File "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-
 packages/django/contrib/sessions/backends/db.py" in create
   40.                 self.save(must_create=True)
 File "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-
 packages/django/contrib/sessions/backends/cached_db.py" in save
   62.         super(SessionStore, self).save(must_create)
 File "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-
 packages/django/contrib/sessions/backends/db.py" in save
   63.                 obj.save(force_insert=must_create, using=using)
 File "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-
 packages/django/db/models/base.py" in save
   545.                        force_update=force_update,
 update_fields=update_fields)
 File "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-
 packages/django/db/models/base.py" in save_base
   582.                                    update_fields=update_fields,
 raw=raw, using=using)
 File "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-
 packages/django/dispatch/dispatcher.py" in send
   185.             response = receiver(signal=self, sender=sender,
 **named)
 File "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-
 packages/django/db/transaction.py" in inner
   430.             with self:
 File "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-
 packages/django/db/transaction.py" in __enter__
   422.         self.entering(self.using)
 File "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-
 packages/django/db/transaction.py" in entering
   483.         enter_transaction_management(using=using)
 File "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-
 packages/django/db/transaction.py" in enter_transaction_management
   70.     get_connection(using).enter_transaction_management(managed,
 forced)
 File "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-
 packages/django/db/backends/__init__.py" in enter_transaction_management
   287.         self.validate_no_atomic_block()
 File "/usr/local/virtualenvs/karthik-django165/local/lib/python2.7/site-
 packages/django/db/backends/__init__.py" in validate_no_atomic_block
   367.                 "This is forbidden when an 'atomic' block is
 active.")

 Exception Type: TransactionManagementError at /in_iframe/accounts/login/
 Exception Value: This is forbidden when an 'atomic' block is active.

 }}}


 I am using cached_db as the session engine

 {{{
 SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'
 }}}

 Should I change this to

 {{{
 SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
 }}}

 the outcome is the same.

 Some more context:

 Backend database - POSTGRES

 Have included the middleware classes, etc as recommended in the django 1.6
 documentation.



 Lets say I inject a dummy 'session', everything works fine.

 Has anyone else seen this issue? I went through StackOverflow, and the
 tickets in in code.djangoproject.com, and none of them seem to address
 this specific issue.

-- 
Ticket URL: <https://code.djangoproject.com/ticket/23110>
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 [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/051.5fbb2c9e0c381f0b74f14acbb6118023%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to