We ran into this bug in our production system and spent hours debugging it
and we have our results. Looks like this is quite a major bug, at least for
us.

When we start our application on gunicorn, it spawns workers. Every request
coming to the same worker uses the same django DatabaseWrapper instance
(postgres in our case) also referred to as a connection. If, in the middle
of a transaction in one request, the worker were to receive another
request, this request resets the state of the connection causing the
transaction to behave in unexpected ways as documented in this bug:
https://code.djangoproject.com/ticket/21239
Sometimes the transaction doesn't get committed and there is no exception
raised to let you know that happened. Sometimes parts of it do get
committed while the rest is lost.

We thought that a connection is thread safe, but this bit of gunicorn
patching magic here makes sure that's not the case:
https://github.com/benoitc/gunicorn/blob/18.0/gunicorn/management/commands/run_gunicorn.py#L16

Any ideas what we can do to sidestep this issue? I would ideally want to
keep using gunicorn since our application is fairly network IO intensive.

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/CAMQ_VdtBfwG4i6ZKu5xCerhqm%2B%2BoTFnf1CjDkLHfM6GbWK6P2Q%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to