Details
-
Bug
-
Status: Closed
-
Major - P3
-
Resolution: Fixed
-
0.4
-
None
-
None
-
Ubuntu 14.04 / 15.04
Python 2.7
Tornado 4.1
Motor 0.4
PyMongo 2.8
Description
I've come across an issue where Motor will deadlock under heavy load or when running parallel queries.
If I put my query in a module-level function like:
@gen.coroutine |
def get_data(): |
cur1 = _client.test.testcol1.find() |
cur2 = _client.test.testcol2.find() |
|
data1, data2 = yield [cur1.to_list(length=None), cur2.to_list(length=None)] |
|
raise gen.Return((data1, data2)) |
And then call that function from a RequestHandler like:
class MainHandler(web.RequestHandler): |
@gen.coroutine |
def get(self): |
yield get_data() |
|
self.write("done") |
Motor will always deadlock at:
# ThreadID: 140520054396672
|
File: "/home/bmiller/opt/python/local/lib/python2.7/site-packages/motor/__init__.py", line 683, in call_method
|
result = sync_method(self.delegate, *args, **kwargs)
|
File: "/home/bmiller/opt/python/local/lib/python2.7/site-packages/pymongo/cursor.py", line 1020, in _refresh
|
self.__uuid_subtype))
|
File: "/home/bmiller/opt/python/local/lib/python2.7/site-packages/pymongo/cursor.py", line 933, in __send_message
|
res = client._send_message_with_response(message, **kwargs)
|
File: "/home/bmiller/opt/python/local/lib/python2.7/site-packages/pymongo/mongo_replica_set_client.py", line 1597, in _send_message_with_response
|
self._ensure_connected()
|
File: "/home/bmiller/opt/python/local/lib/python2.7/site-packages/pymongo/mongo_replica_set_client.py", line 1318, in _ensure_connected
|
self.__ensure_monitor()
|
File: "/home/bmiller/opt/python/local/lib/python2.7/site-packages/pymongo/mongo_replica_set_client.py", line 1087, in __ensure_monitor
|
self.__monitor_lock.acquire()
|
However, if I put the code directly inside the get method of my RequestHandler it will work fine.
Here's a simple Tornado app that I threw together that will reproduce the issue:
https://gist.github.com/brentalanmiller/efb184b495cdb92d4524
Thanks,
Brent
Attachments
Issue Links
- related to
-
MOTOR-61 Replica set client fails first reconnect after network error in auth
-
- Closed
-