From 484f255f5e939a1884cd156e3a6d24b15a0c58b3 Mon Sep 17 00:00:00 2001 From: wxyu Date: Fri, 16 Aug 2019 16:09:02 +0800 Subject: [PATCH] MS-366 Implement TaskTable Former-commit-id: e6d189c5c63b0477384353bf6f75482eeb196c7d --- cpp/CHANGELOG.md | 1 + cpp/src/scheduler/TaskTable.cpp | 50 +++++++++++++++++++++++++++++---- cpp/src/scheduler/TaskTable.h | 3 -- 3 files changed, 46 insertions(+), 8 deletions(-) diff --git a/cpp/CHANGELOG.md b/cpp/CHANGELOG.md index 5e3d747e..63f69993 100644 --- a/cpp/CHANGELOG.md +++ b/cpp/CHANGELOG.md @@ -21,6 +21,7 @@ Please mark all change in change log and use the ticket from JIRA. - MS-361 - Add event in resource - MS-364 - Modify tasktableitem in tasktable - MS-365 - Use tasktableitemptr instead in event +- MS-366 - Implement TaskTable ## New Feature - MS-343 - Implement ResourceMgr diff --git a/cpp/src/scheduler/TaskTable.cpp b/cpp/src/scheduler/TaskTable.cpp index b42407d7..bac4d245 100644 --- a/cpp/src/scheduler/TaskTable.cpp +++ b/cpp/src/scheduler/TaskTable.cpp @@ -12,18 +12,23 @@ namespace zilliz { namespace milvus { namespace engine { -TaskTable::TaskTable(std::vector &&tasks) { - -} void TaskTable::Put(TaskPtr task) { - + auto item = std::make_shared(); + item->task = std::move(task); + item->state = TaskTableItemState::LOADED; + table_.push_back(item); } void TaskTable::Put(std::vector &tasks) { - + for (auto &task : tasks) { + auto item = std::make_shared(); + item->task = std::move(task); + item->state = TaskTableItemState::LOADED; + table_.push_back(item); + } } @@ -56,26 +61,61 @@ TaskTable::Move(uint64_t index) { bool TaskTable::Moved(uint64_t index) { + auto &task = table_[index]; + + std::lock_guard lock(task->mutex); + if (task->state == TaskTableItemState::MOVING) { + task->state = TaskTableItemState::MOVED; + return true; + } return false; } bool TaskTable::Load(uint64_t index) { + auto &task = table_[index]; + + std::lock_guard lock(task->mutex); + if (task->state == TaskTableItemState::START) { + task->state = TaskTableItemState::LOADING; + return true; + } return false; } bool TaskTable::Loaded(uint64_t index) { + auto &task = table_[index]; + + std::lock_guard lock(task->mutex); + if (task->state == TaskTableItemState::LOADING) { + task->state = TaskTableItemState::LOADED; + return true; + } return false; } bool TaskTable::Execute(uint64_t index) { + auto &task = table_[index]; + + std::lock_guard lock(task->mutex); + if (task->state == TaskTableItemState::LOADED) { + task->state = TaskTableItemState::EXECUTING; + return true; + } return false; } bool TaskTable::Executed(uint64_t index) { + auto &task = table_[index]; + + std::lock_guard lock(task->mutex); + if (task->state == TaskTableItemState::EXECUTING) { + task->state = TaskTableItemState::EXECUTED; + return true; + } return false; } diff --git a/cpp/src/scheduler/TaskTable.h b/cpp/src/scheduler/TaskTable.h index 1d02c833..21c376a6 100644 --- a/cpp/src/scheduler/TaskTable.h +++ b/cpp/src/scheduler/TaskTable.h @@ -48,9 +48,6 @@ class TaskTable { public: TaskTable() = default; - explicit - TaskTable(std::vector &&tasks); - /* * Put one task; */ -- GitLab