Tierpflegerschloss blieb gesperrt

8

Ich benutze Sellerie und Tierpfleger (Kazoo-Sperre), um meine Arbeiter zu sperren. Ich habe ein Problem, wenn ich einen der Arbeiter töte (-9), bevor ich das Schloss loslasse, dann bleibt dieses Schloss für immer geschlossen.

Meine Frage ist also: Wird die Prozessfreigabe in diesem Prozess gesperrt, oder ist das ein Fehler in zookee?

    
Milan Kocic 21.12.2012, 21:14
quelle

2 Antworten

1

Das Beenden eines Prozesses mit einem Kill-Signal führt nicht dazu, "Software-Sperren" wie ZooKeeper-Sperren zu löschen.

Die einzige Art von Sperren, die durch ein KILL-Signal getötet werden, sind Sperren auf Betriebssystemebene, da alle Dateideskriptoren gelöscht werden und die Dateideskriptorsperren daher ebenfalls gelöscht werden. Aber soweit es ZooKeeper betrifft, sind das keine Sperren auf Betriebssystemebene (wäre es nur, weil der ZooKeeper-Prozess, selbst auf demselben Computer, nicht der Ihres Python-Prozesses ist).

Es ist daher kein Fehler in ZooKeeper und ein erwartetes Verhalten von kill -9.

    
fge 21.12.2012, 21:17
quelle
8

Zookeeper Sperren verwenden ephemere Knoten . Ein ephemerer Knoten ist ein Knoten, der so lange lebt, wie die Sitzung, die ihn erstellt hat, am Leben ist. Die Sitzungen werden durch den Prozess am Leben gehalten, indem die Sitzung periodisch eine Heartbeat-Nachricht an den Zoowächter sendet.

Wenn Sie also den Prozess beenden, mit dem die Sperre erstellt wurde, wird die Sperre schließlich aufgehoben, da die Sitzung beendet wird, da der Tierpfleger keine Herzschläge mehr empfängt.

Wenn man also einen Arbeiter tötet, bevor die Sperre ausgelöst wird, sollte die Sperre schließlich aufgehoben werden.

Wenn das Schloss nie freigegeben wird, könnten ein paar Dinge passieren,

  1. Jemand anders hat bemerkt, dass das Schloss freigegeben wurde und es erhalten hat. Vermutlich sperren Sie, weil es Konflikte gibt, und ein anderer Prozess wird versuchen, die Sperre zu übernehmen, wenn sie freigegeben wird.
  2. Uou wartet nicht lange genug. Wenn Sie eine Verbindung zum Tierpfleger herstellen, sollte ein von Ihnen gesetzter Parameter für den Sitzungs-Timeout gesetzt werden, dh wie lange der Server die Sitzung am Leben erhält, ohne dass ein Herzschlag zu hören ist. Sie müssen so lange warten, bis die Sperren freigeschaltet sind
  3. Es gibt einen Fehler in Kazoo. Dies ist möglich, aber es sieht so aus, als ob das Kazoo Sperrrezept ephemere Knoten verwendet, und der von Ihnen beschriebene Anwendungsfall ist sehr einfach.

Es ist sehr unwahrscheinlich, dass es sich um einen Tierpfleger handelt.

Woher wissen Sie, dass die Sperre nicht aufgehoben wird?

    
sbridges 22.12.2012 14:45
quelle