Python MongoReplicateSetClient在主重新选举期间意外失败
我正在将涉及mongo资源的代码库迁移到使用复制,我看到MongoReplicateSetClient出现了一些意外行为。客户端工作正常,除非我在选择新的主服务器时尝试写入 我正在运行的简单测试是: *启动一个3节点副本集 *连接MongoReplicaSetClient'localhost:27017、localhost:27018、localhost:27017',replicaSet='rs0' *执行写操作 *杀死主服务器并立即执行写操作 *在初选完成后执行另一次写入 以上所有步骤都可以正常工作,但从第二步到最后一步的主要步骤是关闭的。根据文档,我希望在不存在主服务器的情况下,所有执行的写入尝试都会抛出一个错误。然而,我看到的是一个通用的断言错误Python MongoReplicateSetClient在主重新选举期间意外失败,python,mongodb,pymongo,replicaset,Python,Mongodb,Pymongo,Replicaset,我正在将涉及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,我们将在下一版本中修复它。