1

我正在将引用 mongo 资源的代码库迁移到使用复制,并且我看到 MongoReplicaSetClient 的一些意外行为。除非我在选举新的主节点期间尝试写入,否则客户端工作正常。

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

上述所有步骤都可以正常工作,除了倒数第二个主要是关闭的。根据MongoReplicaSetClient文档,我希望在不存在主节点的情况下执行的所有写入尝试都会引发AutoReconnect错误。然而,我看到的是一个通用的 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

有谁知道这是否是预期的行为?我想正确处理此类事件,甚至阻止所有写入,直到选举完成。

4

1 回答 1

0

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

于 2013-12-04T23:42:02.670 回答