我正在努力迁移我们的代码库,它引用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
有谁知道这是否是预期的行为?我想妥善处理这类事件,甚至阻止所有的写作,直到选举结束。
答案 0 :(得分:0)
报告的错误是一个错误,我们将在下一个版本PyMongo 2.7中修复。这里描述了错误:https://jira.mongodb.org/browse/PYTHON-601