Apache 2, wsgi, MySQL, Python 2.6.5, web2py 1.90.6
After upgrading to the new DAL I occasionally get this error. Sometimes
I have to reload the page 1-4 times to get it working.
Should I upgrade to 1.91.4 or do you need some more info?
Kenneth
Error ticket for "init"
Ticket ID
xxx.xxx.xxx.xxx.2010-12-25.09-54-54.a54a74d6-70ac-4b4d-b943-5edbf0ac6d23
Version
web2py™ Version 1.90.6 (2010-12-20 17:36:54)
Python Python 2.6.5: /usr/bin/python
Traceback
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Traceback (most recent call last):
File "ggggggggggg/gluon/main.py", line 446, in wsgibase
BaseAdapter.close_all_instances(BaseAdapter.commit)
File "ggggggggggg/gluon/dal.py", line 271, in close_all_instances
action(instance)
File "ggggggggggg/gluon/dal.py", line 1027, in commit
return self.connection.commit()
File "ggggggggggg/gluon/contrib/pymysql/connections.py", line 549, in commit
self.errorhandler(None, exc, value)
File "ggggggggggg/gluon/contrib/pymysql/connections.py", line 545, in commit
self._execute_command(COM_QUERY, "COMMIT")
File "ggggggggggg/gluon/contrib/pymysql/connections.py", line 686, in
_execute_command
self._send_command(command, sql)
File "ggggggggggg/gluon/contrib/pymysql/connections.py", line 681, in
_send_command
sock.send(send_data)
error: [Errno 32] Broken pipe
Error snapshot help Detailed traceback description
<class 'socket.error'>([Errno 32] Broken pipe)
inspect attributes
Exception instance attributes
__module__ 'socket'
__getslice__ <method-wrapper '__getslice__' of error object>
__str__ <method-wrapper '__str__' of error object>
__getattribute__ <method-wrapper '__getattribute__' of error object>
__dict__ {}
__sizeof__ <built-in method __sizeof__ of error object>
__weakref__ None
__init__ <method-wrapper '__init__' of error object>
__setattr__ <method-wrapper '__setattr__' of error object>
__reduce_ex__ <built-in method __reduce_ex__ of error object>
__new__ <built-in method __new__ of type object>
errno 32
__format__ <built-in method __format__ of error object>
__class__ <class 'socket.error'>
filename None
__doc__ None
__getitem__ <method-wrapper '__getitem__' of error object>
__setstate__ <built-in method __setstate__ of error object>
__reduce__ <built-in method __reduce__ of error object>
args (32, 'Broken pipe')
__subclasshook__ <built-in method __subclasshook__ of type object>
__unicode__ <built-in method __unicode__ of error object>
strerror 'Broken pipe'
__delattr__ <method-wrapper '__delattr__' of error object>
__repr__ <method-wrapper '__repr__' of error object>
__hash__ <method-wrapper '__hash__' of error object>
Frames
*
File ggggggggggg/gluon/main.py in wsgibase at line 446 code arguments
variables
Function argument list
(environ={'DOCUMENT_ROOT': 'ggggggggggg/', 'GATEWAY_INTERFACE':
'CGI/1.1', 'HTTPS': '1', 'HTTP_ACCEPT':
'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'HTTP_ACCEPT_CHARSET': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7',
'HTTP_ACCEPT_ENCODING': 'gzip,deflate', 'HTTP_ACCEPT_LANGUAGE':
'en-gb,en;q=0.5', 'HTTP_CONNECTION': 'keep-alive', 'HTTP_COOKIE':
'__utma=12350507.1333234958.1291477692.1291477692...1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none)',
'HTTP_HOST': '', ...}, responder=<built-in method start_response of
mod_wsgi.Adapter object>)
Code listing
441.
442.
443.
444.
445.
446.
447.
448.
449.
450.
# ##################################################
if response._custom_commit:
response._custom_commit()
else:
BaseAdapter.close_all_instances(BaseAdapter.commit)
# ##################################################
# if session not in db try store session on filesystem
# this must be done after trying to commit database!
Variables
BaseAdapter.close_all_instances <function close_all_instances>
BaseAdapter.commit <unbound method BaseAdapter.commit>
global BaseAdapter <class 'gluon.dal.BaseAdapter'>
*
File ggggggggggg/gluon/dal.py in close_all_instances at line 271 code
arguments variables
Function argument list
(action=<unbound method BaseAdapter.commit>)
Code listing
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
""" to close cleanly databases in a multithreaded environment """
if not hasattr(thread,'instances'):
return
while thread.instances:
instance = thread.instances.pop()
action(instance)
# ## if you want pools, recycle this connection
really = True
if instance.pool_size:
sql_locker.acquire()
Variables
action <unbound method BaseAdapter.commit>
instance <gluon.dal.MySQLAdapter object>
*
File ggggggggggg/gluon/dal.py in commit at line 1027 code arguments
variables
Function argument list
(self=<gluon.dal.MySQLAdapter object>)
Code listing
1022.
1023.
1024.
1025.
1026.
1027.
1028.
1029.
1030.
1031.
if query.second!=None:
tables = tables.union(self.tables(query.second))
return list(tables)
def commit(self):
return self.connection.commit()
def rollback(self):
return self.connection.rollback()
Variables
self <gluon.dal.MySQLAdapter object>
self.connection <gluon.contrib.pymysql.connections.Connection object>
self.connection.commit <bound method Connection.commit of
<gluon.contrib.pymysql.connections.Connection object>>
*
File ggggggggggg/gluon/contrib/pymysql/connections.py in commit at line
549 code arguments variables
Function argument list
(self=<gluon.contrib.pymysql.connections.Connection object>)
Code listing
544.
545.
546.
547.
548.
549.
550.
551.
552.
553.
try:
self._execute_command(COM_QUERY, "COMMIT")
self.read_packet()
except:
exc,value,tb = sys.exc_info()
self.errorhandler(None, exc, value)
def rollback(self):
''' Roll back the current transaction '''
try:
Variables
builtinNone None
self <gluon.contrib.pymysql.connections.Connection object>
exc <class 'socket.error'>
value error(32, 'Broken pipe')
self.errorhandler <bound method Connection.defaulterrorhandler of
...n.contrib.pymysql.connections.Connection object>>
*
File ggggggggggg/gluon/contrib/pymysql/connections.py in commit at line
545 code arguments variables
Function argument list
(self=<gluon.contrib.pymysql.connections.Connection object>)
Code listing
540.
541.
542.
543.
544.
545.
546.
547.
548.
549.
self.errorhandler(None, exc, value)
def commit(self):
''' Commit changes to stable storage '''
try:
self._execute_command(COM_QUERY, "COMMIT")
self.read_packet()
except:
exc,value,tb = sys.exc_info()
self.errorhandler(None, exc, value)
Variables
self <gluon.contrib.pymysql.connections.Connection object>
global COM_QUERY '\x03'
self._execute_command <bound method Connection._execute_command of
<gluon.contrib.pymysql.connections.Connection object>>
*
File ggggggggggg/gluon/contrib/pymysql/connections.py in
_execute_command at line 686 code arguments variables
Function argument list
(self=<gluon.contrib.pymysql.connections.Connection object>,
command='\x03', sql='COMMIT')
Code listing
681.
682.
683.
684.
685.
686.
687.
688.
689.
690.
sock.send(send_data)
if DEBUG: dump_packet(send_data)
def _execute_command(self, command, sql):
self._send_command(command, sql)
def _request_authentication(self):
sock = self.socket
self._send_authentication()
Variables
self <gluon.contrib.pymysql.connections.Connection object>
command '\x03'
self._send_command <bound method Connection._send_command of
<gluon.contrib.pymysql.connections.Connection object>>
sql 'COMMIT'
*
File ggggggggggg/gluon/contrib/pymysql/connections.py in _send_command
at line 681 code arguments variables
Function argument list
(self=<gluon.contrib.pymysql.connections.Connection object>,
command='\x03', sql='COMMIT')
Code listing
676.
677.
678.
679.
680.
681.
682.
683.
684.
685.
def _send_command(self, command, sql):
send_data = struct.pack('<i', len(sql) + 1) + command + sql
sock = self.socket
sock.send(send_data)
if DEBUG: dump_packet(send_data)
def _execute_command(self, command, sql):
Variables
send_data '\x07\x00\x00\x00\x03COMMIT'
sock.send <built-in method send of _socket.socket object>
sock <socket._socketobject object>
Context
locals request session response
locals
command :
'\x03'
self :
<gluon.contrib.pymysql.connections.Connection object>
send_data :
'\x07\x00\x00\x00\x03COMMIT'
sock :
<socket._socketobject object>
sql :
'COMMIT'
request
ajax :
False
application :
'init'
args :
[]
body :
<cStringIO.StringO object>
cid :
None
client :
'xxx.xxx.xxx.xxx'
controller :
'default'
cookies :
<SimpleCookie:
__utma='12350507.1333234958.12914...1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none)'>
env :
<Storage {'mod_wsgi_listener_host': '', 'script_...data.fi/',
'mod_wsgi_process_group': 'exp-kals'}>
extension :
'html'
folder :
'ggggggggggg/applications/init/'
function :
'index'
get_vars :
<Storage {}>
now :
datetime.datetime(2010, 12, 25, 9, 54, 52, 861899)
post_vars :
<Storage {}>
raw_args :
None
url :
<gluon.html.XML object>
vars :
<Storage {}>
wsgi :
<Storage {'start_response': <function <lambda> a...p,deflate',
'PATH_INFO': '/init/default/index'}}>
session
auth :
None
balance :
0
cart :
{}
language :
'fi'
language_changed :
False
money_left :
0
money_to_use :
0
response
body :
<cStringIO.StringO object>
cookies :
<SimpleCookie:
session_id_init='xxx.xxx.xxx.xxx-469ece8e-c364-48c8-b36f-c6515c0d45a3'>
files :
[<gluon.html.XML object>, <gluon.html.XML object>, <gluon.html.XML object>]
flash :
''
headers :
<Storage {'Expires': 'Sat, 25 Dec 2010 07:54:52 ...he, must-revalidate,
post-check=0, pre-check=0'}>
menu :
[]
meta :
<Storage {}>
postprocessing :
[]
session_filename :
'ggggggggggg/applications/ini....-469ece8e-c364-48c8-b36f-c6515c0d45a3'
session_id :
'xxx.xxx.xxx.xxx-469ece8e-c364-48c8-b36f-c6515c0d45a3'
session_id_name :
'session_id_init'
session_new :
True
status :
200
subtitle :
<lazyT 'Overview'>
title :
<lazyT 'Your account'>
view :
'default/index.html'
In file: Framework
1.