@@ -27,6 +27,10 @@ class Cluster
2727 private $ badIps =[];
2828
2929
30+ /**
31+ * @var array
32+ */
33+ private $ resultScan =[];
3034 /**
3135 * @var bool
3236 */
@@ -105,6 +109,11 @@ public function connect()
105109 }
106110 return $ this ;
107111 }
112+
113+ /**
114+ * @param $replicas
115+ * @return bool
116+ */
108117 private function isReplicasWork ($ replicas )
109118 {
110119 $ ok =true ;
@@ -127,6 +136,10 @@ private function isReplicasWork($replicas)
127136 }
128137 return $ ok ;
129138 }
139+
140+ /**
141+ * @return $this
142+ */
130143 public function rescan ()
131144 {
132145 /*
@@ -139,6 +152,7 @@ public function rescan()
139152 $ statementsReplicas =[];
140153 $ statementsClusters =[];
141154 $ result =[];
155+
142156 $ badIps =[];
143157 $ replicasIsOk =true ;
144158
@@ -168,7 +182,13 @@ public function rescan()
168182 // ---------------------------------------------------------------------------------------------------
169183 try
170184 {
171- $ result ['clusters ' ][$ ip ] =$ statementsClusters [$ ip ]->rowsAsTree ('cluster.host_address ' );
185+ $ c =$ statementsClusters [$ ip ]->rows ();
186+ $ result ['clusters ' ][$ ip ] = $ c ;
187+ foreach ($ c as $ row )
188+ {
189+ $ result ['cluster.list ' ][$ row ['cluster ' ]][$ row ['host_address ' ]][$ row ['shard_num ' ]][$ row ['replica_num ' ]]=['shard_weight ' =>$ row ['shard_weight ' ],'is_local ' =>$ row ['is_local ' ]];
190+ }
191+
172192 }
173193 catch (\Exception $ E )
174194 {
@@ -207,9 +227,18 @@ public function rescan()
207227 $ this ->replicasIsOk =false ;
208228 }
209229
230+ $ this ->resultScan =$ result ;
210231 // @todo Мы подключаемся ко всем в списке DNS, нужно пререить что запросы вернули все хосты к которым мы подключались
232+ return $ this ;
211233 }
212234
235+ /**
236+ * @return boolean
237+ */
238+ public function isReplicasIsOk ()
239+ {
240+ return $ this ->connect ()->replicasIsOk ;
241+ }
213242 /**
214243 * @return Client
215244 */
@@ -225,7 +254,17 @@ public function activeClient()
225254 {
226255 return $ this ->client ($ this ->ips [0 ]);
227256 }
228-
257+ public function getClusterHosts ($ cluster )
258+ {
259+ $ this ->connect ();
260+ if (empty ($ this ->resultScan ['cluster.list ' ][$ cluster ])) throw new QueryException ('Cluster not find: ' .$ cluster );
261+ return array_keys ($ this ->resultScan ['cluster.list ' ][$ cluster ]);
262+ }
263+ public function getClusterList ()
264+ {
265+ $ this ->connect ();
266+ return array_keys ($ this ->resultScan ['cluster.list ' ]);
267+ }
229268 /**
230269 * @param $sql
231270 * @param array $bindings
0 commit comments