milvus/cpp/src/scheduler/Scheduler.cpp
wxyu 9400101582 MS-357 Add minimum schedule function
Former-commit-id: da78df540b934e3f1d881b16f023d749e4b37101
2019-08-15 15:57:12 +08:00

75 lines
1.7 KiB
C++

/*******************************************************************************
* Copyright 上海赜睿信息科技有限公司(Zilliz) - All Rights Reserved
* Unauthorized copying of this file, via any medium is strictly prohibited.
* Proprietary and confidential.
******************************************************************************/
#include "Scheduler.h"
#include "Cost.h"
namespace zilliz {
namespace milvus {
namespace engine {
void
push_task(ResourcePtr &self, ResourcePtr &other) {
auto self_task_table = self->task_table();
auto other_task_table = other->task_table();
if (!other_task_table.Empty()) {
CacheMgr cache;
auto indexes = PickToMove(self_task_table, cache, 1);
for (auto index : indexes) {
if (self_task_table.Move(index)) {
auto task = self_task_table.Get(index).task;
other_task_table.Put(task);
// TODO: mark moved future
other->WakeupLoader();
other->WakeupExecutor();
}
}
}
}
void
schedule(const ResourceWPtr &res) {
if (auto self = res.lock()) {
for (auto &nei : self->GetNeighbours()) {
if (auto n = nei.neighbour_node.lock()) {
auto neighbour = std::static_pointer_cast<Resource>(n);
push_task(self, neighbour);
}
}
}
}
void
StartUpEvent::Process() {
schedule(resource_);
}
void
FinishTaskEvent::Process() {
schedule(resource_);
}
void
CopyCompletedEvent::Process() {
schedule(resource_);
}
void
TaskTableUpdatedEvent::Process() {
schedule(resource_);
}
std::string
Scheduler::Dump() {
return std::string();
}
}
}
}