예제 #1
0
 /**
  * @return BucketRange
  */
 protected function _claimNextFreeRange()
 {
     $range = false;
     $db = BucketRange::conn();
     EventManager::trigger(Events::CLAIM_RANGE_START);
     // Check for an already-flagged range
     $coll = new RecordCollection(new BucketRange());
     $coll->loadWhere(['processing' => 1, 'hostname' => $this->_hostname, 'instanceName' => $this->_instanceName])->limit(1);
     if ($coll->count() > 0) {
         $range = $coll->first();
     } else {
         $res = $db->query(ParseQuery::parse($db, "UPDATE %T SET processing=1, hostname=%s, instanceName=%s " . "WHERE processing=0 AND processed=0 ORDER BY randomKey LIMIT 1", BucketRange::tableName(), $this->_hostname, $this->_instanceName));
         if ($res) {
             $range = BucketRange::loadWhere(['processing' => 1, 'hostname' => $this->_hostname, 'instanceName' => $this->_instanceName]);
         }
     }
     EventManager::trigger(Events::CLAIM_RANGE_END);
     return $range;
 }
예제 #2
0
 private static function _listRangesWhere($where, $limit = 0)
 {
     $query = "SELECT prefix, updatedAt, hostname, error FROM %T " . "WHERE " . $where;
     if ($limit > 0) {
         $query .= " LIMIT " . $limit;
     }
     $db = BucketRange::conn();
     $ranges = $db->getRows(ParseQuery::parse($db, $query, BucketRange::tableName()));
     $numRanges = count($ranges);
     if ($numRanges > 0) {
         $table = new TextTable();
         $table->setColumnHeaders('prefix', 'updatedAt', 'hostname', 'error');
         foreach ($ranges as $range) {
             $table->appendRow([$range->prefix, $range->updatedAt, $range->hostname, $range->error]);
         }
         echo $table;
     }
     return $numRanges;
 }