Главният изключение на AutoReconnect е променен

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

Имам връзка с набор от реплики на mongodb с три члена (стандартен master-slave-slave). Всичко работи добре с връзката, когато главният остава последователен.

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
Каква версия на pymongo използвате? Имаше грешка в 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
Mongo е версия 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