我通过以下方式连接到运行 mongoDB 的 3 节点副本集:
DB = motor.MotorReplicaSetConnection("mongodb://user:pass@ip_address:27017", replicaSet='repl_set_name').open_sync().collection_name
当 PRIMARY 出现故障时,我的副本集可以正常工作,由另一个副本集接管。但是当我这样做时,我的 Tornado 服务器在重新连接时会抛出 KeyError: 'pop from an empty set'
错误。 Tornado/Motor 似乎无法重新连接到新的主节点,我不确定为什么。即使我添加/替换主机:端口到连接字符串,我仍然没有得到任何结果。这与read_preference
有关吗?
最佳答案
L-R 和我一直在私下调试这个问题,我认为奇怪的错误消息是这个 Tornado bug 的结果:
https://github.com/facebook/tornado/issues/651
...我已经通过对 Motor 的 promise 解决了这个问题:
https://github.com/ajdavis/mongo-python-driver/commit/c7c1614bbf27c3a02ac8c582a8815dee59c39280
根据您的测试,听起来 MotorReplicaSetConnection 实际上可以在新的主数据库成为主数据库后不久就重新连接到它,如果情况并非如此,请再次向我发送电子邮件。
关于python - KeyError : 'pop from an empty set' when connecting to a Mongodb replica set (motor, pymongo, Tornado ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13057742/