@@ -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