Skip to content

Commit 66d41c6

Browse files
committed
Cluster->setSoftCheck(true)
1 parent 94b8d3e commit 66d41c6

File tree

2 files changed

+26
-4
lines changed

2 files changed

+26
-4
lines changed

example/cluster_05_select_node.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
$cl = new ClickHouseDB\Cluster($config);
1010

1111
$cl->setScanTimeOut(2.5); // 2500 ms
12+
$cl->setSoftCheck(true);
1213
if (!$cl->isReplicasIsOk())
1314
{
1415
throw new Exception('Replica state is bad , error='.$cl->getError());

src/Cluster.php

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ class Cluster
6060

6161

6262
/**
63+
* Признак напрягать CH при проверке кластера запросом в Zookiper
64+
* false - отправлять запрос в ZK, точнне делать SELECT * FROM system.replicas
6365
*
6466
* @var bool
6567
*/
@@ -181,7 +183,11 @@ private function isReplicasWork($replicas)
181183

182184
// @todo : rewrite total_replicas=1 если кластер без реплики , нужно проверять какой класте и сколько в нем реплик
183185
// if ($replica['total_replicas']<2) {$ok=false;$this->error[]='total_replicas : '.json_encode($replica);}
184-
186+
if ($this->softCheck )
187+
{
188+
if (!$ok) break;
189+
continue;
190+
}
185191

186192
if ($replica['active_replicas'] < $replica['total_replicas']) {
187193
$ok = false;
@@ -200,6 +206,22 @@ private function isReplicasWork($replicas)
200206
return $ok;
201207
}
202208

209+
private function getSelectSystemReplicas()
210+
{
211+
// Если запрашивать все столбцы, то таблица может работать слегка медленно, так как на каждую строчку делается несколько чтений из ZK.
212+
// Если не запрашивать последние 4 столбца (log_max_index, log_pointer, total_replicas, active_replicas), то таблица работает быстро.
213+
if ($this->softCheck)
214+
{
215+
216+
return 'SELECT
217+
database,table,engine,is_leader,is_readonly,
218+
is_session_expired,future_parts,parts_to_check,zookeeper_path,replica_name,replica_path,columns_version,
219+
queue_size,inserts_in_queue,merges_in_queue,queue_oldest_time,inserts_oldest_time,merges_oldest_time
220+
FROM system.replicas
221+
';
222+
}
223+
return 'SELECT * FROM system.replicas';
224+
}
203225
/**
204226
* @return $this
205227
*/
@@ -223,11 +245,10 @@ public function rescan()
223245
foreach ($this->nodes as $node) {
224246
$this->defaultClient()->setHost($node);
225247

226-
// @todo: Если запрашивать все столбцы, то таблица может работать слегка медленно, так как на каждую строчку делается несколько чтений из ZK.
227-
// @todo: Если не запрашивать последние 4 столбца (log_max_index, log_pointer, total_replicas, active_replicas), то таблица работает быстро.
228248

229249

230-
$statementsReplicas[$node] = $this->defaultClient()->selectAsync('SELECT * FROM system.replicas');
250+
251+
$statementsReplicas[$node] = $this->defaultClient()->selectAsync($this->getSelectSystemReplicas());
231252
$statementsClusters[$node] = $this->defaultClient()->selectAsync('SELECT * FROM system.clusters');
232253
// пересетапим timeout
233254
$statementsReplicas[$node]->getRequest()->setDnsCache(0)->timeOut($this->scanTimeOut)->connectTimeOut($this->scanTimeOut);

0 commit comments

Comments
 (0)