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() { } /** * @param \Elasticsearch\Connections\Connection $connection * * @return bool */ private function readyToRevive(Connection $connection) { $timeout = min( $this->pingTimeout * pow(2, $connection->getPingFailures()), $this->maxPingTimeout ); if ($connection->getLastPing() + $timeout < time()) { return true; } else { return false; } } }