This operation would block forever

Etienne Robillard <[email protected]> Wed, 22 Nov 2017 12:19:24 -0500
Newsgroups gmane.comp.web.zope.zodb
Message-ID <[email protected]>
Hi,

My custom Schevo/ZODB backend uses gevent internally to make 
asynchronous ZODB operations.

Sometimes I get a internal 500 error/traceback:

Traceback (most recent call last):
   File "lib/notmm/controllers/wsgi.pyx", line 209, in notmm.controllers.wsgi.BaseController.get_response (lib/notmm/controllers/wsgi.c:4328)
   File "/home/erob/src/django-hotsauce/lib/notmm/dbapi/orm/decorators.py", line 35, in _wrapper
     return view_func(req, **kwargs)
   File "/home/erob/src/blogengine2/lib/blogengine2/views/detail.py", line 43, in details
     result = db.Message.findone(messageid=oid)
   File "/home/erob/src/django-hotsauce/extras/libschevo/lib/schevo/extent.py", line 174, in findone
     results = self._find(self.name, criterion)
   File "/home/erob/src/django-hotsauce/extras/libschevo/lib/schevo/database2.py", line 768, in _find_entity_oids
     extent_name, criteria)
   File "/home/erob/src/django-hotsauce/extras/libschevo/lib/schevo/database2.py", line 895, in _find_entity_oids_field_equality
     results = list(branch.keys())
   File "/home/erob/ncvs/ZODB/src/ZODB/Connection.py", line 783, in setstate
     p, serial = self._storage.load(oid)
   File "/home/erob/ncvs/ZODB/src/ZODB/mvccadapter.py", line 144, in load
     r = self._storage.loadBefore(oid, self._start)
   File "/home/erob/work/ZEO-5.1.0/src/ZEO/ClientStorage.py", line 522, in loadBefore
     return self._server.load_before(oid, tid)
   File "/home/erob/work/ZEO-5.1.0/src/ZEO/asyncio/client.py", line 783, in load_before
     return self.__call(self.client.load_before_threadsafe, oid, tid)
   File "/home/erob/work/ZEO-5.1.0/src/ZEO/asyncio/client.py", line 743, in call
     return self.wait_for_result(result, timeout)
   File "/home/erob/work/ZEO-5.1.0/src/ZEO/asyncio/client.py", line 756, in wait_for_result
     return future.result(timeout)
   File "/usr/local/lib/python2.7/dist-packages/futures-3.0.5-py2.7.egg/concurrent/futures/_base.py", line 400, in result
     self._condition.wait(timeout)
   File "/usr/lib/python2.7/threading.py", line 340, in wait
     waiter.acquire()
   File "src/gevent/_semaphore.py", line 198, in gevent._semaphore.Semaphore.acquire (src/gevent/gevent._semaphore.c:4541)
   File "src/gevent/_semaphore.py", line 226, in gevent._semaphore.Semaphore.acquire (src/gevent/gevent._semaphore.c:4367)
   File "src/gevent/_semaphore.py", line 166, in gevent._semaphore.Semaphore._do_wait (src/gevent/gevent._semaphore.c:3562)
   File "/usr/local/lib/python2.7/dist-packages/gevent/hub.py", line 630, in switch
     return RawGreenlet.switch(self)
LoopExit: ('This operation would block forever', <Hub at 0xb370b93c epoll pending=0 ref=0 fileno=12 resolver=<gevent.resolver_thread.Resolver at 0xb370e32c pool=<ThreadPool at 0xb370e30c 0/1/10>> threadpool=<ThreadPool at 0xb370e30c 0/1/10>>)

  Any ideas what could be the cause of this blocking error when using 
epoll and gevent to make ZODB operations under uWSGI and python 2.7?

Regards,

Etienne

-- 
Etienne Robillard
[email protected]
http://www.isotopesoftware.ca/

-- 
You received this message because you are subscribed to the Google Groups "zodb" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
For more options, visit https://groups.google.com/d/optout.