MongoReplicaSetClient在主要重选期间意外失败

时间:2013-11-25 18:10:06

标签: python mongodb pymongo replicaset

我正在努力迁移我们的代码库,它引用mongo资源来使用复制,我看到来自MongoReplicaSetClient的一些意外行为。客户端工作正常,除非我在选择新主服务器期间尝试写入。

我正在进行的简单测试是:
 *启动3节点副本集
 *连接MongoReplicaSetClient('localhost:27017,localhost:27018,localhost:27017',replicaSet ='rs0'
 *执行写入  *杀死主要人员并立即执行写入  *在初选完成后再执行一次写作

以上所有步骤都可以正常工作,除了主要关闭的倒数第二个。根据{{​​3}}文档,我预计在没有主要存在的情况下执行的所有写入尝试都会抛出MongoReplicaSetClient错误。但是,我所看到的是一般的AssertionError。

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

有谁知道这是否是预期的行为?我想妥善处理这类事件,甚至阻止所有的写作,直到选举结束。

1 个答案:

答案 0 :(得分:0)

报告的错误是一个错误,我们将在下一个版本PyMongo 2.7中修复。这里描述了错误:https://jira.mongodb.org/browse/PYTHON-601