Hello list,
I'm running into a problem when running a small web app in webpy with
sqlobject. The app is a REST interface which handles URLs such as:
GET /pkgdb/rest/srv4/7793c4a5ecd6494b25d475632618e44c/pkg-stats/ HTTP/1.1
and
PUT /releases/catalogs/unstable/i386/SunOS5.9/7793c4a5ecd6494b25d475632618e44c/
HTTP/1.1
When called with PUT, it does a few checks and inserts a row into a
table. When the application runs, it initially works for a minute or
two, but eventually gets into state in which it always fails with this
exception:
Traceback (most recent call last):
File "/opt/csw/lib/python/site-packages/web/application.py", line
239, in process
return self.handle()
File "/opt/csw/lib/python/site-packages/web/application.py", line
230, in handle
return self._delegate(fn, self.fvars, args)
File "/opt/csw/lib/python/site-packages/web/application.py", line
420, in _delegate
return handle_class(cls)
File "/opt/csw/lib/python/site-packages/web/application.py", line
396, in handle_class
return tocall(*args)
File "/home/maciej/src/opencsw-gar/lib/web/releases_web.py", line 187, in PUT
srv4 = models.Srv4FileStats.selectBy(md5_sum=md5_sum).getOne()
File "/opt/csw/lib/python/site-packages/sqlobject/sresults.py", line
277, in getOne
results = list(self)
File "/opt/csw/lib/python/site-packages/sqlobject/sresults.py", line
181, in __iter__
return iter(list(self.lazyIter()))
File "/opt/csw/lib/python/site-packages/sqlobject/sresults.py", line
189, in lazyIter
return conn.iterSelect(self)
File "/opt/csw/lib/python/site-packages/sqlobject/dbconnection.py",
line 471, in iterSelect
return select.IterationClass(self, self.getConnection(),
File "/opt/csw/lib/python/site-packages/sqlobject/dbconnection.py",
line 336, in getConnection
conn = self.makeConnection()
File "/opt/csw/lib/python/site-packages/sqlobject/mysql/mysqlconnection.py",
line 71, in makeConnection
conn.ping(True) # Attempt to reconnect. This setting is persistent.
ProgrammingError: (2014, "Commands out of sync; you can't run this command now")
This state persists until I restart the web server ‒ any query which
requires a connection to the database will fail with the same error,
visible as 500 Internal Server Error on the HTTP client side.
>From reading the mysqlconnection.py source code, this function only
intends to throw SqlObject exceptions, and not exceptions specific to
the database engine. I'm guessing that it isn't expected that
conn.ping() could throw an exception?
The failing function in my app starts here:
https://sourceforge.net/apps/trac/gar/browser/csw/mgar/gar/v2/lib/web/releases_web.py#L143
Does it look like a problem with my application, or does it look like
something that should be handled on the SqlObject side? Or should I
check for the state of the connection at the start of this function?
Versions of software I'm using:
SqlObject 1.3.2
Python 2.6.8
MySQL Server 5.5.30
MySQLdb python module 1.2.3
Apache 2.2.22
Oracle Solaris 10 9/10 s10x_u9wos_14a X86
Maciej
|