protected function _getRedoIterator() { $redoFile = Log::getLastRedoFile(); if (file_exists($redoFile) && ($handle = fopen($redoFile, "r"))) { while (($line = fgets($handle)) !== false) { $arrPackage = array(); if (preg_match('/redo=(.*)\\[BACK_TRACE\\]/', $line, $arrElements)) { $arrPackage = unserialize(trim($arrElements[1])); if (!isset($arrPackage['retry'])) { $arrPackage['retry'] = 1; } elseif ($arrPackage['retry'] > self::MAX_RETRY_TIMES) { Log::redoBill()->error(array('redo' => 'more then max_retry_times!', 'package' => $arrPackage)); Log::monitor()->error(array(Monitor::KEY => Monitor::OVER_MAX_RETRY_TIMES, '&package' => $arrPackage)); continue; } else { $arrPackage['retry'] += 1; } } (yield $arrPackage); } fclose($handle); Log::redoBill()->debug(array('redoIterator' => 'retry done!', 'file' => $redoFile)); } else { Log::redoBill()->notice(array('redoIterator' => 'last ten minutes has no failed record!', 'file' => $redoFile)); } }