/** * @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; }
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; }