Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python MongoReplicateSetClient在主重新选举期间意外失败_Python_Mongodb_Pymongo_Replicaset - Fatal编程技术网

Python MongoReplicateSetClient在主重新选举期间意外失败

Python MongoReplicateSetClient在主重新选举期间意外失败,python,mongodb,pymongo,replicaset,Python,Mongodb,Pymongo,Replicaset,我正在将涉及mongo资源的代码库迁移到使用复制,我看到MongoReplicateSetClient出现了一些意外行为。客户端工作正常,除非我在选择新的主服务器时尝试写入 我正在运行的简单测试是: *启动一个3节点副本集 *连接MongoReplicaSetClient'localhost:27017、localhost:27018、localhost:27017',replicaSet='rs0' *执行写操作 *杀死主服务器并立即执行写操作 *在初选完成后执行另一次写入 以上所有步骤都可以

我正在将涉及mongo资源的代码库迁移到使用复制,我看到MongoReplicateSetClient出现了一些意外行为。客户端工作正常,除非我在选择新的主服务器时尝试写入

我正在运行的简单测试是: *启动一个3节点副本集 *连接MongoReplicaSetClient'localhost:27017、localhost:27018、localhost:27017',replicaSet='rs0' *执行写操作 *杀死主服务器并立即执行写操作 *在初选完成后执行另一次写入

以上所有步骤都可以正常工作,但从第二步到最后一步的主要步骤是关闭的。根据文档,我希望在不存在主服务器的情况下,所有执行的写入尝试都会抛出一个错误。然而,我看到的是一个通用的断言错误

db = MongoReplicaSetClient('localhost:27017,localhost:27018,localhost:27017', replicaSet='rs0', w=2).testdb
db.testcol.save({'test': 1})
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "build/bdist.linux-x86_64/egg/pymongo/collection.py", line 266, in save
  File "build/bdist.linux-x86_64/egg/pymongo/collection.py", line 362, in insert
  File "build/bdist.linux-x86_64/egg/pymongo/message.py", line 248, in _do_batched_insert
  File "build/bdist.linux-x86_64/egg/pymongo/mongo_replica_set_client.py", line 1456, in _send_message
  File "build/bdist.linux-x86_64/egg/pymongo/pool.py", line 397, in maybe_return_socket
AssertionError

有人知道这是否是预期的行为吗?我希望正确处理此类事件,甚至在选举完成之前阻止所有写入操作。

报告的错误是一个bug,我们将在下一版本PyMongo 2.7中修复。错误描述如下:

我不完全确定重新选举是否会因为连接错误而失败,而是没有找到任何候选服务器会因为连接错误而失败。这是一个错误:MongoClient和MongoReplicaSetClient在这一点上有什么区别吗?文档说明它运行一个监视线程,用于跟踪副本集。但是,我使用MongoClient运行了与上面相同的测试,它能够很好地检测到主要更改。它还抛出了在初选期间预期的相应自动重新连接错误。我想知道这些文档是否已经过时,MongoReplicateSetClient是否处于弃用状态。嗨,我是PyMongo的维护人员。MongoReplicateSetClient绝对不在弃用路径上;事实上,这是连接到副本集的首选方式。报告的错误是一个bug,我们将在下一版本中修复它。