$connectionPoolParams */ public function __construct($connections, SelectorInterface $selector, ConnectionFactoryInterface $factory, $connectionPoolParams) { parent::__construct($connections, $selector, $factory, $connectionPoolParams); } public function nextConnection(bool $force = false): ConnectionInterface { $total = count($this->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; } } }