MongoDB断言错误:启动\u from==self.\u已检索(pymongo驱动程序)

MongoDB断言错误:启动\u from==self.\u已检索(pymongo驱动程序),mongodb,replication,pymongo,sharding,assertion,Mongodb,Replication,Pymongo,Sharding,Assertion,MongoDB问题: 我们正在使用分片复制集,对mongo(版本:2.1.1-pre-)运行pymongo 2.2。当查询返回多个结果文档时,我们将得到一个回溯 Traceback (most recent call last): File "/usr/lib64/python2.6/threading.py", line 532, in __bootstrap_inner self.run() File "/opt/DCM/mods/plugin.py", line 25, in run

MongoDB问题:

我们正在使用分片复制集,对mongo(版本:2.1.1-pre-)运行pymongo 2.2。当查询返回多个结果文档时,我们将得到一个回溯

Traceback (most recent call last):
File "/usr/lib64/python2.6/threading.py", line 532, in __bootstrap_inner
  self.run()
File "/opt/DCM/mods/plugin.py", line 25, in run
  self._mod.collect_metrics_dcm()
File "/opt/DCM/plugins/res.py", line 115, in collect_metrics_dcm
  ms.updateSpecificMetric(metricName, value, timestamp)
File "/opt/DCM/mods/mongoSaver.py", line 155, in updateSpecificMetric
  latestDoc = self.getLatestDoc(metricName)
File "/opt/DCM/mods/mongoSaver.py", line 70, in getLatestDoc
  for d in dlist:
File "/usr/lib64/python2.6/site-packages/pymongo/cursor.py", line 747, in next
  if len(self.__data) or self._refresh():
File "/usr/lib64/python2.6/site-packages/pymongo/cursor.py", line 698, in _refresh
  self.__uuid_subtype))
File "/usr/lib64/python2.6/site-packages/pymongo/cursor.py", line 668, in __send_message
  assert response["starting_from"] == self.__retrieved
AssertionError
给出dlist是什么的代码是一个简单的find()。我试过reIndex(),没有乐趣。我尝试过停止和启动mongo服务器,没有乐趣


这对我来说很容易复制。有什么想法吗?

好的,所以我对这个断言错误有一个解决方案

Mongo中有一个BUG。当查询分片复制集时,Mongo返回了一个不正确的“起始位置”值。它不是在第一次查询时返回0,而是返回接收到的记录数,而不是偏移量值。我为pymongo提供了一个补丁,用于防止此错误信息:

文件是site packages/pymongo/cursor.py

[user@hostname]$ diff cursor.py.orig cursor.py
631,632c631,634
<         if not self.__tailable:
<             assert response["starting_from"] == self.__retrieved
---
>   if ((not self.__tailable) and (self.__retrieved != 0) and (response["starting_from"] != self.__retrieved)):
>             from pprint import pformat
>             msg = "Server response of 'starting_from' is '%s', but self__retrieved (which is only set to nonzero below here) is '%s'." % (pformat(response), pformat(self.__retrieved))
>             assert False, msg
[user@hostname]$diff cursor.py.orig cursor.py
631632C6363634
如果((非自可裁剪)和(自检索!=0)和(响应[“从”!=自检索]):
>从pprint导入pformat
>msg=“从开始”的服务器响应为“%s”,但检索到的self\uu(此处仅设置为非零)为“%s”。”%(pformat(响应),pformat(检索到self.\uu))
>断言错误,msg
“starting_from”来自helpers.py,解码来自Mongo的响应:

result["starting_from"] = struct.unpack("<i", response[12:16])[0]

result[“starting_from”]=struct.unpack(这是mongos 2.1.1开发版本中的一个bug。请参阅