public static function processTaskQueue() { set_time_limit(0); ignore_user_abort(1); $db = BFL_Database::getInstance(); $lock_tables = array(DB_TABLE_JUDGER . ' write', DB_TABLE_RECORD . ' write', DB_TABLE_RECORDMETA . ' write', DB_TABLE_PROB . ' read'); $db->lock($lock_tables, true); //Get Available Judger $judger = MDL_Judger_Set::getAvailableJudger(); if ($judger == NULL) { $db->unlock(); return 'nojudger'; } $judger_id = $judger->getID(); $task = self::getTask(); if (!$task) { $db->unlock(); return 'notask'; } //Pend task MDL_Judge_Record::pend($task['record_id'], $judger_id); //lock judger $judger->lock(); $db->unlock(); //upload source $task['src_name'] = self::getSrcname($task['task_name'], $task['language']); MDL_Judger_Transmit::sendTask($judger, $task['task_name'], $task['source'], $task['src_name']); //send judge request $config = MDL_Config::getInstance(); MDL_Judger_Access::sendRequest($judger, $task); }
public function writeRecord($rs) { $info = $rs['info']; $info['record_id'] = $_GET['record_id']; switch ($rs['type']) { case 'compile': MDL_Judge_Record::recordCompile($info); break; case 'execute': MDL_Judge_Record::recordExecute($info); break; case 'complete': MDL_Judge_Record::recordComplete($info); break; default: } }
public static function rejudgeSingle($record_id) { MDL_Judge_Record::resetRecord($record_id); MDL_Judger_Process::processTaskQueue(); }