This bug is quite easy to reproduce if you use mysql with a master-slave
replication setup and start the slave db with a --read-only flag:
{{{
Traceback:
File "/home/kux/workspace/src/other/django/django/core/handlers/base.py"
in get_response
111. response = callback(request,
*callback_args, **callback_kwargs)
File
"/home/kux/workspace/src/other/django/django/contrib/admin/options.py" in
wrapper
366. return self.admin_site.admin_view(view)(*args,
**kwargs)
File "/home/kux/workspace/src/other/django/django/utils/decorators.py" in
_wrapped_view
91. response = view_func(request, *args, **kwargs)
File
"/home/kux/workspace/src/other/django/django/views/decorators/cache.py" in
_wrapped_view_func
89. response = view_func(request, *args, **kwargs)
File "/home/kux/workspace/src/other/django/django/contrib/admin/sites.py"
in inner
196. return view(request, *args, **kwargs)
File "/home/kux/workspace/src/other/django/django/db/transaction.py" in
inner
209. return func(*args, **kwargs)
File "/home/kux/workspace/src/other/django-cms/cms/admin/pageadmin.py" in
wrap
154. Page.objects.select_for_update()
File "/home/kux/workspace/src/other/django/django/db/models/query.py" in
exists
562. return self.query.has_results(using=self.db)
File "/home/kux/workspace/src/other/django/django/db/models/sql/query.py"
in has_results
441. return bool(compiler.execute_sql(SINGLE))
File
"/home/kux/workspace/src/other/django/django/db/models/sql/compiler.py" in
execute_sql
818. cursor.execute(sql, params)
File "/home/kux/workspace/src/other/django/django/db/backends/util.py" in
execute
40. return self.cursor.execute(sql, params)
File
"/home/kux/workspace/src/other/django/django/db/backends/mysql/base.py" in
execute
114. return self.cursor.execute(query, args)
File "/home/kux/workspace/envs/hb23/local/lib/python2.7/site-
packages/MySQLdb/cursors.py" in execute
174. self.errorhandler(self, exc, value)
File "/home/kux/workspace/envs/hb23/local/lib/python2.7/site-
packages/MySQLdb/connections.py" in defaulterrorhandler
36. raise errorclass, errorvalue
Exception Type: DatabaseError at /admin/cms/page/add/
Exception Value: (1290, 'The MySQL server is running with the --read-only
option so it cannot execute this statement')
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/19918>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* owner: nobody => kux
* needs_docs: => 0
* status: new => assigned
* needs_tests: => 0
* needs_better_patch: => 0
--
Ticket URL: <https://code.djangoproject.com/ticket/19918#comment:1>
Comment (by kux):
For patch see pull request: https://github.com/django/django/pull/852
--
Ticket URL: <https://code.djangoproject.com/ticket/19918#comment:2>
* stage: Unreviewed => Accepted
--
Ticket URL: <https://code.djangoproject.com/ticket/19918#comment:3>
* stage: Accepted => Ready for checkin
--
Ticket URL: <https://code.djangoproject.com/ticket/19918#comment:4>
* stage: Ready for checkin => Accepted
Comment:
Sorry, but the "Ready for checkin" flag should be set by another reviewer,
not by the patch author.
--
Ticket URL: <https://code.djangoproject.com/ticket/19918#comment:5>
Comment (by anonymous coward):
Nifty. I'm glad to see a patch for this. I was having the same issue, and
decided to search for an existing ticket before adding excessive bytes to
the Interwebz.
--
Ticket URL: <https://code.djangoproject.com/ticket/19918#comment:6>
Comment (by anonymous):
The fact that the db was running with --read-only flag is a fortunate
case. Otherwise this bug would cause subtle concurrency issues since all
exclusive locks would be held on the slave db instead of master.
--
Ticket URL: <https://code.djangoproject.com/ticket/19918#comment:7>
* status: assigned => closed
* resolution: => fixed
Comment:
In [changeset:"1c64a0f29e47a3da1dfac06b04ef84280bd809a7"]:
{{{
#!CommitTicketReference repository=""
revision="1c64a0f29e47a3da1dfac06b04ef84280bd809a7"
Fixed #19918 -- Modified select_for_update to run on the write database.
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/19918#comment:8>
Comment (by Tim Graham <timograham@…>):
In [changeset:"80b95a2b1fc8c8425a81a23706af971061dc238f"]:
{{{
#!CommitTicketReference repository=""
revision="80b95a2b1fc8c8425a81a23706af971061dc238f"
[1.6.x] Fixed #19918 -- Modified select_for_update to run on the write
database.
Backport of 1c64a0f29e from master
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/19918#comment:9>