diff --git a/cpp/CHANGELOG.md b/cpp/CHANGELOG.md index e7f1cc74e1..72cf488cba 100644 --- a/cpp/CHANGELOG.md +++ b/cpp/CHANGELOG.md @@ -41,6 +41,8 @@ Please mark all change in change log and use the ticket from JIRA. - MS-400 - Add timestamp record in task state change function - MS-402 - Add dump implementation for TaskTableItem - MS-403 - Add GpuCacheMgr +- MS-404 - Release index after search task done avoid memory increment continues +- MS-405 - Add delete task support ## New Feature - MS-343 - Implement ResourceMgr diff --git a/cpp/src/scheduler/ResourceMgr.cpp b/cpp/src/scheduler/ResourceMgr.cpp index cf54472732..f341821392 100644 --- a/cpp/src/scheduler/ResourceMgr.cpp +++ b/cpp/src/scheduler/ResourceMgr.cpp @@ -17,6 +17,17 @@ ResourceMgr::ResourceMgr() } +uint64_t +ResourceMgr::GetNumOfComputeResource() { + uint64_t count = 0; + for (auto &res : resources_) { + if (res->HasExecutor()) { + ++count; + } + } + return count; +} + ResourceWPtr ResourceMgr::Add(ResourcePtr &&resource) { ResourceWPtr ret(resource); diff --git a/cpp/src/scheduler/ResourceMgr.h b/cpp/src/scheduler/ResourceMgr.h index c3f900b2db..54ff551b6b 100644 --- a/cpp/src/scheduler/ResourceMgr.h +++ b/cpp/src/scheduler/ResourceMgr.h @@ -35,6 +35,12 @@ public: return disk_resources_; } + /* + * Return account of resource which enable executor; + */ + uint64_t + GetNumOfComputeResource(); + /* * Add resource into Resource Management; * Generate functions on events; diff --git a/cpp/src/scheduler/task/DeleteTask.cpp b/cpp/src/scheduler/task/DeleteTask.cpp index ee6b63b770..9f76de506e 100644 --- a/cpp/src/scheduler/task/DeleteTask.cpp +++ b/cpp/src/scheduler/task/DeleteTask.cpp @@ -6,10 +6,14 @@ #include "DeleteTask.h" + namespace zilliz { namespace milvus { namespace engine { +XDeleteTask::XDeleteTask(DeleteContextPtr &delete_context) + : delete_context_ptr_(delete_context) {} + void XDeleteTask::Load(LoadType type, uint8_t device_id) { @@ -17,12 +21,13 @@ XDeleteTask::Load(LoadType type, uint8_t device_id) { void XDeleteTask::Execute() { - + delete_context_ptr_->ResourceDone(); } TaskPtr XDeleteTask::Clone() { - return nullptr; + auto task = std::make_shared(delete_context_ptr_); + return task; } } diff --git a/cpp/src/scheduler/task/DeleteTask.h b/cpp/src/scheduler/task/DeleteTask.h index 9ca4e8b53a..2b26624391 100644 --- a/cpp/src/scheduler/task/DeleteTask.h +++ b/cpp/src/scheduler/task/DeleteTask.h @@ -5,6 +5,7 @@ ******************************************************************************/ #pragma once +#include #include "Task.h" @@ -14,6 +15,9 @@ namespace engine { class XDeleteTask : public Task { public: + explicit + XDeleteTask(DeleteContextPtr &delete_context); + void Load(LoadType type, uint8_t device_id) override; @@ -22,6 +26,9 @@ public: TaskPtr Clone() override; + +public: + DeleteContextPtr delete_context_ptr_; }; } diff --git a/cpp/src/scheduler/task/SearchTask.cpp b/cpp/src/scheduler/task/SearchTask.cpp index ea482bcb72..992e915f23 100644 --- a/cpp/src/scheduler/task/SearchTask.cpp +++ b/cpp/src/scheduler/task/SearchTask.cpp @@ -207,6 +207,9 @@ XSearchTask::Execute() { CollectDurationMetrics(index_type_, total_time); rc.ElapseFromBegin("totally cost"); + + // release index in resource + index_engine_ = nullptr; } TaskPtr diff --git a/cpp/src/scheduler/task/Task.h b/cpp/src/scheduler/task/Task.h index 5671648097..4d78894d31 100644 --- a/cpp/src/scheduler/task/Task.h +++ b/cpp/src/scheduler/task/Task.h @@ -35,6 +35,7 @@ public: virtual void Execute() = 0; + // TODO: dont use this method to support task move virtual TaskPtr Clone() = 0; diff --git a/cpp/src/scheduler/task/TaskConvert.cpp b/cpp/src/scheduler/task/TaskConvert.cpp index f29fd29604..43f70903dc 100644 --- a/cpp/src/scheduler/task/TaskConvert.cpp +++ b/cpp/src/scheduler/task/TaskConvert.cpp @@ -22,8 +22,9 @@ TaskConvert(const ScheduleTaskPtr &schedule_task) { return task; } case ScheduleTaskType::kDelete: { - // TODO: convert to delete task - return nullptr; + auto delete_task = std::static_pointer_cast(schedule_task); + auto task = std::make_shared(delete_task->context_); + return task; } default: { // TODO: unexpected !!! diff --git a/cpp/src/scheduler/task/TaskConvert.h b/cpp/src/scheduler/task/TaskConvert.h index 471592f993..bfc2df760b 100644 --- a/cpp/src/scheduler/task/TaskConvert.h +++ b/cpp/src/scheduler/task/TaskConvert.h @@ -4,9 +4,11 @@ * Proprietary and confidential. ******************************************************************************/ -#include "src/db/scheduler/task/IndexLoadTask.h" +#include "db/scheduler/task/DeleteTask.h" +#include "db/scheduler/task/IndexLoadTask.h" #include "Task.h" #include "SearchTask.h" +#include "DeleteTask.h" namespace zilliz { namespace milvus {