Start · Sprachen · PHP · Referenz · ZookeeperOperationTimeoutException

ZookeeperOperationTimeoutException

Klasse

Wird geworfen, wenn eine ZooKeeper-Operation das festgelegte Zeitlimit überschreitet.

seit PHP 3.4.6 Kategorie: error

Signatur

class ZookeeperOperationTimeoutException extends ZookeeperException

Beschreibung

ZookeeperOperationTimeoutException ist eine Ausnahme, die ausgelöst wird, wenn eine Operation gegenüber einem ZooKeeper-Server nicht innerhalb des konfigurierten Zeitrahmens abgeschlossen werden kann. Sie erbt von ZookeeperException und gehört damit zur Hierarchie der ZooKeeper-spezifischen Fehlerbehandlung in PHP.

ZooKeeper ist ein verteilter Koordinationsdienst, der für Aufgaben wie Leader-Wahl, Konfigurationsverwaltung und Synchronisation in verteilten Systemen eingesetzt wird. Zeitüberschreitungen können auftreten, wenn der ZooKeeper-Server überlastet ist, Netzwerkprobleme bestehen oder die Session-Timeout-Konfiguration zu knapp bemessen ist.

In der Praxis sollte diese Ausnahme separat von anderen ZooKeeper-Fehlern abgefangen werden, um eine gezielte Fehlerbehandlung zu ermöglichen – beispielsweise durch erneute Verbindungsversuche (Retry-Logik) oder das Ausweichen auf einen anderen ZooKeeper-Knoten.

Die Klasse selbst stellt keine zusätzlichen Methoden oder Eigenschaften bereit; die vollständige Fehlerinformation wird über die geerbten Methoden getMessage(), getCode() und getTrace() aus Exception bereitgestellt.

Beispiele

Timeout-Ausnahme bei ZooKeeper-Verbindung abfangen

<?php
try {
    $zk = new Zookeeper('zookeeper-host:2181');
    // Wert eines Knotens lesen
    $data = $zk->get('/mein/knoten');
    echo 'Daten: ' . $data;
} catch (ZookeeperOperationTimeoutException $e) {
    // Gezielter Umgang mit Zeitüberschreitungen
    echo 'ZooKeeper-Zeitüberschreitung: ' . $e->getMessage() . PHP_EOL;
    echo 'Fehlercode: ' . $e->getCode() . PHP_EOL;
    // Hier könnte Retry-Logik oder Fallback-Verhalten implementiert werden
} catch (ZookeeperException $e) {
    // Alle anderen ZooKeeper-Fehler
    echo 'ZooKeeper-Fehler: ' . $e->getMessage() . PHP_EOL;
} catch (Exception $e) {
    echo 'Allgemeiner Fehler: ' . $e->getMessage() . PHP_EOL;
}
ZooKeeper-Zeitüberschreitung: Operation timeout Fehlercode: -7

Retry-Mechanismus bei Zeitüberschreitung

<?php
function leseZookeeperKnoten(string $pfad, int $maxVersuche = 3): ?string {
    $versuch = 0;
    while ($versuch < $maxVersuche) {
        try {
            $zk = new Zookeeper('zookeeper-host:2181');
            return $zk->get($pfad);
        } catch (ZookeeperOperationTimeoutException $e) {
            $versuch++;
            echo "Versuch {$versuch} fehlgeschlagen (Timeout). " .
                 ($versuch < $maxVersuche ? 'Neuer Versuch...' : 'Aufgabe.') . PHP_EOL;
            if ($versuch < $maxVersuche) {
                sleep(1); // Kurz warten vor erneutem Versuch
            }
        }
    }
    return null;
}

$ergebnis = leseZookeeperKnoten('/config/datenbankhost');
if ($ergebnis === null) {
    echo 'Knoten konnte nicht gelesen werden.' . PHP_EOL;
} else {
    echo 'Gelesener Wert: ' . $ergebnis . PHP_EOL;
}
Versuch 1 fehlgeschlagen (Timeout). Neuer Versuch... Versuch 2 fehlgeschlagen (Timeout). Neuer Versuch... Versuch 3 fehlgeschlagen (Timeout). Aufgabe. Knoten konnte nicht gelesen werden.

// Wichtig · Fallstricke

Wichtig: Die ZookeeperOperationTimeoutException ist nur verfügbar, wenn die PHP-Erweiterung zookeeper installiert und aktiviert ist (PECL-Paket zookeeper). Ohne diese Erweiterung ist die Klasse nicht definiert.

Der zugehörige Fehlercode ist in der Regel -7 (ZOPERATIONTIMEOUT). Bei der Diagnose von Timeout-Problemen sollte neben der Fehlerbehandlung im Code auch die ZooKeeper-Session-Konfiguration (Session-Timeout in Millisekunden) sowie die Netzwerklatenz überprüft werden.

Zeitüberschreitungen in verteilten Systemen können transient sein; eine einfache Retry-Logik mit exponentiellem Backoff ist in Produktionssystemen der blindes-Retry empfehlenswert.