Мастер исключений AutoReconnect изменился

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

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


person DeaconDesperado    schedule 14.12.2011    source источник
comment
Какую версию пимонго вы используете? В 1.9 или 1.10 была ошибка, я не могу вспомнить, где она могла проявлять такое поведение. Это было определенно исправлено в 1.11 и 2.0+.   -  person dcrosta    schedule 14.12.2011
comment
Какая версия MongoDB? В 2.0.x есть проблема, из-за которой, если вы отключаете первичный сервер, он не закрывает его соединения. Это вызовет проблему с PyMongo. jira.mongodb.org/browse/SERVER-4405   -  person Bernie Hackett    schedule 14.12.2011
comment
Монго версии 2.0.0. Я думаю, что это может быть частью проблемы. Однако я должен упомянуть, что только что я указал replicaSet, используя mongouri, а не kwargs или свойства драйвера, и это, похоже, сделало его отказоустойчивым. Однако не уверен, что ошибка снова проявится.   -  person DeaconDesperado    schedule 14.12.2011
comment
Это определенно звучит так, как будто pymongo все еще пытается использовать одно и то же соединение даже после того, как мастер ушел. Когда у меня возникали подобные проблемы с PHP и Mongo, я закрывал соединение с базой данных, немного ждал, а затем создавал новое.   -  person slashingweapon    schedule 06.10.2012
comment
Можете ли вы предоставить нам свою обработку исключений и код повторной попытки, пожалуйста? В документе говорится, что (драйвер) будет пытаться автоматически переподключайтесь при последующих операциях, поэтому я хочу убедиться, что вы попытаетесь выполнить операцию снова, а не просто ждать, пока ошибка исчезнет. И еще (совершенно другой) вопрос, у вас такое же поведение при подключении к Connection("mongodb://host1:27017,host2:27018,host3:27019")?   -  person Alain BECKER    schedule 07.10.2012
comment
Эта проблема все еще возникает с текущей версией MongoDB и PyMongo? Исходному вопросу 10 месяцев, и с тех пор версии несколько изменились :)   -  person Stennie    schedule 08.10.2012


Ответы (1)


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

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

person iwein    schedule 19.10.2012