C # MongoDB-Treiber Ignoriert Zeitüberschreitungsoptionen

8

Wir verwenden den C # -Treiber (1.9.1) für Mongo DB. Wir haben eine Fallback-Logik, die ausgeführt werden muss, wenn auf die DB nicht zugegriffen werden kann, das Standard-Timeout jedoch zu lang ist. Wir haben versucht, es zu ändern, aber die Werte, die wir setzen, werden ignoriert. Für die Tests verwendeten wir die IP einer nicht antwortenden Maschine.

Wir haben versucht, das Timeout in der Verbindungszeichenfolge einzustellen:

%Vor%

Oder über den Code:

%Vor%

Beide Male sind die Anforderungen nach durchschnittlich 20 Sekunden abgelaufen.

Was könnte an der Einstellung der Timeout-Optionen falsch sein?

    
DeveloperWithACaffeineProblem 18.07.2014, 12:30
quelle

2 Antworten

4

Es gibt ein JIRA-Ticket CSHARP-1018 , um dieses Problem zu verfolgen. Grundsätzlich ignoriert der Treiber die Timeout-Option, wenn die Maschine nicht erreichbar ist. Timeout-Option wird ignoriert, wenn das Gerät ausgeschaltet oder nicht zugänglich ist.

  

Verbindungslogik wurde in 2.0 behoben. Es wird derzeit für 30 Sekunden versuchen, aber das ist auf etwas kleiner konfigurierbar, wenn Sie schnellere Verbindungszeiten benötigen

Bitte beachten Sie das JIRA-Ticket, um den Fortschritt zu diesem Thema zu verfolgen.

Lesen Sie die in CSHARP-1231 veröffentlichte Problemumgehung, damit ServerSelectionTimeout in der aktuellen Version 2.0 festgelegt werden kann .0 Version des Treibers, wenn Sie diesen Ansatz bevorzugen, kürzere Timeouts für bestimmte Operationen zu verwenden.

Wenn Sie die neue 2.0-asynchrone API verwenden, können Sie ein Abbruch-Token verwenden, um Ihre eigene Zeitüberschreitung auf die gesamte Operation anzuwenden.

Ich würde daher den Annullierungs-Token-Ansatz im vorherigen Kommentar empfehlen. Die Verwendung kurzer Serverauswahl-Timeouts kann zu falschen Ausnahmen während Replikatsatz-Wahlen führen, wenn das Server-Auswahl-Timeout kürzer ist als die Zeit, die eine Wahl benötigt, um abgeschlossen zu werden.

Sie können etwas wie folgt schreiben:

%Vor%

In diesem Beispiel wird diese bestimmte Operation zwar nach nur 500 Millisekunden abgebrochen (obwohl die ServerSelectionTimeout immer noch der Standardwert von 30 Sekunden ist) (die Stornierung kann manchmal etwas länger dauern).

    
Robert Stam 21.07.2014, 19:04
quelle
2

Das JIRA-Ticket , auf das von @Robert Stam verwiesen wird, erwähnt eine Problemumgehung.

Ich habe es versucht, und es funktioniert 100%.

  

Wenn Sie die neue 2.0 async API verwenden, können Sie eine Stornierung verwenden   Token zum Anwenden eines eigenen Timeouts auf die gesamte Operation. Sie können   schreibe so etwas:

%Vor%      

In diesem Beispiel ist das ServerSelectionTimeout immer noch das   Standardwert von 30 Sekunden, wird diese besondere Operation sein   nach nur 500 Millisekunden abgebrochen (ca., Abbruch kann   manchmal etwas länger dauern).

    
Contango 25.10.2015 13:10
quelle

Tags und Links