diff --git a/cpp/src/metrics/Metrics.cpp b/cpp/src/metrics/Metrics.cpp index 925bb4cd5c89de9a3c43ef7c185c7d4543f0d8c6..23fb0a15b867019629a6d82a16bf368a438688a5 100644 --- a/cpp/src/metrics/Metrics.cpp +++ b/cpp/src/metrics/Metrics.cpp @@ -3,36 +3,29 @@ * Unauthorized copying of this file, via any medium is strictly prohibited. * Proprietary and confidential. ******************************************************************************/ - - #include "Metrics.h" #include "PrometheusMetrics.h" + namespace zilliz { namespace milvus { namespace server { MetricsBase & -Metrics::CreateMetricsCollector(MetricCollectorType collector_type) { - switch (collector_type) { - case MetricCollectorType::PROMETHEUS: - static PrometheusMetrics instance = PrometheusMetrics::GetInstance(); - return instance; - default:return MetricsBase::GetInstance(); - } +Metrics::GetInstance() { + static MetricsBase &instance = CreateMetricsCollector(); + return instance; } MetricsBase & -Metrics::GetInstance() { +Metrics::CreateMetricsCollector() { ConfigNode &config = ServerConfig::GetInstance().GetConfig(CONFIG_METRIC); - std::string collector_typr_str = config.GetValue(CONFIG_METRIC_COLLECTOR); + std::string collector_type_str = config.GetValue(CONFIG_METRIC_COLLECTOR); - if (collector_typr_str == "prometheus") { - return CreateMetricsCollector(MetricCollectorType::PROMETHEUS); - } else if (collector_typr_str == "zabbix") { - return CreateMetricsCollector(MetricCollectorType::ZABBIX); + if (collector_type_str == "prometheus") { + return PrometheusMetrics::GetInstance(); } else { - return CreateMetricsCollector(MetricCollectorType::INVALID); + return MetricsBase::GetInstance(); } } diff --git a/cpp/src/metrics/Metrics.h b/cpp/src/metrics/Metrics.h index be796eb9c4518d845e23259c1b35ddf0884d9988..65df7140cc6d4e8259a8b61d92fd278a8cdfa62c 100644 --- a/cpp/src/metrics/Metrics.h +++ b/cpp/src/metrics/Metrics.h @@ -5,22 +5,14 @@ ******************************************************************************/ #pragma once -#include "utils/Error.h" -#include -#include - - -#pragma once - #include "MetricBase.h" -//#include "PrometheusMetrics.h" + namespace zilliz { namespace milvus { namespace server { #define METRICS_NOW_TIME std::chrono::system_clock::now() -//#define server::Metrics::GetInstance() server::Metrics::GetInstance() #define METRICS_MICROSECONDS(a, b) (std::chrono::duration_cast (b-a)).count(); enum class MetricCollectorType { @@ -31,15 +23,13 @@ enum class MetricCollectorType { class Metrics { public: - static MetricsBase & - CreateMetricsCollector(MetricCollectorType collector_type); + static MetricsBase &GetInstance(); - static MetricsBase & - GetInstance(); + private: + static MetricsBase &CreateMetricsCollector(); }; - } } } diff --git a/cpp/src/server/grpc_impl/GrpcRequestTask.cpp b/cpp/src/server/grpc_impl/GrpcRequestTask.cpp index e10d2ae07065dc2e81a356dafad3180ca3fd9476..7932c0b6523c547af5934d078d03d774997e2b70 100644 --- a/cpp/src/server/grpc_impl/GrpcRequestTask.cpp +++ b/cpp/src/server/grpc_impl/GrpcRequestTask.cpp @@ -448,20 +448,21 @@ InsertTask::OnExecute() { // TODO: change to one dimension array in protobuf or use multiple-thread to copy the data for (size_t i = 0; i < insert_param_.row_record_array_size(); i++) { - for (size_t j = 0; j < table_info.dimension_; j++) { - if (insert_param_.row_record_array(i).vector_data().empty()) { - return SetError(SERVER_INVALID_ROWRECORD_ARRAY, "Row record float array is empty"); - } - uint64_t vec_dim = insert_param_.row_record_array(i).vector_data().size(); - if (vec_dim != table_info.dimension_) { - ServerError error_code = SERVER_INVALID_VECTOR_DIMENSION; - std::string error_msg = "Invalid rowrecord dimension: " + std::to_string(vec_dim) - + " vs. table dimension:" + - std::to_string(table_info.dimension_); - return SetError(error_code, error_msg); - } - vec_f[i * table_info.dimension_ + j] = insert_param_.row_record_array(i).vector_data(j); + if (insert_param_.row_record_array(i).vector_data().empty()) { + return SetError(SERVER_INVALID_ROWRECORD_ARRAY, "Row record float array is empty"); + } + uint64_t vec_dim = insert_param_.row_record_array(i).vector_data().size(); + if (vec_dim != table_info.dimension_) { + ServerError error_code = SERVER_INVALID_VECTOR_DIMENSION; + std::string error_msg = "Invalid rowrecord dimension: " + std::to_string(vec_dim) + + " vs. table dimension:" + + std::to_string(table_info.dimension_); + return SetError(error_code, error_msg); } + + memcpy(&vec_f[i * table_info.dimension_], + insert_param_.row_record_array(i).vector_data().data(), + table_info.dimension_ * sizeof(float)); } rc.ElapseFromBegin("prepare vectors data"); @@ -473,8 +474,7 @@ InsertTask::OnExecute() { vec_ids[i] = insert_param_.row_id_array(i); } - stat = DBWrapper::DB()->InsertVectors(insert_param_.table_name(), vec_count, vec_f.data(), - vec_ids); + stat = DBWrapper::DB()->InsertVectors(insert_param_.table_name(), vec_count, vec_f.data(), vec_ids); rc.ElapseFromBegin("add vectors to engine"); if (!stat.ok()) { return SetError(SERVER_CACHE_ERROR, "Cache error: " + stat.ToString());