This looks suspiciously like the errors I would get under high load
when I tried to use Schevo (which uses a slightly-modified Durus
under the hood) in a multi-threaded environment despite the fact that
I used locks to serialize access to the in-process Durus storage.
The fix that worked for me was the one described here:
http://mail.mems-exchange.org/durusmail/durus-users/698/
....followed by the bugfix suggested here:
http://mail.mems-exchange.org/durusmail/durus-users/703/
As far as I can tell, these are scheduled for inclusion in the next
Durus release, but for now Durus 3.5 out of the box is not reliable
in a multithreaded environment, even when Durus database access is
serialized.
Hope this helps...
On 2006 Nov 13, at 11:52, Aïssa HAMMOUCHI wrote:
> i'm trying to make working a connection pooling in my app
> (i'm using mod_scgi/apache/quixote/durus)
>
> the firsts 40 requests (i call db to get one object) get a
> traceback, then tracebacks disappear after this occured.
> if i stop my app and restart durus/scgi and launch 200 requests
> with a load test tool, i get the same scenario after that 40 or
> more requests are done, tracebacks disappear and the next requests
> work fine with no tracebacks..
>
> what's wrong ?
>
> [ ... snip ... ]
> [2006-11-13 19:53:46] exception caught
> Traceback (most recent call last):
> File "/home/ah/src/alternate-modules/quixote/publish.py", line
> 278, in process_request
> output = self.try_publish(request)
> File "/home/ah/src/alternate-modules/quixote/publish.py", line
> 253, in try_publish
> output = self.root_directory._q_traverse(components)
> File "/home/ah/src/alternate-modules/quixote/directory.py", line
> 63, in _q_traverse
> return obj._q_traverse(path)
> File "/home/ah/src/alternate-modules/quixote/directory.py", line
> 63, in _q_traverse
> return obj._q_traverse(path)
> File "/home/ah/src/alternate-modules/quixote/directory.py", line
> 57, in _q_traverse
> obj = self._q_lookup(component)
> File "/home/ah/pymods/fidji/ui/browse.ptl", line 122, in _q_lookup
> body(menu(), list_doc())
> File "/home/ah/pymods/fidji/ui/browse.ptl", line 117, in list_doc
> "
%s
"%(i.id,i.nom)
> File "/home/ah/src/alternate-modules/durus/persistent.py", line
> 92, in __getattribute__
> self._p_load_state()
> File "/home/ah/src/alternate-modules/durus/persistent.py", line
> 135, in _p_load_state
> self._p_connection.load_state(self)
> File "/home/ah/src/alternate-modules/durus/connection.py", line
> 185, in load_state
> pickle = self.get_stored_pickle(oid)
> File "/home/ah/src/alternate-modules/durus/connection.py", line
> 111, in get_stored_pickle
> assert oid == oid2
> AssertionError
--
Matthew Scott
mscott@springfieldtech.com