python - KeyError : 'pop from an empty set' when connecting to a Mongodb replica set (motor, pymongo, Tornado )

标签 python mongodb replication tornado tornado-motor

我通过以下方式连接到运行 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/

相关文章:

MySQL 主从复制

python - “子集”不适用于 drop_duplicates pandas 数据框

ruby-on-rails-3 - Rails 3 通过 mongoid 适配器使用 MongoDB - 有没有办法在不使用单表继承的情况下共享属性规范?

javascript - mongodb:带有 $in 运算符的 collection.find 不会返回任何内容

MySQL 复制 - 连接到主服务器时出错

MySQL复制监控

python - Pylint 给我 "Final new line missing"

python - 我运行了 appcfg.py update 但没有看到变化

python - [ Pandas ] : how to figure out what's inside a column

mongodb - 无法连接到工作的Dockerized Mongo ReplSet