mirror of
https://gitee.com/milvus-io/milvus.git
synced 2025-12-08 10:08:42 +08:00
* #1122 support AVX-512 for IVFFLAT distance calculation Signed-off-by: yudong.cai <yudong.cai@zilliz.com> * #1122 support AVX-512 for IVFSQ8 Signed-off-by: yudong.cai <yudong.cai@zilliz.com> * #1122 fix avx512 build option Signed-off-by: yudong.cai <yudong.cai@zilliz.com> * #1122 remove global faiss compile option -march=skylake-avx512 Signed-off-by: yudong.cai <yudong.cai@zilliz.com> * #1122 add InstructionSet and unittest Signed-off-by: yudong.cai <yudong.cai@zilliz.com> * #1122 update InstructionSet unittest Signed-off-by: yudong.cai <yudong.cai@zilliz.com> * #1122 add FaissHook Signed-off-by: yudong.cai <yudong.cai@zilliz.com> * #1122 add distances_simd_avx512.cpp Signed-off-by: yudong.cai <yudong.cai@zilliz.com> * #1122 fix build issue Signed-off-by: yudong.cai <yudong.cai@zilliz.com> * #1122 add ScalarQuantizer_avx512.cpp and IndexScalarQuantizer_avx512.cpp Signed-off-by: yudong.cai <yudong.cai@zilliz.com> * #1122 fix build issue Signed-off-by: yudong.cai <yudong.cai@zilliz.com> * #1122 fix clang format Signed-off-by: yudong.cai <yudong.cai@zilliz.com> * #1122 move test_instructionset.cpp to index/unittest Signed-off-by: yudong.cai <yudong.cai@zilliz.com> * #1122 fix clang format Signed-off-by: yudong.cai <yudong.cai@zilliz.com> * #1122 set hook default to AVX Signed-off-by: yudong.cai <yudong.cai@zilliz.com> * #1122 add hidden config use_avx512 Signed-off-by: yudong.cai <yudong.cai@zilliz.com> * #1122 fix faiss clone issue Signed-off-by: yudong.cai <yudong.cai@zilliz.com> * #1122 fix faiss build issue Signed-off-by: yudong.cai <yudong.cai@zilliz.com> * #1122 fix faiss ScalarQuantizer_avx512 Signed-off-by: yudong.cai <yudong.cai@zilliz.com> * #1122 fix faiss ScalarQuantizer_avx512 Signed-off-by: yudong.cai <yudong.cai@zilliz.com> * #1122 clean code Signed-off-by: yudong.cai <yudong.cai@zilliz.com> * #1122 remove ScalarQuantizer_avx512 and IndexScalarQuantizer_avx512 Signed-off-by: yudong.cai <yudong.cai@zilliz.com> * #1122 change back index_factory.cpp/index_read.cpp/index_write.cpp Signed-off-by: yudong.cai <yudong.cai@zilliz.com> * #1122 split ScalarQuantizer to ScalarQuantizerCodec and Similarity Signed-off-by: yudong.cai <yudong.cai@zilliz.com> * #1122 #1122 split ScalarQuantizer to ScalarQuantizerCodec Signed-off-by: yudong.cai <yudong.cai@zilliz.com> * #1122 split ScalarQuantizerCodec.cpp to ScalarQuantizerOp.cpp Signed-off-by: yudong.cai <yudong.cai@zilliz.com> * #1122 ScalarQuantizer support avx512 Signed-off-by: yudong.cai <yudong.cai@zilliz.com> * #1122 add hook sse for ScalarQuantizer Signed-off-by: yudong.cai <yudong.cai@zilliz.com> * #1122 correct head file Signed-off-by: yudong.cai <yudong.cai@zilliz.com> * #1122 add changelog Signed-off-by: yudong.cai <yudong.cai@zilliz.com> * #1122 fix CodeFactor Signed-off-by: yudong.cai <yudong.cai@zilliz.com> * #1122 fix unittest Signed-off-by: yudong.cai <yudong.cai@zilliz.com>
1087 lines
43 KiB
C++
1087 lines
43 KiB
C++
// Copyright (C) 2019-2020 Zilliz. All rights reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
|
|
// with the License. You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software distributed under the License
|
|
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
|
// or implied. See the License for the specific language governing permissions and limitations under the License.
|
|
|
|
#include <limits>
|
|
|
|
#include <fiu-control.h>
|
|
#include <fiu-local.h>
|
|
#include <gtest/gtest-death-test.h>
|
|
#include <gtest/gtest.h>
|
|
#include <cmath>
|
|
|
|
#include "config/YamlConfigMgr.h"
|
|
#include "server/Config.h"
|
|
#include "server/utils.h"
|
|
#include "utils/CommonUtil.h"
|
|
#include "utils/StringHelpFunctions.h"
|
|
#include "utils/ValidationUtil.h"
|
|
|
|
|
|
namespace {
|
|
|
|
static constexpr uint64_t KB = 1024;
|
|
static constexpr uint64_t MB = KB * 1024;
|
|
static constexpr uint64_t GB = MB * 1024;
|
|
|
|
} // namespace
|
|
|
|
namespace ms = milvus::server;
|
|
|
|
TEST_F(ConfigTest, CONFIG_TEST) {
|
|
milvus::server::ConfigMgr* config_mgr = milvus::server::YamlConfigMgr::GetInstance();
|
|
|
|
milvus::Status s = config_mgr->LoadConfigFile("");
|
|
ASSERT_FALSE(s.ok());
|
|
|
|
std::string config_path(CONFIG_PATH);
|
|
s = config_mgr->LoadConfigFile(config_path + INVALID_CONFIG_FILE);
|
|
ASSERT_FALSE(s.ok());
|
|
|
|
s = config_mgr->LoadConfigFile(config_path + VALID_CONFIG_FILE);
|
|
ASSERT_TRUE(s.ok());
|
|
|
|
config_mgr->Print();
|
|
config_mgr->DumpString();
|
|
|
|
milvus::server::ConfigNode& root_config = config_mgr->GetRootNode();
|
|
milvus::server::ConfigNode& server_config = root_config.GetChild("server_config");
|
|
milvus::server::ConfigNode& db_config = root_config.GetChild("db_config");
|
|
milvus::server::ConfigNode& metric_config = root_config.GetChild("metric_config");
|
|
milvus::server::ConfigNode& cache_config = root_config.GetChild("cache_config");
|
|
milvus::server::ConfigNode invalid_config = root_config.GetChild("invalid_config");
|
|
|
|
const auto& im_config_mgr = *static_cast<milvus::server::YamlConfigMgr*>(config_mgr);
|
|
const milvus::server::ConfigNode& im_root_config = im_config_mgr.GetRootNode();
|
|
const milvus::server::ConfigNode& im_invalid_config = im_root_config.GetChild("invalid_config");
|
|
const milvus::server::ConfigNode& im_not_exit_config = im_root_config.GetChild("not_exit_config");
|
|
ASSERT_EQ(im_not_exit_config.GetConfig().size(), 0);
|
|
ASSERT_EQ(im_root_config.DumpString(), root_config.DumpString());
|
|
ASSERT_EQ(im_invalid_config.DumpString(), invalid_config.DumpString());
|
|
|
|
auto valus = invalid_config.GetSequence("not_exist");
|
|
float ff = invalid_config.GetFloatValue("not_exist", 3.0);
|
|
ASSERT_EQ(ff, 3.0);
|
|
double not_exit_double = server_config.GetDoubleValue("not_exit", 3.0);
|
|
ASSERT_EQ(not_exit_double, 3.0);
|
|
int64_t not_exit_int64 = server_config.GetInt64Value("not_exit", 3);
|
|
ASSERT_EQ(not_exit_int64, 3);
|
|
int64_t not_exit_int32 = server_config.GetInt32Value("not_exit", 3);
|
|
ASSERT_EQ(not_exit_int32, 3);
|
|
bool not_exit_bool = server_config.GetBoolValue("not_exit", false);
|
|
ASSERT_FALSE(not_exit_bool);
|
|
|
|
std::string address = server_config.GetValue("address");
|
|
ASSERT_TRUE(!address.empty());
|
|
int64_t port = server_config.GetInt64Value("port");
|
|
ASSERT_NE(port, 0);
|
|
|
|
server_config.SetValue("float_test", "2.5");
|
|
double dbl = server_config.GetDoubleValue("float_test");
|
|
ASSERT_LE(std::fabs(dbl - 2.5), std::numeric_limits<double>::epsilon());
|
|
float flt = server_config.GetFloatValue("float_test");
|
|
ASSERT_LE(std::fabs(flt - 2.5), std::numeric_limits<float>::epsilon());
|
|
|
|
server_config.SetValue("bool_test", "true");
|
|
bool blt = server_config.GetBoolValue("bool_test");
|
|
ASSERT_TRUE(blt);
|
|
|
|
server_config.SetValue("int_test", "34");
|
|
int32_t it32 = server_config.GetInt32Value("int_test");
|
|
ASSERT_EQ(it32, 34);
|
|
int64_t it64 = server_config.GetInt64Value("int_test");
|
|
ASSERT_EQ(it64, 34);
|
|
|
|
milvus::server::ConfigNode fake;
|
|
server_config.AddChild("fake", fake);
|
|
fake = server_config.GetChild("fake");
|
|
milvus::server::ConfigNodeArr arr;
|
|
server_config.GetChildren(arr);
|
|
ASSERT_EQ(arr.size(), 1UL);
|
|
|
|
server_config.ClearChildren();
|
|
auto children = server_config.GetChildren();
|
|
ASSERT_TRUE(children.empty());
|
|
|
|
server_config.ClearConfig();
|
|
auto configs = server_config.GetConfig();
|
|
ASSERT_TRUE(configs.empty());
|
|
|
|
server_config.AddSequenceItem("seq", "aaa");
|
|
server_config.AddSequenceItem("seq", "bbb");
|
|
auto seq = server_config.GetSequence("seq");
|
|
ASSERT_EQ(seq.size(), 2UL);
|
|
|
|
server_config.SetValue("fake", "fake");
|
|
server_config.AddChild("fake", fake);
|
|
milvus::server::ConfigNode combine;
|
|
combine.Combine(server_config);
|
|
|
|
combine.PrintAll();
|
|
std::string all = combine.DumpString();
|
|
ASSERT_TRUE(!all.empty());
|
|
|
|
server_config.ClearSequences();
|
|
auto seqs = server_config.GetSequences();
|
|
ASSERT_TRUE(seqs.empty());
|
|
}
|
|
|
|
TEST_F(ConfigTest, SERVER_CONFIG_VALID_TEST) {
|
|
std::string config_path(CONFIG_PATH);
|
|
milvus::server::Config& config = milvus::server::Config::GetInstance();
|
|
std::string str_val;
|
|
int64_t int64_val;
|
|
float float_val;
|
|
bool bool_val;
|
|
|
|
/* server config */
|
|
std::string server_addr = "192.168.1.155";
|
|
ASSERT_TRUE(config.SetServerConfigAddress(server_addr).ok());
|
|
ASSERT_TRUE(config.GetServerConfigAddress(str_val).ok());
|
|
ASSERT_TRUE(str_val == server_addr);
|
|
|
|
std::string server_port = "12345";
|
|
ASSERT_TRUE(config.SetServerConfigPort(server_port).ok());
|
|
ASSERT_TRUE(config.GetServerConfigPort(str_val).ok());
|
|
ASSERT_TRUE(str_val == server_port);
|
|
|
|
std::string web_port = "19999";
|
|
ASSERT_TRUE(config.SetServerConfigWebPort(web_port).ok());
|
|
ASSERT_TRUE(config.GetServerConfigWebPort(str_val).ok());
|
|
ASSERT_TRUE(str_val == web_port);
|
|
|
|
std::string server_mode = "cluster_readonly";
|
|
ASSERT_TRUE(config.SetServerConfigDeployMode(server_mode).ok());
|
|
ASSERT_TRUE(config.GetServerConfigDeployMode(str_val).ok());
|
|
ASSERT_TRUE(str_val == server_mode);
|
|
|
|
std::string server_time_zone = "UTC+6";
|
|
ASSERT_TRUE(config.SetServerConfigTimeZone(server_time_zone).ok());
|
|
ASSERT_TRUE(config.GetServerConfigTimeZone(str_val).ok());
|
|
ASSERT_TRUE(str_val == server_time_zone);
|
|
|
|
/* db config */
|
|
std::string db_backend_url = "mysql://root:123456@127.0.0.1:19530/milvus";
|
|
ASSERT_TRUE(config.SetDBConfigBackendUrl(db_backend_url).ok());
|
|
ASSERT_TRUE(config.GetDBConfigBackendUrl(str_val).ok());
|
|
ASSERT_TRUE(str_val == db_backend_url);
|
|
|
|
int64_t db_archive_disk_threshold = 100;
|
|
ASSERT_TRUE(config.SetDBConfigArchiveDiskThreshold(std::to_string(db_archive_disk_threshold)).ok());
|
|
ASSERT_TRUE(config.GetDBConfigArchiveDiskThreshold(int64_val).ok());
|
|
ASSERT_TRUE(int64_val == db_archive_disk_threshold);
|
|
|
|
int64_t db_archive_days_threshold = 365;
|
|
ASSERT_TRUE(config.SetDBConfigArchiveDaysThreshold(std::to_string(db_archive_days_threshold)).ok());
|
|
ASSERT_TRUE(config.GetDBConfigArchiveDaysThreshold(int64_val).ok());
|
|
ASSERT_TRUE(int64_val == db_archive_days_threshold);
|
|
|
|
/* storage config */
|
|
std::string storage_primary_path = "/home/zilliz";
|
|
ASSERT_TRUE(config.SetStorageConfigPrimaryPath(storage_primary_path).ok());
|
|
ASSERT_TRUE(config.GetStorageConfigPrimaryPath(str_val).ok());
|
|
ASSERT_TRUE(str_val == storage_primary_path);
|
|
|
|
std::string storage_secondary_path = "/home/zilliz";
|
|
ASSERT_TRUE(config.SetStorageConfigSecondaryPath(storage_secondary_path).ok());
|
|
ASSERT_TRUE(config.GetStorageConfigSecondaryPath(str_val).ok());
|
|
ASSERT_TRUE(str_val == storage_secondary_path);
|
|
|
|
bool storage_s3_enable = true;
|
|
ASSERT_TRUE(config.SetStorageConfigS3Enable(std::to_string(storage_s3_enable)).ok());
|
|
ASSERT_TRUE(config.GetStorageConfigS3Enable(bool_val).ok());
|
|
ASSERT_TRUE(bool_val == storage_s3_enable);
|
|
|
|
std::string storage_s3_addr = "192.168.1.100";
|
|
ASSERT_TRUE(config.SetStorageConfigS3Address(storage_s3_addr).ok());
|
|
ASSERT_TRUE(config.GetStorageConfigS3Address(str_val).ok());
|
|
ASSERT_TRUE(str_val == storage_s3_addr);
|
|
|
|
std::string storage_s3_port = "12345";
|
|
ASSERT_TRUE(config.SetStorageConfigS3Port(storage_s3_port).ok());
|
|
ASSERT_TRUE(config.GetStorageConfigS3Port(str_val).ok());
|
|
ASSERT_TRUE(str_val == storage_s3_port);
|
|
|
|
std::string storage_s3_access_key = "minioadmin";
|
|
ASSERT_TRUE(config.SetStorageConfigS3AccessKey(storage_s3_access_key).ok());
|
|
ASSERT_TRUE(config.GetStorageConfigS3AccessKey(str_val).ok());
|
|
ASSERT_TRUE(str_val == storage_s3_access_key);
|
|
|
|
std::string storage_s3_secret_key = "minioadmin";
|
|
ASSERT_TRUE(config.SetStorageConfigS3SecretKey(storage_s3_secret_key).ok());
|
|
ASSERT_TRUE(config.GetStorageConfigS3SecretKey(str_val).ok());
|
|
ASSERT_TRUE(str_val == storage_s3_secret_key);
|
|
|
|
std::string storage_s3_bucket = "s3bucket";
|
|
ASSERT_TRUE(config.SetStorageConfigS3Bucket(storage_s3_bucket).ok());
|
|
ASSERT_TRUE(config.GetStorageConfigS3Bucket(str_val).ok());
|
|
ASSERT_TRUE(str_val == storage_s3_bucket);
|
|
|
|
/* metric config */
|
|
bool metric_enable_monitor = false;
|
|
ASSERT_TRUE(config.SetMetricConfigEnableMonitor(std::to_string(metric_enable_monitor)).ok());
|
|
ASSERT_TRUE(config.GetMetricConfigEnableMonitor(bool_val).ok());
|
|
ASSERT_TRUE(bool_val == metric_enable_monitor);
|
|
|
|
std::string metric_address = "192.168.0.2";
|
|
ASSERT_TRUE(config.SetMetricConfigAddress(metric_address).ok());
|
|
ASSERT_TRUE(config.GetMetricConfigAddress(str_val).ok());
|
|
ASSERT_TRUE(str_val == metric_address);
|
|
|
|
std::string metric_port = "2222";
|
|
ASSERT_TRUE(config.SetMetricConfigPort(metric_port).ok());
|
|
ASSERT_TRUE(config.GetMetricConfigPort(str_val).ok());
|
|
ASSERT_TRUE(str_val == metric_port);
|
|
|
|
/* cache config */
|
|
int64_t cache_cpu_cache_capacity = 1;
|
|
ASSERT_TRUE(config.SetCacheConfigCpuCacheCapacity(std::to_string(cache_cpu_cache_capacity)).ok());
|
|
ASSERT_TRUE(config.GetCacheConfigCpuCacheCapacity(int64_val).ok());
|
|
ASSERT_TRUE(int64_val == cache_cpu_cache_capacity);
|
|
|
|
float cache_cpu_cache_threshold = 0.1;
|
|
ASSERT_TRUE(config.SetCacheConfigCpuCacheThreshold(std::to_string(cache_cpu_cache_threshold)).ok());
|
|
ASSERT_TRUE(config.GetCacheConfigCpuCacheThreshold(float_val).ok());
|
|
ASSERT_TRUE(float_val == cache_cpu_cache_threshold);
|
|
|
|
int64_t cache_insert_buffer_size = 2;
|
|
ASSERT_TRUE(config.SetCacheConfigInsertBufferSize(std::to_string(cache_insert_buffer_size)).ok());
|
|
ASSERT_TRUE(config.GetCacheConfigInsertBufferSize(int64_val).ok());
|
|
ASSERT_TRUE(int64_val == cache_insert_buffer_size);
|
|
|
|
bool cache_insert_data = true;
|
|
ASSERT_TRUE(config.SetCacheConfigCacheInsertData(std::to_string(cache_insert_data)).ok());
|
|
ASSERT_TRUE(config.GetCacheConfigCacheInsertData(bool_val).ok());
|
|
ASSERT_TRUE(bool_val == cache_insert_data);
|
|
|
|
/* engine config */
|
|
int64_t engine_use_blas_threshold = 50;
|
|
ASSERT_TRUE(config.SetEngineConfigUseBlasThreshold(std::to_string(engine_use_blas_threshold)).ok());
|
|
ASSERT_TRUE(config.GetEngineConfigUseBlasThreshold(int64_val).ok());
|
|
ASSERT_TRUE(int64_val == engine_use_blas_threshold);
|
|
|
|
int64_t engine_omp_thread_num = 1;
|
|
ASSERT_TRUE(config.SetEngineConfigOmpThreadNum(std::to_string(engine_omp_thread_num)).ok());
|
|
ASSERT_TRUE(config.GetEngineConfigOmpThreadNum(int64_val).ok());
|
|
ASSERT_TRUE(int64_val == engine_omp_thread_num);
|
|
|
|
bool engine_use_avx512 = false;
|
|
ASSERT_TRUE(config.SetEngineConfigUseAVX512(std::to_string(engine_use_avx512)).ok());
|
|
ASSERT_TRUE(config.GetEngineConfigUseAVX512(bool_val).ok());
|
|
ASSERT_TRUE(bool_val == engine_use_avx512);
|
|
|
|
#ifdef MILVUS_GPU_VERSION
|
|
int64_t engine_gpu_search_threshold = 800;
|
|
ASSERT_TRUE(config.SetEngineConfigGpuSearchThreshold(std::to_string(engine_gpu_search_threshold)).ok());
|
|
ASSERT_TRUE(config.GetEngineConfigGpuSearchThreshold(int64_val).ok());
|
|
ASSERT_TRUE(int64_val == engine_gpu_search_threshold);
|
|
#endif
|
|
|
|
/* gpu resource config */
|
|
#ifdef MILVUS_GPU_VERSION
|
|
bool resource_enable_gpu = true;
|
|
ASSERT_TRUE(config.SetGpuResourceConfigEnable(std::to_string(resource_enable_gpu)).ok());
|
|
ASSERT_TRUE(config.GetGpuResourceConfigEnable(bool_val).ok());
|
|
ASSERT_TRUE(bool_val == resource_enable_gpu);
|
|
|
|
int64_t gpu_cache_capacity = 1;
|
|
ASSERT_TRUE(config.SetGpuResourceConfigCacheCapacity(std::to_string(gpu_cache_capacity)).ok());
|
|
ASSERT_TRUE(config.GetGpuResourceConfigCacheCapacity(int64_val).ok());
|
|
ASSERT_TRUE(int64_val == gpu_cache_capacity);
|
|
|
|
float gpu_cache_threshold = 0.2;
|
|
ASSERT_TRUE(config.SetGpuResourceConfigCacheThreshold(std::to_string(gpu_cache_threshold)).ok());
|
|
ASSERT_TRUE(config.GetGpuResourceConfigCacheThreshold(float_val).ok());
|
|
ASSERT_TRUE(float_val == gpu_cache_threshold);
|
|
|
|
std::vector<std::string> search_resources = {"gpu0"};
|
|
std::vector<int64_t> search_res_vec;
|
|
std::string search_res_str;
|
|
milvus::server::StringHelpFunctions::MergeStringWithDelimeter(
|
|
search_resources, milvus::server::CONFIG_GPU_RESOURCE_DELIMITER, search_res_str);
|
|
ASSERT_TRUE(config.SetGpuResourceConfigSearchResources(search_res_str).ok());
|
|
ASSERT_TRUE(config.GetGpuResourceConfigSearchResources(search_res_vec).ok());
|
|
for (size_t i = 0; i < search_resources.size(); i++) {
|
|
ASSERT_TRUE(std::stoll(search_resources[i].substr(3)) == search_res_vec[i]);
|
|
}
|
|
|
|
std::vector<std::string> build_index_resources = {"gpu0"};
|
|
std::vector<int64_t> build_index_res_vec;
|
|
std::string build_index_res_str;
|
|
milvus::server::StringHelpFunctions::MergeStringWithDelimeter(
|
|
build_index_resources, milvus::server::CONFIG_GPU_RESOURCE_DELIMITER, build_index_res_str);
|
|
ASSERT_TRUE(config.SetGpuResourceConfigBuildIndexResources(build_index_res_str).ok());
|
|
ASSERT_TRUE(config.GetGpuResourceConfigBuildIndexResources(build_index_res_vec).ok());
|
|
for (size_t i = 0; i < build_index_resources.size(); i++) {
|
|
ASSERT_TRUE(std::stoll(build_index_resources[i].substr(3)) == build_index_res_vec[i]);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
std::string
|
|
gen_get_command(const std::string& parent_node, const std::string& child_node) {
|
|
std::string cmd = "get_config " + parent_node + ms::CONFIG_NODE_DELIMITER + child_node;
|
|
return cmd;
|
|
}
|
|
|
|
std::string
|
|
gen_set_command(const std::string& parent_node, const std::string& child_node, const std::string& value) {
|
|
std::string cmd = "set_config " + parent_node + ms::CONFIG_NODE_DELIMITER + child_node + " " + value;
|
|
return cmd;
|
|
}
|
|
|
|
TEST_F(ConfigTest, SERVER_CONFIG_CLI_TEST) {
|
|
std::string config_path(CONFIG_PATH);
|
|
milvus::Status s;
|
|
|
|
std::string conf_file = std::string(CONFIG_PATH) + VALID_CONFIG_FILE;
|
|
milvus::server::Config& config = milvus::server::Config::GetInstance();
|
|
|
|
auto status = config.LoadConfigFile(conf_file);
|
|
ASSERT_TRUE(status.ok()) << status.message();
|
|
|
|
std::string get_cmd, set_cmd;
|
|
std::string result, dummy;
|
|
|
|
s = config.ProcessConfigCli(result, "get_config *");
|
|
ASSERT_TRUE(s.ok());
|
|
|
|
/* server config */
|
|
std::string server_addr = "192.168.1.155";
|
|
get_cmd = gen_get_command(ms::CONFIG_SERVER, ms::CONFIG_SERVER_ADDRESS);
|
|
set_cmd = gen_set_command(ms::CONFIG_SERVER, ms::CONFIG_SERVER_ADDRESS, server_addr);
|
|
s = config.ProcessConfigCli(dummy, set_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
s = config.ProcessConfigCli(result, get_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
|
|
/* db config */
|
|
std::string db_backend_url = "sqlite://milvus:zilliz@:/";
|
|
get_cmd = gen_get_command(ms::CONFIG_DB, ms::CONFIG_DB_BACKEND_URL);
|
|
set_cmd = gen_set_command(ms::CONFIG_DB, ms::CONFIG_DB_BACKEND_URL, db_backend_url);
|
|
s = config.ProcessConfigCli(dummy, set_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
s = config.ProcessConfigCli(result, get_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
|
|
/* metric config */
|
|
std::string metric_enable_monitor = "false";
|
|
get_cmd = gen_get_command(ms::CONFIG_METRIC, ms::CONFIG_METRIC_ENABLE_MONITOR);
|
|
set_cmd = gen_set_command(ms::CONFIG_METRIC, ms::CONFIG_METRIC_ENABLE_MONITOR, metric_enable_monitor);
|
|
s = config.ProcessConfigCli(dummy, set_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
s = config.ProcessConfigCli(result, get_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
|
|
/* storage config */
|
|
std::string storage_s3_enable = "true";
|
|
get_cmd = gen_get_command(ms::CONFIG_STORAGE, ms::CONFIG_STORAGE_S3_ENABLE);
|
|
set_cmd = gen_set_command(ms::CONFIG_STORAGE, ms::CONFIG_STORAGE_S3_ENABLE, storage_s3_enable);
|
|
s = config.ProcessConfigCli(dummy, set_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
s = config.ProcessConfigCli(result, get_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
|
|
/* cache config */
|
|
std::string cache_cpu_cache_capacity = "1";
|
|
get_cmd = gen_get_command(ms::CONFIG_CACHE, ms::CONFIG_CACHE_CPU_CACHE_CAPACITY);
|
|
set_cmd = gen_set_command(ms::CONFIG_CACHE, ms::CONFIG_CACHE_CPU_CACHE_CAPACITY, cache_cpu_cache_capacity);
|
|
s = config.ProcessConfigCli(dummy, set_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
s = config.ProcessConfigCli(result, get_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
ASSERT_TRUE(result == cache_cpu_cache_capacity);
|
|
|
|
std::string cache_cpu_cache_threshold = "0.1";
|
|
get_cmd = gen_get_command(ms::CONFIG_CACHE, ms::CONFIG_CACHE_CPU_CACHE_THRESHOLD);
|
|
set_cmd = gen_set_command(ms::CONFIG_CACHE, ms::CONFIG_CACHE_CPU_CACHE_THRESHOLD, cache_cpu_cache_threshold);
|
|
s = config.ProcessConfigCli(dummy, set_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
s = config.ProcessConfigCli(result, get_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
ASSERT_TRUE(result == cache_cpu_cache_threshold);
|
|
|
|
std::string cache_insert_buffer_size = "1";
|
|
get_cmd = gen_get_command(ms::CONFIG_CACHE, ms::CONFIG_CACHE_INSERT_BUFFER_SIZE);
|
|
set_cmd = gen_set_command(ms::CONFIG_CACHE, ms::CONFIG_CACHE_INSERT_BUFFER_SIZE, cache_insert_buffer_size);
|
|
s = config.ProcessConfigCli(dummy, set_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
s = config.ProcessConfigCli(result, get_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
ASSERT_TRUE(result == cache_insert_buffer_size);
|
|
|
|
std::string cache_insert_data = "true";
|
|
get_cmd = gen_get_command(ms::CONFIG_CACHE, ms::CONFIG_CACHE_CACHE_INSERT_DATA);
|
|
set_cmd = gen_set_command(ms::CONFIG_CACHE, ms::CONFIG_CACHE_CACHE_INSERT_DATA, cache_insert_data);
|
|
s = config.ProcessConfigCli(dummy, set_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
s = config.ProcessConfigCli(result, get_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
ASSERT_TRUE(result == cache_insert_data);
|
|
|
|
/* engine config */
|
|
std::string engine_use_blas_threshold = "50";
|
|
get_cmd = gen_get_command(ms::CONFIG_ENGINE, ms::CONFIG_ENGINE_USE_BLAS_THRESHOLD);
|
|
set_cmd = gen_set_command(ms::CONFIG_ENGINE, ms::CONFIG_ENGINE_USE_BLAS_THRESHOLD, engine_use_blas_threshold);
|
|
s = config.ProcessConfigCli(dummy, set_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
s = config.ProcessConfigCli(result, get_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
ASSERT_TRUE(result == engine_use_blas_threshold);
|
|
|
|
std::string engine_omp_thread_num = "1";
|
|
get_cmd = gen_get_command(ms::CONFIG_ENGINE, ms::CONFIG_ENGINE_OMP_THREAD_NUM);
|
|
set_cmd = gen_set_command(ms::CONFIG_ENGINE, ms::CONFIG_ENGINE_OMP_THREAD_NUM, engine_omp_thread_num);
|
|
s = config.ProcessConfigCli(dummy, set_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
s = config.ProcessConfigCli(result, get_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
ASSERT_TRUE(result == engine_omp_thread_num);
|
|
|
|
std::string engine_use_avx512 = "true";
|
|
get_cmd = gen_get_command(ms::CONFIG_ENGINE, ms::CONFIG_ENGINE_USE_AVX512);
|
|
set_cmd = gen_set_command(ms::CONFIG_ENGINE, ms::CONFIG_ENGINE_USE_AVX512, engine_use_avx512);
|
|
s = config.ProcessConfigCli(dummy, set_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
s = config.ProcessConfigCli(result, get_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
ASSERT_TRUE(result == engine_use_avx512);
|
|
|
|
#ifdef MILVUS_GPU_VERSION
|
|
std::string engine_gpu_search_threshold = "800";
|
|
get_cmd = gen_get_command(ms::CONFIG_ENGINE, ms::CONFIG_ENGINE_GPU_SEARCH_THRESHOLD);
|
|
set_cmd = gen_set_command(ms::CONFIG_ENGINE, ms::CONFIG_ENGINE_GPU_SEARCH_THRESHOLD, engine_gpu_search_threshold);
|
|
s = config.ProcessConfigCli(dummy, set_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
s = config.ProcessConfigCli(result, get_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
ASSERT_TRUE(result == engine_gpu_search_threshold);
|
|
#endif
|
|
|
|
/* gpu resource config */
|
|
#ifdef MILVUS_GPU_VERSION
|
|
std::string resource_enable_gpu = "true";
|
|
get_cmd = gen_get_command(ms::CONFIG_GPU_RESOURCE, ms::CONFIG_GPU_RESOURCE_ENABLE);
|
|
set_cmd = gen_set_command(ms::CONFIG_GPU_RESOURCE, ms::CONFIG_GPU_RESOURCE_ENABLE, resource_enable_gpu);
|
|
s = config.ProcessConfigCli(dummy, set_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
s = config.ProcessConfigCli(result, get_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
ASSERT_TRUE(result == resource_enable_gpu);
|
|
|
|
std::string gpu_cache_capacity = "1";
|
|
get_cmd = gen_get_command(ms::CONFIG_GPU_RESOURCE, ms::CONFIG_GPU_RESOURCE_CACHE_CAPACITY);
|
|
set_cmd = gen_set_command(ms::CONFIG_GPU_RESOURCE, ms::CONFIG_GPU_RESOURCE_CACHE_CAPACITY, gpu_cache_capacity);
|
|
s = config.ProcessConfigCli(dummy, set_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
s = config.ProcessConfigCli(result, get_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
ASSERT_TRUE(result == gpu_cache_capacity);
|
|
|
|
std::string gpu_cache_threshold = "0.2";
|
|
get_cmd = gen_get_command(ms::CONFIG_GPU_RESOURCE, ms::CONFIG_GPU_RESOURCE_CACHE_THRESHOLD);
|
|
set_cmd = gen_set_command(ms::CONFIG_GPU_RESOURCE, ms::CONFIG_GPU_RESOURCE_CACHE_THRESHOLD, gpu_cache_threshold);
|
|
s = config.ProcessConfigCli(dummy, set_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
s = config.ProcessConfigCli(result, get_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
ASSERT_TRUE(result == gpu_cache_threshold);
|
|
|
|
std::string search_resources = "gpu0";
|
|
get_cmd = gen_get_command(ms::CONFIG_GPU_RESOURCE, ms::CONFIG_GPU_RESOURCE_SEARCH_RESOURCES);
|
|
set_cmd = gen_set_command(ms::CONFIG_GPU_RESOURCE, ms::CONFIG_GPU_RESOURCE_SEARCH_RESOURCES, search_resources);
|
|
s = config.ProcessConfigCli(dummy, set_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
s = config.ProcessConfigCli(result, get_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
ASSERT_TRUE(result == search_resources);
|
|
|
|
std::string build_index_resources = "gpu0";
|
|
get_cmd = gen_get_command(ms::CONFIG_GPU_RESOURCE, ms::CONFIG_GPU_RESOURCE_BUILD_INDEX_RESOURCES);
|
|
set_cmd =
|
|
gen_set_command(ms::CONFIG_GPU_RESOURCE, ms::CONFIG_GPU_RESOURCE_BUILD_INDEX_RESOURCES, build_index_resources);
|
|
s = config.ProcessConfigCli(dummy, set_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
s = config.ProcessConfigCli(result, get_cmd);
|
|
ASSERT_TRUE(s.ok());
|
|
ASSERT_TRUE(result == build_index_resources);
|
|
#endif
|
|
}
|
|
|
|
TEST_F(ConfigTest, SERVER_CONFIG_INVALID_TEST) {
|
|
std::string config_path(CONFIG_PATH);
|
|
milvus::server::Config& config = milvus::server::Config::GetInstance();
|
|
milvus::Status s;
|
|
|
|
ASSERT_FALSE(config.LoadConfigFile("").ok());
|
|
|
|
ASSERT_FALSE(config.LoadConfigFile(config_path + INVALID_CONFIG_FILE).ok());
|
|
ASSERT_FALSE(config.LoadConfigFile(config_path + "dummy.yaml").ok());
|
|
|
|
/* server config */
|
|
ASSERT_FALSE(config.SetServerConfigAddress("0.0.0").ok());
|
|
ASSERT_FALSE(config.SetServerConfigAddress("0.0.0.256").ok());
|
|
|
|
ASSERT_FALSE(config.SetServerConfigPort("a").ok());
|
|
ASSERT_FALSE(config.SetServerConfigPort("99999").ok());
|
|
|
|
ASSERT_FALSE(config.SetServerConfigWebPort("a").ok());
|
|
ASSERT_FALSE(config.SetServerConfigWebPort("99999").ok());
|
|
ASSERT_FALSE(config.SetServerConfigWebPort("-1").ok());
|
|
|
|
ASSERT_FALSE(config.SetServerConfigDeployMode("cluster").ok());
|
|
|
|
ASSERT_FALSE(config.SetServerConfigTimeZone("GM").ok());
|
|
ASSERT_FALSE(config.SetServerConfigTimeZone("GMT8").ok());
|
|
ASSERT_FALSE(config.SetServerConfigTimeZone("UTCA").ok());
|
|
|
|
/* db config */
|
|
ASSERT_FALSE(config.SetDBConfigBackendUrl("http://www.google.com").ok());
|
|
ASSERT_FALSE(config.SetDBConfigBackendUrl("sqlite://:@:").ok());
|
|
ASSERT_FALSE(config.SetDBConfigBackendUrl("mysql://root:123456@127.0.0.1/milvus").ok());
|
|
|
|
ASSERT_FALSE(config.SetDBConfigArchiveDiskThreshold("0x10").ok());
|
|
|
|
ASSERT_FALSE(config.SetDBConfigArchiveDaysThreshold("0x10").ok());
|
|
|
|
/* storage config */
|
|
ASSERT_FALSE(config.SetStorageConfigPrimaryPath("").ok());
|
|
|
|
// ASSERT_FALSE(config.SetStorageConfigSecondaryPath("").ok());
|
|
|
|
ASSERT_FALSE(config.SetStorageConfigS3Enable("10").ok());
|
|
|
|
ASSERT_FALSE(config.SetStorageConfigS3Address("127.0.0").ok());
|
|
|
|
ASSERT_FALSE(config.SetStorageConfigS3Port("100").ok());
|
|
ASSERT_FALSE(config.SetStorageConfigS3Port("100000").ok());
|
|
|
|
ASSERT_FALSE(config.SetStorageConfigS3AccessKey("").ok());
|
|
|
|
ASSERT_FALSE(config.SetStorageConfigS3SecretKey("").ok());
|
|
|
|
ASSERT_FALSE(config.SetStorageConfigS3Bucket("").ok());
|
|
|
|
/* metric config */
|
|
ASSERT_FALSE(config.SetMetricConfigEnableMonitor("Y").ok());
|
|
|
|
ASSERT_FALSE(config.SetMetricConfigAddress("127.0.0").ok());
|
|
|
|
ASSERT_FALSE(config.SetMetricConfigPort("0xff").ok());
|
|
|
|
/* cache config */
|
|
ASSERT_FALSE(config.SetCacheConfigCpuCacheCapacity("a").ok());
|
|
ASSERT_FALSE(config.SetCacheConfigCpuCacheCapacity("0").ok());
|
|
ASSERT_FALSE(config.SetCacheConfigCpuCacheCapacity("2048").ok());
|
|
ASSERT_FALSE(config.SetCacheConfigCpuCacheCapacity("-1").ok());
|
|
|
|
ASSERT_FALSE(config.SetCacheConfigCpuCacheThreshold("a").ok());
|
|
ASSERT_FALSE(config.SetCacheConfigCpuCacheThreshold("1.0").ok());
|
|
ASSERT_FALSE(config.SetCacheConfigCpuCacheThreshold("-0.1").ok());
|
|
|
|
ASSERT_FALSE(config.SetCacheConfigInsertBufferSize("a").ok());
|
|
ASSERT_FALSE(config.SetCacheConfigInsertBufferSize("0").ok());
|
|
ASSERT_FALSE(config.SetCacheConfigInsertBufferSize("2048").ok());
|
|
ASSERT_FALSE(config.SetCacheConfigInsertBufferSize("-1").ok());
|
|
|
|
ASSERT_FALSE(config.SetCacheConfigCacheInsertData("N").ok());
|
|
|
|
/* engine config */
|
|
ASSERT_FALSE(config.SetEngineConfigUseBlasThreshold("0xff").ok());
|
|
|
|
ASSERT_FALSE(config.SetEngineConfigOmpThreadNum("a").ok());
|
|
ASSERT_FALSE(config.SetEngineConfigOmpThreadNum("10000").ok());
|
|
ASSERT_FALSE(config.SetEngineConfigOmpThreadNum("-10").ok());
|
|
|
|
ASSERT_FALSE(config.SetEngineConfigUseAVX512("N").ok());
|
|
|
|
#ifdef MILVUS_GPU_VERSION
|
|
ASSERT_FALSE(config.SetEngineConfigGpuSearchThreshold("-1").ok());
|
|
#endif
|
|
|
|
/* gpu resource config */
|
|
#ifdef MILVUS_GPU_VERSION
|
|
ASSERT_FALSE(config.SetGpuResourceConfigEnable("ok").ok());
|
|
|
|
ASSERT_FALSE(config.SetGpuResourceConfigCacheCapacity("a").ok());
|
|
ASSERT_FALSE(config.SetGpuResourceConfigCacheCapacity("128").ok());
|
|
ASSERT_FALSE(config.SetGpuResourceConfigCacheCapacity("-1").ok());
|
|
|
|
ASSERT_FALSE(config.SetGpuResourceConfigCacheThreshold("a").ok());
|
|
ASSERT_FALSE(config.SetGpuResourceConfigCacheThreshold("1.0").ok());
|
|
ASSERT_FALSE(config.SetGpuResourceConfigCacheThreshold("-0.1").ok());
|
|
|
|
ASSERT_FALSE(config.SetGpuResourceConfigSearchResources("gpu10").ok());
|
|
ASSERT_FALSE(config.SetGpuResourceConfigSearchResources("gpu0, gpu0").ok());
|
|
|
|
ASSERT_FALSE(config.SetGpuResourceConfigBuildIndexResources("gup2").ok());
|
|
ASSERT_FALSE(config.SetGpuResourceConfigBuildIndexResources("gpu16").ok());
|
|
ASSERT_FALSE(config.SetGpuResourceConfigBuildIndexResources("gpu0, gpu0, gpu1").ok());
|
|
#endif
|
|
}
|
|
|
|
TEST_F(ConfigTest, SERVER_CONFIG_TEST) {
|
|
std::string config_path(CONFIG_PATH);
|
|
milvus::server::Config& config = milvus::server::Config::GetInstance();
|
|
|
|
ASSERT_TRUE(config.LoadConfigFile(config_path + VALID_CONFIG_FILE).ok());
|
|
|
|
ASSERT_TRUE(config.ValidateConfig().ok());
|
|
|
|
std::string config_json_str;
|
|
config.GetConfigJsonStr(config_json_str);
|
|
std::cout << config_json_str << std::endl;
|
|
|
|
ASSERT_TRUE(config.ResetDefaultConfig().ok());
|
|
}
|
|
|
|
TEST_F(ConfigTest, SERVER_CONFIG_VALID_FAIL_TEST) {
|
|
fiu_init(0);
|
|
|
|
std::string config_path(CONFIG_PATH);
|
|
milvus::server::Config& config = milvus::server::Config::GetInstance();
|
|
milvus::Status s = config.LoadConfigFile(config_path + VALID_CONFIG_FILE);
|
|
ASSERT_TRUE(s.ok());
|
|
|
|
fiu_enable("check_config_version_fail", 1, NULL, 0);
|
|
s = config.ValidateConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_version_fail");
|
|
|
|
/* server config */
|
|
fiu_enable("check_config_address_fail", 1, NULL, 0);
|
|
s = config.ValidateConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_address_fail");
|
|
|
|
fiu_enable("check_config_port_fail", 1, NULL, 0);
|
|
s = config.ValidateConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_port_fail");
|
|
|
|
fiu_enable("check_config_deploy_mode_fail", 1, NULL, 0);
|
|
s = config.ValidateConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_deploy_mode_fail");
|
|
|
|
fiu_enable("check_config_time_zone_fail", 1, NULL, 0);
|
|
s = config.ValidateConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_time_zone_fail");
|
|
|
|
/* db config */
|
|
fiu_enable("check_config_primary_path_fail", 1, NULL, 0);
|
|
s = config.ValidateConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_primary_path_fail");
|
|
|
|
fiu_enable("check_config_secondary_path_fail", 1, NULL, 0);
|
|
s = config.ValidateConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_secondary_path_fail");
|
|
|
|
fiu_enable("check_config_backend_url_fail", 1, NULL, 0);
|
|
s = config.ValidateConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_backend_url_fail");
|
|
|
|
fiu_enable("check_config_archive_disk_threshold_fail", 1, NULL, 0);
|
|
s = config.ValidateConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_archive_disk_threshold_fail");
|
|
|
|
fiu_enable("check_config_archive_days_threshold_fail", 1, NULL, 0);
|
|
s = config.ValidateConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_archive_days_threshold_fail");
|
|
|
|
fiu_enable("check_config_insert_buffer_size_fail", 1, NULL, 0);
|
|
s = config.ValidateConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_insert_buffer_size_fail");
|
|
|
|
/* metric config */
|
|
|
|
fiu_enable("check_config_enable_monitor_fail", 1, NULL, 0);
|
|
s = config.ValidateConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_enable_monitor_fail");
|
|
|
|
/* cache config */
|
|
fiu_enable("check_config_cpu_cache_capacity_fail", 1, NULL, 0);
|
|
s = config.ValidateConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_cpu_cache_capacity_fail");
|
|
|
|
fiu_enable("check_config_cpu_cache_threshold_fail", 1, NULL, 0);
|
|
s = config.ValidateConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_cpu_cache_threshold_fail");
|
|
|
|
fiu_enable("check_config_cache_insert_data_fail", 1, NULL, 0);
|
|
s = config.ValidateConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_cache_insert_data_fail");
|
|
|
|
/* engine config */
|
|
fiu_enable("check_config_use_blas_threshold_fail", 1, NULL, 0);
|
|
s = config.ValidateConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_use_blas_threshold_fail");
|
|
|
|
fiu_enable("check_config_omp_thread_num_fail", 1, NULL, 0);
|
|
s = config.ValidateConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_omp_thread_num_fail");
|
|
|
|
#ifdef MILVUS_GPU_VERSION
|
|
fiu_enable("check_config_gpu_search_threshold_fail", 1, NULL, 0);
|
|
s = config.ValidateConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_gpu_search_threshold_fail");
|
|
|
|
fiu_enable("check_config_gpu_resource_enable_fail", 1, NULL, 0);
|
|
s = config.ValidateConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_gpu_resource_enable_fail");
|
|
|
|
fiu_enable("check_gpu_resource_config_cache_capacity_fail", 1, NULL, 0);
|
|
s = config.ValidateConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_gpu_resource_config_cache_capacity_fail");
|
|
|
|
fiu_enable("check_config_gpu_resource_cache_threshold_fail", 1, NULL, 0);
|
|
s = config.ValidateConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_gpu_resource_cache_threshold_fail");
|
|
|
|
fiu_enable("check_gpu_resource_config_search_fail", 1, NULL, 0);
|
|
s = config.ValidateConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_gpu_resource_config_search_fail");
|
|
|
|
fiu_enable("check_gpu_resource_config_build_index_fail", 1, NULL, 0);
|
|
s = config.ValidateConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_gpu_resource_config_build_index_fail");
|
|
#endif
|
|
|
|
fiu_enable("get_config_json_config_path_fail", 1, NULL, 0);
|
|
s = config.ValidateConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("get_config_json_config_path_fail");
|
|
|
|
s = config.ValidateConfig();
|
|
ASSERT_TRUE(s.ok());
|
|
|
|
#ifdef MILVUS_GPU_VERSION
|
|
std::vector<int64_t> empty_value;
|
|
fiu_enable("check_config_gpu_resource_enable_fail", 1, NULL, 0);
|
|
empty_value.clear();
|
|
s = config.GetGpuResourceConfigBuildIndexResources(empty_value);
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_gpu_resource_enable_fail");
|
|
|
|
fiu_enable("get_gpu_config_build_index_resources.disable_gpu_resource_fail", 1, NULL, 0);
|
|
empty_value.clear();
|
|
s = config.GetGpuResourceConfigBuildIndexResources(empty_value);
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("get_gpu_config_build_index_resources.disable_gpu_resource_fail");
|
|
|
|
fiu_enable("get_gpu_config_search_resources.disable_gpu_resource_fail", 1, NULL, 0);
|
|
empty_value.clear();
|
|
s = config.GetGpuResourceConfigSearchResources(empty_value);
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("get_gpu_config_search_resources.disable_gpu_resource_fail");
|
|
|
|
fiu_enable("check_config_gpu_resource_enable_fail", 1, NULL, 0);
|
|
empty_value.clear();
|
|
s = config.GetGpuResourceConfigSearchResources(empty_value);
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_gpu_resource_enable_fail");
|
|
|
|
int64_t value;
|
|
fiu_enable("check_config_gpu_resource_enable_fail", 1, NULL, 0);
|
|
s = config.GetGpuResourceConfigCacheCapacity(value);
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_gpu_resource_enable_fail");
|
|
|
|
fiu_enable("Config.GetGpuResourceConfigCacheCapacity.diable_gpu_resource", 1, NULL, 0);
|
|
s = config.GetGpuResourceConfigCacheCapacity(value);
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("Config.GetGpuResourceConfigCacheCapacity.diable_gpu_resource");
|
|
|
|
fiu_enable("ValidationUtil.GetGpuMemory.return_error", 1, NULL, 0);
|
|
s = config.GetGpuResourceConfigCacheCapacity(value);
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("ValidationUtil.GetGpuMemory.return_error");
|
|
|
|
fiu_enable("check_config_insert_buffer_size_fail", 1, NULL, 0);
|
|
s = config.GetCacheConfigCpuCacheCapacity(value);
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_insert_buffer_size_fail");
|
|
|
|
fiu_enable("Config.CheckCacheConfigCpuCacheCapacity.large_insert_buffer", 1, NULL, 0);
|
|
s = config.GetCacheConfigCpuCacheCapacity(value);
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("Config.CheckCacheConfigCpuCacheCapacity.large_insert_buffer");
|
|
|
|
float f_value;
|
|
fiu_enable("check_config_gpu_resource_enable_fail", 1, NULL, 0);
|
|
s = config.GetGpuResourceConfigCacheThreshold(f_value);
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_gpu_resource_enable_fail");
|
|
|
|
fiu_enable("Config.GetGpuResourceConfigCacheThreshold.diable_gpu_resource", 1, NULL, 0);
|
|
s = config.GetGpuResourceConfigCacheThreshold(f_value);
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("Config.GetGpuResourceConfigCacheThreshold.diable_gpu_resource");
|
|
#endif
|
|
}
|
|
|
|
TEST_F(ConfigTest, SERVER_CONFIG_RESET_DEFAULT_CONFIG_FAIL_TEST) {
|
|
fiu_init(0);
|
|
|
|
std::string config_path(CONFIG_PATH);
|
|
milvus::server::Config& config = milvus::server::Config::GetInstance();
|
|
milvus::Status s = config.LoadConfigFile(config_path + VALID_CONFIG_FILE);
|
|
ASSERT_TRUE(s.ok());
|
|
|
|
s = config.ValidateConfig();
|
|
ASSERT_TRUE(s.ok());
|
|
|
|
/* server config */
|
|
fiu_enable("check_config_address_fail", 1, NULL, 0);
|
|
s = config.ResetDefaultConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_address_fail");
|
|
|
|
fiu_enable("check_config_port_fail", 1, NULL, 0);
|
|
s = config.ResetDefaultConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_port_fail");
|
|
|
|
fiu_enable("check_config_deploy_mode_fail", 1, NULL, 0);
|
|
s = config.ResetDefaultConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_deploy_mode_fail");
|
|
|
|
fiu_enable("check_config_time_zone_fail", 1, NULL, 0);
|
|
s = config.ResetDefaultConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_time_zone_fail");
|
|
|
|
/* db config */
|
|
fiu_enable("check_config_primary_path_fail", 1, NULL, 0);
|
|
s = config.ResetDefaultConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_primary_path_fail");
|
|
|
|
fiu_enable("check_config_secondary_path_fail", 1, NULL, 0);
|
|
s = config.ResetDefaultConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_secondary_path_fail");
|
|
|
|
fiu_enable("check_config_backend_url_fail", 1, NULL, 0);
|
|
s = config.ResetDefaultConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_backend_url_fail");
|
|
|
|
fiu_enable("check_config_archive_disk_threshold_fail", 1, NULL, 0);
|
|
s = config.ResetDefaultConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_archive_disk_threshold_fail");
|
|
|
|
fiu_enable("check_config_archive_days_threshold_fail", 1, NULL, 0);
|
|
s = config.ResetDefaultConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_archive_days_threshold_fail");
|
|
|
|
fiu_enable("check_config_insert_buffer_size_fail", 1, NULL, 0);
|
|
s = config.ResetDefaultConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_insert_buffer_size_fail");
|
|
|
|
/* metric config */
|
|
|
|
fiu_enable("check_config_enable_monitor_fail", 1, NULL, 0);
|
|
s = config.ResetDefaultConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_enable_monitor_fail");
|
|
|
|
/* cache config */
|
|
fiu_enable("check_config_cpu_cache_capacity_fail", 1, NULL, 0);
|
|
s = config.ResetDefaultConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_cpu_cache_capacity_fail");
|
|
|
|
fiu_enable("check_config_cpu_cache_threshold_fail", 1, NULL, 0);
|
|
s = config.ResetDefaultConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_cpu_cache_threshold_fail");
|
|
|
|
fiu_enable("check_config_cache_insert_data_fail", 1, NULL, 0);
|
|
s = config.ResetDefaultConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_cache_insert_data_fail");
|
|
|
|
/* engine config */
|
|
fiu_enable("check_config_use_blas_threshold_fail", 1, NULL, 0);
|
|
s = config.ResetDefaultConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_use_blas_threshold_fail");
|
|
|
|
fiu_enable("check_config_omp_thread_num_fail", 1, NULL, 0);
|
|
s = config.ResetDefaultConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_omp_thread_num_fail");
|
|
|
|
#ifdef MILVUS_GPU_VERSION
|
|
fiu_enable("check_config_gpu_search_threshold_fail", 1, NULL, 0);
|
|
s = config.ResetDefaultConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_gpu_search_threshold_fail");
|
|
|
|
fiu_enable("check_config_gpu_resource_enable_fail", 1, NULL, 0);
|
|
s = config.ResetDefaultConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_gpu_resource_enable_fail");
|
|
|
|
fiu_enable("check_gpu_resource_config_cache_capacity_fail", 1, NULL, 0);
|
|
s = config.ResetDefaultConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_gpu_resource_config_cache_capacity_fail");
|
|
|
|
fiu_enable("check_config_gpu_resource_cache_threshold_fail", 1, NULL, 0);
|
|
s = config.ResetDefaultConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_config_gpu_resource_cache_threshold_fail");
|
|
|
|
fiu_enable("check_gpu_resource_config_search_fail", 1, NULL, 0);
|
|
s = config.ResetDefaultConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_gpu_resource_config_search_fail");
|
|
|
|
fiu_enable("check_gpu_resource_config_build_index_fail", 1, NULL, 0);
|
|
s = config.ResetDefaultConfig();
|
|
ASSERT_FALSE(s.ok());
|
|
fiu_disable("check_gpu_resource_config_build_index_fail");
|
|
#endif
|
|
|
|
s = config.ResetDefaultConfig();
|
|
ASSERT_TRUE(s.ok());
|
|
}
|
|
|
|
TEST_F(ConfigTest, SERVER_CONFIG_OTHER_CONFIGS_FAIL_TEST) {
|
|
fiu_init(0);
|
|
|
|
std::string config_path(CONFIG_PATH);
|
|
milvus::server::Config& config = milvus::server::Config::GetInstance();
|
|
milvus::Status s;
|
|
|
|
std::string get_cmd, set_cmd;
|
|
std::string result, dummy;
|
|
|
|
s = config.ProcessConfigCli(result, "get_config");
|
|
ASSERT_FALSE(s.ok());
|
|
|
|
s = config.ProcessConfigCli(result, "get_config");
|
|
ASSERT_FALSE(s.ok());
|
|
|
|
s = config.ProcessConfigCli(result, "get_config 1");
|
|
ASSERT_FALSE(s.ok());
|
|
|
|
s = config.ProcessConfigCli(result, "get_config 1.1");
|
|
ASSERT_FALSE(s.ok());
|
|
|
|
std::string build_index_resources = "gpu0";
|
|
|
|
set_cmd =
|
|
gen_set_command(ms::CONFIG_GPU_RESOURCE, ms::CONFIG_GPU_RESOURCE_BUILD_INDEX_RESOURCES, build_index_resources);
|
|
std::cout << set_cmd << std::endl;
|
|
|
|
s = config.ProcessConfigCli(dummy, set_cmd + " invalid");
|
|
ASSERT_FALSE(s.ok());
|
|
|
|
s = config.ProcessConfigCli(dummy, "set_config gpu_resource_config.build_index_resources.sss gpu0");
|
|
ASSERT_FALSE(s.ok());
|
|
|
|
s = config.ProcessConfigCli(dummy, "set_config gpu_resource_config_invalid.build_index_resources_invalid gpu0");
|
|
ASSERT_FALSE(s.ok());
|
|
|
|
s = config.ProcessConfigCli(dummy, "invalid_config gpu_resource_config.build_index_resources.sss gpu0");
|
|
ASSERT_FALSE(s.ok());
|
|
|
|
#ifndef MILVUS_GPU_VERSION
|
|
s = config.ProcessConfigCli(
|
|
dummy,
|
|
gen_set_command(ms::CONFIG_TRACING, ms::CONFIG_GPU_RESOURCE_BUILD_INDEX_RESOURCES, build_index_resources));
|
|
ASSERT_FALSE(s.ok());
|
|
#endif
|
|
}
|
|
|
|
TEST_F(ConfigTest, SERVER_CONFIG_UPDATE_TEST) {
|
|
std::string conf_file = std::string(CONFIG_PATH) + VALID_CONFIG_FILE;
|
|
milvus::server::Config& config = milvus::server::Config::GetInstance();
|
|
|
|
auto status = config.LoadConfigFile(conf_file);
|
|
ASSERT_TRUE(status.ok()) << status.message();
|
|
|
|
// validate if setting config store in files
|
|
status = config.SetCacheConfigInsertBufferSize("2");
|
|
ASSERT_TRUE(status.ok()) << status.message();
|
|
|
|
// test numeric config value
|
|
status = config.LoadConfigFile(conf_file);
|
|
ASSERT_TRUE(status.ok()) << status.message();
|
|
int64_t value;
|
|
status = config.GetCacheConfigInsertBufferSize(value);
|
|
ASSERT_TRUE(status.ok()) << status.message();
|
|
ASSERT_EQ(value, 2);
|
|
|
|
// test boolean config value
|
|
status = config.SetMetricConfigEnableMonitor("True");
|
|
ASSERT_TRUE(status.ok()) << status.message();
|
|
|
|
status = config.LoadConfigFile(conf_file);
|
|
ASSERT_TRUE(status.ok()) << status.message();
|
|
bool enable;
|
|
status = config.GetMetricConfigEnableMonitor(enable);
|
|
ASSERT_TRUE(status.ok()) << status.message();
|
|
ASSERT_EQ(true, enable);
|
|
|
|
// invalid path
|
|
status = config.SetStorageConfigPrimaryPath("/a--/a");
|
|
ASSERT_FALSE(status.ok());
|
|
|
|
// test path
|
|
status = config.SetStorageConfigPrimaryPath("/tmp/milvus_config_unittest");
|
|
ASSERT_TRUE(status.ok());
|
|
|
|
std::string path_value;
|
|
status = config.GetStorageConfigPrimaryPath(path_value);
|
|
ASSERT_TRUE(status.ok());
|
|
ASSERT_EQ(path_value, "/tmp/milvus_config_unittest");
|
|
|
|
#ifdef MILVUS_GPU_VERSION
|
|
status = config.SetGpuResourceConfigBuildIndexResources("gpu0");
|
|
ASSERT_TRUE(status.ok()) << status.message();
|
|
|
|
status = config.LoadConfigFile(conf_file);
|
|
ASSERT_TRUE(status.ok()) << status.message();
|
|
std::vector<int64_t> gpus;
|
|
status = config.GetGpuResourceConfigBuildIndexResources(gpus);
|
|
ASSERT_TRUE(status.ok()) << status.message();
|
|
ASSERT_EQ(1, gpus.size());
|
|
ASSERT_EQ(0, gpus[0]);
|
|
ASSERT_EQ(value, 2);
|
|
#endif
|
|
}
|