#include <cstdlib>
#include "xsched/utils/log.h"
#include "xsched/protocol/names.h"
#include "xsched/sched/scheduler/local.h"
#include "xsched/sched/scheduler/global.h"
#include "xsched/sched/scheduler/scheduler.h"
#include "xsched/sched/scheduler/app_managed.h"
using namespace xsched::sched;
using namespace xsched::protocol;
void Scheduler::Execute(std::shared_ptr<const Operation> operation)
{
if (executor_) return executor_(operation);
XDEBG("executor not set");
}
std::shared_ptr<Scheduler>
xsched::sched::CreateScheduler(XSchedulerType scheduler_type, XPolicyType policy_type)
{
if (policy_type > kPolicyUnknown && policy_type < kPolicyMax) {
XINFO("using local scheduler with policy %s", GetPolicyTypeName(policy_type).c_str());
return std::make_shared<LocalScheduler>(policy_type);
}
if (scheduler_type == kSchedulerGlobal) {
XINFO("using global scheduler");
return std::make_shared<GlobalScheduler>();
}
XINFO("using app-managed scheduler");
return std::make_shared<AppManagedScheduler>();
}