public function onSuccessfulRequest(PostRequestSendEvent $event)
 {
     $request = $event->getRequest();
     $this->fails[$request->getConnection()] = null;
     $this->slavesUsed = [];
     $this->masterUsed = null;
     if ($request->hasQueryMode()) {
         if ($request->getQueryMode() === 'WRITE') {
             $master = $this->connectionManager->getMasterConnection()->getAlias();
             if ($request->getConnection() === $master) {
                 $slaves = $this->connectionManager->getSlaves();
                 $slave = current($slaves);
                 $this->writeReplicationUsed[] = $slave;
                 Client::log('debug', sprintf('Performing write replication on connection "%s"', $slave));
                 $request->setInfoFromConnection($this->connectionManager->getConnection($slave));
                 $event->stopPropagation();
             } elseif ($this->connectionManager->hasNextSlave($this->writeReplicationUsed)) {
                 $next = $this->connectionManager->getNextSlave($this->writeReplicationUsed);
                 $nc = $this->connectionManager->getConnection($next);
                 Client::log('debug', sprintf('Performing write replication on connection "%s"', $next));
                 $request->setInfoFromConnection($nc);
                 $event->stopPropagation();
             } elseif (null !== $this->masterUsed && !$this->connectionManager->hasNextSlave($this->masterUsed) && $request->getConnection() !== $master) {
                 $this->masterUsed = [];
                 Client::log('debug', 'Replication terminated');
             }
         }
     }
 }
 /**
  * @param \Neoxygen\NeoClient\Event\HttpExceptionEvent $event
  */
 public function onHttpException(HttpExceptionEvent $event)
 {
     $request = $event->getRequest();
     $exception = $event->getException();
     $message = $exception->getMessage();
     Client::log('emergency', sprintf('Error on connection "%s" - %s', $request->getConnection(), $message));
     throw new HttpException(sprintf('Error on Connection "%s" with message "%s"', $request->getConnection(), $message));
 }
 /**
  *
  */
 private function detectReelectedMaster()
 {
     $slaves = $this->connectionManager->getSlaves();
     foreach ($slaves as $slave) {
         if ($this->isMaster($slave)) {
             Client::log('debug', sprintf('Master Reelection detected, new Master is "%s".', $slave));
             return $slave;
         }
     }
     return;
 }