提交 11045046 编写于 作者: J Jin Hai 提交者: GitHub

Merge pull request #91 from scsven/dev

Improvement dump function in scheduler

Former-commit-id: db9d9ee9499f1df8742187a845eabf7398f3bd14
...@@ -49,6 +49,15 @@ JobMgr::Stop() { ...@@ -49,6 +49,15 @@ JobMgr::Stop() {
} }
} }
json
JobMgr::Dump() const {
json ret{
{"running", running_},
{"event_queue_length", queue_.size()},
};
return ret;
}
void void
JobMgr::Put(const JobPtr& job) { JobMgr::Put(const JobPtr& job) {
{ {
......
...@@ -28,13 +28,14 @@ ...@@ -28,13 +28,14 @@
#include <vector> #include <vector>
#include "ResourceMgr.h" #include "ResourceMgr.h"
#include "interface/interfaces.h"
#include "job/Job.h" #include "job/Job.h"
#include "task/Task.h" #include "task/Task.h"
namespace milvus { namespace milvus {
namespace scheduler { namespace scheduler {
class JobMgr { class JobMgr : public interface::dumpable {
public: public:
explicit JobMgr(ResourceMgrPtr res_mgr); explicit JobMgr(ResourceMgrPtr res_mgr);
...@@ -44,6 +45,9 @@ class JobMgr { ...@@ -44,6 +45,9 @@ class JobMgr {
void void
Stop(); Stop();
json
Dump() const override;
public: public:
void void
Put(const JobPtr& job); Put(const JobPtr& job);
......
...@@ -170,16 +170,20 @@ ResourceMgr::GetNumGpuResource() const { ...@@ -170,16 +170,20 @@ ResourceMgr::GetNumGpuResource() const {
return num; return num;
} }
std::string json
ResourceMgr::Dump() { ResourceMgr::Dump() const {
std::stringstream ss; json resources{};
ss << "ResourceMgr contains " << resources_.size() << " resources." << std::endl;
for (auto& res : resources_) { for (auto& res : resources_) {
ss << res->Dump(); resources.push_back(res->Dump());
} }
json ret{
return ss.str(); {"number_of_resource", resources_.size()},
{"number_of_disk_resource", disk_resources_.size()},
{"number_of_cpu_resource", cpu_resources_.size()},
{"number_of_gpu_resource", gpu_resources_.size()},
{"resources", resources},
};
return ret;
} }
std::string std::string
...@@ -187,9 +191,9 @@ ResourceMgr::DumpTaskTables() { ...@@ -187,9 +191,9 @@ ResourceMgr::DumpTaskTables() {
std::stringstream ss; std::stringstream ss;
ss << ">>>>>>>>>>>>>>>ResourceMgr::DumpTaskTable<<<<<<<<<<<<<<<" << std::endl; ss << ">>>>>>>>>>>>>>>ResourceMgr::DumpTaskTable<<<<<<<<<<<<<<<" << std::endl;
for (auto& resource : resources_) { for (auto& resource : resources_) {
ss << resource->Dump() << std::endl; ss << resource->name() << std::endl;
ss << resource->task_table().Dump(); ss << resource->task_table().Dump().dump();
ss << resource->Dump() << std::endl << std::endl; ss << resource->name() << std::endl << std::endl;
} }
return ss.str(); return ss.str();
} }
......
...@@ -25,13 +25,14 @@ ...@@ -25,13 +25,14 @@
#include <utility> #include <utility>
#include <vector> #include <vector>
#include "interface/interfaces.h"
#include "resource/Resource.h" #include "resource/Resource.h"
#include "utils/Log.h" #include "utils/Log.h"
namespace milvus { namespace milvus {
namespace scheduler { namespace scheduler {
class ResourceMgr { class ResourceMgr : public interface::dumpable {
public: public:
ResourceMgr() = default; ResourceMgr() = default;
...@@ -103,8 +104,8 @@ class ResourceMgr { ...@@ -103,8 +104,8 @@ class ResourceMgr {
public: public:
/******** Utility Functions ********/ /******** Utility Functions ********/
std::string json
Dump(); Dump() const override;
std::string std::string
DumpTaskTables(); DumpTaskTables();
......
...@@ -66,9 +66,13 @@ Scheduler::PostEvent(const EventPtr& event) { ...@@ -66,9 +66,13 @@ Scheduler::PostEvent(const EventPtr& event) {
event_cv_.notify_one(); event_cv_.notify_one();
} }
std::string json
Scheduler::Dump() { Scheduler::Dump() const {
return std::string(); json ret{
{"running", running_},
{"event_queue_length", event_queue_.size()},
};
return ret;
} }
void void
......
...@@ -25,14 +25,14 @@ ...@@ -25,14 +25,14 @@
#include <unordered_map> #include <unordered_map>
#include "ResourceMgr.h" #include "ResourceMgr.h"
#include "interface/interfaces.h"
#include "resource/Resource.h" #include "resource/Resource.h"
#include "utils/Log.h" #include "utils/Log.h"
namespace milvus { namespace milvus {
namespace scheduler { namespace scheduler {
// TODO(wxyu): refactor, not friendly to unittest, logical in framework code class Scheduler : public interface::dumpable {
class Scheduler {
public: public:
explicit Scheduler(ResourceMgrWPtr res_mgr); explicit Scheduler(ResourceMgrWPtr res_mgr);
...@@ -57,11 +57,8 @@ class Scheduler { ...@@ -57,11 +57,8 @@ class Scheduler {
void void
PostEvent(const EventPtr& event); PostEvent(const EventPtr& event);
/* json
* Dump as string; Dump() const override;
*/
std::string
Dump();
private: private:
/******** Events ********/ /******** Events ********/
......
...@@ -53,7 +53,7 @@ ToString(TaskTableItemState state) { ...@@ -53,7 +53,7 @@ ToString(TaskTableItemState state) {
} }
json json
TaskTimestamp::Dump() { TaskTimestamp::Dump() const {
json ret{ json ret{
{"start", start}, {"load", load}, {"loaded", loaded}, {"execute", execute}, {"start", start}, {"load", load}, {"loaded", loaded}, {"execute", execute},
{"executed", executed}, {"move", move}, {"moved", moved}, {"finish", finish}, {"executed", executed}, {"move", move}, {"moved", moved}, {"finish", finish},
...@@ -141,7 +141,7 @@ TaskTableItem::Moved() { ...@@ -141,7 +141,7 @@ TaskTableItem::Moved() {
} }
json json
TaskTableItem::Dump() { TaskTableItem::Dump() const {
json ret{ json ret{
{"id", id}, {"id", id},
{"task", (int64_t)task.get()}, {"task", (int64_t)task.get()},
...@@ -263,7 +263,7 @@ TaskTable::Get(uint64_t index) { ...@@ -263,7 +263,7 @@ TaskTable::Get(uint64_t index) {
//} //}
json json
TaskTable::Dump() { TaskTable::Dump() const {
json ret; json ret;
for (auto& item : table_) { for (auto& item : table_) {
ret.push_back(item->Dump()); ret.push_back(item->Dump());
......
...@@ -54,7 +54,7 @@ struct TaskTimestamp : public interface::dumpable { ...@@ -54,7 +54,7 @@ struct TaskTimestamp : public interface::dumpable {
uint64_t finish = 0; uint64_t finish = 0;
json json
Dump() override; Dump() const override;
}; };
struct TaskTableItem : public interface::dumpable { struct TaskTableItem : public interface::dumpable {
...@@ -92,7 +92,7 @@ struct TaskTableItem : public interface::dumpable { ...@@ -92,7 +92,7 @@ struct TaskTableItem : public interface::dumpable {
Moved(); Moved();
json json
Dump() override; Dump() const override;
}; };
using TaskTableItemPtr = std::shared_ptr<TaskTableItem>; using TaskTableItemPtr = std::shared_ptr<TaskTableItem>;
...@@ -245,7 +245,7 @@ class TaskTable : public interface::dumpable { ...@@ -245,7 +245,7 @@ class TaskTable : public interface::dumpable {
* Dump; * Dump;
*/ */
json json
Dump() override; Dump() const override;
private: private:
std::uint64_t id_ = 0; std::uint64_t id_ = 0;
......
...@@ -37,7 +37,7 @@ struct dumpable { ...@@ -37,7 +37,7 @@ struct dumpable {
} }
virtual json virtual json
Dump() = 0; Dump() const = 0;
}; };
} // namespace interface } // namespace interface
......
...@@ -54,5 +54,13 @@ BuildIndexJob::BuildIndexDone(size_t to_index_id) { ...@@ -54,5 +54,13 @@ BuildIndexJob::BuildIndexDone(size_t to_index_id) {
SERVER_LOG_DEBUG << "BuildIndexJob " << id() << " finish index file: " << to_index_id; SERVER_LOG_DEBUG << "BuildIndexJob " << id() << " finish index file: " << to_index_id;
} }
json
BuildIndexJob::Dump() const {
json ret{
{"number_of_to_index_file", to_index_files_.size()},
};
return ret;
}
} // namespace scheduler } // namespace scheduler
} // namespace milvus } // namespace milvus
...@@ -53,6 +53,9 @@ class BuildIndexJob : public Job { ...@@ -53,6 +53,9 @@ class BuildIndexJob : public Job {
void void
BuildIndexDone(size_t to_index_id); BuildIndexDone(size_t to_index_id);
json
Dump() const override;
public: public:
Status& Status&
GetStatus() { GetStatus() {
......
...@@ -45,5 +45,15 @@ DeleteJob::ResourceDone() { ...@@ -45,5 +45,15 @@ DeleteJob::ResourceDone() {
cv_.notify_one(); cv_.notify_one();
} }
json
DeleteJob::Dump() const {
json ret{
{"table_id", table_id_},
{"number_of_resource", num_resource_},
{"number_of_done", done_resource},
};
return ret;
}
} // namespace scheduler } // namespace scheduler
} // namespace milvus } // namespace milvus
...@@ -44,6 +44,9 @@ class DeleteJob : public Job { ...@@ -44,6 +44,9 @@ class DeleteJob : public Job {
void void
ResourceDone(); ResourceDone();
json
Dump() const override;
public: public:
std::string std::string
table_id() const { table_id() const {
......
...@@ -27,6 +27,8 @@ ...@@ -27,6 +27,8 @@
#include <unordered_map> #include <unordered_map>
#include <vector> #include <vector>
#include "scheduler/interface/interfaces.h"
namespace milvus { namespace milvus {
namespace scheduler { namespace scheduler {
...@@ -39,7 +41,7 @@ enum class JobType { ...@@ -39,7 +41,7 @@ enum class JobType {
using JobId = std::uint64_t; using JobId = std::uint64_t;
class Job { class Job : public interface::dumpable {
public: public:
inline JobId inline JobId
id() const { id() const {
......
...@@ -63,5 +63,15 @@ SearchJob::GetStatus() { ...@@ -63,5 +63,15 @@ SearchJob::GetStatus() {
return status_; return status_;
} }
json
SearchJob::Dump() const {
json ret{
{"topk", topk_},
{"nq", nq_},
{"nprobe", nprobe_},
};
return ret;
}
} // namespace scheduler } // namespace scheduler
} // namespace milvus } // namespace milvus
...@@ -61,6 +61,9 @@ class SearchJob : public Job { ...@@ -61,6 +61,9 @@ class SearchJob : public Job {
Status& Status&
GetStatus(); GetStatus();
json
Dump() const override;
public: public:
uint64_t uint64_t
topk() const { topk() const {
......
...@@ -24,7 +24,7 @@ namespace scheduler { ...@@ -24,7 +24,7 @@ namespace scheduler {
std::ostream& std::ostream&
operator<<(std::ostream& out, const CpuResource& resource) { operator<<(std::ostream& out, const CpuResource& resource) {
out << resource.Dump(); out << resource.Dump().dump();
return out; return out;
} }
......
...@@ -28,11 +28,6 @@ class CpuResource : public Resource { ...@@ -28,11 +28,6 @@ class CpuResource : public Resource {
public: public:
explicit CpuResource(std::string name, uint64_t device_id, bool enable_loader, bool enable_executor); explicit CpuResource(std::string name, uint64_t device_id, bool enable_loader, bool enable_executor);
inline std::string
Dump() const override {
return "<CpuResource, name=" + name_ + ">";
}
friend std::ostream& friend std::ostream&
operator<<(std::ostream& out, const CpuResource& resource); operator<<(std::ostream& out, const CpuResource& resource);
......
...@@ -28,11 +28,6 @@ class DiskResource : public Resource { ...@@ -28,11 +28,6 @@ class DiskResource : public Resource {
public: public:
explicit DiskResource(std::string name, uint64_t device_id, bool enable_loader, bool enable_executor); explicit DiskResource(std::string name, uint64_t device_id, bool enable_loader, bool enable_executor);
inline std::string
Dump() const override {
return "<DiskResource, name=" + name_ + ">";
}
friend std::ostream& friend std::ostream&
operator<<(std::ostream& out, const DiskResource& resource); operator<<(std::ostream& out, const DiskResource& resource);
......
...@@ -22,7 +22,7 @@ namespace scheduler { ...@@ -22,7 +22,7 @@ namespace scheduler {
std::ostream& std::ostream&
operator<<(std::ostream& out, const GpuResource& resource) { operator<<(std::ostream& out, const GpuResource& resource) {
out << resource.Dump(); out << resource.Dump().dump();
return out; return out;
} }
......
...@@ -29,11 +29,6 @@ class GpuResource : public Resource { ...@@ -29,11 +29,6 @@ class GpuResource : public Resource {
public: public:
explicit GpuResource(std::string name, uint64_t device_id, bool enable_loader, bool enable_executor); explicit GpuResource(std::string name, uint64_t device_id, bool enable_loader, bool enable_executor);
inline std::string
Dump() const override {
return "<GpuResource, name=" + name_ + ">";
}
friend std::ostream& friend std::ostream&
operator<<(std::ostream& out, const GpuResource& resource); operator<<(std::ostream& out, const GpuResource& resource);
......
...@@ -38,15 +38,21 @@ Node::GetNeighbours() { ...@@ -38,15 +38,21 @@ Node::GetNeighbours() {
return ret; return ret;
} }
std::string json
Node::Dump() { Node::Dump() const {
std::stringstream ss; json neighbours;
ss << "<Node, id=" << std::to_string(id_) << ">::neighbours:" << std::endl;
for (auto& neighbour : neighbours_) { for (auto& neighbour : neighbours_) {
ss << "\t<Neighbour, id=" << std::to_string(neighbour.first); json n;
ss << ", connection: " << neighbour.second.connection.Dump() << ">" << std::endl; n["id"] = neighbour.first;
n["connection"] = neighbour.second.connection.Dump();
neighbours.push_back(n);
} }
return ss.str();
json ret{
{"id", id_},
{"neighbours", neighbours},
};
return ret;
} }
void void
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include "Connection.h" #include "Connection.h"
#include "scheduler/TaskTable.h" #include "scheduler/TaskTable.h"
#include "scheduler/interface/interfaces.h"
namespace milvus { namespace milvus {
namespace scheduler { namespace scheduler {
...@@ -41,7 +42,7 @@ struct Neighbour { ...@@ -41,7 +42,7 @@ struct Neighbour {
}; };
// TODO(lxj): return type void -> Status // TODO(lxj): return type void -> Status
class Node { class Node : public interface::dumpable {
public: public:
Node(); Node();
...@@ -52,8 +53,8 @@ class Node { ...@@ -52,8 +53,8 @@ class Node {
GetNeighbours(); GetNeighbours();
public: public:
std::string json
Dump(); Dump() const override;
private: private:
std::mutex mutex_; std::mutex mutex_;
......
...@@ -32,6 +32,22 @@ operator<<(std::ostream& out, const Resource& resource) { ...@@ -32,6 +32,22 @@ operator<<(std::ostream& out, const Resource& resource) {
return out; return out;
} }
std::string
ToString(ResourceType type) {
switch (type) {
case ResourceType::DISK: {
return "DISK";
}
case ResourceType::CPU: {
return "CPU";
}
case ResourceType::GPU: {
return "GPU";
}
default: { return "UNKNOWN"; }
}
}
Resource::Resource(std::string name, ResourceType type, uint64_t device_id, bool enable_loader, bool enable_executor) Resource::Resource(std::string name, ResourceType type, uint64_t device_id, bool enable_loader, bool enable_executor)
: name_(std::move(name)), : name_(std::move(name)),
type_(type), type_(type),
...@@ -89,6 +105,22 @@ Resource::WakeupExecutor() { ...@@ -89,6 +105,22 @@ Resource::WakeupExecutor() {
exec_cv_.notify_one(); exec_cv_.notify_one();
} }
json
Resource::Dump() const {
json ret{
{"device_id", device_id_},
{"name", name_},
{"type", ToString(type_)},
{"task_average_cost", TaskAvgCost()},
{"task_total_cost", total_cost_},
{"total_tasks", total_task_},
{"running", running_},
{"enable_loader", enable_loader_},
{"enable_executor", enable_executor_},
};
return ret;
}
uint64_t uint64_t
Resource::NumOfTaskToExec() { Resource::NumOfTaskToExec() {
uint64_t count = 0; uint64_t count = 0;
......
...@@ -77,10 +77,8 @@ class Resource : public Node, public std::enable_shared_from_this<Resource> { ...@@ -77,10 +77,8 @@ class Resource : public Node, public std::enable_shared_from_this<Resource> {
subscriber_ = std::move(subscriber); subscriber_ = std::move(subscriber);
} }
inline virtual std::string json
Dump() const { Dump() const override;
return "<Resource>";
}
public: public:
inline std::string inline std::string
......
...@@ -29,11 +29,6 @@ class TestResource : public Resource { ...@@ -29,11 +29,6 @@ class TestResource : public Resource {
public: public:
explicit TestResource(std::string name, uint64_t device_id, bool enable_loader, bool enable_executor); explicit TestResource(std::string name, uint64_t device_id, bool enable_loader, bool enable_executor);
inline std::string
Dump() const override {
return "<TestResource, name=" + name_ + ">";
}
friend std::ostream& friend std::ostream&
operator<<(std::ostream& out, const TestResource& resource); operator<<(std::ostream& out, const TestResource& resource);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册