mirror of
https://github.com/OpenNebula/one.git
synced 2025-01-03 01:17:41 +03:00
F #1548: Added relative TIME specs for Actions. Format is TIME="+<sec>" action will be executed after sec seconds of being created
This commit is contained in:
parent
3d748610d4
commit
d59f79deb3
@ -99,9 +99,10 @@ public:
|
|||||||
int parse(std::string& error, bool clean);
|
int parse(std::string& error, bool clean);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @param stime time when the time was started for relative time specs
|
||||||
* @return true if the action needs to be executed.
|
* @return true if the action needs to be executed.
|
||||||
*/
|
*/
|
||||||
bool is_due();
|
bool is_due(time_t stime);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Compute the next action, updating the TIME attribute for this action
|
* Compute the next action, updating the TIME attribute for this action
|
||||||
|
@ -165,8 +165,8 @@ protected:
|
|||||||
{
|
{
|
||||||
ostringstream oss;
|
ostringstream oss;
|
||||||
|
|
||||||
oss << "/VM_POOL/VM/USER_TEMPLATE/SCHED_ACTION[TIME < " << time(0)
|
oss << "/VM_POOL/VM/USER_TEMPLATE/SCHED_ACTION[(TIME < " << time(0)
|
||||||
<< " and not(DONE > 0)]/../..";
|
<< " and not(DONE > 0)) or ( TIME[starts-with(text(),\"+\")] and not(DONE>0) ) ]/../..";
|
||||||
|
|
||||||
return get_nodes(oss.str().c_str(), content);
|
return get_nodes(oss.str().c_str(), content);
|
||||||
}
|
}
|
||||||
|
@ -160,6 +160,11 @@ public:
|
|||||||
return dsid;
|
return dsid;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
time_t get_stime() const
|
||||||
|
{
|
||||||
|
return stime;
|
||||||
|
}
|
||||||
|
|
||||||
bool is_resched() const
|
bool is_resched() const
|
||||||
{
|
{
|
||||||
return (resched == 1);
|
return (resched == 1);
|
||||||
@ -586,7 +591,7 @@ protected:
|
|||||||
|
|
||||||
int state;
|
int state;
|
||||||
|
|
||||||
long int memory;
|
long int memory;
|
||||||
float cpu;
|
float cpu;
|
||||||
long long system_ds_usage;
|
long long system_ds_usage;
|
||||||
|
|
||||||
@ -600,6 +605,8 @@ protected:
|
|||||||
string ds_requirements;
|
string ds_requirements;
|
||||||
string ds_rank;
|
string ds_rank;
|
||||||
|
|
||||||
|
time_t stime;
|
||||||
|
|
||||||
set<int> nics_ids_auto;
|
set<int> nics_ids_auto;
|
||||||
|
|
||||||
map<int, VirtualMachineNicXML *> nics;
|
map<int, VirtualMachineNicXML *> nics;
|
||||||
|
@ -169,6 +169,8 @@ void VirtualMachineXML::init_attributes()
|
|||||||
|
|
||||||
xpath(action, "/VM/HISTORY_RECORDS/HISTORY/ACTION", -1);
|
xpath(action, "/VM/HISTORY_RECORDS/HISTORY/ACTION", -1);
|
||||||
|
|
||||||
|
xpath(stime, "/VM/STIME", (time_t) 0);
|
||||||
|
|
||||||
resume = (action == History::STOP_ACTION ||
|
resume = (action == History::STOP_ACTION ||
|
||||||
action == History::UNDEPLOY_ACTION ||
|
action == History::UNDEPLOY_ACTION ||
|
||||||
action == History::UNDEPLOY_HARD_ACTION );
|
action == History::UNDEPLOY_HARD_ACTION );
|
||||||
|
@ -1737,7 +1737,7 @@ int Scheduler::do_scheduled_actions()
|
|||||||
{
|
{
|
||||||
ostringstream oss;
|
ostringstream oss;
|
||||||
|
|
||||||
if (!(*action)->is_due())
|
if (!(*action)->is_due(vm->get_stime()))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -293,13 +293,32 @@ static int days_in_period(SchedAction::Repeat& r, int month, int year)
|
|||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
bool SchedAction::is_due()
|
bool SchedAction::is_due(time_t stime)
|
||||||
{
|
{
|
||||||
time_t action_time, done_time;
|
time_t action_time, done_time, origin = 0;
|
||||||
|
|
||||||
|
std::istringstream iss;
|
||||||
|
|
||||||
bool has_done = vector_value("DONE", done_time) == 0;
|
bool has_done = vector_value("DONE", done_time) == 0;
|
||||||
|
|
||||||
vector_value("TIME", action_time);
|
std::string action_time_s = vector_value("TIME");
|
||||||
|
|
||||||
|
if ( action_time_s[0] == '+' )
|
||||||
|
{
|
||||||
|
origin = stime;
|
||||||
|
action_time_s.erase(0, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
iss.str(action_time_s);
|
||||||
|
|
||||||
|
iss >> action_time;
|
||||||
|
|
||||||
|
if (iss.fail() || !iss.eof())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
action_time += origin;
|
||||||
|
|
||||||
return ((!has_done || done_time < action_time) && action_time < time(0));
|
return ((!has_done || done_time < action_time) && action_time < time(0));
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user