AutoReconnectexception“主已改变”

在这里理解正确的方法有些麻烦。

我有一个与三个成员(标准的主从奴隶)mongodb副本集的连接。 当主人保持一致时,一切工作正常。

pymongo.Connection(['host1:27017','host2:27018','host3:27019']).database_test 

出于某种原因,当副本设置主要步骤closures时,这会开始抛出一个autoreconnectexception, 即使在select了新的主节点后也不会消失。

现在我意识到,这个例外需要被抓住和处理,很可能等待新的小学被选举。 我所遇到的问题似乎是,一旦select了新的小学,它根本就不在乎。 这个“主人已经改变”的例外不断涌现。

__dict__打印连接显示所有三个主机。

我试过把replicaset kwarg传递给连接,但是这是一个意外的论点。

这种联系是不是有理由不开始质疑新的小学呢?

编辑:

显然现在在部署服务器上也出现了同样的问题。 如果主服务器发生更改,autoreconnectexception将被抛出,即使在select了新的主服务器之后也不会消失。

Pymongo是2.2版本和mongodb版本2.0.2。 改变在pymongo代码(mongouri与主机列表)中定义连接的方式不起作用。 恢复服务的唯一方法是rs.stepDown()其他主机,直到原始主服务器再次成为主服务器。

你描述的行为是一个错误。 最好的行动方式是确保有一个logging的错误,并从你的问题链接到它。 由于问题已经有一年多的时间了,我预计这个bug会被closures(查看jira.mongodb.org/browse/SERVER-4405看看是否适用)。

如果升级到MongoDB 2.2或更高版本,问题应该消失。