void RenderAf::ejectTasks( JobContainer * jobs, MonitorContainer * monitoring, uint32_t upstatus, const std::string * i_keeptasks_username ) { if( m_tasks.size() < 1) return; std::list<int>id_jobs; std::list<int>id_blocks; std::list<int>id_tasks; std::list<int>numbers; for( std::list<af::TaskExec*>::const_iterator it = m_tasks.begin(); it != m_tasks.end(); it++) { // Skip if username to keep tasks provided: if( i_keeptasks_username != NULL ) if( *i_keeptasks_username == (*it)->getUserName()) continue; id_jobs.push_back( (*it)->getJobId()); id_blocks.push_back( (*it)->getBlockNum()); id_tasks.push_back( (*it)->getTaskNum()); numbers.push_back( (*it)->getNumber()); appendLog( std::string("Ejecting task: ") + (*it)->v_generateInfoString( false)); } JobContainerIt jobsIt( jobs); std::list<int>::const_iterator jIt = id_jobs.begin(); std::list<int>::const_iterator bIt = id_blocks.begin(); std::list<int>::const_iterator tIt = id_tasks.begin(); std::list<int>::const_iterator nIt = numbers.begin(); std::list<int>::const_iterator end = numbers.end(); for( ; nIt != end; jIt++, bIt++, tIt++, nIt++) { JobAf* job = jobsIt.getJob( *jIt); if( job != NULL ) { af::MCTaskUp taskup( m_id, *jIt, *bIt, *tIt, *nIt, upstatus); job->v_updateTaskState( taskup, ms_renders, monitoring); } } }
void JobContainer::updateTaskState( af::MCTaskUp &taskup, RenderContainer * renders, MonitorContainer * monitoring) { switch( taskup.getStatus()) { case af::TaskExec::UPNULL: case af::TaskExec::UPNoTaskRunning: case af::TaskExec::UPNoJob: case af::TaskExec::UPLAST: AFERRAR("JobContainer::updateTaskState: Bad task update status (jobID=%d).\n", taskup.getNumJob()); return; } JobContainerIt jobsIt( this); JobAf* job = jobsIt.getJob( taskup.getNumJob()); if( job != NULL ) { job->v_updateTaskState( taskup, renders, monitoring); return; } // Job does not exist! AFERRAR("JobContainer::updateTaskState: Job with id=%d does not exists.", taskup.getNumJob()) if( taskup.getStatus() == af::TaskExec::UPPercent) RenderAf::closeLostTask( taskup); }