public function execute()
 {
     if ($this->argumentValue('no-report')) {
         $this->_displayReport = false;
     }
     if ($this->argumentIsSet('build-ranges')) {
         RangeManager::buildRanges($this->argumentValue('build-ranges'));
     } else {
         if ($this->argumentIsSet('reset-ranges')) {
             RangeManager::resetAllRanges();
         } else {
             if ($this->argumentIsSet('reset-range')) {
                 RangeManager::resetRange($this->argumentValue('reset-range'));
             } else {
                 if ($this->argumentIsSet('reset-failed')) {
                     RangeManager::resetFailedRanges();
                 } else {
                     if ($this->argumentIsSet('reset-processing')) {
                         RangeManager::resetProcessingRanges();
                     } else {
                         if ($this->argumentIsSet('list-failed')) {
                             RangeManager::listFailedRanges($this->argumentValue('list-failed'));
                         } else {
                             if ($this->argumentIsSet('list-requeued')) {
                                 RangeManager::listRequeuedRanges($this->argumentValue('list-requeued'));
                             } else {
                                 $this->_pidFile = new PidFile("", $this->_instanceName);
                                 $this->_initProcessingRun();
                                 $this->_getRangeProcessor()->setBatchSize($this->argumentValue('batch-size'));
                                 $this->_getRangeProcessor()->processAllRanges();
                             }
                         }
                     }
                 }
             }
         }
     }
 }
示例#2
0
 public function processRange(BucketRange $range)
 {
     Log::info('Processing range ' . $range->id());
     $this->_statsReporter->nextRange($range);
     $this->_processor->resetRangeData();
     $listOpts = ['Bucket' => $this->_bucketName, 'MaxKeys' => $this->_batchSize, 'Prefix' => $range->prefix];
     try {
         if ($this->_processor->shouldSaveProgress() && !empty($range->lastObject)) {
             $lastObject = $range->lastObject;
             Log::info('Continuing from key ' . $lastObject);
         } else {
             $lastObject = "";
         }
         $gcs = $this->_getGCS();
         $finished = false;
         while (!$finished) {
             if ($lastObject != "") {
                 $listOpts['Marker'] = $lastObject;
             }
             EventManager::trigger(Events::LIST_BUCKET_START);
             $objects = $gcs->listObjects($listOpts);
             EventManager::trigger(Events::LIST_BUCKET_END);
             $numObjects = count($objects['Contents']);
             if ($numObjects > 0) {
                 $items = [];
                 foreach ($objects['Contents'] as $object) {
                     $items[] = new ObjectInfo($object['Key'], $object['Size'], $object['ETag'], $object['LastModified']);
                 }
                 $batchProcessed = $this->_processor->processBatch($items);
                 $lastObjectObj = end($items);
                 $lastObject = $lastObjectObj->objectKey;
                 $range->lastObject = $lastObject;
                 $this->_statsReporter->addItems($numObjects, $batchProcessed);
                 if ($this->_processor->shouldSaveProgress()) {
                     $range->rangeData = $this->_processor->getRangeData();
                     $range->saveChanges();
                 }
             } else {
                 Log::info('Finished processing range ' . $range->prefix . ' (' . $this->_statsReporter->rangeTotalItems . ' total items)');
                 $finished = true;
             }
             $this->_statsReporter->displayReport();
         }
         RangeManager::rangeProcessed($range, $this->_statsReporter->rangeStartTime, $this->_processor->getRangeData());
     } catch (\Exception $e) {
         $msg = "Code " . $e->getCode();
         $exMsg = $e->getMessage();
         if ($exMsg != "") {
             $msg .= ": " . $exMsg;
         }
         Log::error('Error processing range: ' . $msg . "\n\nBacktrace:\n" . $e->getTraceAsString());
         if ($this->_processor->isFatalException($e)) {
             RangeManager::rangeFailed($range, $this->_statsReporter->rangeStartTime, $msg);
         } else {
             RangeManager::requeueRange($range, $this->_statsReporter->rangeStartTime, $msg);
         }
     }
 }