我正在以下列方式连接到运行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无法重新连接到新的PRIMARY节点,我不知道为什么。即使我将host:port添加/替换为连接字符串,我仍然没有得到任何结果。这会与read_preference
?
答案 0 :(得分:2)
L-R和我一直在私下调试,我认为这个奇怪的错误信息是这个Tornado bug的结果:
https://github.com/facebook/tornado/issues/651
...我已经解决了对Motor的这个提交:
https://github.com/ajdavis/mongo-python-driver/commit/c7c1614bbf27c3a02ac8c582a8815dee59c39280
根据你的测试,听起来像MotorReplicaSetConnection 可以实际上在它成为主要后不久重新连接到新的主要部分,如果不是这样,请再次给我发电子邮件。