Opened 18 years ago
Closed 18 years ago
#3279 closed defect (fixed)
python-mysql-1.2.0 has a bug with threading, raising 'ReferenceError: weakly-referenced object no longer exists'
Reported by: | Owned by: | Adrian Holovaty | |
---|---|---|---|
Component: | Documentation | Version: | dev |
Severity: | normal | Keywords: | |
Cc: | dcramer@… | Triage Stage: | Design decision needed |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
I'm getting the following error every so often from a revision checked out on Jan 02, 2007. Sorry... I updated before checking the revision number. Jan 02 puts it somewhere between r4270 and r4274.
2007-01-10 16:36:40: (mod_fastcgi.c.2502) FastCGI-stderr: Traceback (most recent call last): File "build/bdist.linux-i686/egg/flup/server/fcgi_base.py", line 558, in run File "build/bdist.linux-i686/egg/flup/server/fcgi_base.py", line 1112, in handler File "/usr/lib/python2.4/site-packages/django/core/handlers/wsgi.py", line 193, in __call__ response = middleware_method(request, response) File "/usr/lib/python2.4/site-packages/django/contrib/sessions/middleware.py", line 81, in process_response session_key = request.session.session_key or Session.objects.get_new_session_key() File "/usr/lib/python2.4/site-packages/django/contrib/sessions/models.py", line 21, in get_new_session_key self.get(session_key=session_key) File "/usr/lib/python2.4/site-packages/django/db/models/manager.py", line 67, in get return self.get_query_set().get(*args, **kwargs) File "/usr/lib/python2.4/site-packages/django/db/models/query.py", line 211, in get obj_list = list(clone) File "/usr/lib/python2.4/site-packages/django/db/models/query.py", line 103, in __iter__ return iter(self._get_data()) File "/usr/lib/python2.4/site-packages/django/db/models/query.py", line 430, in _get_data self._result_cache = list(self.iterator()) File "/usr/lib/python2.4/site-packages/django/db/models/query.py", line 172, in iterator cursor.execute("SELECT " + (self._distinct and "DISTINCT " or "") + ",".join(select) + sql, params) File "/usr/lib/python2.4/site-packages/MySQLdb/cursors.py", line 137, in execute self.errorhandler(self, exc, value) File "/usr/lib/python2.4/site-packages/MySQLdb/connections.py", line 33, in defaulterrorhandler raise errorclass, errorvalue ReferenceError: weakly-referenced object no longer exists
Let me know if there's any more info you'd like.
Attachments (1)
Change History (22)
comment:1 by , 18 years ago
Resolution: | → worksforme |
---|---|
Status: | new → closed |
comment:2 by , 18 years ago
Info:
- flup revision 2305
- fcgi-2.4.0 with threading
- mysql Ver 14.12 Distrib 5.0.27, for redhat-linux-gnu (i686) using readline 5.0
- mysql-python 1.2.1_p2
Here are some time stamps for frequency:
2007-01-17 10:27:03: 2007-01-17 11:55:23: 2007-01-17 13:26:54: 2007-01-17 14:13:51: 2007-01-17 16:47:06: 2007-01-17 18:13:44: 2007-01-18 03:19:09: 2007-01-18 05:01:25: 2007-01-18 06:43:56: 2007-01-18 06:48:57: 2007-01-18 08:15:19: 2007-01-18 08:28:43: 2007-01-18 09:59:43: 2007-01-18 13:40:09: 2007-01-18 13:44:30: 2007-01-18 16:03:45:
So yes it's reproducable... it happens quite a bit, but the only times that I've seen an error it only takes reloading the page to stop the error. I don't know steps to reproduce it. And it happens on multiple pages.... not just one.
There are actually two other weak references that seem to be popping up.... they seem to be related so I included occurrences of those in the timestamps.
File "build/bdist.linux-i686/egg/flup/server/fcgi_base.py", line 558, in run File "build/bdist.linux-i686/egg/flup/server/fcgi_base.py", line 1112, in handler File "/usr/lib/python2.4/site-packages/django/core/handlers/wsgi.py", line 193, in __call__ response = middleware_method(request, response) File "/usr/lib/python2.4/site-packages/django/contrib/sessions/middleware.py", line 89, in process_response datetime.datetime.now() + datetime.timedelta(seconds=settings.SESSION_COOKIE_AGE)) File "/usr/lib/python2.4/site-packages/django/contrib/sessions/models.py", line 29, in save s.save() File "/usr/lib/python2.4/site-packages/django/db/models/base.py", line 175, in save (backend.quote_name(self._meta.db_table), backend.quote_name(self._meta.pk.column)), [pk_val]) File "/usr/lib/python2.4/site-packages/MySQLdb/cursors.py", line 137, in execute self.errorhandler(self, exc, value) File "/usr/lib/python2.4/site-packages/MySQLdb/connections.py", line 33, in defaulterrorhandler raise errorclass, errorvalue ReferenceError: weakly-referenced object no longer exists File "build/bdist.linux-i686/egg/flup/server/fcgi_base.py", line 558, in run File "build/bdist.linux-i686/egg/flup/server/fcgi_base.py", line 1112, in handler File "/usr/lib/python2.4/site-packages/django/core/handlers/wsgi.py", line 193, in __call__ response = middleware_method(request, response) File "/usr/lib/python2.4/site-packages/django/contrib/sessions/middleware.py", line 89, in process_response datetime.datetime.now() + datetime.timedelta(seconds=settings.SESSION_COOKIE_AGE)) File "/usr/lib/python2.4/site-packages/django/contrib/sessions/models.py", line 29, in save s.save() File "/usr/lib/python2.4/site-packages/django/db/models/base.py", line 204, in save ','.join(placeholders)), db_values) File "/usr/lib/python2.4/site-packages/MySQLdb/cursors.py", line 137, in execute self.errorhandler(self, exc, value) File "/usr/lib/python2.4/site-packages/MySQLdb/connections.py", line 33, in defaulterrorhandler raise errorclass, errorvalue ReferenceError: weakly-referenced object no longer exists
Thanks for looking into it.
comment:3 by , 18 years ago
Hi, thanks for the fast reply!
Could you try to switch to non-threading fastcgi with multiple processes? This just *looks* to be a threading bug. It might be that threading is not supported with this mysql lib. With the logs you see, I'd strongly advise not to use this setup in production.
Please don't mind the closed status of this ticket, this is only due to the reopen problem. I'm currently keeping a watch list of tickets ...
comment:5 by , 18 years ago
I'm running it preforked now. I'll let you know if I get the same errors or not.
I'm on a production server with very little resources, though, and would prefer to run the fcgi as threaded instead of forked. Do you think that there might not be this same issue with PostgreSQL?
comment:6 by , 18 years ago
Component: | Admin interface → Core framework |
---|---|
Summary: | MySQL connections.py ReferenceError: weakly-referenced object no longer exists → threading fastcgi does not work with mysql, raising 'ReferenceError: weakly-referenced object no longer exists' |
If django with threading-flup uses one global connection object and multiple cursors created from the global connection object, this is not going to work, see:
http://forums.mysql.com/read.php?50,104391,104688#msg-104688
Regarding threading and PostgreSQL, there's a lot to say why you shouldn't do threading with python on Linux, but please ask on the user list. I'd like to keep the ticket clean and separate from user support, as a long ticket with sidelines will be difficult to read.
Before I put this ticket forward, I'm going to find out about whether there's a global connection object or whether I can verify this, but this might take until Monday or Tuesday.
comment:8 by , 18 years ago
Cc: | added |
---|---|
Triage Stage: | Unreviewed → Accepted |
comment:9 by , 18 years ago
Component: | Core framework → Documentation |
---|---|
Summary: | threading fastcgi does not work with mysql, raising 'ReferenceError: weakly-referenced object no longer exists' → python-mysql-1.2.0 has a bug with threading, raising 'ReferenceError: weakly-referenced object no longer exists' |
Triage Stage: | Accepted → Design decision needed |
Aha! Found this in the mailing list archives: http://wolfram.kriesing.de/blog/index.php/2006/multithreading-with-mysqldb-and-weakrefs
python-mysql-1.2.0 has a problem with multithreading. Please upgrade. 1.2.1p2 has been reported to solve this. Thanks, Wolfram Kriesing!
Are you two able to test this?
@core: Should we add a warning to the docs?
comment:10 by , 18 years ago
Keywords: | reopen added |
---|
follow-up: 12 comment:11 by , 18 years ago
Sorry, I never specified a web server, but I'm on lighttpd, too.
And my error was with mysql-python 1.2.1p2, so maybe it's still a problem with 1.2.1p2.
comment:12 by , 18 years ago
Replying to wbyoung@mcdonogh.org:
Sorry, I never specified a web server, but I'm on lighttpd, too.
And my error was with mysql-python 1.2.1p2, so maybe it's still a problem with 1.2.1p2.
Args, what a strange bug.
Are you absolutely 120 % sure that you are actually using the 1.2.1p2 module? The blog entry from Wolfram points to exactly the line that, according to your logs, is responsible for the error message. I find this hard to believe. Perhaps we can check this:
- Where is python-mysql installed?
- What are the contents of lines 35-45 in the cursors.py file within MySQLdb?
- Please give us the output of (please follow exactly!)
python manage.py shell import MySQLdb MySQLdb.version_info MySQLdb.__path__
- Another detail that might be interesting: What's your operating system?
comment:13 by , 18 years ago
nevermind. you're right. i did have a previous version of python-mysql installed. i updated and set things up as threaded again. i'll let you know if i have any more problems, but you can probably close this now.
comment:14 by , 18 years ago
Keywords: | reopen removed |
---|---|
Triage Stage: | Design decision needed → Accepted |
For the record:
- python-mysql-1.2.0 has a problem with multithreading.
- Please upgrade. 1.2.1p2 has been reported to solve this.
- source: http://wolfram.kriesing.de/blog/index.php/2006/multithreading-with-mysqldb-and-weakrefs
Already closed, removing "reopen" keyword.
comment:15 by , 18 years ago
Keywords: | reopen added |
---|---|
Triage Stage: | Accepted → Design decision needed |
Marc, Please read comment #9.
I'd still like to see it documented that you shouldn't use python-mysql-1.2.0 with threading, so I hope for Jacob's magic to reopen this ticket.
comment:16 by , 18 years ago
the last one was me. I promise to start using trac's session thingie from now on ;-)
by , 18 years ago
Attachment: | install.diff added |
---|
Adds a small note on install.txt on the DB bindings section.
comment:17 by , 18 years ago
Sorry mir, forgot about comment 9 while reading the ticket :) [I've got the memory of a mosquito!]
Added a patch with a comment for that on install.txt hope it's enough if documentation about that is to be added ;)
comment:18 by , 18 years ago
Resolution: | worksforme |
---|---|
Status: | closed → reopened |
comment:18 by , 18 years ago
Has patch: | set |
---|
comment:19 by , 18 years ago
Keywords: | reopen removed |
---|
comment:21 by , 18 years ago
Resolution: | → fixed |
---|---|
Status: | reopened → closed |
Hi,
the problem with this bug is, if we cannot reproduce the bug, we cannot fix it. And I use mysql and fastcgi myself all the time, and it just works!
Can you please give us some details how to reproduce the bug? I have some feeling that it's also related to fastcgi, but I cannot reproduce it.
I'm closing the bug in the meantime. Please reopen it when you reply!