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