Skip to content

Commit 7e1d5db

Browse files
committed
strict retry
1 parent 2cfc587 commit 7e1d5db

File tree

4 files changed

+18
-14
lines changed

4 files changed

+18
-14
lines changed

src/Connection.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -378,8 +378,9 @@ public function executeCommand(string $name, array $params = [])
378378
}
379379
App::debug("Executing Redis Command: {$name}", 'redis');
380380
$this->open();
381-
$retrys = $this->retries > 0 ? $this->retries : 1;
382-
while ($retrys-- >= 0) {
381+
$retrys = $this->getPool()->getPoolConfig()->getMaxRetry();
382+
$retrys = $retrys > 0 ? $retrys : 1;
383+
while ($retrys--) {
383384
try {
384385
$data = $this->sendCommandInternal($command, $params, $type);
385386
if ($name === 'HGETALL' || ($name === 'CONFIG' && is_array($data))) {

src/PhpRedis.php

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
use Co\System;
88
use rabbit\db\Exception;
9-
use rabbit\exception\NotSupportedException;
109
use rabbit\helper\ArrayHelper;
1110
use rabbit\pool\AbstractConnection;
1211
use rabbit\pool\PoolManager;
@@ -45,15 +44,17 @@ public function createConnection(): void
4544
$this->sentinel = new \RedisSentinel($parseAry['host'], $parseAry['port'], $pool->getTimeout());
4645
}
4746
$this->conn = new \Redis();
48-
$retry = $pool->getPoolConfig()->getMaxRetry();
49-
while ($retry--) {
47+
$retrys = $pool->getPoolConfig()->getMaxRetry();
48+
$retrys = $retrys > 0 ? $retrys : 1;
49+
while ($retrys--) {
5050
if (false !== $master = $this->sentinel->getMasterAddrByName(ArrayHelper::getValue($config, 'master', 'mymaster'))) {
5151
[$host, $port] = $master;
5252
$this->conn->connect($host, (int)$port);
53-
break;
53+
return;
5454
}
55-
System::sleep($pool->getTimeout());
55+
$retry > 0 && System::sleep($pool->getTimeout());
5656
}
57+
throw new Exception("Connect to $host:$port failed!");
5758
} else {
5859
$this->conn = new \Redis();
5960
$retry = $pool->getPoolConfig()->getMaxRetry();

src/SentinelConnection.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,9 @@ protected function open(): bool
4040
$connection = ($this->unixSocket ?: $this->hostname . ':' . $this->port);
4141
App::info('Opening redis sentinel connection: ' . $connection, SentinelsManager::LOG_KEY);
4242
$this->_socket = new Client(SWOOLE_SOCK_TCP);
43-
$retry = $this->retry;
44-
while ($retry--) {
43+
$retrys = $this->retry;
44+
$retrys = $retrys > 0 ? $retrys : 1;
45+
while ($retrys--) {
4546
if ($this->_socket->connect($this->hostname, $this->port, $this->connectionTimeout ?? 3) === false) {
4647
App::warning('Failed opening redis sentinel connection: ' . $connection, SentinelsManager::LOG_KEY);
4748
continue;
@@ -114,8 +115,9 @@ public function executeCommand(string $name, array $params)
114115
$command .= '$' . mb_strlen($arg, '8bit') . "\r\n" . $arg . "\r\n";
115116
}
116117

117-
$retry = $this->retry;
118-
while ($retry--) {
118+
$retrys = $this->retry;
119+
$retrys = $retrys > 0 ? $retrys : 1;
120+
while ($retrys--) {
119121
try {
120122
$written = $this->_socket->send($command);
121123
if ($written === false) {

src/SwooleConnection.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,9 +119,9 @@ protected function getConnectRedis(
119119
$poolConfig = PoolManager::getPool($this->poolKey)->getPoolConfig();
120120
$serialize = $poolConfig->getSerialize();
121121
$redis = new \Swoole\Coroutine\Redis(['timeout' => $poolConfig->getTimeout()]);
122-
$retry = $this->getPool()->getPoolConfig()->getMaxRetry();
123-
$retry = $retry > 0 ? $retry : 1;
124-
while ($retry-- > 0) {
122+
$retrys = $this->getPool()->getPoolConfig()->getMaxRetry();
123+
$retrys = $retrys > 0 ? $retrys : 1;
124+
while ($retrys--) {
125125
$result = $redis->connect($host, $port, $serialize);
126126
if ($result !== false) {
127127
if ($password) {

0 commit comments

Comments
 (0)