|
@@ -60,6 +60,11 @@ class SentinelReplication extends MasterSlaveReplication
|
|
|
*/
|
|
|
protected $autoRetry = true;
|
|
|
|
|
|
+ /**
|
|
|
+ * Flag for automatic fetching of available sentinels.
|
|
|
+ */
|
|
|
+ protected $updateSentinels = false;
|
|
|
+
|
|
|
/**
|
|
|
* @param array $sentinels Sentinel servers connection parameters.
|
|
|
* @param string $service Name of the service for autodiscovery.
|
|
@@ -102,6 +107,16 @@ class SentinelReplication extends MasterSlaveReplication
|
|
|
$this->autoRetry = (bool) $retry;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Set automatic fetching of available sentinels.
|
|
|
+ *
|
|
|
+ * @param bool $update Enable or disable automatic updates.
|
|
|
+ */
|
|
|
+ public function setUpdateSentinels($update)
|
|
|
+ {
|
|
|
+ $this->updateSentinels = (bool) $update;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* {@inheritdoc}
|
|
|
*/
|
|
@@ -236,6 +251,10 @@ class SentinelReplication extends MasterSlaveReplication
|
|
|
*/
|
|
|
public function querySentinel()
|
|
|
{
|
|
|
+ if ($this->updateSentinels) {
|
|
|
+ $this->updateSentinels();
|
|
|
+ }
|
|
|
+
|
|
|
$this->wipeServerList();
|
|
|
|
|
|
SENTINEL_QUERY: {
|
|
@@ -262,6 +281,36 @@ class SentinelReplication extends MasterSlaveReplication
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Updates the full list of sentinels by asking to a sentinel server.
|
|
|
+ */
|
|
|
+ public function updateSentinels()
|
|
|
+ {
|
|
|
+ SENTINEL_QUERY: {
|
|
|
+ $sentinel = $this->getSentinelConnection();
|
|
|
+
|
|
|
+ try {
|
|
|
+ $payload = $sentinel->executeCommand(
|
|
|
+ RawCommand::create('SENTINEL', 'sentinels', $this->service)
|
|
|
+ );
|
|
|
+
|
|
|
+ $this->sentinels = array();
|
|
|
+ $this->sentinels[] = $sentinel->getParameters()->toArray();
|
|
|
+
|
|
|
+ foreach ($payload as $sentinel) {
|
|
|
+ $this->sentinels[] = array(
|
|
|
+ 'host' => $sentinel[3],
|
|
|
+ 'port' => $sentinel[5],
|
|
|
+ );
|
|
|
+ }
|
|
|
+ } catch (ConnectionException $exception) {
|
|
|
+ $this->sentinelConnection = null;
|
|
|
+
|
|
|
+ goto SENTINEL_QUERY;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* Retries the execution of a command upon server failure after asking a new
|
|
|
* configuration to one of the sentinels.
|