From f788de12cf5912a91e7f50b41d5110ce8c4d4101 Mon Sep 17 00:00:00 2001 From: "Ruben S. Montero" Date: Thu, 15 Dec 2011 11:58:34 +0100 Subject: [PATCH] feature #360: Scheduler reads default policies and make use of them --- src/scheduler/include/RankPolicy.h | 12 ++- src/scheduler/include/Scheduler.h | 4 +- src/scheduler/include/SchedulerTemplate.h | 2 + src/scheduler/src/sched/Scheduler.cc | 85 ++++++++++---------- src/scheduler/src/sched/SchedulerTemplate.cc | 48 ++++++++++- src/scheduler/src/sched/mm_sched.cc | 5 +- 6 files changed, 105 insertions(+), 51 deletions(-) diff --git a/src/scheduler/include/RankPolicy.h b/src/scheduler/include/RankPolicy.h index 628a51c717..b6c337bf1e 100644 --- a/src/scheduler/include/RankPolicy.h +++ b/src/scheduler/include/RankPolicy.h @@ -29,12 +29,16 @@ public: RankPolicy( VirtualMachinePoolXML * vmpool, HostPoolXML * hpool, - float w=1.0):SchedulerHostPolicy(vmpool,hpool,w){}; + const string& dr, + float w = 1.0) + :SchedulerHostPolicy(vmpool,hpool,w), default_rank(dr){}; ~RankPolicy(){}; private: + string default_rank; + void policy( VirtualMachineXML * vm) { @@ -53,10 +57,10 @@ private: srank = vm->get_rank(); - if (srank == "") + if (srank.empty()) { - NebulaLog::log("RANK",Log::WARNING,"No rank defined for VM"); - } + srank = default_rank; + } for (i=0;iname(),attribute)); - //DEFAULT_SCHED [0: Packing, 1: Striping, 2: Load-aware, or 3:Custom] + //DEFAULT_SCHED map vvalue; - vvalue.insert(make_pair("POLICY","packing")); + vvalue.insert(make_pair("POLICY","1")); vattribute = new VectorAttribute("DEFAULT_SCHED",vvalue); conf_default.insert(make_pair(attribute->name(),vattribute)); } +/* -------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ + +string SchedulerTemplate::get_policy() const +{ + int policy; + string rank; + + istringstream iss; + + vector vsched; + const VectorAttribute * sched; + + get("DEFAULT_SCHED", vsched); + + sched = static_cast (vsched[0]); + + iss.str(sched->vector_value("POLICY")); + iss >> policy; + + switch (policy) + { + case 0: //Packing + rank = "RUNNING_VMS"; + break; + + case 1: //Striping + rank = "- RUNNING_VMS"; + break; + + case 2: //Load-aware + rank = "FREE_CPU"; + break; + + case 3: //Custom + rank = sched->vector_value("RANK"); + break; + + default: + rank = ""; + } + + return rank; +} \ No newline at end of file diff --git a/src/scheduler/src/sched/mm_sched.cc b/src/scheduler/src/sched/mm_sched.cc index 6153c89e15..9e5104e6c1 100644 --- a/src/scheduler/src/sched/mm_sched.cc +++ b/src/scheduler/src/sched/mm_sched.cc @@ -15,6 +15,7 @@ /* -------------------------------------------------------------------------- */ #include "Scheduler.h" +#include "SchedulerTemplate.h" #include "RankPolicy.h" #include #include @@ -41,9 +42,9 @@ public: } }; - void register_policies() + void register_policies(const SchedulerTemplate& conf) { - rp = new RankPolicy(vmpool,hpool,1.0); + rp = new RankPolicy(vmpool, hpool, conf.get_policy(), 1.0); add_host_policy(rp); };