oeAware-manager/0001-fix-issues.patch
fly_1997 d3dc2ec15e fix issues
(cherry picked from commit 69a292912bbc40f7db80f89b57bc8162cc06c4cf)
2024-05-15 19:42:48 +08:00

1205 lines
43 KiB
Diff

From 75c6db6769e7b08c1f842d6984fd3bfb341ab1ad Mon Sep 17 00:00:00 2001
From: fly_1997 <flylove7@outlook.com>
Date: Wed, 15 May 2024 17:01:35 +0800
Subject: [PATCH] fix issues
---
src/client/CMakeLists.txt | 2 +-
src/client/arg_parse.cpp | 23 ++++----
src/client/arg_parse.h | 22 ++++----
src/client/client.cpp | 31 +++++------
src/client/client.h | 10 ++--
src/client/cmd_handler.cpp | 41 +++++++-------
src/client/cmd_handler.h | 27 +++++-----
src/client/main.cpp | 1 -
src/client/tcp_socket.cpp | 10 +---
src/client/tcp_socket.h | 6 ++-
src/common/CMakeLists.txt | 2 +-
src/common/message_protocol.cpp | 34 ++++++------
src/common/message_protocol.h | 71 +++++++++++++------------
src/plugin_mgr/CMakeLists.txt | 2 +-
src/plugin_mgr/config.cpp | 16 +++---
src/plugin_mgr/config.h | 4 +-
src/plugin_mgr/dep_handler.h | 4 +-
src/plugin_mgr/error_code.cpp | 11 ++++
src/plugin_mgr/error_code.h | 11 ++++
src/plugin_mgr/instance_run_handler.cpp | 48 ++++++++++++-----
src/plugin_mgr/main.cpp | 2 +-
src/plugin_mgr/message_manager.cpp | 9 ++--
src/plugin_mgr/message_manager.h | 5 +-
src/plugin_mgr/plugin.h | 4 +-
src/plugin_mgr/plugin_manager.cpp | 37 +++++++------
25 files changed, 243 insertions(+), 190 deletions(-)
diff --git a/src/client/CMakeLists.txt b/src/client/CMakeLists.txt
index d584d7d..11f9a5b 100644
--- a/src/client/CMakeLists.txt
+++ b/src/client/CMakeLists.txt
@@ -1,7 +1,7 @@
cmake_minimum_required (VERSION 3.22)
project(oeAware-client)
-SET(CMAKE_CXX_FLAGS "-rdynamic -std=c++11 -g -Wl,-z,relro,-z,now")
+SET(CMAKE_CXX_FLAGS "-rdynamic -std=c++11 -g -Wl,-z,relro,-z,now -O2 -Wall -Wextra")
aux_source_directory(. SOURCE)
include_directories(../common)
diff --git a/src/client/arg_parse.cpp b/src/client/arg_parse.cpp
index 805f5a7..947c4c4 100644
--- a/src/client/arg_parse.cpp
+++ b/src/client/arg_parse.cpp
@@ -13,7 +13,7 @@
#include <iostream>
#include <getopt.h>
-const std::string ArgParse::OPT_STRING = "Qqd:t:l:r:e:";
+const std::string ArgParse::OPT_STRING = "Qqd:t:l:r:e:i:";
const struct option ArgParse::long_options[] = {
{"help", no_argument, NULL, 'h'},
{"load", required_argument, NULL, 'l'},
@@ -58,7 +58,7 @@ void ArgParse::print_help() {
" -Q query all instances dependencies.\n"
" --query-dep [instance] query the instance dependency.\n"
" --list the list of supported plugins.\n"
- " --install [plugin] install plugin from the list.\n"
+ " -i|--install [plugin] install plugin from the list.\n"
" --help show this help message.\n";
}
@@ -69,7 +69,6 @@ void ArgParse::init_opts() {
opts.insert('Q');
opts.insert('e');
opts.insert('d');
- opts.insert('L');
opts.insert('i');
opts.insert('t');
}
@@ -90,13 +89,18 @@ int ArgParse::init(int argc, char *argv[]) {
help = true;
break;
case '?': {
- std::string err;
- err += optopt;
+ std::string opt_string;
+ if (optind == argc) {
+ opt_string += argv[optind - 1];
+ } else {
+ opt_string += argv[optind];
+ }
if (!opts.count(optopt)) {
- arg_error("unknown option '-" + err + "'.");
+ arg_error("unknown option '" + opt_string + "'.");
} else{
- arg_error("option -" + err + " requires an argument.");
+ arg_error("option " + opt_string + " requires an argument.");
}
+ break;
}
default: {
if (opt == 'l' || opt == 'r' || opt == 'q' || opt == 'Q' || opt == 'e' || opt == 'd' || opt == 'L' || opt == 'i') {
@@ -109,19 +113,20 @@ int ArgParse::init(int argc, char *argv[]) {
set_arg(optarg);
}
}
+ break;
}
}
}
if (cmd == 'l' && type.empty()) {
- arg_error("option '-t' is required.");
+ arg_error("missing arguments.");
}
if (help) {
print_help();
exit(EXIT_SUCCESS);
}
if (cmd < 0) {
- arg_error("no option.");
+ arg_error("option error.");
}
return cmd;
}
diff --git a/src/client/arg_parse.h b/src/client/arg_parse.h
index 682f0e5..6a0a25b 100644
--- a/src/client/arg_parse.h
+++ b/src/client/arg_parse.h
@@ -18,20 +18,20 @@ class ArgParse {
public:
static void arg_error(const std::string &msg);
static void print_help();
- int init(int argc, char *argv[]);
- void init_opts();
- void set_type(char* _type);
- void set_arg(char* _arg);
- std::string get_type() const {
- return this->type;
+ static int init(int argc, char *argv[]);
+ static void init_opts();
+ static void set_type(char* _type);
+ static void set_arg(char* _arg);
+ static std::string get_type() {
+ return type;
}
- std::string get_arg() const {
- return this->arg;
+ static std::string get_arg() {
+ return arg;
}
private:
- std::string arg;
- std::string type;
- std::unordered_set<char> opts;
+ static std::string arg;
+ static std::string type;
+ static std::unordered_set<char> opts;
static const std::string OPT_STRING;
static const int MAX_OPT_SIZE = 20;
static const struct option long_options[MAX_OPT_SIZE];
diff --git a/src/client/client.cpp b/src/client/client.cpp
index 39a0072..afaa189 100644
--- a/src/client/client.cpp
+++ b/src/client/client.cpp
@@ -11,18 +11,23 @@
******************************************************************************/
#include "client.h"
+std::string ArgParse::arg;
+std::string ArgParse::type;
+std::unordered_set<char> ArgParse::opts;
+
void Client::cmd_groups_init() {
- cmd_handler_groups.insert(std::make_pair('l', new LoadHandler()));
- cmd_handler_groups.insert(std::make_pair('q', new QueryHandler()));
- cmd_handler_groups.insert(std::make_pair('r', new RemoveHandler()));
- cmd_handler_groups.insert(std::make_pair('Q', new QueryTopHandler()));
- cmd_handler_groups.insert(std::make_pair('e', new EnabledHandler()));
- cmd_handler_groups.insert(std::make_pair('d', new DisabledHandler()));
- cmd_handler_groups.insert(std::make_pair('L', new ListHandler()));
- cmd_handler_groups.insert(std::make_pair('i', new InstallHandler(arg_parse.get_arg())));
+ cmd_handler_groups.insert(std::make_pair('l', std::make_shared<LoadHandler>()));
+ cmd_handler_groups.insert(std::make_pair('q', std::make_shared<QueryHandler>()));
+ cmd_handler_groups.insert(std::make_pair('r', std::make_shared<RemoveHandler>()));
+ cmd_handler_groups.insert(std::make_pair('Q', std::make_shared<QueryTopHandler>()));
+ cmd_handler_groups.insert(std::make_pair('e', std::make_shared<EnabledHandler>()));
+ cmd_handler_groups.insert(std::make_pair('d', std::make_shared<DisabledHandler>()));
+ cmd_handler_groups.insert(std::make_pair('L', std::make_shared<ListHandler>()));
+ cmd_handler_groups.insert(std::make_pair('i', std::make_shared<InstallHandler>()));
}
+
bool Client::init(int argc, char *argv[]) {
- if ((cmd = arg_parse.init(argc, argv)) < 0) {
+ if ((cmd = ArgParse::init(argc, argv)) < 0) {
return false;
}
cmd_groups_init();
@@ -34,8 +39,8 @@ void Client::run_cmd() {
Msg res;
MessageHeader header;
this->cmd_handler = cmd_handler_groups[cmd];
- this->cmd_handler->handler(arg_parse, msg);
- if(!this->tcp_socket.send_msg(msg)) {
+ this->cmd_handler->handler(msg);
+ if(!this->tcp_socket.send_msg(msg, header)) {
return;
}
if (!this->tcp_socket.recv_msg(res, header)) {
@@ -43,7 +48,3 @@ void Client::run_cmd() {
}
this->cmd_handler->res_handler(res);
}
-
-void Client::close() {
- tcp_socket.clear();
-}
diff --git a/src/client/client.h b/src/client/client.h
index 9e60251..82cf613 100644
--- a/src/client/client.h
+++ b/src/client/client.h
@@ -14,14 +14,11 @@
#include "tcp_socket.h"
#include "cmd_handler.h"
#include <unordered_map>
+#include <memory>
class Client {
public:
Client() : cmd_handler(nullptr) { }
- ~Client() {
- if (cmd_handler)
- delete cmd_handler;
- }
bool init(int argc, char *argv[]);
void run_cmd();
void close();
@@ -30,9 +27,8 @@ private:
int cmd;
TcpSocket tcp_socket;
- ArgParse arg_parse;
- CmdHandler *cmd_handler;
- std::unordered_map<int, CmdHandler*> cmd_handler_groups;
+ std::shared_ptr<CmdHandler> cmd_handler;
+ std::unordered_map<int, std::shared_ptr<CmdHandler>> cmd_handler_groups;
};
#endif // !CLIENT_H
diff --git a/src/client/cmd_handler.cpp b/src/client/cmd_handler.cpp
index b410968..6f3f760 100644
--- a/src/client/cmd_handler.cpp
+++ b/src/client/cmd_handler.cpp
@@ -15,16 +15,16 @@
std::unordered_set<std::string> LoadHandler::types = {"collector", "scenario", "tune"};
-void LoadHandler::check(const std::string &arg, const std::string &type) {
+void LoadHandler::check(const std::string &type) {
if (!types.count(type)) {
ArgParse::arg_error("type '" + type + "' is not supported.");
}
}
-void LoadHandler::handler(const ArgParse &arg_parse, Msg &msg) {
- std::string arg = arg_parse.get_arg();
- std::string type = arg_parse.get_type();
- check(arg, type);
+void LoadHandler::handler(Msg &msg) {
+ std::string arg = ArgParse::get_arg();
+ std::string type = ArgParse::get_type();
+ check(type);
msg.add_payload(arg);
msg.add_payload(type);
msg.set_opt(Opt::LOAD);
@@ -47,8 +47,8 @@ void LoadHandler::res_handler(Msg &msg) {
}
-void QueryHandler::handler(const ArgParse &arg_parse, Msg &msg) {
- std::string arg = arg_parse.get_arg();
+void QueryHandler::handler(Msg &msg) {
+ std::string arg = ArgParse::get_arg();
if (arg.empty()) {
msg.set_opt(Opt::QUERY_ALL);
} else {
@@ -80,8 +80,8 @@ void QueryHandler::res_handler(Msg &msg) {
print_format();
}
-void RemoveHandler::handler(const ArgParse &arg_parse, Msg &msg) {
- std::string arg = arg_parse.get_arg();
+void RemoveHandler::handler(Msg &msg) {
+ std::string arg = ArgParse::get_arg();
msg.add_payload(arg);
msg.set_opt(Opt::REMOVE);
}
@@ -106,8 +106,8 @@ void write_to_file(const std::string &file_name, const std::string &text) {
out.close();
}
-void QueryTopHandler::handler(const ArgParse &arg_parse, Msg &msg) {
- std::string arg = arg_parse.get_arg();
+void QueryTopHandler::handler(Msg &msg) {
+ std::string arg = ArgParse::get_arg();
if (arg.empty()) {
msg.set_opt(Opt::QUERY_ALL_TOP);
} else {
@@ -127,8 +127,8 @@ void QueryTopHandler::res_handler(Msg &msg) {
std::cout << "Generate dependencies graph dep.png.\n";
}
-void EnabledHandler::handler(const ArgParse &arg_parse, Msg &msg) {
- std::string arg = arg_parse.get_arg();
+void EnabledHandler::handler(Msg &msg) {
+ std::string arg = ArgParse::get_arg();
msg.add_payload(arg);
msg.set_opt(Opt::ENABLED);
}
@@ -141,8 +141,8 @@ void EnabledHandler::res_handler(Msg &msg) {
}
}
-void DisabledHandler::handler(const ArgParse &arg_parse, Msg &msg) {
- std::string arg = arg_parse.get_arg();
+void DisabledHandler::handler(Msg &msg) {
+ std::string arg = ArgParse::get_arg();
msg.add_payload(arg);
msg.set_opt(Opt::DISABLED);
}
@@ -155,7 +155,7 @@ void DisabledHandler::res_handler(Msg &msg) {
}
}
-void ListHandler::handler(const ArgParse &arg_parse, Msg &msg) {
+void ListHandler::handler(Msg &msg) {
msg.set_opt(Opt::LIST);
}
@@ -172,18 +172,19 @@ void ListHandler::res_handler(Msg &msg) {
std::cout << "------------------------------------------------------------\n";
}
-void InstallHandler::handler(const ArgParse &arg_parse, Msg &msg) {
- std::string arg = arg_parse.get_arg();
+void InstallHandler::handler(Msg &msg) {
+ std::string arg = ArgParse::get_arg();
msg.set_opt(Opt::DOWNLOAD);
msg.add_payload(arg);
}
void InstallHandler::res_handler(Msg &msg) {
+ std::string arg = ArgParse::get_arg();
if (msg.get_opt() == Opt::RESPONSE_ERROR) {
- std::cout << "Download failed, because " << msg.payload(0) <<": " << this->arg.c_str() << '\n';
+ std::cout << "Download failed, because " << msg.payload(0) <<": " << arg.c_str() << '\n';
return;
}
- std::string path = this->arg;
+ std::string path = arg;
std::string url = msg.payload(0);
if (!download(url, path)) {
std::cout << "Download failed, please check url or your network.\n";
diff --git a/src/client/cmd_handler.h b/src/client/cmd_handler.h
index 1b6f1c1..2e32098 100644
--- a/src/client/cmd_handler.h
+++ b/src/client/cmd_handler.h
@@ -19,23 +19,25 @@
class CmdHandler {
public:
- virtual void handler(const ArgParse &arg_parse, Msg &msg) = 0;
+ virtual void handler(Msg &msg) = 0;
virtual void res_handler(Msg &msg) = 0;
-private:
+
+ static ArgParse &arg_parse;
};
class LoadHandler : public CmdHandler {
public:
- void handler(const ArgParse &arg_parse, Msg &msg) override;
+ // LoadHandler(const ArgParse &arg_parse) { }
+ void handler(Msg &msg) override;
void res_handler(Msg &msg) override;
private:
- void check(const std::string &arg, const std::string &type);
+ void check(const std::string &type);
static std::unordered_set<std::string> types;
};
class QueryHandler : public CmdHandler {
public:
- void handler(const ArgParse &arg_parse, Msg &msg) override;
+ void handler(Msg &msg) override;
void res_handler(Msg &msg) override;
private:
void print_format();
@@ -43,42 +45,39 @@ private:
class RemoveHandler : public CmdHandler {
public:
- void handler(const ArgParse &arg_parse, Msg &msg) override;
+ void handler(Msg &msg) override;
void res_handler(Msg &msg) override;
};
class QueryTopHandler : public CmdHandler {
public:
- void handler(const ArgParse &arg_parse, Msg &msg) override;
+ void handler(Msg &msg) override;
void res_handler(Msg &msg) override;
};
class EnabledHandler : public CmdHandler {
public:
- void handler(const ArgParse &arg_parse, Msg &msg) override;
+ void handler(Msg &msg) override;
void res_handler(Msg &msg) override;
};
class DisabledHandler : public CmdHandler {
public:
- void handler(const ArgParse &arg_parse, Msg &msg) override;
+ void handler(Msg &msg) override;
void res_handler(Msg &msg) override;
};
class ListHandler : public CmdHandler {
public:
- void handler(const ArgParse &arg_parse, Msg &msg) override;
+ void handler(Msg &msg) override;
void res_handler(Msg &msg) override;
};
class InstallHandler : public CmdHandler {
public:
- InstallHandler(const std::string &arg) : arg(arg) { }
- void handler(const ArgParse &arg_parse, Msg &msg) override;
+ void handler(Msg &msg) override;
void res_handler(Msg &msg) override;
-private:
- std::string arg;
};
#endif // !CLIENT_CMD_HANDLER_H
diff --git a/src/client/main.cpp b/src/client/main.cpp
index 62b7ca5..e47c523 100644
--- a/src/client/main.cpp
+++ b/src/client/main.cpp
@@ -17,6 +17,5 @@ int main(int argc, char *argv[]) {
exit(EXIT_FAILURE);
}
client.run_cmd();
- client.close();
return 0;
}
diff --git a/src/client/tcp_socket.cpp b/src/client/tcp_socket.cpp
index d0721cc..7781183 100644
--- a/src/client/tcp_socket.cpp
+++ b/src/client/tcp_socket.cpp
@@ -15,7 +15,7 @@
bool TcpSocket::recv_msg(Msg &res, MessageHeader &header) {
MessageProtocol proto;
- if (handle_request(stream, proto) < 0) {
+ if (!handle_request(stream, proto)) {
printf("can't connect to server!\n");
return false;
}
@@ -24,8 +24,7 @@ bool TcpSocket::recv_msg(Msg &res, MessageHeader &header) {
return true;
}
-bool TcpSocket::send_msg(Msg &msg) {
- MessageHeader header;
+bool TcpSocket::send_msg(Msg &msg, MessageHeader &header) {
if (!send_response(stream, msg, header)) {
return false;
}
@@ -52,13 +51,8 @@ bool TcpSocket::init() {
return -1;
}
if (file_connect(SOCK_PATH.c_str()) < 0) {
- close(sock);
return false;
}
stream.set_sock(sock);
return true;
}
-
-void TcpSocket::clear() {
- close(sock);
-}
\ No newline at end of file
diff --git a/src/client/tcp_socket.h b/src/client/tcp_socket.h
index fa0073b..1a3dfef 100644
--- a/src/client/tcp_socket.h
+++ b/src/client/tcp_socket.h
@@ -16,11 +16,13 @@
class TcpSocket {
public:
TcpSocket() { }
+ ~TcpSocket() {
+ close(sock);
+ }
bool recv_msg(Msg &res, MessageHeader &header);
- bool send_msg(Msg &msg);
+ bool send_msg(Msg &msg, MessageHeader &header);
int file_connect(const char *name);
bool init();
- void clear();
private:
int sock;
SocketStream stream;
diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt
index dece483..ac7525b 100644
--- a/src/common/CMakeLists.txt
+++ b/src/common/CMakeLists.txt
@@ -2,7 +2,7 @@ cmake_minimum_required (VERSION 3.22)
project(common)
aux_source_directory(. SOURCE)
-SET(CMAKE_CXX_FLAGS "-rdynamic -std=c++11 -g -Wl,-z,relro,-z,now")
+SET(CMAKE_CXX_FLAGS "-rdynamic -std=c++11 -g -Wl,-z,relro,-z,now -Wall -Wextra -fPIC -O2")
include_directories(/usr/include/yaml-cpp)
diff --git a/src/common/message_protocol.cpp b/src/common/message_protocol.cpp
index 05d437c..a813a6c 100644
--- a/src/common/message_protocol.cpp
+++ b/src/common/message_protocol.cpp
@@ -13,7 +13,7 @@
#include <iostream>
template <typename T>
-inline ssize_t handle_EINTR(T fn) {
+inline ssize_t handle_error(T fn) {
ssize_t res = 0;
while (true) {
res = fn();
@@ -25,27 +25,27 @@ inline ssize_t handle_EINTR(T fn) {
return res;
}
-inline ssize_t read_socket(int sock, void *ptr, size_t size, int flags) {
- return handle_EINTR([&]() {
- return recv(sock, ptr, size, flags);
+inline ssize_t read_socket(int sock, void *buf, size_t size, int flags) {
+ return handle_error([&]() {
+ return recv(sock, buf, size, flags);
});
}
-inline ssize_t send_socket(int sock, const void *ptr, size_t size, int flags) {
- return handle_EINTR([&]() {
- return send(sock, ptr, size, flags);
+inline ssize_t send_socket(int sock, const void *buf, size_t size, int flags) {
+ return handle_error([&]() {
+ return send(sock, buf, size, flags);
});
}
-ssize_t SocketStream::read(char *ptr, size_t size) {
+ssize_t SocketStream::read(char *buf, size_t size) {
if (read_buff_off < read_buff_content_size) {
auto remaining_size = read_buff_content_size - read_buff_off;
if (size <= remaining_size) {
- memcpy(ptr, read_buff.data() + read_buff_off, size);
+ memcpy(buf, read_buff.data() + read_buff_off, size);
read_buff_off += size;
return size;
} else {
- memcpy(ptr, read_buff.data() + read_buff_off, remaining_size);
+ memcpy(buf, read_buff.data() + read_buff_off, remaining_size);
read_buff_off += remaining_size;
return remaining_size;
}
@@ -56,22 +56,22 @@ ssize_t SocketStream::read(char *ptr, size_t size) {
auto n = read_socket(sock, read_buff.data(), MAX_BUFF_SIZE, 0);
if (n <= 0) {
return n;
- } else if (n < size) {
- memcpy(ptr, read_buff.data(), n);
+ } else if (static_cast<size_t>(n) < size) {
+ memcpy(buf, read_buff.data(), n);
return n;
} else {
- memcpy(ptr, read_buff.data(), size);
+ memcpy(buf, read_buff.data(), size);
read_buff_off = size;
read_buff_content_size = n;
return size;
}
} else {
- return read_socket(sock, ptr, size, 0);
+ return read_socket(sock, buf, size, 0);
}
}
-ssize_t SocketStream::write(const char *ptr, size_t size) {
- return send_socket(sock, ptr, size, 0);
+ssize_t SocketStream::write(const char *buf, size_t size) {
+ return send_socket(sock, buf, size, 0);
}
static std::string to_hex(size_t x) {
@@ -80,7 +80,7 @@ static std::string to_hex(size_t x) {
ss << std::hex << std::uppercase << x;
result = ss.str();
std::string zero = "";
- for (int i = result.length(); i < sizeof(size_t); ++i) {
+ for (size_t i = result.length(); i < sizeof(size_t); ++i) {
zero += "0";
}
result = zero + result;
diff --git a/src/common/message_protocol.h b/src/common/message_protocol.h
index 3771298..b2c3c0d 100644
--- a/src/common/message_protocol.h
+++ b/src/common/message_protocol.h
@@ -44,38 +44,39 @@ enum class Opt {
};
class Msg {
- private:
- friend class boost::serialization::access;
- template <typename Archive>
- void serialize(Archive &ar, const unsigned int version) {
- ar & _opt;
- ar & _payload;
- }
- public:
- int payload_size() const {
- return this->_payload.size();
- }
- std::string payload(int id) const {
- return this->_payload[id];
- }
- Opt opt() {
- return this->_opt;
- }
- void add_payload(std::string &context) {
- this->_payload.emplace_back(context);
- }
- void add_payload(std::string &&context) {
- this->_payload.emplace_back(context);
- }
- void set_opt(Opt opt) {
- this->_opt = opt;
- }
- Opt get_opt() const {
- return this->_opt;
- }
- private:
- Opt _opt;
- std::vector<std::string> _payload;
+private:
+ friend class boost::serialization::access;
+ template <typename Archive>
+ void serialize(Archive &ar, const unsigned int version) {
+ ar & _opt;
+ ar & _payload;
+ }
+public:
+ Msg() { }
+ int payload_size() const {
+ return this->_payload.size();
+ }
+ std::string payload(int id) const {
+ return this->_payload[id];
+ }
+ Opt opt() {
+ return this->_opt;
+ }
+ void add_payload(std::string &context) {
+ this->_payload.emplace_back(context);
+ }
+ void add_payload(std::string &&context) {
+ this->_payload.emplace_back(context);
+ }
+ void set_opt(Opt opt) {
+ this->_opt = opt;
+ }
+ Opt get_opt() const {
+ return this->_opt;
+ }
+private:
+ Opt _opt;
+ std::vector<std::string> _payload;
};
class MessageHeader {
@@ -86,6 +87,7 @@ private:
ar & code;
}
public:
+ MessageHeader() { }
void set_state_code(int code) {
this->code = code;
}
@@ -109,8 +111,8 @@ class SocketStream {
public:
SocketStream() : read_buff(MAX_BUFF_SIZE, 0) { }
SocketStream(int sock) : sock(sock), read_buff(MAX_BUFF_SIZE, 0) { }
- ssize_t read(char *ptr, size_t size);
- ssize_t write(const char *ptr, size_t size);
+ ssize_t read(char *buf, size_t size);
+ ssize_t write(const char *buf, size_t size);
void set_sock(int sock) {
this->sock = sock;
}
@@ -135,7 +137,6 @@ std::string encode(const T &msg) {
template<typename T>
int decode(T &msg, const std::string &content) {
- int len = 0;
try {
std::stringstream ss(content);
boost::archive::binary_iarchive ia(ss);
diff --git a/src/plugin_mgr/CMakeLists.txt b/src/plugin_mgr/CMakeLists.txt
index a32c800..8642a63 100644
--- a/src/plugin_mgr/CMakeLists.txt
+++ b/src/plugin_mgr/CMakeLists.txt
@@ -1,7 +1,7 @@
cmake_minimum_required (VERSION 3.22)
project(oeAware-server)
-SET(CMAKE_CXX_FLAGS "-rdynamic -std=c++11 -g -Wl,-z,relro,-z,now")
+SET(CMAKE_CXX_FLAGS "-rdynamic -std=c++11 -g -Wl,-z,relro,-z,now -Wall -Wextra -O2")
if("${OEAWARE_DEBUG}" EQUAL 1)
add_definitions(-DOEAWARE_DEBUG)
diff --git a/src/plugin_mgr/config.cpp b/src/plugin_mgr/config.cpp
index f50399b..588eda0 100644
--- a/src/plugin_mgr/config.cpp
+++ b/src/plugin_mgr/config.cpp
@@ -32,11 +32,11 @@ bool create_dir(const std::string &path) {
bool check_plugin_list(YAML::Node plugin_list_item) {
if (plugin_list_item["name"].IsNull()) {
- std::cerr << "Warn: null name in plugin_list.\n";
+ std::cerr << "WARN: null name in plugin_list.\n";
return false;
}
if (plugin_list_item["url"].IsNull()) {
- std::cerr << "Warn: null url in plugin_list.\n";
+ std::cerr << "WARN: null url in plugin_list.\n";
return false;
}
return true;
@@ -60,7 +60,7 @@ bool Config::load(const std::string path) {
if (!node["plugin_list"].IsNull()) {
YAML::Node plugin_list = node["plugin_list"];
if (plugin_list.IsSequence()) {
- for (int i = 0; i < plugin_list.size(); ++i) {
+ for (size_t i = 0; i < plugin_list.size(); ++i) {
if (!check_plugin_list(plugin_list[i])){
continue;
}
@@ -81,15 +81,14 @@ bool Config::load(const std::string path) {
if (!node["enable_list"].IsNull()) {
YAML::Node enable_list = node["enable_list"];
if (enable_list.IsSequence()) {
- for (int i = 0; i < enable_list.size(); ++i) {
- YAML::Node plugin = enable_list[i]["name"];
+ for (size_t i = 0; i < enable_list.size(); ++i) {
std::string name = enable_list[i]["name"].as<std::string>();
YAML::Node instances = enable_list[i]["instances"];
EnableItem enable_item(name);
- if (instances.IsNull()) {
+ if (!instances.IsDefined() || instances.IsNull()) {
enable_item.set_enabled(true);
} else {
- for (int j = 0; j < instances.size(); ++j) {
+ for (size_t j = 0; j < instances.size(); ++j) {
std::string i_name = instances[j].as<std::string>();
enable_item.add_instance(i_name);
}
@@ -118,6 +117,9 @@ std::string get_path(PluginType type) {
case PluginType::TUNE: {
return DEFAULT_TUNE_PATH;
}
+ default: {
+ break;
+ }
}
return "";
}
\ No newline at end of file
diff --git a/src/plugin_mgr/config.h b/src/plugin_mgr/config.h
index 6d0ee4d..c2d1f37 100644
--- a/src/plugin_mgr/config.h
+++ b/src/plugin_mgr/config.h
@@ -72,9 +72,9 @@ public:
return this->name;
}
private:
- bool enabled;
- std::string name;
std::vector<std::string> instance;
+ std::string name;
+ bool enabled;
};
class Config {
diff --git a/src/plugin_mgr/dep_handler.h b/src/plugin_mgr/dep_handler.h
index 76abf49..b81d574 100644
--- a/src/plugin_mgr/dep_handler.h
+++ b/src/plugin_mgr/dep_handler.h
@@ -33,8 +33,8 @@ struct Node {
int cnt;
int real_cnt;
bool state; // dependency closed-loop
- Node() : next(nullptr), head(nullptr), state(true), cnt(0), real_cnt(0) {}
- Node(std::string name): name(name), next(nullptr), head(nullptr), state(true), cnt(0), real_cnt(0) {}
+ Node() : next(nullptr), head(nullptr), cnt(0), real_cnt(0), state(true) {}
+ Node(std::string name): next(nullptr), head(nullptr), name(name), cnt(0), real_cnt(0), state(true) {}
};
class DepHandler {
diff --git a/src/plugin_mgr/error_code.cpp b/src/plugin_mgr/error_code.cpp
index 30cc4f8..09f0eb9 100644
--- a/src/plugin_mgr/error_code.cpp
+++ b/src/plugin_mgr/error_code.cpp
@@ -1,3 +1,14 @@
+/******************************************************************************
+ * Copyright (c) 2024 Huawei Technologies Co., Ltd.
+ * oeAware is licensed under Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
+ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
+ * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ ******************************************************************************/
#include "error_code.h"
const std::unordered_map<ErrorCode, std::string> ErrorText::error_codes = {
diff --git a/src/plugin_mgr/error_code.h b/src/plugin_mgr/error_code.h
index 7c06054..dd028f3 100644
--- a/src/plugin_mgr/error_code.h
+++ b/src/plugin_mgr/error_code.h
@@ -1,3 +1,14 @@
+/******************************************************************************
+ * Copyright (c) 2024 Huawei Technologies Co., Ltd.
+ * oeAware is licensed under Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
+ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
+ * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ ******************************************************************************/
#ifndef PLUGIN_MGR_ERROR_CODE_H
#define PLUGIN_MGR_ERROR_CODE_H
#include <unordered_map>
diff --git a/src/plugin_mgr/instance_run_handler.cpp b/src/plugin_mgr/instance_run_handler.cpp
index 862e806..8ba10db 100644
--- a/src/plugin_mgr/instance_run_handler.cpp
+++ b/src/plugin_mgr/instance_run_handler.cpp
@@ -18,12 +18,18 @@ static void* get_ring_buf(std::shared_ptr<Instance> instance) {
return nullptr;
}
switch (instance->get_type()) {
- case PluginType::COLLECTOR:
+ case PluginType::COLLECTOR: {
return (std::dynamic_pointer_cast<CollectorInstance>(instance))->get_interface()->get_ring_buf();
- case PluginType::SCENARIO:
+ }
+ case PluginType::SCENARIO: {
return (std::dynamic_pointer_cast<ScenarioInstance>(instance))->get_interface()->get_ring_buf();
- case PluginType::TUNE:
+ }
+ case PluginType::TUNE: {
break;
+ }
+ default: {
+ break;
+ }
}
return nullptr;
}
@@ -34,7 +40,7 @@ static void reflash_ring_buf(std::shared_ptr<Instance> instance) {
void InstanceRunHandler::run_aware(std::shared_ptr<Instance> instance, std::vector<std::string> &deps) {
void *a[MAX_DEPENDENCIES_SIZE];
- for (int i = 0; i < deps.size(); ++i) {
+ for (size_t i = 0; i < deps.size(); ++i) {
std::shared_ptr<Instance> ins = memory_store.get_instance(deps[i]);
a[i] = get_ring_buf(ins);
}
@@ -43,7 +49,7 @@ void InstanceRunHandler::run_aware(std::shared_ptr<Instance> instance, std::vect
void InstanceRunHandler::run_tune(std::shared_ptr<Instance> instance, std::vector<std::string> &deps) {
void *a[MAX_DEPENDENCIES_SIZE];
- for (int i = 0; i < deps.size(); ++i) {
+ for (size_t i = 0; i < deps.size(); ++i) {
std::shared_ptr<Instance> ins = memory_store.get_instance(deps[i]);
a[i] = get_ring_buf(ins);
}
@@ -52,36 +58,48 @@ void InstanceRunHandler::run_tune(std::shared_ptr<Instance> instance, std::vecto
void InstanceRunHandler::insert_instance(std::shared_ptr<Instance> instance) {
switch (instance->get_type()) {
- case PluginType::COLLECTOR:
+ case PluginType::COLLECTOR: {
collector[instance->get_name()] = instance;
(std::dynamic_pointer_cast<CollectorInstance>(instance))->get_interface()->enable();
break;
- case PluginType::SCENARIO:
+ }
+ case PluginType::SCENARIO: {
scenario[instance->get_name()] = instance;
(std::dynamic_pointer_cast<ScenarioInstance>(instance))->get_interface()->enable();
break;
- case PluginType::TUNE:
+ }
+ case PluginType::TUNE: {
tune[instance->get_name()] = instance;
(std::dynamic_pointer_cast<TuneInstance>(instance))->get_interface()->enable();
break;
+ }
+ default: {
+ break;
+ }
}
INFO("[PluginManager] " << instance->get_name() << " instance insert into running queue.");
}
void InstanceRunHandler::delete_instance(std::shared_ptr<Instance> instance) {
switch (instance->get_type()) {
- case PluginType::COLLECTOR:
+ case PluginType::COLLECTOR: {
collector.erase(instance->get_name());
(std::dynamic_pointer_cast<CollectorInstance>(instance))->get_interface()->disable();
break;
- case PluginType::SCENARIO:
+ }
+ case PluginType::SCENARIO: {
scenario.erase(instance->get_name());
(std::dynamic_pointer_cast<ScenarioInstance>(instance))->get_interface()->disable();
break;
- case PluginType::TUNE:
+ }
+ case PluginType::TUNE: {
tune.erase(instance->get_name());
(std::dynamic_pointer_cast<TuneInstance>(instance))->get_interface()->disable();
break;
+ }
+ default: {
+ break;
+ }
}
INFO("[PluginManager] " << instance->get_name() << " instance delete from running queue.");
}
@@ -91,12 +109,14 @@ void InstanceRunHandler::handle_instance() {
while(this->recv_queue_try_pop(msg)){
std::shared_ptr<Instance> instance = msg.get_instance();
switch (msg.get_type()){
- case RunType::ENABLED:
+ case RunType::ENABLED: {
insert_instance(std::move(instance));
break;
- case RunType::DISABLED:
+ }
+ case RunType::DISABLED: {
delete_instance(std::move(instance));
break;
+ }
}
}
}
@@ -107,7 +127,7 @@ static std::vector<std::string> get_deps(std::shared_ptr<Instance> instance) {
std::string deps = (t_instance)->get_interface()->get_dep();
std::string dep = "";
std::vector<std::string> vec;
- for (int i = 0; i < deps.length(); ++i) {
+ for (size_t i = 0; i < deps.length(); ++i) {
if (deps[i] != '-') {
dep += deps[i];
}else {
diff --git a/src/plugin_mgr/main.cpp b/src/plugin_mgr/main.cpp
index 92f48bb..4e6acdc 100644
--- a/src/plugin_mgr/main.cpp
+++ b/src/plugin_mgr/main.cpp
@@ -48,7 +48,7 @@ int main(int argc, char **argv) {
SafeQueue<Message> res_msg;
INFO("[MessageManager] Start message manager!");
MessageManager message_manager(&handler_msg, &res_msg);
- message_manager.init(&config);
+ message_manager.init();
message_manager.run();
INFO("[PluginManager] Start plugin manager!");
PluginManager plugin_manager(config, handler_msg, res_msg);
diff --git a/src/plugin_mgr/message_manager.cpp b/src/plugin_mgr/message_manager.cpp
index f081f20..815122c 100644
--- a/src/plugin_mgr/message_manager.cpp
+++ b/src/plugin_mgr/message_manager.cpp
@@ -44,7 +44,6 @@ bool TcpSocket::init() {
return false;
}
if (domain_listen(path.c_str()) < 0) {
- close(sock);
return false;
}
epfd = epoll_create(1);
@@ -52,6 +51,9 @@ bool TcpSocket::init() {
ev.events = EPOLLIN;
ev.data.fd = sock;
int ret = epoll_ctl(epfd, EPOLL_CTL_ADD, sock, &ev);
+ if (ret < 0) {
+ return false;
+ }
return true;
}
@@ -64,7 +66,7 @@ static void send_msg(Msg &msg, SafeQueue<Message> *handler_msg) {
}
handler_msg->push(message);
}
-static void recv_msg(Msg &msg, MessageHeader &header, SafeQueue<Message> *res_msg) {
+static void recv_msg(Msg &msg, SafeQueue<Message> *res_msg) {
Message res;
res_msg->wait_and_pop(res);
msg.set_opt(res.get_opt());
@@ -76,7 +78,6 @@ static void recv_msg(Msg &msg, MessageHeader &header, SafeQueue<Message> *res_ms
void TcpSocket::serve_accept(SafeQueue<Message> *handler_msg, SafeQueue<Message> *res_msg){
struct epoll_event evs[MAX_EVENT_SIZE];
int sz = sizeof(evs) / sizeof(struct epoll_event);
- char buf[MAX_RECV_BUFF_SIZE];
while (true) {
int num = epoll_wait(epfd, evs, sz, -1);
for (int i = 0; i < num; ++i) {
@@ -102,7 +103,7 @@ void TcpSocket::serve_accept(SafeQueue<Message> *handler_msg, SafeQueue<Message>
}
decode(client_msg, msg_protocol.body);
send_msg(client_msg, handler_msg);
- recv_msg(internal_msg, header, res_msg);
+ recv_msg(internal_msg, res_msg);
if (!send_response(stream, internal_msg, header)) {
WARN("[MessageManager] send msg to client failed!");
}
diff --git a/src/plugin_mgr/message_manager.h b/src/plugin_mgr/message_manager.h
index 4cd7311..416be48 100644
--- a/src/plugin_mgr/message_manager.h
+++ b/src/plugin_mgr/message_manager.h
@@ -62,6 +62,9 @@ private:
class TcpSocket {
public:
TcpSocket() {}
+ ~TcpSocket() {
+ close(sock);
+ }
bool init();
void serve_accept(SafeQueue<Message> *handler_msg, SafeQueue<Message> *res_msg);
private:
@@ -77,7 +80,7 @@ public:
this->handler_msg = handler_msg;
this->res_msg = res_msg;
}
- void init(Config *config){
+ void init(){
this->tcp_socket = new TcpSocket();
}
void run();
diff --git a/src/plugin_mgr/plugin.h b/src/plugin_mgr/plugin.h
index a2a1815..d59ab8a 100644
--- a/src/plugin_mgr/plugin.h
+++ b/src/plugin_mgr/plugin.h
@@ -148,10 +148,10 @@ public:
return handler;
}
private:
- void *handler;
std::vector<std::shared_ptr<Instance>> instances;
- PluginType type;
std::string name;
+ PluginType type;
+ void *handler;
};
#endif
diff --git a/src/plugin_mgr/plugin_manager.cpp b/src/plugin_mgr/plugin_manager.cpp
index 77acc40..5324512 100644
--- a/src/plugin_mgr/plugin_manager.cpp
+++ b/src/plugin_mgr/plugin_manager.cpp
@@ -34,7 +34,7 @@ ErrorCode PluginManager::remove(const std::string &name) {
}
std::shared_ptr<Plugin> plugin = memory_store.get_plugin(name);
std::vector<std::string> instance_names;
- for (int i = 0; i < plugin->get_instance_len(); ++i) {
+ for (size_t i = 0; i < plugin->get_instance_len(); ++i) {
std::shared_ptr<Instance> instance = plugin->get_instance(i);
std::string iname = instance->get_name();
if (instance->get_enabled()) {
@@ -57,7 +57,7 @@ ErrorCode PluginManager::query_all_plugins(std::string &res) {
std::vector<std::shared_ptr<Plugin>> all_plugins = memory_store.get_all_plugins();
for (auto &p : all_plugins) {
res += p->get_name() + "\n";
- for (int i = 0; i < p->get_instance_len(); ++i) {
+ for (size_t i = 0; i < p->get_instance_len(); ++i) {
std::string info = p->get_instance(i)->get_info();
res += "\t" + info + "\n";
}
@@ -71,7 +71,7 @@ ErrorCode PluginManager::query_plugin(const std::string &name, std::string &res)
}
std::shared_ptr<Plugin> plugin = memory_store.get_plugin(name);
res += name + "\n";
- for (int i = 0; i < plugin->get_instance_len(); ++i) {
+ for (size_t i = 0; i < plugin->get_instance_len(); ++i) {
std::string info = plugin->get_instance(i)->get_info();
res += "\t" + info + "\n";
}
@@ -92,7 +92,6 @@ int PluginManager::load_dl_instance(std::shared_ptr<Plugin> plugin, T **interfac
template<typename T>
std::vector<std::string> get_dep(T *interface) {
- int dep_len = 0;
char *deps = interface->get_dep();
std::vector<std::string> res;
std::string dep;
@@ -152,12 +151,16 @@ bool PluginManager::load_instance(std::shared_ptr<Plugin> plugin) {
save_instance<ScenarioInterface, ScenarioInstance>(plugin, interface_list, len);
break;
}
- case PluginType::TUNE:
+ case PluginType::TUNE: {
TuneInterface *interface_list = nullptr;
len = load_dl_instance<TuneInterface>(plugin, &interface_list);
if (len == -1) return false;
save_instance<TuneInterface, TuneInstance>(plugin, interface_list, len);
break;
+ }
+ default: {
+ return false;
+ }
}
update_instance_state();
return true;
@@ -211,9 +214,13 @@ std::string generate_dot(MemoryStore &memory_store, const std::vector<std::vecto
if (vec.size() == 1) {
continue;
}
- instance = memory_store.get_instance(vec[1]);
- sub_graph[instance->get_plugin_name()].insert(vec[1]);
- res += vec[0] + "->" + vec[1] + ";";
+ if (memory_store.is_instance_exist(vec[1])) {
+ instance = memory_store.get_instance(vec[1]);
+ sub_graph[instance->get_plugin_name()].insert(vec[1]);
+ } else {
+ res += vec[1] + "[label=\"(missing)\\n" + vec[1] + "\", fontcolor=red];\n";
+ }
+ res += vec[0] + "->" + vec[1] + ";\n";
}
int id = 0;
for (auto &p : sub_graph) {
@@ -339,7 +346,7 @@ ErrorCode PluginManager::download(const std::string &name, std::string &res) {
}
void PluginManager::pre_enable() {
- for (int i = 0; i < config.get_enable_list_size(); ++i) {
+ for (size_t i = 0; i < config.get_enable_list_size(); ++i) {
EnableItem item = config.get_enable_list(i);
if (item.get_enabled()) {
std::string name = item.get_name();
@@ -348,11 +355,11 @@ void PluginManager::pre_enable() {
continue;
}
std::shared_ptr<Plugin> plugin = memory_store.get_plugin(name);
- for (int j = 0; j < plugin->get_instance_len(); ++j) {
+ for (size_t j = 0; j < plugin->get_instance_len(); ++j) {
instance_enabled(plugin->get_instance(j)->get_name());
}
} else {
- for (int j = 0; j < item.get_instance_size(); ++j) {
+ for (size_t j = 0; j < item.get_instance_size(); ++j) {
std::string name = item.get_instance_name(j);
if (!memory_store.is_instance_exist(name)) {
WARN("[PluginManager] instance " << name << " cannot be enabled, because it does not exist.");
@@ -410,7 +417,7 @@ void* PluginManager::get_data_buffer(std::string name) {
std::string PluginManager::instance_dep_check(const std::string &name) {
std::shared_ptr<Plugin> plugin = memory_store.get_plugin(name);
std::string res;
- for (int i = 0; i < plugin->get_instance_len(); ++i) {
+ for (size_t i = 0; i < plugin->get_instance_len(); ++i) {
std::string instance_name = plugin->get_instance(i)->get_name();
std::vector<std::vector<std::string>> query;
dep_handler.query_node(instance_name, query);
@@ -422,9 +429,9 @@ std::string PluginManager::instance_dep_check(const std::string &name) {
}
}
if (!lack.empty()) {
- for (int i = 0; i < lack.size(); ++i) {
- res += "\t" + lack[i];
- if (i != lack.size() - 1) res += '\n';
+ for (size_t j = 0; j < lack.size(); ++j) {
+ res += "\t" + lack[j];
+ if (j != lack.size() - 1) res += '\n';
}
}
}
--
2.33.0