diff --git a/cpp/CHANGELOG.md b/cpp/CHANGELOG.md index 56d7c8e12b9ae90ee2db6d3dbe497a3ba020ce90..e05cb6cd7b71a112fe327eb0c42eeac8f223a0c3 100644 --- a/cpp/CHANGELOG.md +++ b/cpp/CHANGELOG.md @@ -19,6 +19,7 @@ Please mark all change in change log and use the ticket from JIRA. - MS-357 - Add minimum schedule function - MS-359 - Add cost test in new scheduler - MS-361 - Add event in resource +- MS-364 - Modify tasktableitem in tasktable ## New Feature - MS-343 - Implement ResourceMgr diff --git a/cpp/src/scheduler/Scheduler.cpp b/cpp/src/scheduler/Scheduler.cpp index fbf66628b947904e7f241f15cb0cb4fa1f156db4..c9d92ccb573f020031809a2b8f3c4e4ed84d7067 100644 --- a/cpp/src/scheduler/Scheduler.cpp +++ b/cpp/src/scheduler/Scheduler.cpp @@ -21,7 +21,7 @@ push_task(ResourcePtr &self, ResourcePtr &other) { 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; + auto task = self_task_table.Get(index)->task; other_task_table.Put(task); // TODO: mark moved future other->WakeupLoader(); diff --git a/cpp/src/scheduler/TaskTable.cpp b/cpp/src/scheduler/TaskTable.cpp index 1e77318e86d052d81278c5065369c528ef004619..b42407d7102cdd50d3052cbd44955189064f656d 100644 --- a/cpp/src/scheduler/TaskTable.cpp +++ b/cpp/src/scheduler/TaskTable.cpp @@ -27,7 +27,7 @@ TaskTable::Put(std::vector &tasks) { } -TaskTableItem & +TaskTableItemPtr TaskTable::Get(uint64_t index) { return table_[index]; } @@ -46,9 +46,9 @@ bool TaskTable::Move(uint64_t index) { auto &task = table_[index]; - std::lock_guard lock(task.mutex); - if (task.state == TaskTableItemState::START) { - task.state = TaskTableItemState::LOADING; + std::lock_guard lock(task->mutex); + if (task->state == TaskTableItemState::START) { + task->state = TaskTableItemState::LOADING; return true; } return false; diff --git a/cpp/src/scheduler/TaskTable.h b/cpp/src/scheduler/TaskTable.h index c99d484919574a105111f43912d98ecdf76ad2dc..1d02c8334cde73b436def3ec20943ecb374f5d3a 100644 --- a/cpp/src/scheduler/TaskTable.h +++ b/cpp/src/scheduler/TaskTable.h @@ -31,7 +31,7 @@ struct TaskTableItem { TaskTableItem() : id(0), state(TaskTableItemState::INVALID), mutex(), priority(0) {} TaskTableItem(const TaskTableItem &src) - : id(src.id), state(src.state), mutex(), priority(src.priority) {} + : id(src.id), state(src.state), mutex(), priority(src.priority) {} uint64_t id; // auto increment from 0; // TODO: add tag into task @@ -42,6 +42,8 @@ struct TaskTableItem { uint8_t priority; // just a number, meaningless; }; +using TaskTableItemPtr = std::shared_ptr; + class TaskTable { public: TaskTable() = default; @@ -65,7 +67,7 @@ public: /* * Return task table item reference; */ - TaskTableItem & + TaskTableItemPtr Get(uint64_t index); /* @@ -75,7 +77,7 @@ public: */ void Clear(); - + /* * Return true if task table empty, otherwise false; */ @@ -83,11 +85,11 @@ public: Empty() { return table_.empty(); } - + /* * Return size of task table; */ - inline size_t + inline size_t Size() { return table_.size(); } @@ -154,7 +156,7 @@ public: private: // TODO: map better ? - std::deque table_; + std::deque table_; }; diff --git a/cpp/src/scheduler/resource/Resource.cpp b/cpp/src/scheduler/resource/Resource.cpp index 4177e97588f774f73cd47b9f0eec7f14db29bdb7..9650f216d6ef8db3149ce1701623d495624943b8 100644 --- a/cpp/src/scheduler/resource/Resource.cpp +++ b/cpp/src/scheduler/resource/Resource.cpp @@ -46,7 +46,7 @@ TaskPtr Resource::pick_task_load() { for (auto index : indexes) { // try to set one task loading, then return if (task_table_.Load(index)) - return task_table_.Get(index).task; + return task_table_.Get(index)->task; // else try next } return nullptr; @@ -57,7 +57,7 @@ TaskPtr Resource::pick_task_execute() { for (auto index : indexes) { // try to set one task executing, then return if (task_table_.Execute(index)) - return task_table_.Get(index).task; + return task_table_.Get(index)->task; // else try next } return nullptr; diff --git a/cpp/unittest/scheduler/cost_test.cpp b/cpp/unittest/scheduler/cost_test.cpp index 0b0674391de488b768c168ea266257fb9b8d6671..27f1c08254515e52cf1c4f69f30ef68619b55f19 100644 --- a/cpp/unittest/scheduler/cost_test.cpp +++ b/cpp/unittest/scheduler/cost_test.cpp @@ -13,14 +13,14 @@ protected: auto task = std::make_shared(); table_.Put(task); } - table_.Get(0).state = TaskTableItemState::INVALID; - table_.Get(1).state = TaskTableItemState::START; - table_.Get(2).state = TaskTableItemState::LOADING; - table_.Get(3).state = TaskTableItemState::LOADED; - table_.Get(4).state = TaskTableItemState::EXECUTING; - table_.Get(5).state = TaskTableItemState::EXECUTED; - table_.Get(6).state = TaskTableItemState::MOVING; - table_.Get(7).state = TaskTableItemState::MOVED; + table_.Get(0)->state = TaskTableItemState::INVALID; + table_.Get(1)->state = TaskTableItemState::START; + table_.Get(2)->state = TaskTableItemState::LOADING; + table_.Get(3)->state = TaskTableItemState::LOADED; + table_.Get(4)->state = TaskTableItemState::EXECUTING; + table_.Get(5)->state = TaskTableItemState::EXECUTED; + table_.Get(6)->state = TaskTableItemState::MOVING; + table_.Get(7)->state = TaskTableItemState::MOVED; } diff --git a/cpp/unittest/scheduler/tasktable_test.cpp b/cpp/unittest/scheduler/tasktable_test.cpp index 68255b8e9379ddffcce6f9c91abe0c4249b5e6c0..a9ad9ebca575ae6507393bd837b05b178ed48fe4 100644 --- a/cpp/unittest/scheduler/tasktable_test.cpp +++ b/cpp/unittest/scheduler/tasktable_test.cpp @@ -58,19 +58,19 @@ protected: TEST_F(TaskTableBaseTest, put_task) { empty_table_.Put(task1_); - ASSERT_EQ(empty_table_.Get(0).task, task1_); + ASSERT_EQ(empty_table_.Get(0)->task, task1_); } TEST_F(TaskTableBaseTest, put_invalid_test) { empty_table_.Put(invalid_task_); - ASSERT_EQ(empty_table_.Get(0).task, invalid_task_); + ASSERT_EQ(empty_table_.Get(0)->task, invalid_task_); } TEST_F(TaskTableBaseTest, put_batch) { std::vector tasks{task1_, task2_}; empty_table_.Put(tasks); - ASSERT_EQ(empty_table_.Get(0).task, task1_); - ASSERT_EQ(empty_table_.Get(1).task, task2_); + ASSERT_EQ(empty_table_.Get(0)->task, task1_); + ASSERT_EQ(empty_table_.Get(1)->task, task2_); } TEST_F(TaskTableBaseTest, put_empty_batch) { @@ -89,14 +89,14 @@ protected: table1_.Put(task); } - table1_.Get(0).state = TaskTableItemState::INVALID; - table1_.Get(1).state = TaskTableItemState::START; - table1_.Get(2).state = TaskTableItemState::LOADING; - table1_.Get(3).state = TaskTableItemState::LOADED; - table1_.Get(4).state = TaskTableItemState::EXECUTING; - table1_.Get(5).state = TaskTableItemState::EXECUTED; - table1_.Get(6).state = TaskTableItemState::MOVING; - table1_.Get(7).state = TaskTableItemState::MOVED; + table1_.Get(0)->state = TaskTableItemState::INVALID; + table1_.Get(1)->state = TaskTableItemState::START; + table1_.Get(2)->state = TaskTableItemState::LOADING; + table1_.Get(3)->state = TaskTableItemState::LOADED; + table1_.Get(4)->state = TaskTableItemState::EXECUTING; + table1_.Get(5)->state = TaskTableItemState::EXECUTED; + table1_.Get(6)->state = TaskTableItemState::MOVING; + table1_.Get(7)->state = TaskTableItemState::MOVED; } TaskTable table1_; @@ -106,22 +106,22 @@ TEST_F(TaskTableAdvanceTest, load) { table1_.Load(1); table1_.Loaded(2); - ASSERT_EQ(table1_.Get(1).state, TaskTableItemState::LOADING); - ASSERT_EQ(table1_.Get(2).state, TaskTableItemState::LOADED); + ASSERT_EQ(table1_.Get(1)->state, TaskTableItemState::LOADING); + ASSERT_EQ(table1_.Get(2)->state, TaskTableItemState::LOADED); } TEST_F(TaskTableAdvanceTest, execute) { table1_.Execute(3); table1_.Executed(4); - ASSERT_EQ(table1_.Get(3).state, TaskTableItemState::EXECUTING); - ASSERT_EQ(table1_.Get(4).state, TaskTableItemState::EXECUTED); + ASSERT_EQ(table1_.Get(3)->state, TaskTableItemState::EXECUTING); + ASSERT_EQ(table1_.Get(4)->state, TaskTableItemState::EXECUTED); } TEST_F(TaskTableAdvanceTest, move) { table1_.Move(3); table1_.Moved(6); - ASSERT_EQ(table1_.Get(3).state, TaskTableItemState::MOVING); - ASSERT_EQ(table1_.Get(6).state, TaskTableItemState::MOVED); + ASSERT_EQ(table1_.Get(3)->state, TaskTableItemState::MOVING); + ASSERT_EQ(table1_.Get(6)->state, TaskTableItemState::MOVED); }