Возникли проблемы с пониманием правильного подхода.
У меня есть соединение с набором реплик mongodb, состоящим из трех членов (стандартный ведущий-ведомый) Все работает нормально с подключением, когда мастер остается согласованным.
pymongo.Connection(['host1:27017','host2:27018','host3:27019']).database_test
По какой-то причине, когда реплика устанавливает первичные шаги вниз, это вызывает исключение автоматического повторного подключения, которое не исчезает даже после выбора нового первичного сервера.
Теперь я знаю, что это исключение необходимо перехватить и обработать, скорее всего, в ожидании выбора нового первичного кандидата. Похоже, проблема, с которой я столкнулся, заключается в том, что после того, как был выбран новый основной курс, ему все равно. Это исключение «мастер изменился» только продолжает появляться.
При печати соединения с __dict__
отображаются все три хоста.
Я пытался передать replicaset
kwarg соединению, но это выглядит как неожиданный аргумент.
Есть ли причина, по которой такого рода соединение не просто начинает запрашивать новый первичный сервер?
EDIT:
Эта же проблема, очевидно, сейчас проявляется на сервере развертывания. Исключение автоматического повторного подключения генерируется, если мастер вообще изменяется и никогда не исчезает, даже после выбора нового основного.
Pymongo - версия 2.2 и mongodb - версия 2.0.2. Изменение способа определения соединения в коде pymongo (монгури или список хостов) не имеет никакого эффекта. Единственный способ восстановить службу - это rs.stepDown()
других хостов, пока исходный мастер не станет первичным.