2014-11-24 8 views
7

Gibt es in den Apache Curator-Sperr-Rezepten (oder untergeordneten ZooKeeper) eine Möglichkeit zum automatischen Freigeben von Sperren, die einige TTL überschritten haben? Wenn nicht, gibt es eine Best Practice dafür? Ich sehe, dass Kurator automatisch Sperren im Falle der Client-Verbindung, die verloren ist, freigibt, und das ist schön ... und die Zeitüberschreitung bei Lock-Erwerb ist auch hilfreich.Apache Zookeeper/Kurator Time-to-live auf Sperren

Ich frage mich, in welchem ​​Maße ich mein System schützen muss, indem ich einen wiederkehrenden Job mache, der nach zu langen Sperren sucht und sie manuell freigibt. Würde ich das tun, indem ich meinen separaten Prozess direkt den relevanten ZNode lösche?

Antwort

7

Kuratorenschlösser werden mit EPHEMERAL-Znoden implementiert. Wenn der Schlosshalter in irgendeiner Weise instabil wird, sollte ZooKeeper das Schloss automatisch freigeben. Wenn Sie nach einer Möglichkeit suchen, Sperren, die von anderen Prozessen gehalten werden, zu widerrufen, verfügen einige der Kuratorrezepte von Curator über eine kooperative Sperrfunktion. Darüber hinaus scheint das Löschen einer Sperre unter einem Prozess eine enorme Instabilität zu verursachen. Ich kann mir keinen guten Grund vorstellen, das zu tun.

(Anmerkung: Ich bin der Hauptautor des Kurators)

+0

Danke für die Antwort! Ich hoffe, du würdest das sehen und ich habe deine anderen SO-Reaktionen geschätzt. Definitiv der automatischen Behandlung eines ZK-Clients, der seine Verbindung verliert, und dem kooperativen Widerruf. Vielleicht bin ich zu paranoid, aber ich benutze ZK/Curator als ein Implementierungsdetail einer Bibliothek, die verteiltes Sperren durchführt. Keine Kontrolle über den Code, der ausgeführt wird, während eine Sperre gehalten wird. Ich nehme an, ich kann den kooperativen Entzugsaspekt abstrahieren und habe daher einen Weg, mit falschem Client-Code umzugehen. Danke für die Antwort. –

3

FYI - das ist 2 Jahre später. Ich habe TTL Nodes für ZooKeeper geschrieben und habe sie akzeptiert (was Kurator natürlich unterstützen wird). Es ist jetzt in Master und wird in einer zukünftigen Version von ZooKeeper und Kurator sein.

https://issues.apache.org/jira/browse/ZOOKEEPER-2169