diff --git a/src/algo/conservative_bf.cpp b/src/algo/conservative_bf.cpp index ec44cf14821b9edc47b94be94499c0c042fef835..ceeb547fc1ec6ddb7b46df25a0563612f2e71c2a 100644 --- a/src/algo/conservative_bf.cpp +++ b/src/algo/conservative_bf.cpp @@ -1,5 +1,7 @@ #include "conservative_bf.hpp" +#include <loguru.hpp> + using namespace std; ConservativeBackfilling::ConservativeBackfilling(Workload *workload, SchedulingDecision *decision, @@ -32,14 +34,26 @@ void ConservativeBackfilling::make_decisions(double date, _schedule.remove_job((*_workload)[ended_job_id]); // Let's handle recently released jobs + std::vector<std::string> recently_queued_jobs; for (const string & new_job_id : _jobs_released_recently) { const Job * new_job = (*_workload)[new_job_id]; if (new_job->nb_requested_resources > _nb_machines) + { + _decision->add_reject_job(new_job_id, date); + } + else if (!new_job->has_walltime) + { + LOG_SCOPE_FUNCTION(INFO); + LOG_F(INFO, "Date=%g. Rejecting job '%s' as it has no walltime", new_job_id.c_str()); _decision->add_reject_job(new_job_id, date); + } else + { _queue->append_job(new_job, update_info); + recently_queued_jobs.push_back(new_job_id); + } } // Let's update the schedule's present @@ -51,7 +65,7 @@ void ConservativeBackfilling::make_decisions(double date, // If no resources have been released, we can just insert the new jobs into the schedule if (_jobs_ended_recently.empty()) { - for (const string & new_job_id : _jobs_released_recently) + for (const string & new_job_id : recently_queued_jobs) { const Job * new_job = (*_workload)[new_job_id]; Schedule::JobAlloc alloc = _schedule.add_job_first_fit(new_job, _selector); diff --git a/src/algo/easy_bf.cpp b/src/algo/easy_bf.cpp index a8a2d9d0048b111a8ecb9dcb483a70092bc587cb..f10da6e05b310b7b0426fd91d1f4d3fc88038131 100644 --- a/src/algo/easy_bf.cpp +++ b/src/algo/easy_bf.cpp @@ -43,14 +43,26 @@ void EasyBackfilling::make_decisions(double date, _schedule.remove_job((*_workload)[ended_job_id]); // Let's handle recently released jobs + std::vector<std::string> recently_queued_jobs; for (const string & new_job_id : _jobs_released_recently) { const Job * new_job = (*_workload)[new_job_id]; if (new_job->nb_requested_resources > _nb_machines) + { + _decision->add_reject_job(new_job_id, date); + } + else if (!new_job->has_walltime) + { + LOG_SCOPE_FUNCTION(INFO); + LOG_F(INFO, "Date=%g. Rejecting job '%s' as it has no walltime", new_job_id.c_str()); _decision->add_reject_job(new_job_id, date); + } else + { _queue->append_job(new_job, update_info); + recently_queued_jobs.push_back(new_job_id); + } } // Let's update the schedule's present @@ -65,9 +77,9 @@ void EasyBackfilling::make_decisions(double date, { int nb_available_machines = _schedule.begin()->available_machines.size(); - for (unsigned int i = 0; i < _jobs_released_recently.size() && nb_available_machines > 0; ++i) + for (unsigned int i = 0; i < recently_queued_jobs.size() && nb_available_machines > 0; ++i) { - const string & new_job_id = _jobs_released_recently[i]; + const string & new_job_id = recently_queued_jobs[i]; const Job * new_job = (*_workload)[new_job_id]; // The job could have already been executed by sort_queue_while_handling_priority_job,