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; }