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(); } } } } } } } }
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); } } }