Имея некоторые проблемы с пониманием правильного подхода здесь.
У меня есть соединение с набором реплик 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()
других хостов, пока исходный мастер не станет первичным.