connections); while ($total--) { /** * @var Connection $connection */ $connection = $this->selector->select($this->connections); if ($connection->isAlive() === true) { return $connection; } if ($this->readyToRevive($connection) === true) { return $connection; } } throw new NoNodesAvailableException("No alive nodes found in your cluster"); } public function scheduleCheck(): void { } private function readyToRevive(Connection $connection): bool { $timeout = min( $this->pingTimeout * pow(2, $connection->getPingFailures()), $this->maxPingTimeout ); if ($connection->getLastPing() + $timeout < time()) { return true; } else { return false; } } }