/**
  * @param int $prefixLength
  */
 public static function buildRanges($prefixLength)
 {
     $db = BucketRange::conn();
     if ((new BucketRange())->tableExists()) {
         $db->query(ParseQuery::parse($db, 'DELETE FROM %T', BucketRange::tableName()));
     }
     $maxNum = pow(16, $prefixLength);
     for ($i = 0; $i < $maxNum; $i++) {
         $prefix = sprintf("%0" . $prefixLength . "x", $i);
         $range = new BucketRange($prefix);
         $range->processed = 0;
         $range->processing = 0;
         $range->randomKey = rand(1, 10000);
         $range->saveChanges();
         Shell::clearLine();
         echo "Building ranges: " . number_format($i + 1) . "/" . number_format($maxNum);
     }
     echo "\n";
 }
 private function _countRange($startKey, $endKey)
 {
     if ($startKey == "" && $endKey == "") {
         echo "Start key and end key are both blank\n";
         die;
     }
     $cass = Cassandra::getAccessor($this->_getCassServiceName());
     $cf = $cass->cf($this->_getColumnFamilyName(), false);
     echo "Counting range from '" . $startKey . "' to '" . $endKey . "'\n";
     $batchSize = 1000;
     $totalKeys = 1;
     $finished = false;
     $lastKey = $startKey;
     while (!$finished) {
         // ignore the duplicate key from each time around
         $totalKeys--;
         $items = $cf->getKeys($lastKey, $endKey, $batchSize, array());
         $cnt = count($items);
         $totalKeys += $cnt;
         $lastKey = last_key($items);
         if ($cnt < $batchSize || $lastKey == $endKey) {
             $finished = true;
         }
         Shell::clearLine();
         echo "Found " . number_format($totalKeys) . " keys";
     }
     echo "\n";
 }
 /**
  * For testing only: refresh the keys for all ranges
  */
 public function refreshKeysForAllRanges()
 {
     $result = $this->_multiGetRows(TokenRange::conn(), 'SELECT id FROM %T', $this->listAllRangeTables());
     $ids = [];
     foreach ($result as $row) {
         $ids[] = $row->id;
     }
     $total = count($ids);
     $processed = 0;
     foreach ($ids as $id) {
         $range = new TokenRange($id);
         $this->refreshKeysForRange($range);
         $processed++;
         Shell::clearLine();
         echo "Processed: " . number_format($processed) . ' / ' . number_format($total);
     }
     echo "\n";
 }