Signatur
Beschreibung
ZookeeperNoNodeException ist eine spezialisierte Ausnahme der ZooKeeper-PHP-Erweiterung, die immer dann ausgelöst wird, wenn versucht wird, auf einen Znode (Knoten) zuzugreifen, der im ZooKeeper-Verzeichnisbaum nicht vorhanden ist. Dies entspricht dem ZooKeeper-Fehlercode ZNONODE (-101).
Typische Situationen, in denen diese Ausnahme auftritt, sind: Lesen von Daten (get), Setzen von Daten (set), Löschen eines Knotens (delete) oder Abfragen von Kindknoten (getChildren), wenn der angegebene Pfad im ZooKeeper-Ensemble nicht existiert. Auch das Setzen von Watches auf nicht vorhandene Knoten kann diese Exception auslösen.
Da ZooKeeper ein verteiltes System ist, sollte diese Exception immer sauber behandelt werden – ein Knoten kann zwischen dem Prüfen seiner Existenz (exists) und dem tatsächlichen Zugriff durch einen anderen Client gelöscht worden sein (TOCTOU-Problem). Robuster Code fängt ZookeeperNoNodeException explizit ab und reagiert mit einem Wiederholungsversuch oder einer Fallback-Logik.
Die Klasse erbt von ZookeeperException, welche selbst von Exception ableitet, sodass alle Standard-PHP-Ausnahmemethoden wie getMessage(), getCode() und getTrace() verfügbar sind.
Beispiele
Knoten-Daten lesen mit Fehlerbehandlung
<?php
$zk = new Zookeeper('localhost:2181');
try {
$data = $zk->get('/meine-app/config');
echo 'Konfiguration: ' . $data;
} catch (ZookeeperNoNodeException $e) {
echo 'Fehler: Der Knoten existiert nicht. Code: ' . $e->getCode() . PHP_EOL;
// Fallback: Standardwerte verwenden
echo 'Verwende Standardkonfiguration.' . PHP_EOL;
} catch (ZookeeperException $e) {
echo 'Allgemeiner ZooKeeper-Fehler: ' . $e->getMessage() . PHP_EOL;
}
Knoten anlegen, wenn er nicht existiert (Upsert-Muster)
<?php
$zk = new Zookeeper('localhost:2181');
$pfad = '/meine-app/status';
$wert = 'aktiv';
try {
// Versuche, vorhandenen Knoten zu aktualisieren
$zk->set($pfad, $wert);
echo 'Knoten aktualisiert.' . PHP_EOL;
} catch (ZookeeperNoNodeException $e) {
// Knoten existiert noch nicht – anlegen
$zk->create(
$pfad,
$wert,
[['perms' => Zookeeper::PERM_ALL, 'scheme' => 'world', 'id' => 'anyone']]
);
echo 'Knoten neu angelegt.' . PHP_EOL;
}
// Wichtig · Fallstricke
TOCTOU-Race-Condition: In verteilten Systemen ist ein vorheriger exists()-Check keine Garantie dafür, dass der Knoten beim nachfolgenden Zugriff noch vorhanden ist. Daher ist es Best Practice, direkt auf die ZookeeperNoNodeException zu reagieren, anstatt die Existenz vorab zu prüfen.
Fehlercode: Der Fehlercode dieser Exception ist -101 (entspricht der ZooKeeper-Konstante ZNONODE). Dies kann über $e->getCode() ausgelesen werden.
Voraussetzung: Die ZooKeeper-PHP-Erweiterung (php-zookeeper) muss installiert und aktiviert sein. Sie ist nicht Teil der PHP-Standardinstallation und muss separat über PECL eingebunden werden.