As seen in this thread:

http://groups.google.com/group/web2py/browse_thread/thread/c6653dadbea77f0d/06ed6fe085eae33c

I'm getting "broken pipe" messages when mysql is restarted, and under
other circunstances.

Going to a shell, I tried doing a query, for example:

>>> db(db.location).select()
<gluon.dal.Rows object at 0xa2056ec>

everything goes ok. Then I restart Mysql, and running the same query I
get:

>>> db(db.location).select()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/var/www/web2py_klnetcenter/gluon/dal.py", line 5382, in
select
    return self.db._adapter.select(self.query,fields,attributes)
  File "/var/www/web2py_klnetcenter/gluon/dal.py", line 1159, in
select
    rows = response(sql)
  File "/var/www/web2py_klnetcenter/gluon/dal.py", line 1149, in
response
    self.execute(sql)
  File "/var/www/web2py_klnetcenter/gluon/dal.py", line 1234, in
execute
    return self.log_execute(*a, **b)
  File "/var/www/web2py_klnetcenter/gluon/dal.py", line 1229, in
log_execute
    ret = self.cursor.execute(*a,**b)
  File "/var/www/web2py_klnetcenter/gluon/contrib/pymysql/cursors.py",
line 108, in execute
    self.errorhandler(self, exc, value)
  File "/var/www/web2py_klnetcenter/gluon/contrib/pymysql/
connections.py", line 184, in defaulterrorhandler
    raise errorclass, errorvalue
OperationalError: (2013, 'Lost connection to MySQL server during
query')

trying to run it again, I only get:

>>> db(db.location).select()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/var/www/web2py_klnetcenter/gluon/dal.py", line 5382, in
select
    return self.db._adapter.select(self.query,fields,attributes)
  File "/var/www/web2py_klnetcenter/gluon/dal.py", line 1159, in
select
    rows = response(sql)
  File "/var/www/web2py_klnetcenter/gluon/dal.py", line 1149, in
response
    self.execute(sql)
  File "/var/www/web2py_klnetcenter/gluon/dal.py", line 1234, in
execute
    return self.log_execute(*a, **b)
  File "/var/www/web2py_klnetcenter/gluon/dal.py", line 1229, in
log_execute
    ret = self.cursor.execute(*a,**b)
  File "/var/www/web2py_klnetcenter/gluon/contrib/pymysql/cursors.py",
line 108, in execute
    self.errorhandler(self, exc, value)
  File "/var/www/web2py_klnetcenter/gluon/contrib/pymysql/
connections.py", line 182, in defaulterrorhandler
    raise Error(errorclass, errorvalue)
Error: (<class 'socket.error'>, error(32, 'Broken pipe'))

forever!. However, if I do:

>>> db._adapter.connection.ping()
True
>>> db(db.location).select()
<gluon.dal.Rows object at 0xa20596c>

so it looks like pinging does a reconnect.

If the connection is closed manually, it won't reconnect either:

>>> db(db.location).select()
<gluon.dal.Rows object at 0xa205a0c>
>>> db._adapter.connection.close()
>>> print db(db.location).select()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/var/www/web2py_klnetcenter/gluon/dal.py", line 5382, in
select
    return self.db._adapter.select(self.query,fields,attributes)
  File "/var/www/web2py_klnetcenter/gluon/dal.py", line 1159, in
select
    rows = response(sql)
  File "/var/www/web2py_klnetcenter/gluon/dal.py", line 1149, in
response
    self.execute(sql)
  File "/var/www/web2py_klnetcenter/gluon/dal.py", line 1234, in
execute
    return self.log_execute(*a, **b)
  File "/var/www/web2py_klnetcenter/gluon/dal.py", line 1229, in
log_execute
    ret = self.cursor.execute(*a,**b)
  File "/var/www/web2py_klnetcenter/gluon/contrib/pymysql/cursors.py",
line 108, in execute
    self.errorhandler(self, exc, value)
  File "/var/www/web2py_klnetcenter/gluon/contrib/pymysql/
connections.py", line 184, in defaulterrorhandler
    raise errorclass, errorvalue
InterfaceError: (0, '')

forever again!

Is this the expected behavior? Is web2py or the adapter not detecting
it is not connected and not trying to reconnect unless you ping the
connection?

I think this needs fixing. I have a long running shell process, and
every night I find it stopped working and "broken pipe" errors are all
around... I'm trying to workaround it pinging the connection, but I
think that's not a good fix...

Greets.

Reply via email to