| | |
| | | } |
| | | m_pControlJob->setPJs(tempPjs); |
| | | |
| | | // 重建运行态缓存,避免重启后仅依赖 Queued 选择导致找不到当前 PJ。 |
| | | m_inProcesJobs.clear(); |
| | | m_completeProcessJobs.clear(); |
| | | m_queueGlasses.clear(); |
| | | m_inProcesGlasses.clear(); |
| | | m_completeGlasses.clear(); |
| | | for (auto pj : tempPjs) { |
| | | if (pj == nullptr) continue; |
| | | switch (pj->state()) { |
| | | case PJState::InProcess: |
| | | case PJState::Paused: |
| | | m_inProcesJobs.push_back(pj); |
| | | break; |
| | | case PJState::Completed: |
| | | case PJState::Aborted: |
| | | case PJState::Failed: |
| | | m_completeProcessJobs.push_back(pj); |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | LOGI("<Master>loadState: ProcessJob rebuild done. total=%d, inProcess=%d, complete=%d", |
| | | (int)tempPjs.size(), |
| | | (int)m_inProcesJobs.size(), |
| | | (int)m_completeProcessJobs.size()); |
| | | |
| | | |
| | | // 更新contexts |
| | | auto pjs = m_pControlJob->getPjs(); |
| | |
| | | |
| | | CProcessJob* CMaster::acquireNextProcessJob() |
| | | { |
| | | if (m_pControlJob == nullptr) return nullptr; |
| | | auto& pjs = m_pControlJob->getPjs(); |
| | | for (const auto pj : pjs) { |
| | | if (pj->state() == PJState::Queued) { |
| | | LOGI("<Master>acquireNextProcessJob: start queued PJ(%s)", pj->id().c_str()); |
| | | pj->start(); |
| | | return pj; |
| | | } |
| | | } |
| | | |
| | | // 若没有 Queued,继续复用已经在制/暂停的 PJ(例如 loadState 恢复后的场景)。 |
| | | for (const auto pj : pjs) { |
| | | if (pj->state() == PJState::InProcess || pj->state() == PJState::Paused) { |
| | | LOGI("<Master>acquireNextProcessJob: reuse PJ(%s), state=%d", |
| | | pj->id().c_str(), (int)pj->state()); |
| | | return pj; |
| | | } |
| | | } |
| | | |
| | | |
| | | return nullptr; |
| | | } |