diff --git a/include/infer_tensor.h b/include/infer_tensor.h index 7aed3e9a474..bdbf2704bd0 100644 --- a/include/infer_tensor.h +++ b/include/infer_tensor.h @@ -107,6 +107,7 @@ class InferTensor : public InferTensorBase { public: InferTensor() = default; + ~InferTensor() = default; InferTensor(DataType type, std::vector shape, const void *data, size_t data_len) { set_data_type(type); set_shape(shape); @@ -131,6 +132,8 @@ class InferTensor : public InferTensorBase { class InferImagesBase { public: + InferImagesBase() = default; + virtual ~InferImagesBase() = default; virtual size_t batch_size() const = 0; virtual bool get(size_t index, const void *&pic_buffer, uint32_t &pic_size) const = 0; virtual size_t input_index() const = 0; // the index of images as input in model @@ -138,18 +141,24 @@ class InferImagesBase { class RequestBase { public: + RequestBase() = default; + virtual ~RequestBase() = default; virtual size_t size() const = 0; virtual const InferTensorBase *operator[](size_t index) const = 0; }; class ImagesRequestBase { public: + ImagesRequestBase() = default; + virtual ~ImagesRequestBase() = default; virtual size_t size() const = 0; virtual const InferImagesBase *operator[](size_t index) const = 0; }; class ReplyBase { public: + ReplyBase() = default; + virtual ~ReplyBase() = default; virtual size_t size() const = 0; virtual InferTensorBase *operator[](size_t index) = 0; virtual const InferTensorBase *operator[](size_t index) const = 0; @@ -160,6 +169,7 @@ class ReplyBase { class VectorInferTensorWrapReply : public ReplyBase { public: explicit VectorInferTensorWrapReply(std::vector &tensor_list) : tensor_list_(tensor_list) {} + ~VectorInferTensorWrapReply() = default; size_t size() const { return tensor_list_.size(); } InferTensorBase *operator[](size_t index) { @@ -187,6 +197,7 @@ class VectorInferTensorWrapReply : public ReplyBase { class VectorInferTensorWrapRequest : public RequestBase { public: explicit VectorInferTensorWrapRequest(const std::vector &tensor_list) : tensor_list_(tensor_list) {} + ~VectorInferTensorWrapRequest() = default; size_t size() const { return tensor_list_.size(); } const InferTensorBase *operator[](size_t index) const { diff --git a/include/inference.h b/include/inference.h index c66d6555709..a72ec0b81ce 100644 --- a/include/inference.h +++ b/include/inference.h @@ -33,6 +33,8 @@ class Status { Status() : status_code_(FAILED) {} Status(enum StatusCode status_code, const std::string &status_msg = "") : status_code_(status_code), status_msg_(status_msg) {} + ~Status() = default; + bool IsSuccess() const { return status_code_ == SUCCESS; } enum StatusCode StatusCode() const { return status_code_; } std::string StatusMessage() const { return status_msg_; } diff --git a/serving/acl/dvpp_process.cc b/serving/acl/dvpp_process.cc index 8a65d94b197..10530ad4917 100644 --- a/serving/acl/dvpp_process.cc +++ b/serving/acl/dvpp_process.cc @@ -233,7 +233,7 @@ Status DvppProcess::InputInputBuffer(const void *pic_buffer, size_t pic_buffer_s } static void JpegErrorExitCustom(j_common_ptr cinfo) { - char jpeg_last_error_msg[JMSG_LENGTH_MAX]; + char jpeg_last_error_msg[JMSG_LENGTH_MAX] = {0}; if (cinfo != nullptr && cinfo->err != nullptr && cinfo->err->format_message != nullptr) { (*(cinfo->err->format_message))(cinfo, jpeg_last_error_msg); } diff --git a/serving/core/http_process.cc b/serving/core/http_process.cc index e0b302574a7..efc9b34cd31 100644 --- a/serving/core/http_process.cc +++ b/serving/core/http_process.cc @@ -42,7 +42,7 @@ enum HTTP_DATA_TYPE { HTTP_DATA_NONE, HTTP_DATA_INT, HTTP_DATA_FLOAT }; static const std::map infer_type2_http_type{ {inference::DataType::kMSI_Int32, HTTP_DATA_INT}, {inference::DataType::kMSI_Float32, HTTP_DATA_FLOAT}}; -Status GetPostMessage(struct evhttp_request *req, std::string *buf) { +Status GetPostMessage(struct evhttp_request *const req, std::string *const buf) { Status status(SUCCESS); size_t post_size = evbuffer_get_length(req->input_buffer); if (post_size == 0) { @@ -57,7 +57,8 @@ Status GetPostMessage(struct evhttp_request *req, std::string *buf) { return status; } } -Status CheckRequestValid(struct evhttp_request *http_request) { + +Status CheckRequestValid(struct evhttp_request *const http_request) { Status status(SUCCESS); switch (evhttp_request_get_command(http_request)) { case EVHTTP_REQ_POST: @@ -68,7 +69,7 @@ Status CheckRequestValid(struct evhttp_request *http_request) { } } -void ErrorMessage(struct evhttp_request *req, Status status) { +void ErrorMessage(struct evhttp_request *const req, Status status) { json error_json = {{"error_message", status.StatusMessage()}}; std::string out_error_str = error_json.dump(); struct evbuffer *retbuff = evbuffer_new(); @@ -77,7 +78,7 @@ void ErrorMessage(struct evhttp_request *req, Status status) { evbuffer_free(retbuff); } -Status CheckMessageValid(const json &message_info, HTTP_TYPE *type) { +Status CheckMessageValid(const json &message_info, HTTP_TYPE *const type) { Status status(SUCCESS); int count = 0; if (message_info.find(HTTP_DATA) != message_info.end()) { @@ -95,7 +96,7 @@ Status CheckMessageValid(const json &message_info, HTTP_TYPE *type) { return status; } -Status GetDataFromJson(const json &json_data_array, ServingTensor *request_tensor, size_t data_index, +Status GetDataFromJson(const json &json_data_array, ServingTensor *const request_tensor, size_t data_index, HTTP_DATA_TYPE type) { Status status(SUCCESS); auto type_name = [](const json &json_data) -> std::string { @@ -133,7 +134,7 @@ Status GetDataFromJson(const json &json_data_array, ServingTensor *request_tenso return SUCCESS; } -Status RecusiveGetTensor(const json &json_data, size_t depth, ServingTensor *request_tensor, size_t data_index, +Status RecusiveGetTensor(const json &json_data, size_t depth, ServingTensor *const request_tensor, size_t data_index, HTTP_DATA_TYPE type) { Status status(SUCCESS); std::vector required_shape = request_tensor->shape(); @@ -185,7 +186,7 @@ std::vector GetJsonArrayShape(const json &json_array) { return json_shape; } -Status TransDataToPredictRequest(const json &message_info, PredictRequest *request) { +Status TransDataToPredictRequest(const json &message_info, PredictRequest *const request) { Status status = SUCCESS; auto tensors = message_info.find(HTTP_DATA); if (tensors == message_info.end()) { @@ -241,7 +242,7 @@ Status TransDataToPredictRequest(const json &message_info, PredictRequest *reque return SUCCESS; } -Status TransTensorToPredictRequest(const json &message_info, PredictRequest *request) { +Status TransTensorToPredictRequest(const json &message_info, PredictRequest *const request) { Status status(SUCCESS); auto tensors = message_info.find(HTTP_TENSOR); if (tensors == message_info.end()) { @@ -291,7 +292,8 @@ Status TransTensorToPredictRequest(const json &message_info, PredictRequest *req return status; } -Status TransHTTPMsgToPredictRequest(struct evhttp_request *http_request, PredictRequest *request, HTTP_TYPE *type) { +Status TransHTTPMsgToPredictRequest(struct evhttp_request *const http_request, PredictRequest *const request, + HTTP_TYPE *const type) { Status status = CheckRequestValid(http_request); if (status != SUCCESS) { return status; @@ -352,7 +354,7 @@ Status TransHTTPMsgToPredictRequest(struct evhttp_request *http_request, Predict return status; } -Status GetJsonFromTensor(const ms_serving::Tensor &tensor, int len, int *pos, json *out_json) { +Status GetJsonFromTensor(const ms_serving::Tensor &tensor, int len, int *const pos, json *const out_json) { Status status(SUCCESS); switch (tensor.tensor_type()) { case ms_serving::MS_INT32: { @@ -366,7 +368,7 @@ Status GetJsonFromTensor(const ms_serving::Tensor &tensor, int len, int *pos, js case ms_serving::MS_FLOAT32: { auto data = reinterpret_cast(tensor.data().data()) + *pos; std::vector result_tensor(len); - memcpy_s(result_tensor.data(), result_tensor.size() * sizeof(float), data, len * sizeof(float)); + (void)memcpy_s(result_tensor.data(), result_tensor.size() * sizeof(float), data, len * sizeof(float)); *out_json = std::move(result_tensor); *pos += len; break; @@ -378,7 +380,7 @@ Status GetJsonFromTensor(const ms_serving::Tensor &tensor, int len, int *pos, js return status; } -Status TransPredictReplyToData(const PredictReply &reply, json *out_json) { +Status TransPredictReplyToData(const PredictReply &reply, json *const out_json) { Status status(SUCCESS); for (int i = 0; i < reply.result_size(); i++) { (*out_json)["data"].push_back(json()); @@ -396,7 +398,7 @@ Status TransPredictReplyToData(const PredictReply &reply, json *out_json) { return status; } -Status RecusiveGetJson(const ms_serving::Tensor &tensor, int depth, int *pos, json *out_json) { +Status RecusiveGetJson(const ms_serving::Tensor &tensor, int depth, int *const pos, json *const out_json) { Status status(SUCCESS); if (depth >= 10) { ERROR_INFER_STATUS(status, FAILED, "result tensor shape dims is larger than 10"); @@ -420,7 +422,7 @@ Status RecusiveGetJson(const ms_serving::Tensor &tensor, int depth, int *pos, js return status; } -Status TransPredictReplyToTensor(const PredictReply &reply, json *out_json) { +Status TransPredictReplyToTensor(const PredictReply &reply, json *const out_json) { Status status(SUCCESS); for (int i = 0; i < reply.result_size(); i++) { (*out_json)["tensor"].push_back(json()); @@ -434,7 +436,7 @@ Status TransPredictReplyToTensor(const PredictReply &reply, json *out_json) { return status; } -Status TransPredictReplyToHTTPMsg(const PredictReply &reply, const HTTP_TYPE &type, struct evbuffer *buf) { +Status TransPredictReplyToHTTPMsg(const PredictReply &reply, const HTTP_TYPE &type, struct evbuffer *const buf) { Status status(SUCCESS); json out_json; switch (type) { @@ -454,7 +456,7 @@ Status TransPredictReplyToHTTPMsg(const PredictReply &reply, const HTTP_TYPE &ty return status; } -Status HttpHandleMsgDetail(struct evhttp_request *req, void *arg, struct evbuffer *retbuff) { +Status HttpHandleMsgDetail(struct evhttp_request *const req, void *const arg, struct evbuffer *const retbuff) { PredictRequest request; PredictReply reply; HTTP_TYPE type; @@ -482,7 +484,7 @@ Status HttpHandleMsgDetail(struct evhttp_request *req, void *arg, struct evbuffe return SUCCESS; } -void http_handler_msg(struct evhttp_request *req, void *arg) { +void http_handler_msg(struct evhttp_request *const req, void *const arg) { MSI_TIME_STAMP_START(TotalRestfulPredict) struct evbuffer *retbuff = evbuffer_new(); if (retbuff == nullptr) { diff --git a/serving/core/server.cc b/serving/core/server.cc index ae667ade55c..c8639c8f694 100644 --- a/serving/core/server.cc +++ b/serving/core/server.cc @@ -44,6 +44,7 @@ namespace serving { namespace { static const uint32_t uint32max = 0x7FFFFFFF; std::promise exit_requested; +static const char kServerHttpIp[] = "0.0.0.0"; void ClearEnv() { Session::Instance().Clear(); } void HandleSignal(int sig) { exit_requested.set_value(); } @@ -195,7 +196,7 @@ Status Server::BuildAndStart() { return res; } auto option_args = Options::Instance().GetArgs(); - std::string server_address = "0.0.0.0:" + std::to_string(option_args->grpc_port); + std::string server_address = std::string(kServerHttpIp) + ":" + std::to_string(option_args->grpc_port); auto http_server_new_ret = NewHttpServer(); struct evhttp *http_server = http_server_new_ret.first; @@ -211,7 +212,7 @@ Status Server::BuildAndStart() { event_base_free(eb); }; int32_t http_port = option_args->rest_api_port; - std::string http_addr = "0.0.0.0"; + std::string http_addr = kServerHttpIp; evhttp_set_timeout(http_server, 60); evhttp_set_gencb(http_server, http_handler_msg, nullptr); diff --git a/serving/core/serving_tensor.h b/serving/core/serving_tensor.h index b55112fd64f..a341046fef3 100644 --- a/serving/core/serving_tensor.h +++ b/serving/core/serving_tensor.h @@ -50,6 +50,7 @@ class MS_API ServingTensor : public inference::InferTensorBase { class ServingImages : public inference::InferImagesBase { public: explicit ServingImages(const ms_serving::Images &images); + ~ServingImages() = default; size_t batch_size() const override; bool get(size_t index, const void *&pic_buffer, uint32_t &pic_size) const override; @@ -62,6 +63,7 @@ class ServingImages : public inference::InferImagesBase { class ServingRequest : public inference::RequestBase { public: explicit ServingRequest(const ms_serving::PredictRequest &request); + ~ServingRequest() = default; size_t size() const override; const inference::InferTensorBase *operator[](size_t index) const override; @@ -74,6 +76,7 @@ class ServingRequest : public inference::RequestBase { class ServingReply : public inference::ReplyBase { public: explicit ServingReply(ms_serving::PredictReply &reply) : reply_(reply) {} + ~ServingReply() = default; size_t size() const override; inference::InferTensorBase *operator[](size_t index) override; @@ -89,6 +92,7 @@ class ServingReply : public inference::ReplyBase { class ServingImagesRequest : public inference::ImagesRequestBase { public: explicit ServingImagesRequest(const ms_serving::PredictRequest &request); + ~ServingImagesRequest() = default; size_t size() const override; const inference::InferImagesBase *operator[](size_t index) const override; diff --git a/serving/core/util/option_parser.cc b/serving/core/util/option_parser.cc index b460ea7857b..83976655fa2 100644 --- a/serving/core/util/option_parser.cc +++ b/serving/core/util/option_parser.cc @@ -29,13 +29,13 @@ bool StartWith(const std::string &str, const std::string &expected) { (str.size() >= expected.size() && memcmp(str.data(), expected.data(), expected.size()) == 0); } -bool RemovePrefix(std::string *str, const std::string &prefix) { +bool RemovePrefix(std::string *const str, const std::string &prefix) { if (!StartWith(*str, prefix)) return false; str->replace(str->begin(), str->begin() + prefix.size(), ""); return true; } -bool Option::ParseInt32(std::string *arg) { +bool Option::ParseInt32(std::string *const arg) { if (RemovePrefix(arg, "--") && RemovePrefix(arg, name_) && RemovePrefix(arg, "=")) { int32_t parsed_value; try { @@ -50,7 +50,7 @@ bool Option::ParseInt32(std::string *arg) { return false; } -bool Option::ParseBool(std::string *arg) { +bool Option::ParseBool(std::string *const arg) { if (RemovePrefix(arg, "--") && RemovePrefix(arg, name_) && RemovePrefix(arg, "=")) { if (*arg == "true") { *bool_default_ = true; @@ -66,7 +66,7 @@ bool Option::ParseBool(std::string *arg) { return false; } -bool Option::ParseString(std::string *arg) { +bool Option::ParseString(std::string *const arg) { if (RemovePrefix(arg, "--") && RemovePrefix(arg, name_) && RemovePrefix(arg, "=")) { *string_default_ = *arg; return true; @@ -74,7 +74,7 @@ bool Option::ParseString(std::string *arg) { return false; } -bool Option::ParseFloat(std::string *arg) { +bool Option::ParseFloat(std::string *const arg) { if (RemovePrefix(arg, "--") && RemovePrefix(arg, name_) && RemovePrefix(arg, "=")) { float parsed_value; try { @@ -89,7 +89,7 @@ bool Option::ParseFloat(std::string *arg) { return false; } -Option::Option(const std::string &name, int32_t *default_point, const std::string &usage) +Option::Option(const std::string &name, int32_t *const default_point, const std::string &usage) : name_(name), type_(MS_TYPE_INT32), int32_default_(default_point), @@ -98,7 +98,7 @@ Option::Option(const std::string &name, int32_t *default_point, const std::strin float_default_(nullptr), usage_(usage) {} -Option::Option(const std::string &name, bool *default_point, const std::string &usage) +Option::Option(const std::string &name, bool *const default_point, const std::string &usage) : name_(name), type_(MS_TYPE_BOOL), int32_default_(nullptr), @@ -107,7 +107,7 @@ Option::Option(const std::string &name, bool *default_point, const std::string & float_default_(nullptr), usage_(usage) {} -Option::Option(const std::string &name, std::string *default_point, const std::string &usage) +Option::Option(const std::string &name, std::string *const default_point, const std::string &usage) : name_(name), type_(MS_TYPE_STRING), int32_default_(nullptr), @@ -116,7 +116,7 @@ Option::Option(const std::string &name, std::string *default_point, const std::s float_default_(nullptr), usage_(usage) {} -Option::Option(const std::string &name, float *default_point, const std::string &usage) +Option::Option(const std::string &name, float *const default_point, const std::string &usage) : name_(name), type_(MS_TYPE_FLOAT), int32_default_(nullptr), @@ -125,7 +125,7 @@ Option::Option(const std::string &name, float *default_point, const std::string float_default_(default_point), usage_(usage) {} -bool Option::Parse(std::string *arg) { +bool Option::Parse(std::string *const arg) { bool result = false; switch (type_) { case MS_TYPE_BOOL: diff --git a/serving/example/cpp_client/ms_client.cc b/serving/example/cpp_client/ms_client.cc index 8c82977008c..0154a2553c7 100644 --- a/serving/example/cpp_client/ms_client.cc +++ b/serving/example/cpp_client/ms_client.cc @@ -93,7 +93,7 @@ int main(int argc, char **argv) { size_t start_pos = arg_val.find(arg_target_str); if (start_pos != std::string::npos) { start_pos += arg_target_str.size(); - if (arg_val[start_pos] == '=') { + if (start_pos < arg_val.size() && arg_val[start_pos] == '=') { target_str = arg_val.substr(start_pos + 1); } else { std::cout << "The only correct argument syntax is --target=" << std::endl;