-
Millian Poquet authoredMillian Poquet authored
isalgorithm.cpp 3.59 KiB
#include "isalgorithm.hpp"
#include "pempek_assert.hpp"
using namespace std;
void ISchedulingAlgorithm::set_nb_machines(int nb_machines)
{
PPK_ASSERT_ERROR(_nb_machines == -1);
_nb_machines = nb_machines;
}
void ISchedulingAlgorithm::clear_recent_data_structures()
{
_jobs_released_recently.clear();
_jobs_ended_recently.clear();
_jobs_killed_recently.clear();
_jobs_whose_waiting_time_estimation_has_been_requested_recently.clear();
_machines_whose_pstate_changed_recently.clear();
_machines_that_became_available_recently.clear();
_machines_that_became_unavailable_recently.clear();
_nopped_recently = false;
_consumed_joules_updated_recently = false;
_consumed_joules = -1;
}
ISchedulingAlgorithm::ISchedulingAlgorithm(Workload *workload,
SchedulingDecision *decision,
Queue *queue,
ResourceSelector *selector,
double rjms_delay,
rapidjson::Document *variant_options) :
_workload(workload), _decision(decision), _queue(queue), _selector(selector),
_rjms_delay(rjms_delay), _variant_options(variant_options)
{
}
ISchedulingAlgorithm::~ISchedulingAlgorithm()
{
}
void ISchedulingAlgorithm::on_job_release(double date, const vector<string> &job_ids)
{
(void) date;
_jobs_released_recently.insert(_jobs_released_recently.end(),
job_ids.begin(),
job_ids.end());
}
void ISchedulingAlgorithm::on_job_end(double date, const vector<string> &job_ids)
{
(void) date;
_jobs_ended_recently.insert(_jobs_ended_recently.end(),
job_ids.begin(),
job_ids.end());
}
void ISchedulingAlgorithm::on_job_killed(double date, const std::vector<string> &job_ids)
{
(void) date;
_jobs_killed_recently.insert(_jobs_killed_recently.end(),
job_ids.begin(),
job_ids.end());
}
void ISchedulingAlgorithm::on_machine_state_changed(double date, IntervalSet machines, int new_state)
{
(void) date;
if (_machines_whose_pstate_changed_recently.count(new_state) == 0)
_machines_whose_pstate_changed_recently[new_state] = machines;
else
_machines_whose_pstate_changed_recently[new_state] += machines;
}
void ISchedulingAlgorithm::on_requested_call(double date)
{
(void) date;
_nopped_recently = true;
}
void ISchedulingAlgorithm::on_no_more_static_job_to_submit_received(double date)
{
(void) date;
_no_more_static_job_to_submit_received = true;
}
void ISchedulingAlgorithm::on_no_more_external_event_to_occur(double date)
{
(void) date;
_no_more_external_event_to_occur_received = true;
}
void ISchedulingAlgorithm::on_answer_energy_consumption(double date, double consumed_joules)
{
(void) date;
_consumed_joules = consumed_joules;
_consumed_joules_updated_recently = true;
}
void ISchedulingAlgorithm::on_machine_available_notify_event(double date, IntervalSet machines)
{
(void) date;
_machines_that_became_available_recently += machines;
}
void ISchedulingAlgorithm::on_machine_unavailable_notify_event(double date, IntervalSet machines)
{
(void) date;
_machines_that_became_unavailable_recently += machines;
}
void ISchedulingAlgorithm::on_query_estimate_waiting_time(double date, const string &job_id)
{
(void) date;
_jobs_whose_waiting_time_estimation_has_been_requested_recently.push_back(job_id);
}