Исключение AutoReconnect исключение "мастер изменился"

Имея некоторые проблемы с пониманием правильного подхода здесь.

У меня есть соединение с набором реплик mongodb с тремя членами (стандартным подчиненным ведомым-ведомым). Все работает нормально с соединением, когда мастер остается согласованным.

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

По какой-то причине, когда основной набор реплик уходит вниз, он начинает вызывать исключение autoreconnect, которое не исчезает даже после выбора нового первичного элемента.

Теперь я знаю, что это исключение нужно поймать и обработать, скорее всего, ожидая выбора нового первичного элемента. Проблема, с которой я сталкиваюсь, состоит в том, что ее вообще не волнует, как только будет выбран новый первичный. Этот "мастер изменился" исключение просто продолжает расти.

Печать соединения с помощью __dict__ показывает все три узла.

Я пробовал передать replicaset kwarg в соединение, но это неожиданное предложение.

Есть ли причина, почему такое соединение не будет запускать запрос только на новый первичный?

EDIT:

Эта же проблема, очевидно, теперь проявляется на сервере развертывания. Исключение autoreconnect вызывается, если мастер изменяется вообще и никогда не исчезает даже после выбора нового первичного элемента.

Pymongo - версия 2.2 и версия mongodb 2.0.2. Изменение способа определения соединения в коде pymongo (mongouri против списка хостов) не влияет. Единственный способ оживить службу - это rs.stepDown() других хостов, пока исходный мастер не станет первичным.

Ответ 1

Поведение, которое вы описываете, является ошибкой. Самый лучший способ действий - убедиться, что в нем есть ошибка, связанная с этим вопросом, и ссылайтесь на него с вашего вопроса. Поскольку вопрос почти год, я ожидаю, что ошибка будет закрыта (проверьте jira.mongodb.org/browse/SERVER-4405, чтобы узнать, применяется ли она).

Если вы обновляетесь до MongoDB версии 2.2 или более поздней, проблема должна исчезнуть.