Warum PyMongo werfen AutoReconnect?

Während der recherche einige seltsame Probleme mit meinem Python-web-Anwendung (insbesondere Fragen in Bezug auf MongoDB connectivity), bemerkte ich etwas auf der offiziellen PyMongo-Dokumentation Seite. Meine web-Anwendung verwendet Fläschchen, aber das sollte keinen Einfluss auf das Problem bin ich konfrontiert.

Den PyMongo-Treiber funktioniert die Verbindungs-pooling, aber auch wirft eine Ausnahme ( AutoReconnect ), wenn eine Verbindung veraltet ist und ein reconnect durch.

Es besagt, dass (in Bezug auf die AutoReconnect Ausnahme):

Um auto-reconnect müssen Sie diese Ausnahme verarbeiten, erkennen
dass die operation, die es verursacht hat, nicht unbedingt gelungen.
Künftige Operationen wird versucht eine neue Verbindung zu öffnen, um die
Datenbank (und wird sich weiter erhöhen, diese Ausnahme bis zum ersten
erfolgreiche Verbindung hergestellt ist).

Habe ich bemerkt, dass dies tatsächlich passiert ständig (und es scheint nicht zu einem Fehler). Verbindungen werden geschlossen, durch den MongoDB-server nach, was scheint wie einigen Minuten der Inaktivität, und müssen neu erstellt werden, indem die web-Anwendung.

Was ich nicht verstehe, warum die PyMongo-Treiber gibt einen Fehler aus, wenn es wieder her (die der Nutzer muss der Fahrer selbst zu behandeln), zu tun, anstatt es transparent. (Es könnte sogar eine option könnte ein Benutzer so eingestellt, dass AutoReconnect Ausnahmen tun geworfen bekommen, aber wäre es nicht eine sinnvolle Vorgabe sein, dass diese Ausnahmen nicht geworfen, und die Anschlüsse neu erstellt werden, nahtlos?)

Ich habe nicht begegnet diesem Verhalten mit anderen Datenbank-Systemen, das ist, warum ich bin ein wenig verwirrt.

Es ist auch erwähnenswert, dass meine web-Anwendung MongoDB verbindungen der nie fehlschlagen, wenn eine Verbindung zu meinem lokalen Entwicklung MongoDB-server (ich nehme an, es hätte etwas mit der Tatsache zu tun, dass es eine lokale Verbindung ist, und dass die Verbindung über einen UNIX-socket anstelle von einem Netzwerk-socket, aber ich könnte falsch sein).

  • Der Python-Treiber haben die Entwickler angesprochen Autoreconnect ein paar mal im JIRA-issues. Werfen Sie einen Blick auf PYTHON-197, für den Anfang. Wenn Sie Lesen, über was bereits in JIRA über Autoreconnect und sind nicht zufrieden, würde ich öffnen Sie ein PYTHON-ticket.
  • Danke für den Hinweis! Es fühlt sich an, als wenn nicht-powerusers wie mich, die nicht funktionieren eine ganze repliziert mongo-cluster wurden ausgelassen. Haben Sie eine Idee, warum diese verbindungen eigentlich mal aus? Sollten Sie nicht scheitern sofort, wenn der socket geschlossen wird?
  • Ich konnte nicht sagen, nichts darüber, warum die verbindungen fehlerhaft sind, ohne viel mehr Informationen. Gibt es etwas in der mongod-logs über die verbindungen geschlossen?
  • NÖ. Alles, was ich sehe, sind authenticate db Veranstaltungen (die zu sein scheinen im Zusammenhang mit den neuen verbindungen) und die regelmäßigen Abfragen. Zweitens-wäre es eine Möglichkeit zu unterscheiden zwischen einem timeout (z.B. schlechte Verbindung) und einer tatsächlichen langer Laufzeit (1-5) Abfrage?
Schreibe einen Kommentar