我正在将引用 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
有谁知道这是否是预期的行为?我想正确处理此类事件,甚至阻止所有写入,直到选举完成。